こんにちは、ニューラルネット老人こと糟谷勇児です。
Sansanに入社して5年が過ぎました。そういえば前職にいたときに隣の部署のマネージャーとこんな会話をしたことがありました。
「なんで学生時代(2004年当時)にニューラルネットの研究をしていたのに、私はディープラーニングをつくれなかったんですかね」
マネージャーの方は「当時はコンピューターの性能も低くて今みたいな計算ができないのは仕方ないんじゃないかな」
と返してくれましたが、どうにも腑に落ちませんでした。
当時だってスーパーコンピューターは性能が良かったですし、最先端のデスクトップPCと今の私のノートPCは互角とまでは言わないものの、10分の1、100分の1という性能ではないはずです。
当時もスペック上はアイデアがあればできたはずなのです。
負け惜しみにすぎないのですが、これまでのブログをまとめつつ2004年当時を振り返ります。
ディープラーニングは層を増やせばいいわけではない
ディープラーニング(深層学習)というと層を深くしたことが新しい点だ、そう感じると思いますし、以前の私もそう思っていました。
一方、2004年当時のニューラルネットと言えばバックプロパゲーションを用いたパーセプトロンが一般的でした。
当時から3層のパーセプトロンで任意の関数を近似できることは知られていて、多くの実装例でも3層で行われていました。
では、それを層を増やしていけばディープラーニングになるかというとそうではありませんでした。
第3回で実験したように層の数を増やしてもパーセプトロンでは精度があまり上がらず、あるところからは逆に下がってしまいます。
当時、層を増やせばいいということに気づかなかったのが決定的な敗因ではなく、パーセプトロンではなくコンボリューショナルネットを使わなければどうしようもなかったのです。
LeNetをなぜ知らなかったのか?
さて、そうすると疑問が出てきます。というのも第4回で紹介した、バックプロパゲーションを用いたコンボリューショナルネットであるLeNetの論文は1998年に発表されていて、2004年には私も読むことができたはずです。
なぜLeNetにたどり着けなかったのでしょうか。
所詮無知な学生だったと言えばそれまでですが、一通りいろいろな論文を読んで、パーセプトロンだけではなく、NeoCognitoron, SOM, RNN, ホップフィールドネットワークなど当時あったニューラルネットのアーキテクチャは勉強したつもりだったからです。当時のニューラルネットの教科書でLeNetについて言及したものも記憶にありませんし、先生や先輩後輩がLeNetについて話していたりすることも聞いたことがありません。
当時の私にとってニューラルネットは脳のモデルという考えだった
当時の私の研究のモチベーションは「人間の脳はどうなっているのか」という疑問から来ていました。多くのAIを学ぶ周りの学生や研究者にとってもそれは同じだったのではと思います。ニューラルネットが最高の精度の認識器になると思っている人は少数だったでしょう。機械にやらせるなら機械が得意な方法でやらせた方が良いというのが当時の主流的な考え方でした。
そういう意味で行くと、フィルタを走査していくというLeNetの考え方は脳のモデルというにはコンピューターの画像処理の手法に寄っていて、自分のアンテナに引っ掛けられなかったのかもしれません。
また、精度面でも10種類の1桁の手書き数字を認識するタスク(今でいうMNISTの原型)で99.5%~の精度となっていますが、当時としてはこれはさほど高いものではなく、郵便番号の認識はすでに実用化されていて、3桁、7桁を切り出すところからやっても99%の精度を超えていたので、2012年のAlexNetの時のように多くの研究者が話題にするほどではなかったのかもしれません。
これもサーベイ不足の負け惜しみに過ぎないとは思いますが。
大規模な公開データセット不足
MNISTのような簡単なデータセットでは、当時の一般的な手法で十分に高精度が出てしまい、ニューラルネットの実力をアピールできなかったということはあるのだと思います。特にコンボリューショナルネットは多数の学習データを必要としますので、適度に難しく多数のデータがあるデータセットが必要でした。
第4回で実験しましたが、学習データが各クラス2000枚程度ではパーセプトロンとLeNetで認識精度に大きな違いはありませんでした。
仮に、LeNetに気づいて自分のタスクに使っていたとしても、パーセプトロンと変わらないかどちらかというと精度が下がるという結果しか得られなかったでしょう。
コンボリューショナルネットを研究しようと思うと数千枚単位のそこそこ認識が困難なデータセットが必要だったのです。
今では一般的に使われるCifar10のデータセットも公式サイトを見ると2009年の論文を引用するように書かれており、そこが初出だとすると、2004年当時にはまだなかったことになります。
CIFAR-10 and CIFAR-100 datasets
そもそも数千のデータを学習することで初めて真価を発揮するような機械学習がまだあまりなかったので、それに適したデータセットがないのは仕方がないことですが、鶏が先か卵が先かという状況で自分はどちらも作れませんでした。悔しいですね。
LeNetからAlexNetへの進化も積み重ねが必要
LeNetにはなく、AlexNetで導入された要素もいろいろあり、中にはLeNet以前に発表されていたものもありますが、それらの要素を統合してニューラルネットをコンテストで大勝するレベルに押し上げたのも並大抵のことではなく、長年の研究が必要だと感じます。何年も実用レベルになることを信じて研究し続けるというのは、個人の精神力としても研究体制としてもなかなかまねできないと感じます。
下記はこのブログで取り上げてきたAlexNetに使用されていた構成です。
・N対Mのコンボリューション
buildersbox.corp-sansan.com
・softmax層
buildersbox.corp-sansan.com
・データオーギュメンテーション
buildersbox.corp-sansan.com
これ以外にもDropOutやGPGPUなどいろいろな技術が使われています。
まとめ
そんなわけで、ディープラーニングの技術の研究には相応の時間の積み上げが必要で、簡単にできるものではなかったというのはこれまで実装してきて身にしみました。
これだけ積み上げてきた、AlexNetでもコンテストで使用できても特定の応用を考えるとまだまだ、他の画像認識手法に分があり、実際にいろいろなタスクで使用されだしたのはVGG以降かなと思います。
今後もディープラーニングの理解に精進すべく、次回からはGPGPUについて学んでいこうと思います。