天才になるために気をつけるべき3つのこと


お正月からいきなり何を言いだすのかという感じですが、ちょっと天才になるためのアドバイス的なものを機械学習の観点から書いてみたいと思ったんですよ。


そもそも天才とは何なのか。人間の脳って生物学的には同じ仕組みで学習しているわけですから、学習アルゴリズムに個体差はないと思うんです。しかし学習の早いとか遅いとかはあるわけです。


これは脳のなかでシナプスが形成される速度に個体差があるからだと思うのですが、なぜそういう差があるのかはいまの脳科学ではたぶん解明されていません。食べ物などの栄養バランスによるものか、心の持ちようによって何かの脳内物質が出て、それがシナプスの形成を促進するのか。


ともかく、同じ学習アルゴリズムで学習しているのが人間であります。


では、学習が早い人(習熟が早い人)ほど能力が高いのでしょうか?学習速度が天才と凡人とを分かつのでしょうか?世間的にはそう思われているかと思うのですが、私はこの考え方は違うんじゃないかと思っています。


学習が早いに越したことはありませんが、生物学的に見て同じ学習方法であるのだから、時間さえかければ、学習が遅い人でもいずれは学習の早い人と同じ脳の内部状態に到達するはずです。


「あいつは頭の回転が早い」などとよく言いますが、脳内の神経伝達物質の伝達速度には個体差はほとんどありませんから、脳の内部状態が同じであるなら、そのような差は生まれないはずです。つまり、頭の回転が早い人など本当はいないのです。脳の内部状態が異なるだけなのです。


つまり、天才と凡人をわかつのは、学習速度でもなく、頭の回転の速さでもないのです。何をどういう順番でどれだけ学習させたかだけなのです。


このことを機械学習の観点からもう少し踏み込んで考えてみましょう。


コンピューター将棋Bonanzaの開発者の保木さんが、去年の情報処理学会誌にKPP(三駒関係)を学習させるより先にKP(ニ駒関係)を学習を終わらせてからにしたほうがパラメーターの収束が早いという内容の論文を掲載されていました。


もっと平たく言えば、簡単で基礎的な概念を確実に先に習得してから、そのあと応用的な概念を習得するほうが習熟速度は早くなるということです。


しかし「基礎は大切だよ、基礎をしっかり!」みたいな、そんな受験セミナーみたいなことをここで言いたいのではありません。そもそも基礎をしっかりやることが正しいとは限りません。


このことを機械学習の観点から考えていきましょう。


機械学習における問題の多くは、凸最適化問題に帰着します。凸最適化問題というのは、簡単に言えば、下図のようなおっぱい型の関数があるとして、そこを下に向かって蟻が這っていき、その一番下の乳首のところまで到達することをその目的とします。



うわー!この説明、すっごくわかりやすい!大学の先生方はこの説明、機械学習の講義等でじゃんじゃん使って、盛大に受講者の顰蹙を買ってください!(補足 : 上図のおっぱい型の関数は凸関数ではありません。画力が足りず、おっぱいがうまく凸関数にならなくて…謹んでお詫びします。)


まあ、それはそれとして、現実世界の問題は、こういう綺麗におっぱい型のものばかりとは限らず、比較的でこぼこで、しかし大局的な最小値はあるのでそれを必死に見つけましょうという問題に帰結することが多いです。


では、このような最小値を見つけることで何をしたいのでしょうか?
機械学習には、経験損失と期待損失という重要な概念が出てきます。



 引用元 : 劣微分を用いた最適化手法について(3) http://research.preferred.jp/2010/12/subgradient-optimization-3/


例えば受験数学について考えてみましょう。問題集を解いて、その問題集の問題が解けるようになることにはあまり意味がありません。その問題がそのまま入試で出るわけではないからです。問題集を繰り返し解き続けることにより、その問題集に対する正答率は上がりますが、これは経験損失を下げているだけで、未知の試験(入試)に対する点数が上がるとは限りません。受験勉強における目的として、未知の試験(入試)に対する損失、すなわち、期待損失のほうを下げなくてはならないのです。


