イ・セドル九段がAlphaGoに勝利!話題のディープラーニングとは?

シェアする

  • このエントリーをはてなブックマークに追加

こんばんは。

昨日、イ・セドル九段vsAlphaGoの囲碁対局第4局が行われました。

序中盤ではAlphaGoがリードし、「4局の中で最もイ・セドル九段が厳しい」と言われていましたが、終盤手前あたりでイ・セドル九段が打った妙手が非常に良い手だったようで、AlphaGoもミスを犯し、逆転という形でイ・セドル九段が勝利を収めました。

今回は、AlphaGoの思考において、モンテカルロ木探索と共に2本の柱をなす「ディープニューラルネットワーク」について、私が理解できる範囲で書いてみたいと思います。

ニューラルネットワークとは?

人間の脳には神経細胞がたくさんあり、神経細胞は「ニューロン」とも呼ばれます。

「ニューラル」というのは、「ニューロンのような」という意味の形容詞です。

「ニューラルネットワーク(NN)」とは、神経細胞を模したネットワーク構造のことを言います。

が、これだけでは分からないですね。

ニューロンは、本体からたくさん枝が生えたような構造をしています。(枝には入力用の「樹状突起」と出力用の「軸索」があるそうです)

ニューロンの複数の樹状突起に電気信号が流れてくると、それらが全て足し合わされます。(このとき、ただ足すだけではなく、それぞれの樹状突起に特有の重みが掛けられた後に足されます)

そして、その合計が、ニューロンに固有のとある閾値(しきいち)を超えると、「発火」と呼ばれる現象を起こします。発火すると、そのニューロンの電位が急に上がり、軸索を通じてつながった他のニューロンの入力となります。

そして、一連の信号のやりとりにおいて、正しい結果が得られたと判断した場合、そのとき発火したニューロンは発火しやすく、発火しなかったニューロンは発火しにくくなったり、樹状突起における重みの値が、再び同じような反応をしやすくなるように変化します。これが学習です。

成功事例が発生しやすく、失敗事例が発生しにくくなるように重みと閾値を調整していくのです。

この動きを再現したものがニューラルネットワーク(NN)です。

NNは有向グラフ構造で、ノードと有向辺で構成されています。(画像が無いと説明しづらいけど画像作るの面倒!)

ノードには、入力用のもの(そのノードには他のノードからの入力が無い)と出力用のもの(その出力が計算結果となる)と、どちらでもない中間用のノード(幾つかのノードから入力を受け取り、いくつかのノードへ出力する)があります。

ノードは、「(手前のノードの出力×対応する重み)の総和≧自ノード固有の閾値」ならば1を、そうでなければ0を出力します。(実際は計算しやすさ(微分可能性)のためにシグモイド関数というものがよく使われます。)

学習手順は以下の通りです。

まず、全てのノードの閾値を連結(辺)の重みをランダムに初期化します。

そして、学習用のデータ(盤面の情報や画像など)を、入力用の複数のノードの出力にします。

次に、全てのノードについて、ニューロンが発火する(1を出力する)かどうかを計算していきます。ノードが層構造になっているNNの場合、入力側から出力側へ順番に計算していきます。

そして、出力用のノードに繋がっているノード全ての出力結果が得られたら、出力用ノードの出力も同じように計算します。

出力用ノードの結果が得られたら、入力した学習用データの出力として正しいかどうかをチェックします。(画像に猫がいるかどうかの判断を学習させたい場合、猫がいる画像を入力したなら正解は1、猫がいない画像を入力したなら正解は0です。これと一致しているかをチェックします。)

チェック結果に応じて、各ノードの閾値、各辺の重みをそれぞれ更新します。更新方法は、簡単に言うと「誤差を求める関数の傾きを計算して、値が小さくなる方向へちょびっと修正する」という感じです。「最急降下法」や「確率的勾配降下法」、「バックプロパゲーション」などで検索すると出てきます。

これを繰り返して、閾値と重みのパラメータが収束した(変化しなくなった)ら学習完了です。

実際に人工知能として利用する際は、学習データと同じように計算したい入力データを入力して、学習と同様に計算して出力を得ます。それが人工知能の出した答えです。

以上がニューラルネットワークの概要です。もっと詳しく知りたい方はネットで調べるか下記の書籍などを参照してください。(ニューラルネット以外にもαβ法によるゲーム木探索などが記載されていて面白い本です)

ノードが層構造をなしていてデータの流れが一方通行であるもののうち、入力層の出力層の間にある中間層(隠れ層)が2層以上のものを「ディープニューラルネットワーク(DNN)」と言います(何層以上でDNNになるかは意見が分かれるそうです)。DNNを用いた学習を「ディープラーニング」と言います。

AlphaGoは192層のDNNを用いていると聞いたことがあります。多い!

AlphaGoの二つのDNN

AlphaGoは「バリューネット」と「ポリシーネット」の二つのDNNを持っています。バリューネットは現局面での勝率を予想(計算)し、ポリシーネットは次の最善手を予想(計算)します。

ポリシーネットはまず、人間のエキスパートによる過去の棋譜を用いて、エキスパートと同じ手を打つように学習したそうです。ある程度打てるようになると、自己対局を繰り返してその結果から勝った方の手のみを学習したりしたのでしょう。1局3秒で自己対局し、1日3万局の棋譜を作って学習するそうです。

バリューネットは過去の棋譜と自己対局の棋譜の内容と結果から、黒勝ちの棋譜の途中図では黒勝ちやすく、白勝ちの棋譜の途中図では白勝ちやすいような判断をするように学習したのでしょう。ちなみに自分の勝率が10%を下回ると投了(降参)するそうです。

AlphaGoがイ・セドル九段と対局するとき、CPU1920台とGPU280台を用いているそうです。めちゃくちゃ凄い。GPUというのは画像処理用の部品で、ベクトル計算が得意なのでDNNと相性が良いのだと思います(NNの計算はΣ(入力i×重みi)なのでベクトルの内積そのものですね)。

そんなスゴイソフトに勝ったんですから、イ・セドル九段は凄いですね!と言うのはおかしいかな?(初日はイ・セドル九段楽々勝利予想が多く、「ソフトが勝つなんてすごい!」だったのに、今は「ソフトに勝つなんてすごい!」というのはどうなのか?)

今回の対局は、人類の叡智の敗北ではなく、「人類の叡智と人類の叡智が戦った結果、人類の叡智が勝ったけど人類の叡智も勝った」という話だと思っています。イ・セドル九段もめちゃくちゃ凄いしディープマインド社の開発者もめちゃくちゃ凄い。

ということで、一安心したような気分で、明日の最終局を観戦したいと思います。イ・セドル九段を応援します。勝ったら2-3で互角っぽい感じですからね!

スポンサーリンク
レクタングル(大)
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする