特種人工知能研究室
通販工学®
登録第4740179号
株式会社インター・コム
〒769-2301 さぬき市長尾東1082番地13 TEL:(0879)29-7678

AIと私

  代表取締役 青木 一夫
特種情報処理技術者
中小企業診断士
技術士(経営工学部門)

第0章通販工学から知識工学へ

平成14年、それまで小数の特定顧客を対象に基幹業務系のシステム開発と業務支援を通常業務として生業を立てておりましたがネット通販の勃興を予見し、その関連の顧客開拓と自らも楽器通販サイトを立ち上げ 経過を見守っておりました。
その中で検索エンジンに早く見つけてもらい上位にランクされることが重要なことを悟りその研究をはじめ 成果を上げ、取り扱い楽器と通販というキーワードでほとんど1位2位を占め販売量も予想外の ものとなり、その成果を広めるため「通販工学」を商標登録し通販に専念することにしました。
ところがその後「楽天」をはじめとして通販サイトが乱立し、それまである程度の技術が不可欠であった この事業形態も技術的な知識を必要とせず出店するだけで通販事業に参入が可能となり不振にあえいでいた 全国の楽器店も不良在庫を低価格で発売し始め当店の販売も一気にほとんど0に落ち込んでしまいました。 今更、本業の基幹業務系の仕事に戻ることもできず(一社のシステムを手掛けてもほぼ完成に至るまでに数年かかる- 販売会社のセールストークに惑わされてはいけない。これは筆者の実感です。)途方に暮れていました。

1990年より
DEC「人工知能セミナー」参加

第1章エキスパート型人工知能開発

そんな中、私の「なんか仕事ありませんか?」の声に答えてくれたのが基幹業務系のシステムを使っていただいていたM社です。
M社は事情があって当時の事業は廃業していましたが新事業を立ち上げていました。それにコンピュータが使えないかとの話です。
私にとっては初めての業態なので成果を上げられないまま半年が過ぎました。
それまではM社の社長の言うがままにプログラムを作成するだけでいましたがふと社長の思い当たらないことをあるいは思い込みを排除する)システムを作ったらどうかと思い至りました。
それと同時に今やっていることは1980年代後半から研究し始め1990年からDECの講座で本格的に勉強し始めた人工知能開発そのものではないかと気付いたのです。
そこで今までの仕事を人工知能の言葉に置き換えると
社長=エキスパート
やっていること=推論エンジンの開発
集めたデータ=知識ベース
筆者=KI(Knowledge Engineer)
となります。 こう整理することにより人工知能開発の技術と手順をに従って開発できるようになり大変楽になりました。
この時から「人工知能を開発する」という自覚をもってプロジェクトに臨むこととなりました。
社長は「なにそれ」といった顔をしていましたが私が学習の過程と費やした費用(500万円以上)の資料を提示すると納得されたようでした。
ただし出入りの銀行屋さんやシステム関連の人たちには「社長は詐欺にあっている」といわれていたようでした。
無理もありません。今の人工知能ブームの起きる数年前のことでいたから。
社長も私が過去に国の情報化推進アドバイザーとか県の技術アドバイザーとかの仕事をしていなかったら容易には信じられなかったでしょう。
それは私でも他人がそう言ってきたら「そんなん数年でできるかバカタレ」といって追い払うでしょう。
ところでこのシステムはというかどんな予測システムであれ過去のデータによって未来を予測するものでどのような技術を用いたところで
「過去のデータを用いた予測情報処理システム」に違いないのです。
社長の奥様はお見通しで「人工知能と言っているけれどそれは情報処理システムじゃあありませんか」と言っていました。
それはその通りです。
「知能」の部分はわずかにデータをどのように組合せ、どのように重みを付けたら最適の結果(過去の)が出るかを計算し、その組み合わせと重みをもって未来を予測するものにすぎないのです。

それでもそのシステムの能力は人間のエキスパートをはるかに超えています。
エキスパートの直感はコンピュータの計算能力にはるかに及ばないのです。

