冗長性への賛歌

冗長性への賛歌は、人間賛歌。

人工知能、ディープラーニングが冗長性の大切さを教えてくれた

こんばんは。

すみません、どたばたしていてブログをしばらく放置していました... 「ブログ楽しみにしてるよ(更新まだかな?)」とか「ブログ毎日更新チェックしてるよ(けど更新してくれないね...)」とか、とっても嬉しいお言葉*1を頂いたので、がんばって書いていきたいと思います。

書きたいネタは色々あるのですが、今回はとりあえず、最近何かと話題の人工知能機械学習)について、

 人工知能の発展には、冗長性がポジティブに効いているようだ

ということを書いておきたいと思います。

機械学習の目的は、とてもざっくり言うと、

  1. なんらかの事象を上手く説明するモデルを作る
  2. そのモデルを使って未知(未来)の事象の予測を行う

です。人間は1ができれば2は自ずとできる場合が多いですが、コンピュータはなかなかそうは行きません。例えば、文字を見せてこれが「A」かそうでないかを認識させるだけでも、コンピュータにとっては難しい問題です。

コンピュータに学習させるにあたって、「A」にあたる画像と、これは「A」だという正解ラベルのペアをいくつも与えていくのですが、元々の画像データは大抵、ピクセルの集合でしかありません。つまり基本的には、「画像のどの位置に、どの色がある」という情報が並んでいるだけです。

どういった画像が「A」かを答えるのに、ピクセルの情報そのものは役に立ちません。「A」にはこんな感じで、無数に異なる形が考えられるからです。

f:id:iwana_sloth:20160327172151p:plain.....

人間が画像を「A」だと認識するときに、「座標(1,2)に、黒色があって、(1,3)には....」という風に考えるでしょうか。たぶん、違いますよね。

おそらく、こんな風に認識しています。

f:id:iwana_sloth:20160327175128p:plain

「斜め線2つが屋根になって、水平な線が1つあって、屋根のあいだにつながっている」

人間はこのようにざっくり認識していますが、コンピュータにその認識を教えるにはどうしたらいいでしょうか? これらを明確に、ルールベースで教えようとすると、こんな疑問が色々でてきます。

  • 「水平な線」って何でしょうか?どれくらいまっすぐだったらOKで、傾いていたらダメなんでしょうか?
  • それぞれの線は完全につながってないとダメなんでしょうか? ほんのちょっと離れててもOK? どれぐらい離れてたらダメ?

「水平線」とか「つながっている」といった概念は、少ない特徴で文字を捉えるのにとても役立ちますが、冗長性*2を多く含んだ概念で、コンピュータではうまく扱えず、最近まで扱うのが難しい、と考えられていました。

このような「特徴表現」を得るために、これまでは「人間が」いろいろとお膳立てをしてきたと思います。画像認識の専門家ではないですが、主成分分析、エッジ抽出、各種周波数フィルター...etc をたくさん組み合わせて、文字認識のときはこういう特徴量を計算すると良い、顔認識だとこの特徴量を組み合わせて...など、場面ごとにアドホックにやっていた印象はあります。

しかし、最近の人工知能のブレイクスルーを生み出した「ディープラーニング」だと、かなり汎用的に、お膳立てをあまりしなくても「特徴表現」を勝手に学習してくれる印象があります。(自分ではほぼ触っていませんが...)

 

...と、ここまで書いてきた内容は割りと一般的な人工知能機械学習)の話で、かつ「ディープラーニングすごい」くらいしか言ってないので、

どうして「冗長性への賛歌」でこの話題にしたのか、本題に入りたいと思います。

 

最近、松尾豊先生の『人工知能は人間を超えるか - ディープラーニングの先にあるもの -』を読んでいると、

 ディープラーニングが飛躍したカギは『頑健性』

と書かれていました。

 ディープラーニングの基本アイデア*3は昔からあったそうですが、ここまで上手くいったのは、

学習データに色んな「ノイズ」を加たり、すでに学習した機能を一部停止させる*4ことで、様々な状況でも共通して表れる「頑健な」特徴量を取り出せるようになった、からだそうです。

これまでは、「適切な特徴をいかに(きれいに)抽出するか」にフォーカスしていたのですが、意図的に冗長性を加える(ノイズを加える、機能を制限する)ことが、学習にとって本質的に重要だということが分かったのです。

急がば回れ」「かわいい子には旅をさせろ」といった格言が、ただの人生訓としての意味ではなく、こういった先端技術領域で本質的に効いてくるというのは......実に面白い。(ガリレオ風に)

...と私は思うのですが、皆さんはどうお思いでしょうか。

冗長性という視点から人工知能を見るのは、けっこう面白いテーマだと思うので、今後も書いていきたいと思います。

ではでは。

*1:嬉しいが、それなりにプレッシャーのかかるお言葉^^;

*2:水平線という概念は、様々な形のバリエーションを含んでおり、かつそれらを統合して「水平線」という安定した(ちょっと形が揺らいでもやはり水平線だ、と言えるような)概念を作り上げています。この意味で、冗長性を含んでいる、という言い方をしています。

*3:階層的なニューラルネットを使って、プリミティブな特徴抽出から始まり、段階的に高次な特徴を学習していくアイデア。オリジナルではないですが、例えばジェフ・ホーキンスは『考える脳 考えるコンピュータ』(2005年)で、人間の脳(大脳新皮質)をモデル化する、というアイデアを熱く語っていました。

*4:ニューラルネットワークの隠れ層ニューロンをランダムに欠落させるようなテクニック(ドロップアウト)がよく使われています。