さきほどの機械学習で最小値を求める動機がまさにこの期待損失を下げる(ための関数を設計する)ことです。


大学の受験勉強程度であれば、経験損失を下げることが期待損失を下げることに直結しやすいので、「期待損失を下げる」ということがあまり明確に意識されることはありません。受験において数学の問題集に載っているような問題は、比較的汎用性のある解法であるので、それがそのまま受験でも通用することが多いからです。


しかし、特定の問題集のみを反復して学習させつづけると過学習が起きる場合があります。



 画像引用元 : さきほどの記事と同じ


赤い曲線(学習結果)は11次の多項式で、青い点(学習内容)をすべて通過していますが、しかし今後現れるであろう未知の点(y=x^2上の点)に対してこの赤い曲線はずいぶんかけ離れていることがわかります。すなわち、このような学習の仕方をすると期待損失が非常に大きくなります。


上の例ですと、期待損失を下げるためには、赤い曲線は、もう少し上下の振れ幅が小さいようにフィッティングして欲しいと思いますよね。この振れ幅が小さくなるように制約をつけるのが、機械学習では、L1正則化、L2正則化などの手法です。興味のある方は、専門書でも見ていただくとしまして、特定の問題セットを繰り返しやるのは悪影響がありかねないということを知っていただければと思います。


しかし、人間の脳があまり過学習をしないのは、たぶん脳のなかで起きる化学的な反応として、この正則化に相当するような何らかの仕組みが存在することは間違いないでしょう。人間は忘却しますが、忘却する能力があるからこそ、過学習が避けられ、より単純な学習結果に落ち着いていくのではないかと私は考えます。(上の例で言えば、最初は11次の多項式で学習したとしても忘却とともに、10次、9次というように次数が落ちてくるのではないかと思います。)


さて、適切な問題セットを適切な時間だけ与えることで過学習は避けられるとしましょう。そうなってくると、天才と凡人とをわかつのは、もはや何をどういう順番で学習させるのかという戦略だけです。(本人にやる気はあって、時間は無限にあるものとします。)


過去において出現頻度の高かった概念は、将来的にも出現頻度が高いと考えられるので、出現頻度順に学習させるという戦略が考えられます。受験英語で英単語を覚えるときなどがそうですね。出現頻度の低い英単語を1000個覚えるよりは出現頻度の高い英単語を500個覚えるほうが、期待損失は下がります。また、受験においては出現頻度の高い概念は教科書に載っているような概念なので過学習にならない範囲において教科書をしっかり勉強するのが有効であることは言うまでもありません。


ところが、出現頻度頻度が高いものほど価値が高いとは言えない状況というのが存在します。例えば、将棋の局面において、機械学習によりパラメーターを調整するときに、出現頻度の高い特徴因子(3駒の位置関係)を優先して学習させるというアイデアは一見成功しそうですが、しかしよくよく考えてみると初期局面が一番出現頻度が高く、初期局面付近の特徴因子の学習ばかりをしてしまいます。そのため、出現頻度が高いからと言って重要とは限らないのです。


また、最初に複雑な概念を学習させてしまうとそのあとの学習がしにくくなるというのはあります。子供にひらがなより漢字を先に教えると、あまりいい影響がない[要出典]のはそのためですね。期待損失を下げるためとは言え、無理に複雑な概念を先に学習するのはあとあとたたってくるわけです。自分の学習段階に応じた学習が大切だと言えましょう。


つまり、このへんに秘訣があるわけですが、うまい具合に一般化して語るのは難しいので、今回はこれぐらいにとどめておきましょう。


結局のところ、学習における要点は3つ。
過学習を避けるべき。
・期待損失を下げることを意識する。
・学習する順番が重要。


この3つに気をつければ、誰もが天才になれる!
…に違いないと私は思ってるんですけどね。