しばらくたったころ私は別の方式を模索していました。
エキスパートの存在なしに動くシステムです。
それに着手してから1年半後驚くべきニュースが飛び込んできました。
「人工知能が碁で人間に勝った」というものです。
イギリスのディープマインド社の人工知能が2016年初頭に韓国の碁の第一人者リー・セドルに勝ち、その瞬間世界のマスコミ、企業、国が「人工知能」にどよめきたち第3次人工知能ブームが到来しました。
※「機械学習」が主流の今、この「エキスパート・システム」が「人工知能」かどうかは問題ですが当時は「人工知能」といえば「エキスパート・システム」でした。
    

第2章ベイジアン・ネットワーク型人工知能開発

最初にお断りしますが現在の人工知能は用途も技術も多岐に亘っておりますが私が 対象にしております用途は「人工知能予測」その技術範囲は「スーパーバイザー付きシングルクラシファイヤー」と 呼ばれるものです。 徐々に書き加えますが求める答えは1か0かの判断をするものです。 1か0かは上下、表裏、丁半といった二つの状態のどちらかを予測するものです。
それがシングル(あるいはバイナリ)クラシファイヤ(分類器)といわれるものです。
スーパーバイザー付といわれる所以は判断材料として結果のわかっている過去のデータを学習させて次を予測する手法だからです。
私の場合はベイジアンネットワーク(baysian network)という手法を採用してこの実現をしています。
従来の統計手法に近いです。(まあ大体の手法がそうではないかと思われますが)。

1.ニューロンとパーセプトロン

ニューロンとはもちろん神経細胞のことで人間では1000憶個くらいあるらしいです。
それは根っこのような受容体を持ち枝のような能動体をもつ。根っこの部分で別のニューロンからの様々な信号を受け取り、ある条件(閾値)を超えるとこのニューロンで加工された 信号を次のニューロン群に渡すらしいです。
神経細胞構造

図2-1
詳しくは他を当たってください。
パーセプトロンは人工ニューロンでニューロンを模して多数の入力部分、集計部、判断部を通って出力部から単数の信号を出すものです。
パーセプトロン

図2-2
パーセプトロンは多数の入力と一つのバイアスが入力となりある閾値を通って出力されます。
一つ一つの入力にはその入力の重要度による重みがつけられその総和が計算されます。
その総和の値によって出力が0か1、(1か-1、0.5以上か以下かとにかくある閾値で分けられるバイナリ信号)が決まります。
その計算部を感知関数(アクチベーション・ファンクション)といいます。
実際にステップ関数、シグモイド関数、ハイパーボリック・タンジェント、ロジステック関数、reLUその他が使用されます。
多層パーセプトロン

図2-3
先のパーセプトロンを多段階多層で出力する構造がこれでDEEPと言われる所以です。
入力層と出力層の中間にある層をHIDDEN LAYERと呼び何層も重ねてより正解に近い出力を得ようとします。
 
答えの出し方
用途によって答の出し方や手段は違いますが私の求める物は予測であり、手段としてはベイジアン推定という統計手法に近いものです。
端的に言えば明日の予測には直前データの状況を観て過去のデータ群から明日を推定するものです。
過去のデータ中に過去の解答が入っているわけですからいわゆる「教師あり機械学習」となります。
この点は汎用人工知能(AGI: Artificial General Intelligence)とは異なります。そのような分野ではスパコンとか量子コンピュータを想定しており似て非なるものであり、 私の目指す「特化型人工知能(Narrow Artificial Intelligenceと呼びます。)」とは特定の仕事しかできないけれどもパソコンで十分といった人工知能の分野です。
パーセプトロン計算

