目次
01-29 【追悼】マービン・ミンスキー
01-29 AI囲碁
マービン・ミンスキーが、1月24日に亡くなったそうだ。
26日にはニュースになっていたようだけど、僕は27日になって妻から聞いて知った。
今週ちょっと忙しくて、ネットの情報をそれほど見ていなかったのだ。だから、追悼文もすぐ書けなかった。
もっとも、ミンスキーをそれほど強く記憶していたわけでもない。
妻に「ミンスキーって人が亡くなったらしいよ」と聞いても、すぐに誰だか分らなかった。
ミンスキー? と問い直して、AIの研究家だそうだよ、と言われた。
…で、思い出した。マービン・ミンスキーか。ミンスキートロン作った人だ!
と、すぐに思い出したのがこれくらい、というので、僕がたいしてミンスキーに詳しくないのがわかる。
そんな僕が追悼文を書いたところで、駄文にしかならない。
僕の知識の多くは、「ハッカーズ」という書籍からきている。
コンピューター黎明期の、わくわくするような冒険譚。僕にとってはジュブナイル小説のようなものだ。
まぁ、冒険譚といってもトムソーヤのようなことはしない。実際の山を駆け巡るわけではなく、彼らはコンピューターというフロンティアを切り拓いた。
「ハッカーズ」には、若さゆえのいたずらっ子がたくさん出てきて、誰も見たことのない地平を切り拓く。これがジュブナイルでなくしてなんであろう。
そして、ジュブナイルには「子供の成長を見届ける大人」が必要だ。
ハッカーズの第一部では、その一人がジョン・マッカーシー…ジョンおじさんだ。
マービン・ミンスキーは、ジョン・マッカーシーの同僚で、ともにAI研究の創始者のひとりだ。
ただ、ハッカーズにおいては、ミンスキーはマッカーシーよりも扱いが小さい。
というのも、当時のミンスキーは、マッカーシーの弟子で最大の理解者、というような位置づけだからだ。
#とはいえ、無視できない重要人物なので、それなりに出てくるのだが。
マッカーシーは「若者がコンピューターに熱中している」ことを知り、彼らのやりたいようにやらせただけだった。
ハッカーが少しでも速度の速い、少しでもステップ数の短いプログラムを作ろうと工夫していても、それはバイクで速度を出して喜んでいるようなもの…若さゆえの楽しさだろうけど、ほとんど意味はない、と考えていた。
ミンスキーは、若者の中に飛び込み、自らも一緒に熱中した。
小さなプログラムを作ることには大きな意味があるし、直接プログラムをしたものにしかわからない「体験」があると感じていた。
当然、ハッカーたちはミンスキーのAIの講義には必ず出席したらしい。
ミンスキーはハッカーとして尊敬を集めていたし、その偉大なノウハウの一端を学べるのだから。
ある日、ミンスキーは PDP-1 の画面上に渦巻き曲線を描こうとしていた。
直線を描くのは簡単だ。だけど、整数演算しか使えない PDP-1 では、曲線を描くのは難しかった。
だけど、「渦巻き」がかけるプログラムは、すでにハッカーの間で作られていた。
こんなプログラムだ。
当時はアセンブラだけど、わかりやすいようにC言語風に表記する。
while(1){
Y' = Y;
X' = X;
Y = Y' - (X'>>4);
X = X' + (Y'>>4);
pset(X,Y);
}
つまり、一個前の座標から新しい座標を生成して、そこに点を打っているのだな。
ちなみに、PDP-1 の座標系は、ディスプレイ中央が (0,0) になっている。
ミンスキーは、これをちょっと間違えて、最後の Y' を Y としてしまったらしい。
直前の行で Y を書き換えているので、「1個前の座標」にならない。
実をいうと、それ以外の Y' X' は無意味だ。
「一個前」と明示するために最初に X Y を保存しているのだけど、そもそも書き換えの影響を受けるのは最後の Y' だけ。
そこを書き間違えた。
つまり、次のプログラムを実行したことになる。
while(1){
Y = Y - (X>>4);
X = X + (Y>>4);
pset(X,Y);
}
これが、偶然からの大発見だった。
描かれる線は、渦巻きではなく正円になった。
正円が描けるということは、SIN / COS の三角関数を生成できる、ということ。
ミンスキーは偶然から、整数演算のみで三角関数を導き出すプログラムを作ってしまったのだった。
これはすごい発見だったのだけど、ミンスキーはこれで終わりにしなかった。
この、偶然見つけたアルゴリズムの「意味」を数学的に検証して、「3つの円」を表示するプログラムを編み出した。
当時、ハッカーの間で、ディスプレイに興味深い画像を表示する、短いプログラムを作るのが流行していた。
Hacks 、もしくは HAX (読み方はどちらも「ハックス」)と呼ばれる。
3つの円を表示する、といっても、単純に表示するのではない。
表示に関係するパラメーターを、コンソールの2進スイッチにより与え、あえて「円を崩して」表示できる。
これによって3つの円は非常に複雑な形状へと変化し、パラメーター次第でいろいろな図形が描き出される興味深いプログラムとなった。
3つの円を描きだすので、ミンスキーはこれを「Tri-pos」と名付けたのだけど、ハッカーたちは「ミンスキートロン」と呼んだ。
#リンク先のミンスキートロンはエミュレータで再現されたもの。
上のメニューで何か選ぶと、2進スイッチが「お勧めの設定」になっていろいろな図形を描いてくれる。
もちろん、自分でスイッチをいじって変化を楽しんでもいい。
ジャック・デニスの話を以前に書いたことがある。
デニスも、マッカーシー、ミンスキーと共に、MITのハッカーを導いた人だ。
ただ、マッカーシーとミンスキーは当時すでに偉い人だったけど、デニスは当時は新米だった。
だから、マッカーシーとミンスキーは「師匠」であり、デニスは「兄貴」だった。
それはともかく、3人ともMITのハッカーたちと共に過ごし、コンピューターに対する先進的な考え方を持っていた。
当時のコンピューターは、バッチ処理が普通。
パンチカードの束をセットして、後は結果が出るのを待つだけ、という使い方だ。
でも、3人とも、コンピューターはいつも人間が使える状態にあって、対話的に使えたほうが良いと考えた。
当時のコンピューターは非常に高価なので、1人1台、なんてことはできない。
コンピューター1台で、同時に複数のプログラムを走らせる方法…今なら当たり前の、マルチタスクの研究を始めた。
最初は、PDP-1 を使った小さなシステムだった。
これが成功し、成果を ARPA に報告すると、さらに研究を行うために ARPA が資金提供してくれることになった。
その額、300万ドル。
#どうも、文献によって金額が違うのだけど、後からの追加などもあったためだと思う。
ARPA は、この資金を「コンピューターをマルチタスクで使うための研究」に拠出した。
でも、マッカーシーやミンスキーは、この資金を元に「プロジェクトMAC」を立ち上げた。
このプロジェクトは、コンピューター科学の研究プロジェクトとされた。
「マルチタスク」もその一つではあるのだけど、他にもいろいろな研究をする。
それまで、マッカーシーらは年間 10万ドルの予算しか与えられていなかった。
ところが、いきなり 300万ドルが使えるようになったのだ。
そして、ミンスキーはこの「マルチタスク研究のための資金」の 1/3 、100万ドルを使い込んだ!
マルチタスクで各個人がコンピューターと「対話」できるようになれば、対話するためにコンピューターが人間を理解する必要がある。
じゃぁ、人工知能はマルチタスクでできることの研究として重要だ。
マルチタスク研究の一環なのだから、お金を使って何が悪い!
使い込んだといっても、別に私腹を肥やしたわけじゃない。
優秀な学生ハッカーたちを雇い入れて、プログラムを作らせたのだ。
ハッカーたちは、ほっといてもプログラムを作る。それが楽しいからだ。
例えば、世界最初のテレビゲームの一つとされる、Space war! を生み出した。
でも、ゲームをしたかったんじゃない。それを作ること自体が楽しかったのだ。
だから、プログラムの目的はなんでもいい。
ミンスキーが、バイト代を出すから人工知能の研究を手伝ってくれ、というのであれば、喜んで参加した。
ARPA は怒らなかったのか?
大丈夫、デニス(というより、その師であるコルバト)がちゃんとマルチタスクの研究をやっていたから。
デニスは後に Multics のプロジェクトに参加するのだけど、最初はそんな大掛かりではない。
IBM に協力してもらって…IBM は乗り気ではなかったようなのだけど、IBM 7094 というコンピューターを改造して、マルチタスク機能をつけてしまった。
ミンスキーが 1/3 を使った、という分け方の「根拠」は僕は知らないのだけど、マッカーシーとミンスキー、コルバトで3等分したのではないかと思っている。
この後、プロジェクトMACは、MITのハッカーが集う場所になっていく。
研究内容は多岐にわたった。当時としては最先端の実験、というものが多かった。
今回、訃報に触れたときに、ミンスキーが「LOGO や Lisp の開発にも携わった」という評伝があった。
恥ずかしながら、僕はそれを知らなかった。
パパートが書いた「マインドストーム」という本があって持っているのだけど、ずっと前に読んだ切り、内容はほとんど覚えてない。
もう一度読み返してみた。
プロジェクトMACには、後にシーモア・パパートがやってきて、「コンピューターを使った教育」の実験を始める。
パパートは、本の中でこの頃を振り返って、二人の「強い影響を受けた人物」を挙げている。
1人がミンスキーだ。最も重要な人物、としてあげられている。
パパートは教育心理の専門家で、子供の心に詳しかった。
ミンスキーは人工知能の専門家で、人工知能がどのように学習するかに詳しかった。
この二人が、実際に子供の教育現場に立ち会いながら、子供がどのように学習していくかを、時に心理学の見地から、時に「学習機械」としての見地から、意見を出し合って理論として固めていったのだ。
これはパパートにとって最も重要な経験だった、と回顧させているのだけど、LOGO の開発自体に手を貸したわけではないようだ。
もっとも、LOGO は子供の教育に使える言語として考えられたわけで、「意見交換」を LOGO の開発だとみなすのであれば、そう言えなくもないけど。
ミンスキーは、計算理論が、単に「数学の計算方法」ということではなくて、その人の世界観を形作るための重要な存在である、とパパートに示したそうだ。
これが、何よりもパパートの考え方を変えたとのこと。
ちなみに、もう一人の「影響を受けた人物」はアラン・ケイ。
ケイはパパートの元で学んだ弟子のような位置づけなのだけど、「子供のことを考える」という点で、誰よりも強い情熱を注いでいたそうだ。
Lisp も LOGO と同じような感じで、Lisp 自体はマッカーシーが考えたものだ。
でも、マッカーシーとミンスキーは常に近い位置にいたので、いろいろと意見交換はしているみたい。
どこまでが「開発に携わった」といってよいのかわからない。
ただ、一つ言えることは、ミンスキーは恐ろしく頭が良くて、意見を求められれば畑ちがいの分野であっても、喜んで飛び込んで実のある意見を出せた、ということ。
関係した誰もが、ミンスキーはとても頭が良かった、と振り返っている。
そして、何よりも面白がりで、いたずら好きだったらしい。
ハッカーと仲良くなれたのも、そういう子供っぽいところがあったからなのだろう。
ミンスキーは、パパート共に「ニューラルネットワーク」の研究もしている。
たくさんの電線に可変抵抗(ボリューム)をつないだ、配線のお化けだ。
でも、これは人間の脳のニューロン構造を模倣している。
脳は、ニューロン間の接続の「強さ」を可変させることで物事を学習する。
同じように、電線間の接続の「強さ」を、可変抵抗で調整していけば学習する機械になる。
ただ、ニューラルネットワークは、恐ろしく可変抵抗が多い。
何をどう回せばよい学習になるのかわからない。学習することはわかっていたのだけど、扱うのは職人芸だった。
1958年に手法が示され、60年代に流行したのだけど、ブームの初めの頃は、「人間の脳を模倣しているのだから、すごいに違いない」という期待論が上回った。
でも、先に書いたように、学習方法すら確立していなかったのだ。
これに対し、1970年代に、ミンスキーとパパートがニューラルネットワークの数学的な解析を行う。
これで、能力の限界がわかった。
「上手なプログラムを作れば分類できる」ものを分類できる、というのが能力の限界だった。
実は、これはすごいことだ。
上手なプログラムを作れば…というけど、それは職人芸だ。
でも、ニューラルネットワークは、学習することができる。プログラムする必要はない。
ただ、この時点では学習手法が確立しておらず、学習も職人芸だった。
ブームは急速にしぼんでしまった。
1986年に、ニューラルネットワークが再注目される。
結果を見て、「誤差」をフィードバックすることで学習する、という手法が確立するのだ。
これでニューラルネットワークの「第2次ブーム」が起きる。
僕はこの頃大学生だったのだけど、研究室の先輩が興味を持って、「脳を模倣するらしい」とプログラムを自作していた。
そしたら、研究室の教授が、何やら英語の論文を持ってきてくれた。
しばらくして、ゼミで先輩が論文の内容を発表した。
フィードバック学習の手法と、その限界についての論文だった。
フィードバック学習方法では、ニューラルネットワークをあまり複雑にできない。
これは、「脳を模倣する」と言いながら、脳ほど複雑にはできないことを意味する。
ミンスキーの結論も一緒に書かれていた。
上手なプログラムで分類できる程度のものしか分類できない。
…ただし、これは「十分に複雑なニューラルネットワークがあれば」というのが前提だ。
この二つを組み合わせると、出てくる結論は一つ。
ニューラルネットワークでは、下手なプログラム程度の結果しか出せない。
先輩は急に興味を失って、作るのをやめてしまった。
#念のために書いておくと、この後もニューラルネットワークは研究され、現在「第三次ブーム」と言われている。
ディープラーニングと呼ばれる手法で、上手なプログラムと同程度以上の成果を、上手なプログラムを組むよりも低いコストで実現できるようになった。
ただし、ここでいう「低コスト」はプログラム時間に関することだけ。
学習のための膨大な「教材」と、膨大な学習時間が別に必要。
#関係ないけど、2000年ごろに「サポートベクタマシン」という自動学習手法が流行した。
これも、最初は理論が未完成で期待されていたのだけど、理論が完成すると「上手に組まれたプログラム並みの能力しか出ない」ことがわかり、ブームが過ぎた。
もちろん、適材適所で、普通のコンピューターが良いところ、ニューラルネットワークが良いところ、サポートベクターマシンが良いところは違うのだけど。
ミンスキー、調べれば調べるほど、逸話が次々と出てくる。
とても書ききれないので、手持ちの「ハッカーズ」と「マインドストーム」から、面白いところだけ抜粋して、ついでに自分の大学時代の、ミンスキーに関係しそうな思い出話を書いた。
今後も機会があったら、少しづつ業績を紹介していきたいと思う。
同じテーマの日記(最近の一覧)
関連ページ
【訃報】ジョン・ホートン・コンウェイ氏【日記 20/04/15】
ケン・トンプソンの誕生日(1943)【日記 16/02/04】
シーモア・パパート 誕生日(1928)【日記 16/03/01】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
Google が作った囲碁プログラム (AlphaGO) が、ヨーロッパチャンピオンと対戦して勝利したそうだ。
昨年秋に対戦したらしいのだけど、ニュースになったのは昨日。
囲碁はチェスや将棋に比べてずっと難しいので、このニュースにはちょっと驚いた。
でも、なんで囲碁が難しいのか、という話に触れている記事を見かけない。
(僕が探せていないだけかもしれないけど)
ちょっと解説してみよう。
まず、僕は囲碁についてそれほど知識を持っていない。
ルール詳細すら知らず、「陣形を作るゲーム」であることは知っている、という程度。
以前に将棋について少し書いたのだけど、将棋も囲碁も、シミュレーションゲームだ。
将棋は、局所戦…小さな戦いを表現している。駒が人で、人と人が殺しあう。
#日本の将棋は、殺さずに捕虜にして、仲間にすることができる。
それに対して、囲碁は国家レベルの戦略をシミュレートしている。
局所的な戦いは関係ない。そもそも、国家レベルの戦いでは、実際の戦闘がおこらない「にらみ合い」が多い。
お互いににらみ合い、前線を形成しつつ、相手の補給路を断つ。
補給路を断たれた相手は降伏するなり野垂れ死ぬなどして、いずれその領地は自分のものとなる。
こうして、前線で相手を囲い込みながら領土を広げるゲームが「囲碁」だ。
ここで、ゲーム性が大きく違うことに気づいただろうか。
将棋もチェスも、駒を動かして、相手を取る。
つまりは、「点」から「点」への動きだ。
ある地点の駒を別の地点に動かせば、相手の駒をとれる。
もしくは、自分の駒を動かさないと、相手にとられる。
盤面がいくら広くても、駒の数は有限だ。
その駒すべてについて、動かせる手を全部試すことは、実はそれほど難しいことではない。
…チェスならね。
いや、本当はチェスだって全部なんて試せないのだけど、それは後で書く方法でカバーできる。
ともかく、チェスの動きはそれほど多くはない。
特に、終盤に向かって駒が減っていくので、先読みが簡単になっていく。
チェスを指す機械が作れるだろう、という考えは、コンピューター以前からあったくらいだ。
将棋は、取った駒をいつでも盤上に投入できる。
これにより、盤上の駒が少なくなる終盤は、駒を「動かす」のではなく、どこでも好きな位置における、という可能性が高まる。
これによって、終盤に向かって複雑さがどんどん増していく。先読みが難しくなっていく。
チェスより将棋のほうが難しい、というのはこのためだ。
囲碁は、石を「好きなところに置く」ことの連続で、動かさない。
また、相手の上に乗る、というようなこともない。
相手の動きを阻止するために「すぐ横に置く」ことは多いのだけど、これも絶対ではない。
状況によっては、全く異なるところに置くことがある。
つまり、自分も相手も、石を置く場所の手がかりがない。
手がかりがないからどこに置いていいのかわからないし、相手がどこに置くのか読みづらい。
これが、囲碁の難しさの一因になっている。
google もルールから説明するのは面倒だからか、単純に「盤面の広さ」から、取り得る局面の数を示して「囲碁は非常に大きい」と言っている。
チェスは 8x8で、将棋は 9x9 、囲碁は 19x19 だから、囲碁は圧倒的に「取り得る局面」は多い。
でも、局面の多さが難しさを示すのだとしたら、同じく碁盤で行う五目並べも、囲碁と同程度に難しいということになってしまう。
盤面の大きさが難しさにつながる部分は確かにあるのだけど、それほど重要ではない。
本当に囲碁が難しいのはここからだ。
先に書いたように、将棋は「点から点」の動きだった。
でも、囲碁は「線で囲む」ゲームだ。より正確に言うと、線を「形作っていく」ゲームだ。
人間なら、星と星をつないで星座を作ることができる。
「点」をつないで線を「形作り」、そこに絵や物語を見出すのだ。
でも、コンピューターはそんなことできない。点はいつまでたっても点であり、線になることはない。
点を伸ばしてやがて前線を作り、相手を囲い込む…というゲームは、コンピューターにはどこに手を打つべきかもわからない。
もちろん、石と石の間が1マス開いていたら、そこに石を置いたらつながるな、程度の判断ならできる。
でも、5マスも離れていたら、そこを埋められるかもしれない、なんて思わない。
同じような局面が多数あった時に、どちらのほうがつながりそうだ、とか判断できない。
「判断できない」というのは、非常に致命的な問題をもたらす。
話は戻るだけど、チェスや将棋は、駒が有限だから動かすことは簡単、と書いた。
でも、もっと重要なのは、「意味が分かりやすい」ことだ。
駒が相手の駒に乗れば、取ることができる。乗られれば取られる。
できれば取られないのが一番いい。でも、歩を犠牲にすることで王を守れるのであれば、王を優先して守ったほうがいい。
こうした「手の評価」が簡単にできる。
手の評価ができるからこそ、駒の動きをいくつも試してみて、「一番いい手」を選び出すことができる。
将棋の場合、数手先まで読んだりする。
でも、「1手」でも、動かせる駒は非常に多い。そのまま2手、3手と先読みすると、そのたびに駒の数だけ動かせる可能性が増えて、調べきれなくなる。
この場合も、「手の評価」を使うことで、大幅に可能性を減らすことができる。
王手がかかっているのに、無視して別の駒を動かす必要はない。自分の王がとられるのは最悪の結果なのだから、とにかくそれを防ぐ手を考える。
それ以外の手を採用する必要はないので、先読みすべき手を大幅に減らすことができる。
王手は極端な例なのだけど、自分がわざわざ悪い手を打つ必要はないのだ。
同様に、相手も悪い手を打つ必要はない。これで、先読みの「可能性」を大きく減らすことができる。
最終的に一番いい手を選ぶにも、先読みをするのにも、とにかく「手の評価」が大切なのだ。
ところが囲碁は、基本である「どうやれば線がつながるか」がわからない。
繋がりそうな箇所がいくつかあったとして、どれを優先すべきかわからない。
つまり、もしコンピューターが超高速で、すべての手を総当たりで試せたとしても、その結果から「一番いい手」を選び出せない。
ここが囲碁の難しさの本質だ。
何がいい手なのか。
これ、実はコンピューターだけでなく、人間にもわからない。
もちろん慣れた人にはわかるのだけど、初心者にはとっかかりがなさ過ぎて入門しづらい。
囲碁人口が少ない理由の一つだ。
同時に、わかっている人にとっては、単純ではない、非常に奥深いゲームとなる。
余談なのだけど、米国のゲーム会社…ビデオゲーム業界を生み出した「ATARI」社の社名は、囲碁の用語「あたり」からきている。
子会社に SENTE 、TENGEN という会社もあった。これも囲碁用語の「先手」「天元」からきている。
ATARI 社の創始者が、囲碁を「世界で一番面白いゲーム」だと考えていたことに由来する。
唐突だけど、大学の時のコンピューターサークルの先輩が、卒業研究に「コンピューター囲碁」を考えていた。
90年代の頭かな。
今調べたら、このときには後で書く GNU GO がもうできていたようなのだけど、今と違ってネットは普通ではなかったので知らなかった。
で、コンピューターにルールを教えることすらできない。
「コンピューターに囲碁を教えるのは何が難しいか」という、失敗談をまとめるのが精いっぱいだった。
学生が1年間で研究するには、ちょっと荷が重かったテーマなのだ。
で、GNU GO なのだけど、これ以前にも囲碁ソフトがなかったわけではない。
でも、GNU GO は、GNU だからソースを公開していた。他の人が研究して、さらに強いものを作る土台となった。
GNU GO は、少なくとも「全く無意味ではない」手を打てる程度には囲碁のルールを学べていた。
手を考えるときは、碁盤を配列として用意し、数値を入れられるようにしておく。
石が置いてある「周囲」のマスに、+1 する。すべての石について行う。
これが第1段階。
すでに数値が入っているところを、すべて +1 する。
そして、数値が入っているマスを石と同じように見なして、また「周囲」を +1 する。
これが第2段階。
以降、同じ操作を繰り返し、数値を大きくしていく。
石の周りに「濃度」を持つ勢力範囲が染み出していく…そんな雰囲気を感じ取ってもらうといい。
何段階行うかは任意。というか、その時によって最適な回数は異なるので、状況を見ながら調整。
5段階までやったとしたら、最後にすべてのマスの数値から、5を引く。
マイナスになるところは 0 だと考えて無視。
石の周囲に増やした数字は、0 に戻るはず。
でも、「周囲を +1」した時に重なっていた部分は、重複してカウントされているので 0 に戻らない。
ここはつまり、周囲の石の間を埋めて、前線を作るのに役立ちそうな場所、ということになる。
これで、少なくとも「石を打つとよさそうな場所」がわかる。
複数ある場合にどう評価するか、状況によって全く新しいところに打たないといけないときにどうするか、などは別問題。
ともかく、GNU GO がこの手法を広めて、しばらくはこれ以外の良い方法がなかったらしい。
90年代の中ごろ、画期的なアルゴリズムが考案される。
どこに打てばいいのかわからないなら、乱数で打てばいいじゃん、という割り切り。
もちろん、本当に乱数だけで勝負していたら、とんでもなく弱い。
ここに「学習機械」を組み合わせる。
ランダムに打った手のデータを覚えておいて、とにかく、むちゃくちゃなうち筋でもいいのでゲームを終了させる。
(ランダム同士で打ち合えばいい)
ゲームが終われば勝敗がわかる。きっと、負けたほうの「ランダム」は弱い手だ。データは覚えているから、同じような局面になった時には避けよう。
逆に、勝ったほうの手は、同じような局面ではまだ使おう。
これをひたすら繰り返すと、強そうな手と弱そうな手がわかってくる。
あるとき勝った手が、同じ局面で別の時に打ったら負けたとする。
この手は強いと思っていたけどそうじゃなかった、ということだ。
逆に、何回も打ってすべて勝った手があったら、これは本当に重要な手なのだ。
今後も同じ局面では打つのがいい。
ここにあるのは、ひたすら過去のデータを積み上げるだけで、打った手の評価は「しない」という方針だ。
囲碁の手の評価は、先に書いたように難しい。だったら、評価しないでもいい。
でも、最後に勝ったかどうかだけは覚えておいて、途中の手すべてに「勝ち負け」のフラグを積み重ねていく。
…これ、マッチ箱エンジンだよね。
ただのマッチ箱でも、マルバツゲームの思考ルーチン程度は作れてしまう、というアルゴリズムの実験。
もちろん最初は弱かった。
でも、2006 年に、この手法をさらに応用して学習部分を強くしたプログラムが作られる。
ひたすら戦って「勝った」「負けた」を記録するだけではなくて、勝った打ち筋なら、途中から手を変えたらどうなるか、などを試すようにしたのだ。
これによって、勝てそうな局面で、さらに強い手を探すことができるようになった。
このプログラムは、コンピューター囲碁大会で優勝した。
以降、この手法が主流になっていく。
実は、こういう「ランダムを使ってひたすら学習する」のは、囲碁の世界に限った話ではない。
最初のほうに書いたけど、チェスや将棋では、一手ごとに「その手が良いか悪いか」を評価している。
この評価部分は、昔は人間が作っていた。そして、評価方法の善し悪しが強さに直結した。
評価方法の善し悪しというのは、つまりパラメーター調整のことだ。
昔は職人芸でプログラマがやっていたのだけど、最近の流行は「ランダムに設定したパラメーターでひたすら戦わせ、勝ったものだけを残す」というような手法だ。
これにより、コンピューターが自分で最適なパラメーターを学習するようになった。
評価方法の調整は職人芸の時代から、コンピューターオートメーションの時代に入ったのだ。
そして、囲碁でもそれが適用された、に過ぎない。
元々評価手法自体が作りづらかったので、思い切って評価をしないことにした。
評価は、試合結果によってのみ決まる。
そして、ひたすら試合を繰り返して、結果から学習する。
機械が勝手に学習したものなので、機械が「良い手」だと思っているものが、なんでいい手なのかは誰にも説明がつかない。
でも、実際強くなったのだからいい手なのだろう。
今回プロに勝ったという Google の囲碁プログラムも、こうして作られたものだ。
何で勝ったのか、どういう仕組みで考えているのかは誰にもわからない。
わかるのは、強くなったという事実だけだ。
今回の Google のプログラムでは、学習部分にニューラルネットワークを使っているそうだ。
ニューラルネットワークは、十分な学習を積んだ場合に、まだ見ぬ問題であっても「正解に近いと思われる回答」を得られる特徴がある。
以降は、詳細が明かされていないので想像に過ぎない話。
単純に「過去に打った手」を参照するのではなく、盤上の局所的な形勢などを見て、それらしい正解を出せるように学習させてあるのではないだろうか。
囲碁は「線を形作る」と最初のほうに書いたのだけど、これはパターン認識の世界だ。
そして、パターン認識ではニューラルネットワークは非常に役立つことがわかっている。
近年流行のパターン認識では、局所的なパターンの特徴を、「局所」のサイズを様々に変えながら抽出し、それらをパラメータとして組み合わせたうえでニューラルネットワークの入力とする。
この方法だと、局所的な特徴も捉えられているし、ニューラルネットによって全体のバランスも考慮される。
囲碁の広い盤面を全部「記憶」するのではなく、局所的なパターンを元に判断を下すこともできるだろう。
そして、実はこのパターン認識方法は、人間の「目」の働きを模倣したものだ。
目は局所パターンを識別し、局所的な形状を「特徴」として不可逆圧縮し、その組み合わせとしてデータを脳に送っている。
この「特徴抽出」によって、人間は線を線と感じたり、丸いものを丸いと感じたりすることがわかっている。
点に過ぎない星を見て、それがつながった「星座」を思い浮かべるのもこれに近い働きだ。
なので、「前線を作る」ゲームである囲碁が、パターン認識の世界に踏みこんだというのも、ある意味当然なのかもしれない。
話はここまでの部分で終わっていて、以降は余談。
途中で書いた「マッチ箱エンジン」だけど、マッチ箱エンジンで囲碁の19路盤を学習させたらどうなるか…という解説記事があった。
英語だけど、図表が多数入っているのでわかりやすく、面白い。
ざっと解説すると、多数のマッチ箱に9色のビーズを入れておくと、マルバツゲームの相手をすることができる。
箱は、現在の「盤面」の状況を示している。対応する箱から、ビーズを1個取り出すと、その色が「どこに打つか」を示している。
最初は、すべての色のビーズを入れてある。
当然、打てない場所の色も出てしまう。マッチ箱は、最初はマルバツのルールも知らないのだ。
それは捨ててやり直す。つまり、人間がルールを教える。
正しい手を打った場合も、マッチ箱はランダムに打つことになるので、おそらく負けるだろう。
マッチ箱が負けたら、最後の手順で打ったビーズは捨てる。その手を打ってはいけなかったのだ。
もしもマッチ箱が勝ったら、途中で使ったビーズをすべて1個増やしてやる。勝ったご褒美だ。次からはこの手を打ちやすくなる。
マッチ箱はだんだんと良い手を打つようになってくるし、究極的には絶対負けない、最強プレイヤーとなる。
…というのがマッチ箱エンジンなのだけど、解説記事は途中までこの解説をしつつ、最後に19路盤への応用の話になる。
打てる可能性が非常に多いので、マッチ箱が大量に必要になる。
最後の画像は、必要なマッチ箱を置くための面積を、わかりやすいものと比較した図だ。
なるほど、ゲームの規模がわかりやすい。
というか、先に書いた通り Google の囲碁プログラムは基本的にマッチ箱エンジンだ。
(多少工夫して、知らない手でも打てるようにはなっているけど)
マッチ箱じゃなくてコンピューターを使っているけど、この図にあるようなものを実現してしまったということですよ!
最近の囲碁のアルゴリズム詳細について、詳しい資料がありました。
今回、いくらかはこの資料を参考に書かせていただいています。
2016.3.20追記
3月中旬、AlphaGO は世界最高峰の棋士である韓国人、イ・セドル九段と対局し、4対1で勝ちました。
と同時に、上記記事を書いたときにはあまり報じられていなかった詳細が報じられました。
やはり、推察したとおり盤面を画像として認識しているそうです。
チェスや将棋では駒の位置関係など、データを中心に扱いますが、画像として「なんとなく」状況把握している。
今までの AI などにはなかった新しい手法です。
と同時に、駒の位置関係だけが重要で、駒の価値や動きに意味がないからこそできる手法だとも思います。
AlphaGO を開発したディープマインド社は、汎用性のある AI を目指して研究しているそうです。
実際、AlphaGO と同じ仕組みをインベーダーゲームやブロック崩しなどの単純なゲームに応用し、スーパープレイヤーを作り出すことに成功しています。
とはいえ、パックマンのルールは複雑すぎて理解できません。
ニューラルネットワークは、なんにでも応用できる汎用性がある一方で、単純な問題にしか対応できません。
囲碁もまた、十分に奥深いゲームではあるが、ルール自体は非常に単純。
だからニューラルネットワークが活きてきます。
DeepMind 社の創始者の詳細記事が、昨年末発売の Wired に掲載されていたようです。
AlphaGO がイ・セドル九段との対局初日に、WEB ページでも公開されたようです。
今日知って読んだところ、非常に面白かったのでこの追記を行った次第です。
同じテーマの日記(最近の一覧)
関連ページ
【訃報】ジョン・ホートン・コンウェイ氏【日記 20/04/15】
ケン・トンプソンの誕生日(1943)【日記 16/02/04】
シーモア・パパート 誕生日(1928)【日記 16/03/01】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |