認知心理学演習 01.6.6 担当:小島(文学研究科)

階層型ニューラルネットワークモデルの
プログラミングとシミュレーションの例



0.はじめに

前回の発表では基本的な階層型ニューラルネットワークモデルであるパーセプトロンとバックプロパゲーションについて、その基本的なアルゴリズムを紹介したが、今回の発表では、実際にこうしたアルゴリズムを利用してプログラムを組み、アルゴリズムの仕組みと処理を実演する。
また、心理学実験やモデルの検証に際して、こうしたアルゴリズムやプログラムはどのような利用の仕方があるのかを検討したい。

・・・というわけで、webだけ御覧の方は、もしよろしければ前回の私の発表のレジュメを御覧になってからここを見ていただけるとよろしいかと思います。

*今回の発表で用いたプログラムは、全て小島が作成したものであり、C/C++言語で作成した。
*使用したコンパイラは、BorlandC++BuilderVer4.0である。

1.パーセプトロン(その1)〜ドット入力数字識別プログラム〜

このプログラムは、3×5のマトリックスにマウスでデジタル風に数字の形にドットを入力していき、その数字が奇数か偶数かを判別するという簡単な学習プログラムである。
アルゴリズムはパーセプトロンアルゴリズムに従って組んだ。出力関数はステップ関数を用い、誤差の修正はデルタルールに従った。

perceptron1
ドット数字として3を入力して、「考える」ボタンを押したところ。
プログラムは最終的に奇数との判断を下している。

perceptron1

先ほどの答えに対して、正解である為「奇数」ボタンを押した後の画面。
この場合、重みの更新は行わない。

perceptron1
今度は、2と入力して、「考える」ボタンを押し、プログラムが”奇数”と判断したが、正解として「偶数」ボタンを押した後の画面。
この場合、次の入力までにプログラムは重みの更新を行う。


2.パーセプトロン(その2)〜手書き線分識別プログラム〜

このプログラムは、マウスで描いた手書きの線分の形を、くねくねかジグザグかというような形で分類することを学習するプログラムである。
このプログラムも基本的には1.のパーセプトロンのプログラムと同様のアルゴリズムに従うが、詳細はデモンストレーションでソースを呈示しながら説明する(ということで、実際には演習中にソースを追って色々説明しましたが、ここでは省略します)。

perceptron2
マウスで入力部に適当に曲線を描き、「思考」ボタンで計算した後、コンピュータの出力が”くねくね”であるとなっている画面。
もちろん、教師(ユーザ)がその線分をどう捉えるかによってプログラムの学習の仕方は変ってくる。
逆に言えば、ユーザのクセをプログラムは学習していくことになる。
このクセのパターンを複数のユーザに関して抽象化したものが、一種のある概念に対するプロトタイプ的な表象であると考える事も十分可能である。

perceptron2
ちなみに、これは、ジグザグで描いたつもりのものを”くねくね”と判断した為に、「ジグザグ」ボタンを押して間違いである事を教えた状態である。


3.バックプロパゲーション〜コンピュータ親父〜

このプログラムは、いわゆる排他的論理和問題の学習をするものである。
断わっておくが、情報の表現の仕方によっては、外見的には排他的論理和である問題もパーセプトロンで学習させる事ができる(すなわち、線形分離可能な問題にできる)のは言うまでもなく、このプログラムもそうである。
ただ、今回は敢えて情報表現を排他的論理和問題に合うようにした。
基本的には初期のバックプロパゲーションのアルゴリズムを踏襲した。
出力関数は、すべての層からの出力に関してシグモイド関数で出力した。
誤差の修正は一般化デルタルールである。

状況設定(?)としては、教師(ユーザ)はオカン役で、コンピュータ親父に子どもが友達を部屋に泊めていいかどうか尋ねる場面である。
ここで、プログラム上は同性同士を(00)(11)と表現し、異性同士を(01)(10)と表現した。
つまり、男同士、女同士ならば、宿泊は許可されるが、男女ではダメという判断をコンピュータ親父ができるようになるということである。


backpropagation
とりあえず、「親父の意見」ボタンでこの男二人の組み合わせについて尋ねた場面。
親父は”ダメ”(つまり、不正解)と言っている。
ちなみに、重みの初期値は乱数で−1〜1の間で発生させている。


backpropagation
先ほどの状態で、「反対」ボタンを押したところ。
プログラム上では、ここで誤差の修正計算を行っている。
無論、アルゴリズムは一般化デルタルールである。

backpropagation
今度は、男女の組み合わせに対して、親父がダメ出ししたところ。
この場合は正解なのだが、パーセプトロンと異なり、出力関数がシグモイドである為、微妙に重みは変化する。


4.プログラミングの際の留意点など

アルゴリズム自体の記述はそれほど難しくはない。
一番の問題は、入力情報と出力情報をどのような形で表現するかである。
これらの捉え方は、すなわち心理学においてはまさに人間の認知機能の捉え方そのものとも言える。
従って、計算機科学的、数学的、工学的な意味での効率的でシンプルな表現が必ずしも心理学的に妥当であるとは言えないことには注意しなければならない。
この問題とも関連して、ニューラルネットワークのユニット数や層の数も重要な問題となるのは言うまでもない。


基本的に、今回の演習の目的は、参加者に階層型のニューラルネットワークの基本的な動作とその原理ならびに、それをコンピュータ上で表現して計算するということが主たる目的であった為、層数や出力は最低限のものとしたが、私個人の研究用に作成予定であるものは多少なりとも複雑になる予定(ゆえに未定)であります。

今回の発表ならびに本ページの内容に関して何かございましたら、小島まで。

Mail:kojima@psy.bun.kyoto-u.ac.jp
HP:http://www.psy.bun.kyoto-u.ac.jp/kojima/