図2-4
input xにはデータ要素が入ります。解答が出やすい特徴を持ったデータです。これは他の要素と比較しますから生データではなく自身のベクトルを持たせます。
要素の数だけxがあります。これが要素同士の組み合わせである次の要素xが生まれます(ここにベイジアン推定を使います。)。ある層ができるとそのxが解答にどの程度の影響を与えているかを計算します。
これを重みwとします。wxの総和を計算して閾値と比較し出力を出します。SAIでの閾値は0.5です。場合によっては階層で出力を分けることがあります。
※厳密にいえば要素数と入力数は異なります。入力層に入る前に要素同士の組み合わせとその値、重みを伴って入力層に入りますから要素同士の組み合わせが入力数になります。
因みに一般の人工知能では出した答えと正しい答えを比較し後戻りして少しづつバイアスを含む重みを少しづつ変えて誤差を最小にするwを選び出すようです。
これをバックプロパゲーションといいます。
SAIの場合はバックプロパゲーションの技術は使いません。それはすでにベイズで重みwも値xも計算されているからです。
AGIの場合は前もってはwは計算されていません。それで少しづつ誤差を最小にするようにwを後から変えているのです。これを誤差逆伝播方式といいます。
バックプロパゲーション

図2-5
この方式はごく小規模の実験では可能で人工知能の名に相応しい(間違いから学ぶ)ものかもしれませんがパソコンレベルでは実用的と言えません。
ここでは詳しく述べませんが具体的な開発目的とか規模、手法とはすでに準備段階からほぼ決まっており、開発もほぼ終わっています。
この文章はその過程を公開することによりより緊張感をもってより優れたシステムにすることを目的で書かれました。
したがって候補に挙がった他の手法、なぜその手法をとらなかったかなど過去を振り返り再考の是非も検討していきたいと思います。

主なターゲット-予測

前述したごとく顧客需要に応じた形の開発でしたから予測が目的です。
しかも膨大なデータを必要とすることのない小規模なデータからの予測です。
要素(feature,element)数が数十、データセット(行数)が10,000以内の小規模セットです。
例えば縦に時間軸(日、時間、秒等)、横に各種の特徴量といったものを想像してください。
最後のデータセットまでで次の時点でのあるデータを推定するといったものです。
ここでは各種の社会データを毎日蓄積して翌日の金相場を予測すると考えてみてください。
(私の実際のテーマはここでは伏せますがある予測システムです。)

教師あり学習

