Deep Mind社のAlpha Goという囲碁のAIが人間のプロ棋士を負かした、というニュースは皆さんご存知かと思いますが、実はAlpha Goはそれからさらに進化していて、Alpha Go Zeroになっています。
Alpha Go Zeroの何がすごいかっていうと、
①自分自身との対戦で強くなった(教師とするデータがいらない)
②GPUなどの消費がずっと少なくなった
③以前のAlpha Goが数か月で達成した強さをAlpha Go Zeroは数日で達成
③それでいてAlpha Goよりずっと強い(100-0でAlpha Goに勝利)
というところなのです!!
この教師とするデータがいらない、というのはすごいことで、なぜかというとデータを集めるのが大変なんですよね。
碁の棋譜データとかは、もうデータになってるんですが(1000年以上分ぐらいらしい(´ω`))昔に紙に書かれたものを、集めるのも大変だっただろうし、データにするのはさぞかし大変だっただろうし、というわけです。
2017年10月19日に学術誌Natureに下記のAlpha Go Zeroの論文が発表されていますので、今これを勉強してます。
Mastering the game of Go withouthuman knowledge
自分でも考えをまとめるために、いろいろとここに記述しておきたいと思います。
このブログでは、あまり技術的なことは書かないつもりなんですが、現在弊社の技術的なオウンドメディアはメンテナンス中なので、ここに書きます。
さて、私の好きな名言に
『6才児に説明できなければ、理解したとはいえない byアインシュタイン』
というのがありますので、ならってやってみようと思います。
Alpha Go Zeroの理論のすごさをAiとか機械学習とかまったく知らない人に説明したいと思います。
私の大好きなマンガ、ドラゴンボールの主人公、孫悟空にたとえてみますね!
———————————————————————————————————————————-
孫悟空は亀仙人とか、カリン様とか、界王様とか、いろんな師匠に教えられたり、ピッコロ、ベジータ、フリーザなどの強敵と戦って強くなるじゃないですか。
しかし、孫悟空のクローンが作れるとしたら、孫悟空は自分自身のクローンとずっと対戦してた方が、いろんな先生に教わるよりも、敵と戦うよりも強かった。ということ発見されたわけですね。
ここでミソとしては、ただたんにクローンと対戦しててもダメなのです。
6人ぐらいの孫悟空のクローンが同時にいたとして、2人ずつ3組に分けます。
3組は同時に戦います。うち一組を①とすると、①チームは
「最初は軽いパンチ、次にカメハメ波を出したほうが強い」
とかそういうことをひたすら研究します。研究結果はメモって記録していきます。
もう一つの2組目②は、①の研究結果を使って実践で対決します。
んで、本当に強いのー??ということを研究します。研究結果はメモって記録していきます。
最後の3組目③は、②の結果を使って、本当に試合形式で対決します。
そして、勝ったクローンを残し、負けたほうは消滅する、という手段で最強のクローンを残します。
(③の結果は、①チームにも②チームにもフィードバックされます。)
これが同時に繰り返し行われることで、この最強のクローンがどんどん強くなっていく、ということです。
ただ、100万回ぐらい繰り返さないとダメなんですけどね(;^ω^) 「精神と時の部屋」でやればいいんでしょう。
悟空が強くなるためには、最初に格闘技の知識すら必要ありません。
———————————————————————————-
以上はだいぶ概略のイメージです。
伝わったでしょうかー?!( ゜Д゜)
しかし、6歳児には説明できてないなw
ドラゴンボール好きな人には説明できたかもしれないww
実はこのたとえ話を書きたかったw
AIの強さがどんどんインフレしていく感じが、少年漫画っぽいじゃないですか。
前回のシリーズで敵だったキャラが、今回の敵キャラにまったく歯が立たない、というのはよくある展開ですよね!!
Alpha Goは、もうAlpha Go Zeroにまったく歯が立たないんです。
「おめー、つええなぁ。オラ、わくわくすっぞ!!」
ところで、この仕組みを
「いたって単純」
という人がいます。上のたとえを読んだ人も、そう思われたのではないでしょうか?!
スゴイプログラムというのは、なんかもっとそんな単純なことじゃなくって、何万行もあったり、その中でヽ(*`Д´)ノ【ス】【ゴ】【イ】ヽ(`Д´*)ノことが行われたんじゃないか、と思われたのではないでしょうか?!
ちなみに、論文読んでるだけではわかりにくい部分もあるので、下記のソースコードをサンプルにして勉強しました。
下記はオセロをAlpha Go Zeroの仕組みで学習する、というプログラムです。
https://github.com/suragnair/alpha-zero-general
確かに、とってもシンプルです。
印刷すると、ホワイトボード一枚に収まるらしいですね。
「AlphaZeroのソースコードはわずかホワイトボード一枚に収まる : 情熱のミーム 清水亮」
https://japanese.engadget.com/2018/02/12/alphazero/
わかってしまえばそうだな、なんぜ今までやらなかったんだ!ということって、結局それを発見、発案した人はすごいですよね。
コロンブスの卵と一緒ですよね。
単純なことだとしても、「わかる」までの道のりは、果てしなく遠かったわけじゃないですか。
今までのAlpha Goでの取り組み、モンテカルロ木探索、強化学習、ResNetとか今までの研究結果のいろんなことを詰め込んでなされたわけですよね。
この仕組みを考えた方の努力と天才性に拍手喝采、そしてそれを公開してくれることに感謝感激です。
実用性に異議を唱える人もいますが、世のいろいろな人が試してみたところ
・完全情報公開ゲーム
・ゼロサムゲーム
では、この方法が相当強いことがだいぶ証明されているようです。
次回は論文の中身を真面目に紹介する予定でーす(`・ω・´)