ニューラルネットワークの基本

AIやディープラーニングという見出しを日常的に目にする事が多くなったのはつい最近の事だと思いますが、今回は自分が今から28年前(1991年)に書いた論文を元に、ニューラルネットワークの基本をご紹介しようと思います。当時はまだディープラーニングという言葉もなく、パソコンの処理能力も低かった事から、この論文では最もシンプルな3層(入力層、中間層、出力層)のニューラルネットワークを視覚化し、最近で言う所の「AI」がどのようにして学習するのかを説明しています。

学習対象としたもの

Figure 1に示した3層構造のニューラルネットワークでは、ひらがなである「あいうえお」の計5文字の手書き文字を学習対象としました。方眼紙に鉛筆で文字を書いてもらい、これを50人分集めたものを一文字ずつスキャナーに取り込みました。一文字の縦横の画素数は48ドット x 48ドットとしたので、入力層のニューロン数は48 x 48 = 2,304個となっています。

28年前のシステム構成

今から28年前と言えば日本ではNECのPC-9800シリーズがパソコンの主流でした。しかし、当時はCPU性能が低いだけでなく、搭載メモリは640Kbyte、プログラミング使えるワークエリアに至っては僅か64Kbyteという時代であり、標準仕様ではとてもニューラルネットワークを構成できないことから、PC-9801に以下のリソースを加えてシステムを構成しました。

  • 4.5Mbyte 増設メモリボード(EMS)の実装
  • LSI設計用のCADシステムを利用(当時所属していた半導体研究室所有品)
  • コプロセッサ AMD 80287(数値演算ボード)の実装

プログラミング言語

LSI設計用のCADシステム(Bitmap-IV)に組み込まれていた「Bit-I」という専用言語を使用しました。(ちなみに画面へ漢字/ひらがなを表示をするには文字コードを1文字ずつ拾って16進数で指定する必要がある言語でした。)

学習データの種類

単にスキャナーで取り込んだ手書き文字だけでなく、50人分の画像データを3Dで積み上げて、特定の高さを閾値として水平に切り取った際の断面の形状も学習データとし、認識結果にどう影響があるのかの実験も行いました。

学習プログラム実行画面

下のFigure 12が今から28年前(1991年)に作った学習プログラムの実行画面です。出力層出力はマス目が5つありますが、左から順に「あ い う え お」の出力結果に対応しています。中間層出力のマス目は32個ありますが、この並び自体は人間にとって特に意味はありません。

AI(ニューラルネットワーク)の原理

AI(ニューラルネットワーク)の原理はとてもシンプルです。上流から来たすべての信号のそれぞれに係数を掛け算し、適当な閾値を加えて下流に出力結果として渡すだけです。また、バックプロパゲーション(誤差逆伝播法)による学習においては、正解を導くためには上流の係数、閾値をどうずれば正解を得られたのかを計算し、繰り返し反映する事で学習を積んで行きます。

生体神経を真似た演算ユニット

Figure 2はニューロン(生体神経)の繋がりの様子で、脳から発せられた命令など、ここを通過する微弱電流は周囲の神経細胞にバケツリレーされて行きます。この時、どのくらいの「さじ加減」で隣に伝えるかは学習によっても変化して行きます。

一方、人工ニューロン(上図Figure 3)の場合は、すでに説明した通り、上流から来た入力値に対し、掛け算と足し算を行った演算結果を下流に出力値として渡します。この時によく利用されるのがシグモイド関数(下図Figure 5)と呼ばれる関数です。

学習進行状況の目安

学習前の初期状態(Figure 14左列)では中間層出力への出力値は微小(=1マス分を塗りつぶせていないマス目がある)ですが、学習が進むにつれ、塗りつぶされたマス目だけの状態に徐々に収束して行きます。また、初期状態の出力層出力では複数のマス目が塗りつぶされるなど、出力層の結果は何ら意味を持ちませんが、学習が進む事で塗りつぶされるマス目が1つのみの状態(Figure 14右列)に推移して行きます。過学習や学習に適さない入力(とても汚い字)があった場合など、もし出力層の複数のマス目が塗りつぶされた場合は「学習失敗」という事になります。注意点として、出力層=認識結果が同じでも中間層出力のパターンが異なる事が普通に起こりうるという点があります。これは全く同じ学習用入力データを与えても、その学習順にも左右されるという事です。(例えとして適切かどうかは分かりませんが、ホームランバッターになるまで練習を積んだとして、最初に王さんから指導を受けたのか、それとも長嶋さんから指導を受けたのかでバッティングフォームが変わるイメージです。)

上図(Figure 14右列とFigure 16)で、認識結果が同じなのに、中間層出力のマス目パターンが異なる事に注目して下さい。(つまり、中間層出力の結果を人間が見ても、意味を理解することはできないという事です。これは、未来のAIがもし何か致命的な誤動作を引き起こした場合、人間に理解できるのは入力部分と出力部分だけで、中間層で何が起こっていたかを理解する事は極めて困難という事です。)

まとめ

  • AIの学習は学習データだけでなく覚える順番も重要
  • 異常値(とても汚い字)を学習に加えると、せっかく認識率が高くなっていてもそれまでの学習状態が破綻する場合がある。
  • 適正な学習データのみ(ごく普通の字〜綺麗な字)であれば、学習回数は多い方が認識率は高くなる。

なお、さらに詳細に興味がある方は当時の論文(原文PDF:18.5MB) をご覧ください。(ただし英文です。)