前述の条件では他の要素と同様に金相場は毎日観測されています。
すると他の要素の動きのパーターンから次の日の金相場が推測できるのではないかと考えられます。
このように答えの分かっているデータを含んだデータセットから答えを導き出す手法を教師あり学習-Supervised Machine Learningといいます。
これは横並びの(ある日の)要素同士の関係と翌日の金相場の関係が本日の要素同士の関係で明日の金相場が推測できるかもしれないことを示唆します。
ここでデータセットを作ってみましょう。
エクセルの表を想像してみてください。
通常左端(A欄)に年月日がはいります。
B爛は空けておいてください。あとでe[0]をbias欄とする・・・なんて出てくるかもしれません。
C爛にはターゲットデータを入れましょうか・・・e[1]。 D爛からはe[1]の次の日の予測に必要な各種の経済指標を入れていきます。ユーロ相場、原油相場、その他金相場に影響のありそうな指標です。
ちなみにこれらの要素(features)の選択の良しあしはこの予測システムの成績にかかわってきます。
eはエレメント(要素のe)です。次の[]には要素番号が入ります。さらにもう一つ[]が加わって行が入ります。
つまりデータセットはymde[行」、e[要素番号][行」からなります。ここでは要素数は9とします。(行数は10000とします。)
そうするとeはe[0][0]からe[9][10000]となります。ただし実際の要素数をcll,行数をrlとするとe[cll][rl]までとなります。

ベイジアン・ネットワーク

ベイジアン・ネットワークではインプット同士の関係を調べましす。
ところでe[][]という生データでは何の役にも立ちません。金相場と原油相場を直接比較しても意味をなさないからです。
そこでe[0][r]/e[0][r-1]とe[1][r]/e[1][r-1]などを比較します。つまり金相場が上がって、原油相場が上がった時、金相場が上がっている確率はどうかとかいう統計を取ります。
まずそんな甘いものではありませんが金相場が上がって原油相場が上がっていると翌日の金相場が若干でも上がる統計があればそれは一つの金相場騰落の因子化もしれません。
全要素同士でこの統計を取り、本日と前日のパターンに当てはめると少なくとも50%以上の確率で明日の金相場が予測できます。
従来一部の要素の動きを見て判断していた投機家の何千倍もの正確さとスピードで予測できるはずです。コンピュータの場合は一部要素同士のパターンでなく要素全てを組み合わせて答えを出しますから。

若干の私的定義

人工知能における用語の定義はバラバラで統一が取れていないように思われます。したがってここではごく一般的に使われているものを定義しておきます。
@先ずニューラル・ネットワークの書き方ですが左端に入力層を置き、右端に出力層を置きます。したがって中間が中間層(隠れ層)となります。
A入力層を0層とします。 B0層の一番上のニューロン(ノード、ユニットとも)はバイアスで常に1です。
C以下要素番号順に並びます。
D次の層は中間層第一層で一番上はこの層のバイアスです。
E以下下がるごとに第一層の1番目のニューロン、2番目のニューロンとなります。
F例えば5層目の上から3番目のニューロンの値は
\( x_ {3}^{5} \)
と書くことにします。

中間層が1つの場合のニューラル・ネットワーク

中間層が1つでもあれば層としては入力層、中間層、出力層と3つの層が連なり、深層(多層)学習の基本となります。
パターン認識による予測は直近のパターンであれば明日の金相場の騰落はどうなるかを予想するわけですから、パターンの構造を考えます。
これは単純(?)に全要素の組み合わせで本日のパターンとします。
先ず要素1(金相場)と要素2(ユーロ相場)を比較します。
これはただ金額を比較しても何の意味もありません。
これはそれぞれの動きを比較してこそ(ベクトル化)意味があります。
たとえばそれぞれの要素が前日と比較して騰がったか、下がったかをパターン化すると次の4つに分けられます。
@金相場が騰がって、ユーロ相場も騰がっている。
A金相場が騰がって、ユーロ相場が下がっている。
B金相場が下がって、ユーロ相場が上がっている。
C金相場が下がって、ユーロ相場も下がっている。
同様に金相場と原油相場を比較します。
またユーロ相場と原油相場も比較します。
このように全ての要素を比較したものが本日のパターンとなります。
さてこのパターンと同じパターンを過去のデータセットの中から探していきます。(W)
その中で次の日の金相場が騰がっているものを集計するとA個あったとします。
ベイジアンで書くとこうなります。
\( P(A|U) \)
つまりこれが金相場とユーロ相場の組み合わせであったとするとこの組み合わせの時このパターン例えば金相場が上がってユーロ相場が下がった時の回数はU回そのうち翌日の金相場が上がっているのはA回ということになります。
さらに言うとこれとよく似たパターンの時がU回あるとするとそのうちA回が金相場が上がる確率、A/U、例えばA=60、U=100の時60%の確率で金相場が上がると推測されます。(そんなうまい話はありませんが)
この時のA/Uがこのニューロンの値xとなります。
また金相場が上がってユーロ相場が下がった回数はU回でしたがその他3つの回数を合算するとUT回だったとするとU/UTがこのニューロンの重みwとなります。

入力層

要素数等が9個の場合入力数はn・(n-1)/2の36になります。
金相場とユーロ相場、金相場と原油相場、ユーロ相場と原油相場といったようにです。要素そのものの比較とその時系列を加えると入力数はすぐ100を超えます。
この一つ一つの組み合わせにつき前述のベイジアン条件付き確率を計算、というか集計します。
本日のパターンのものが何個現れそのうちの騰がったものは何個だったかを集計するのです。
U/データセット数が重みwになります。
Uの数が多いほど確率は正確になります。
例えばデータセットが1000(日分)あってそのうちこのパターンが500回あって上がりが300回あって確率60%と50回と30回の確率60%では確信度が全然違います。
でこの入力ニューロンは0.6の値と500/1000あるいは50/1000の重みを持ちます。
繰り返しますが要素数が入力数ではありません。
ある要素のベクトルと別の要素のベクトルの比較が一つの入力の要素になります。
ある要素のベクトル=ある日のその要素の値-ある日の1日前のその要素の値
ある要素のベクトルと別の要素のベクトルの比較->四つの状態
この4つの状態を象限に例えます。
ある要素の状態E1,別の要素の状態E2
第一象限=E1>=0 && E2>=0
第二象限=E1>=0 && E2<0
第三象限=E1<0 && E2>=0
第四象限=E1<0 && E2<0
データセットを積算し本日の状態と同じ象限の数Wとその時ターゲットの金相場が上がっていた時の数Aを集計します。
これが一つの入力の値P(A/U)と重みWの一部になります。
そのまま使えないのは実際上金相場に傾向変動があれば予測がそちらに傾いてしまいます。
そこでP(A/U)をバイアスをかけて0.5に調節します。(もともとのP(A/U)は1/4が平均ですが後で確率0.5以上を上がるとするため)
入力層

図2-6

中間層及び出力層

入力要素の層組合せからベイジアンで出た条件付き確率を値X(写真ではU)サンプル数をもととした重みWを使用して
\(\displaystyle \sum_{ i = 1 }^{ n } w_ixu_i\)+β
ただし今回はβを使う必要はありません。
これを0.5を基準として出力を出しました。
0.5以上は金相場が上がると予測するものであるが検証の結果ある数字を超えると下がるとの実測値を得たのでそのように調節しました。
シュミレーションでは100日の平均勝率が50%を割り込んだのは1000日のうちわずか5日でした。
1000日間で勝率7割を超えた日も何回かありました。
平均の勝率は6割を超え7月では勝率64%となったのでモニタ依頼に持ち込みました。
ところが結果8月前半に勝率2割になり100日平均で5割を切ったので実戦配備を中断しました。
しかしながらベイズは全く人智を加えない判断なので結果はたまたまそうなっただけと楽観しています。
エキスパートシステムでは人間の判断を盛り込むため潮目が変わるとシミュレーションと実戦配備の結果が異なることはよくありました。しかしそれとは違がいます。
中間層及び出力層

図2-7
    

第3章機械学習型人工知能開発

ベイジアン・ネットワーク型の効果は思ったほどではありませんでした。
当初のシミュレーションではエキスパート・システムほどというか全く人為的な知識を加えたものではなく機械的に結果を出すものであり、2017年7月までの成果はエキスパートシステムに匹敵するものでした。
しかしながら8月に入って極端に不本意な結果(当否判定が5割を切る)になりこの段階では実用にならないと判断し、実施を断念しました。
とりあえず、ベイジアン・ネットワーク型の実施は中断ですが私としては絶対的な自信がありますので見守るという状況です。
私自身はここ2年間で多くの人工知能の知識を得ました。
その一つが機械学習です。
「学習」という言葉の中に知識獲得(エキスパート・システムでは必須)のほかに過ちに学ぶという意味が含まれていると思います。
これがいかにも人間らしい学び方で今までのように人間が人為的に流れを作ってコンピュータに処理をさせるのではなく、コンピュータに最初から考えさせる仕組みとして非常に興味があります。
この章ではこの考え方を発展させて開発していこうと思います。
もちろん先端では実用化されているようですがパソコンで使えるようになるのでしょうか?
そこで開発の目的ですが
予測目的のバイナリ・クラシファイヤーです。「丁」か「半」かを当てるものです。
目標は
「(100日平均)当否率>60%」、「年間投資効率>30%」です。これは今回(2017年8月)を除いてほぼ達成しています。
意識して取り組むことは「学習と創意」のバランスです。残された時間はほとんどありません。
効率よく公表された技術を学ぶと共に湧き上がる創意を実験で検証していくことです。
「汎用人工知能」の開発は不可能でも多様性は念頭に入れて開発します。
その昔「部品交換管理用」のシステムが航空会社の「客室乗務員の交代用」システムとして使われましたし「医用」に開発されたエキスパート・システムが産業用に転用されたこともありました。
続く