at backyard

Color my life with the chaos of trouble.

AlphaGoについて

AlphaGoに興味を持ったきっかけ

話題のAlphaGoについて書いていく。

そもそも私は囲碁のルールを殆ど知らないし、当然遊んだこともなかった。
だが、世界トップ棋士李世ドル氏に5番勝負で3勝(最終的に4勝1敗)を挙げた、
今話題のGoogle囲碁AIことAlphaGoについては、当然ながら私も耳にしており、
ちょっとした興味本位でAlphaGoについて調べてみた。

このAlphaGo、調べてみると非常に興味深いシステムである。
このシステムの面白いところは、AlphaGoが持つ汎用性なところ。
Googleのブログ記事を下記に引用する。

AlphaGo: マシンラーニングで囲碁を

この結果の最も重要なことは、AlphaGo が人間の手によって作られたルールに基づいた「エキスパートシステム」ではなく、普遍的な機械学習技術を使って、囲碁を自らマスターした、という点です。そして、AI アルゴリズムを素早く効率的に開発・テストする上で、ゲームは最適なプラットフォームではありますが、最終的には、私たちはこうした技術を、重要な現実世界の問題に応用していきたいと考えています。私たちが AlphaGo において用いたメソッドは汎用性があります。私たちは、この技術が、将来的に気候モデリングから、複雑な疾病分析といった現代社会の喫緊の課題を解くために応用できるのではないかと考えています。

これを読んで実にクールだと思った。
囲碁の世界チャンピオンに勝つためにシステムを作っていたとか、そういうちっぽけな話じゃなく(いや、全然それもちっぽけじゃない!)、
テクノロジーを使った人類規模の問題解決のためプロジェクトだったのだ!


そもそも囲碁のルールって?

私はそもそも囲碁で遊んだことがないので、囲碁のルールも全くわからない。
なので、ひとまずここのサイトを読んで後日勉強してみようと思う。

やさしい囲碁入門講座

ひとまず、今は囲碁のルールよりも、
AlphaGoの仕組みのほうに興味があるので、
更に調査を進めてみると、AlphaGoの実装をしているGithubリポジトリを発見。


AlphaGoの実装をしているGitHubリポジトリ

AlphaGoの実装に興味を持ったので調べてみると、
論文を元にAlphaGoの実装をしているGitHubリポジトリ
というブログ記事を見つけた。

こちらの方のブログにも書かれているが、DeepMindが2016年にNatureに発表した論文を元に、
AlphaGoの実装を行っているGithubリポジトリがある。

https://github.com/Rochester-NRT/AlphaGo

This is not yet a full implementation of AlphaGo. Development is being carried out on the develop branch.

これはまだ完全なAlphaGoの実装じゃないんだ。開発は開発ブランチ上で行っているよ。
※適当英語訳を間に挟んでいます。

We are still early in development. There are quite a few pieces to AlphaGo that can be written in parallel. We are currently focusing our efforts on the supervised and "self-play" parts of the training pipeline because the training itself may take a very long time..

私たちはまだ開発の初期段階なんだ。
AlphaGoにはかなりの数のピースを並列に書き込むことが出来るよ。
私たちは現在"自己学習(->自己遊び?)"のトレーニング・パイプラインと教師あり学習の部分に力を入れているよ。
だって、トレーニングはとっても長い時間がかかる場合があるからさ。。。

Updates were applied asynchronously on 50 GPUs... Training took around 3 weeks for 340 million training steps

更新は50GPU上で非同期に適用したよ。。。
340億ステップのトレーニングを実施するのに3週間かかったよ。

いやはや、なんか凄い、スケールが。
50GPU上で非同期に、三週間かけてトレーニングをするというのが、
具体的なイメージとなって私の頭の中に浮かんでこない。。。
まだまだ勉強が足らないことを実感。

そしてこちらのリポジトリには、AlphaGo.dataなるリポジトリも作られている。

https://github.com/Rochester-NRT/AlphaGo.data

Version controlled data for the Rochester-NRT/AlphaGo repository.

Rochester-NRT/AlphaGoリポジトリのためのバージョン管理データ。

expert_play/ contains datasets of SGF files. We do not have permission to release all datasets that we are using, hence some models are trained on datasets not present in this directory

expert_play/にはSGFファイルのデータセットが含まれているよ。
私たちはすべてのデータをリリースする権限を持っていないんだ。
だからね、いくつかのモデルは、ここのディレクトリには存在しないデータセットで訓練されているよ。


"Keras"について

ちなみにこのプロジェクトでは"Keras"というDeep Learingのライブラリが使われているよう。
私は今までこのライブラリの存在を知らなかったが、下記のブログに概要が記載されている。
Kerasを使ってみた

TheanoベースのDeepLearningライブラリKerasを使ってみた。

ん?Theanoってなに?


Theanoについて

そもそもTheanoを知らない私は、下記のブログを読んで概要を理解するところから始まる。
Theanoの使い方 (1) シンボルと共有変数

TheanoはPython数値計算ライブラリ。Deep Learningの説明で頻繁に出てくるので、Deep Learningを実装したライブラリだと勘違いしていたのだけれど違ってた。主な機能は、

・実行時コンパイルによる高速化
GPUのサポートによる高速化
・自動微分のサポート
ニューラルネット微分を多用するので、微分の結果を自分で解かなくて済むのは大きなメリットになる。また、ニューラルネットで頻出する関数(softmaxなど)が実装されていたり、勾配降下法が非常に簡単に書けたりするなどDeep Learningの実装で便利なように作られたのだなという印象を受けた。

ココらへんで私の頭の中の消しゴムが作動を開始する。頭を真っ白にさせようと。そして、もうひとりの自分が語りかけてくる。
「これだけは認識した方がいい...お前の頭の中では既にバッファーオーバーフローが起きているってね!」
ちょっと前に機械学習の概要を学ぼうと書籍や本で勉強していたが、
ただの勉強ごっこだったんじゃないかって今では思っているよ、、、だって、まったくなにがなんだかわからないんだもん!

良い機会なので、ここでブログに書いたことを時間をかけて少しずつ触れていってみようと思う。