いーちゃんの言動を評価せよ
第1話から31日前――
前話から24時間後――
ベースとなるプラットフォームがあらかた出来上がったところで、鈴木太郎は考えた。
「このニューラルネットワーク、結局どうしよう……」
ニューラルネットワークの骨子は、要するに何かをインプットすると何かをアウトプットする、というものだ。
その性能を左右するのは3つ。
・どのようなデータを入れるのか。
・どのようなデータを出力させるのか。
・どうやって調教していくのか。だ。
たとえば鈴木太郎が目指すいーちゃんという名前の会話ソフトウェアではあるが、将来的にいろんなことをさせたい。
たとえば、あーんなことやこーんなことだ。
鈴木太郎は意味不明な電波を膨らませた。
とりあえずなんでもできるようにするためには入力は出来る限り広く取った方がよいだろう。
通常であればいったん字句解析ツールや構文解析ツールで解析の難易度を落としたものを入力データに使うのだが、鈴木太郎は入れられるものはなんでも入れ込むことにした。
そこは九藤鳴子が作っていた収集ソフトウェアが役に立った。
だがその結果、出力されるものはめちゃくちゃになった。
それも当然だろう、現在のニューラルネット型システムでは出力の方向性が何も示されていないのだから。
P2P技術によってさらにニューロン素子の大きくなってしまったニューラルネットワークであればなおさらである。
それに対応するものが「学習」だ。
子供が言葉を覚える場合、周囲が話す内容を聞き、アウトプットに対して親が褒めることによって学習を図っていく。
「ぱぱぁー」
とか生まれて始めてできた子供が喋ったら喜ばない父親はいない。あるいは抱きしめたい衝動に駆られたくなるだろう。
だがしかし、
「このくそおやじー」
とか言ってきたら悲しまない父親はいない。あるいは赤子の手を捻るように拳骨が飛ぶかもしれない。
その表情や、あるいは拳によって、子供は学習し言葉を覚えていくのだ。
そのプロセスが人工知能の、特にニューラルネットワークの分野では必要なのだ。
最初、鈴木太郎は出力される結果について3つの選択肢を出させ、良いものは褒める、悪いものは叱るといった手順で学習をさせていった。
たとえるなら、
「こんにちは」
という呼びかけに対して、
「ぼちぼちでんなー」
「こんばんわー」
「こんにちは^^」
といった応答を返すのであれば「こんにちは」という言葉に対しては褒め、他のものについては叱るという具合だ。
学習は出力結果の最後のニューロン素子から後方伝達 (バックプロパゲーション)によって速やかに反映されていく。
それを繰り返すことによって、「いーちゃん」は少しずつ会話を覚えていくのだ。ここで全てがダメであっても一つは褒めることが重要だ。あまり叩き続けると何が最善なのか分からなくなってしまうからだ。
ちなみに鈴木太郎はバックプロパゲーションを後方伝達と訳すよりは誤差逆伝播法と訳す方が好きだ。なんだが電波伝搬と語感が似ており無線工学Bを彷彿とされるのが良いらしい。鈴木太郎は電波系の大学生であった。
だが、それは通常、長い年月をかける必要がある。
もともと長い年月を掛けないための英知として、字句解析や構文解析が存在しているのだから、それを取り払えばさらに長くなる。
だから有名つぶやきサイトでの話させる内容だけでは当然学習が不足する状態になる。
そこで鈴木太郎が考えたのは学習に対する評価関数の導入である。
人工知能の一つにオセロやチェス、囲碁、それに、将棋などを指すプロ棋士たちに打ち勝つという目標を立てた分野がある。
もともとは遊びとして使われていた人工知能の知識ではあったが、今では交通工学や認証工学などさまざまな分野でさらなる発展を遂げた。工学の遊びの中に真実を見る良い例であろう。日本は特にそのHENTA――Cool Japanといわれる技術で一日の長がある。
その分野の中で特に試され発展したものが、「先読み機能」と「評価関数」の導入だ。
先読み機能とは、数手先の結果をあらかじめ推論し、相手の動きに対してどう動くべきかを未来予測する機能である。
評価関数とは、その未来予想された結果が果たして自身にとって都合の良いものかを調査し、それを数値で出力するというものである。
それを人工無能の会話に取り入れるとどうなるか?
たとえば始めて言葉を喋る赤子の場合。
「ぱぱぁー」
「ままぁー」
「このくそおやじー」
といった場合には
「ぱぱぁー」○
「ままぁー」×
「このくそおやじー」×
と評価するのではなく、
「ぱぱぁー」10点。
「ままぁー」5点。
「このくそおやじー」マイナス20点。
などといったことを数値で表すのだ。
点数が大きければ大きいほど良く褒められたとしてニューラルネットワークの要素の係数を大きく――つまり興奮させ、マイナスであれば怒られたとして軽減――つまり萎縮させる。そうすると萎縮の係数が小さくなれば実質的に要素から他の要素に繋ぐ線をぶちぶちと切っていくような効果が発生する。逆もまた然り。しばらくすれば興奮した要素を追体験しようと興奮した結果を出すようになる。
そうなると評価値の高い鈴木太郎が選択した値は麻薬のような甘美な響きとしてニューラルネットに落ちていき、極めて素直に反応する構図が出てくるというわけだ。
そのうちにデータの蓄積を持って反抗期になるのかもしれないが。もっともそのくらいでないと面白くもないだろう。あまり素直に学習させないようには係数シグノイド関数というものを使用した。要は捻くれた非線形になる係数であればなんでも良いようだが鈴木太郎は電波系であったので細かい理論に頭を回すのは放棄する。
もちろんこれは時と場合によって変動する。
相手が父親であれば「ぱぱぁー」といえば100点をあげても良いくらいだが、相手が母親であれば「ままぁー」といった方が100点になるだろう。
そういうことがきちんとニューラルネットワーク側でわかるようにするには、相手が誰かということもきちんとインプットしてあげる必要がある。
さて、鈴木太郎は評価関数を導入すると決めたがまずはどうしようと考えたのか。
まずは前段で行っていた字句解析や構文解析を学習の評価関数として使うことだ。
出力結果に対して字句や構文が間違っていれば点数を低く、あっていれば点数を上げて対応するのだ。
ここで多少間違っていても良いとするのがポイントである。
人間というものは間違う生き物だ。
完璧に話すコンピュータよりも、少しくらい間違うコンピュータの方が味というものがあるだろう。




