リソース不足

ロボットの心-7つの哲学物語 (講談社現代新書)

ロボットの心-7つの哲学物語 (講談社現代新書)

この本のニューラルネットワークの章で説明されていた、顔認識人工知能が面白かった。(いや、他の章も面白いんだけどね)
この本ではこの人工知能のことを仮に「セルマ」と名づけている。
このセルマは、64*64の入力層と80の隠れ層、8の出力層を持つニューラルネット三層パーセプトロン)で、最初の入力層には64*64の画像の画素一つ一つの明度が256段階で入力される。出力層は「顔性」(その写真が顔がどうか)「性別(男)」「性別(女)」に当てられ、残りの5つの出力の組み合わせで写真の人物の名前に当てられている。
教師信号に使われたのは、11人の男女の様々な角度の顔写真64枚と顔写真ではない11枚の写真だったと言う。
これらを学習した結果、セルマは以下のような能力を得た。

  1. 学習に使われた写真に関しては100%の正解率を示した(当たり前だが)
  2. 未知の写真でも「顔性」に関しては100%、男女に関しては81%で正解した。
  3. 学習に使われた写真の一部を隠しても正解率はほとんど変わらなかった。しかし、額を隠した場合は正解率が71%まで落ちた。

これは素晴らしいと思い、自分でも何かやってみたいと思った。
しかし、しかしである。
入力層のユニット全てから隠れ層のユニット全てにそれぞれシナプスが張られているため、これらシナプスの荷重を保持するために(恐らくは倍精度実数のサイズで)、4096*80=327680、その他も含めるとおよそ33万*2バイトのメモリーを使用することになる。66万バイトとして660kbになる。
モリーはたいした問題ではないにしても、演算量は相当なものになることはよくわかる。
C言語で組むのが一番速度的にマシだと言うことはよくわかるが、それでもこの性能はあくまで64*64のモノクロ写真に限られるのである。
たとえばもし、Ragna Archives Networkのヒロインの顔イラストを題材にして、ヒロインのバストショットから髪色・髪型・メガネの有無を判別する「せるまーちゃん」を作ったとすると、(画像サイズが256*256なので)65536×(光の三原色それぞれの明度により)3の入力層を作る必要がある。隠れ層の数はそのままだとしても、メモリーの消費量は「セルマ」の50倍近いものになる。
その上での計算量となるとこれはもうスパコン持ってくるか分散処理でもしたくなる規模だが、ニューラルネットワークと言う特徴上分散処理はまず無理だ。
個人レベルでやるのはかなりつらい。そう言うことができると思う。
やってみたいけど無理でした。そういうお話。