越境するコンピューター

越境するコンピューター ~日記~

新しいコンピューターとの付き合い方 〜コンピューターと意思決定と人間〜

ゲームとコンピューターと実世界

1997年チェス名人に勝ったのを皮切りに、最近はコンピューターが囲碁名人に勝った、将棋でコンピュターと羽生名人が対戦、などゲームの世界でコンピューターが脚光を浴びています。「コンピューターが人類を超える」なんてことも言われてたりしますね。さて実際のところどうなんでしょう?
今回はゲームをお題にコンピューターと人間について考えてみたいと思います。

ゲームとコンピューター
チェス、囲碁、将棋で人間を圧倒しはじめたコンピューターですが、ゲームのやり方は人間とコンピューターでどう違うんでしょうか?
ゲームで勝つためにやるべきことは人間だろうがコンピューターだろうが一緒「最善の一手」を指すこと、この積み重ねが勝利につながります。
この「最善の一手」の判断方法に人間とコンピューターの違いがあります。

人間のやり方
プロ棋士は、たくさんある次の一手の候補から、筋のよさそうなものを候補として選択し、選んだ候補それぞれ何手か先まで読んで「そこに打ったらその後の展開はどうなる?」を考え最も有利な戦局になるものを選択しています。
プロ棋士はこの際の判断基準に、自分の過去の経験に基づく"論理的な思考能力"と"ひらめき"を使っています。
先日将棋の羽生名人が「たくさんの手を読むことが強いということではない」とテレビで言ってました。名人も全部の手を考えている訳ではないのです。

コンピューターのやり方
一方のコンピューターはどうやって「最善の一手」を決めているのでしょう?実はいろんなこれまでいろんなやり方が試されてきました。

(1)全部調べる
コンピューターの計算能力の高さに頼って全部調べるやり方。全部の次の一手、それぞれの一手のその後の全部のパターンを調べる方法です。
3目並べくらいの簡単なゲームだとこの方法で必勝コンピューターを作れるんですが、チェス、囲碁、将棋のような選択肢が膨大にあるゲームでは全パターンを調べていたらいついつまでたっても終わないので現実的ではありません(どのくらい終わらないのかはこの文書の後半で)。

(2)筋のいい手に絞って数手先まで読む
さすがのコンピューターも力任せの全調べは荷が重いので人間と同じように"筋のいい手に絞って数手先まで読んで一番有利な戦局になるものを選ぶ"という方法です。
ここで問題になってくるのは「有利な戦局」の判断基準です。

a.プログラムする
戦局を評価するノウハウを詰め込んだプログラムを作成する方法です。この場合プログラムの質は作成する人のゲームの知識の大きく左右されます。
この方法はある程度の成果を収めていますが、囲碁、将棋の名人レベルになるには至っていません。
特に囲碁の場合は次の理由で評価プログラムの作成が難しいとされています。
(1)将棋、チェスはいろんな種類の駒があるから評価に使える、一方囲碁は駒は白黒だけなので評価の材料に乏しい
(2)囲碁は終局まで大勢が決しないことも多く局面の評価が難しい

b.やってみる
評価するロジックを作るのが難しいのなら、実際にゲームをやってみてその結果を判断基準に使おうというアプローチです。
代表的な例がコンピューター囲碁でつかわれているモンテカルロ法です。
囲碁のある局面から白黒を交互に適当においていって(最低限ルールには沿うようにします)どっちが勝ったかを調べます。
これを何回も繰り返した結果を元に次の一手を評価します。イメージ的にはへたくそな二人が何回も対戦しているのと似てます。
同じレベルの下手くそ同士が何回も対戦した結果だから、腕の差ではなく局面が有利だから勝ったんだろうという発想です。
次の一手で勝率の高かったものについて二手先、三手先と掘り下げていくことで「筋のいい手を」「先読みする」を実現しています。
これでコンピューター囲碁はかなりのレベルになりましたがまだまだ名人に勝てるレベルではありませんでした。

c.過去のデータを使う
囲碁は過去の対戦の棋譜が数多く保存されていて比較的簡単に入手できます。この膨大なデータを活用して評価の精度を上げようというアプローチです。
この手法は「教師有り学習」と呼ばれており、最近よく耳にする"機械学習"の手法のひとつです。
一流プロの棋譜を学習教材として、一流プロと同じ次の一手打つようにコンピューターを学習させていくのです。
一流プロと同じ手を打つ=一流プロの次の一手を教師として使う、ので教師有り学習と呼ばれています。

d.コンピューター同士で対戦させる
ある程度強いコンピューター囲碁のプログラムが出来てきたら、コンピューター同士で対戦させてさらに強くしようというアプローチです。
この手法は「強化学習」と呼ばれており、こちらも最近よく耳にする"機械学習"の手法のひとつです。
コンピューター同士を対戦させて勝った方にご褒美を上げるイメージで学習させていくのです。

先日囲碁名人に勝利したAlphaGoはモンテカルロ法機械学習を組み合わせて作られています。将棋の世界で最強と呼ばれているプログラムも機械学習を取り入れています。

コンピューターの認知力アップ
ゲームの世界で名人にせまっているコンピューター、そこでは機械学習が大きな貢献をしています。機械学習はゲーム以外のいろんな分野で活用されはじめています。
機械学習の活用によりコンピューターの新しい使い方が生まれてきています、これをコンピューター認知力がアップしたという言い方をする人もいます。
ここから認知力アップってなんだ?を簡単に説明したいと思います。

認知力アップ その1 帰納的認知力
人間がやりたいことをプログラムしてコンピューターにさせる、これが従来からあるコンピューターの使い方ですね。
簡単な例だと底辺と高さから三角形の面積を求めたいとすると 底辺 x 高さ ÷ 2 というロジックを含んだプログラムを書きます。
いったん書いてしまえば、底辺と高さのデータをコンピューターに入れれば必ず正しい面積を出してくれます。

しかし、世の中やり方を説明できるものばかりではありません。カードの使用履歴等からカード犯罪を検知しようとした場合、世にたくさんある個々のカード犯罪の手口を全部プログラムに書くのは無理がありますし、かりに全部書いたとしても明日には新しい手口が生まれてきますから、従来の「プログラムにやり方を書く」アプローチでの対応は難しいですね。

そこでアプローチを変えて、理由は説明できないけど過去のデータを元に「こういう取引データの場合は不正使用の可能性が高い」という "おそらくだいたい正しい" 傾向をあぶりだす、これが最近はやりのアプローチです。

従来のコンピューターの使い方が「正解に導くロジックをプログラムに実装する」のに対して「データからおそらくだいたい正しい傾向をあぶりだす」ので前者を演繹的アプローチ、後者を帰納的アプローチと呼んだりします。帰納的アプローチで使われるのが機械学習という手法です。

機械学習にはいろんな種類がありますが基本的に全部「データからおそらくだいたい正しい傾向をあぶりだす」という帰納的アプローチをとってます。
また、機械学習では入力されたデータを元にパラメーターを調整して最適な答えを導くというアプローチをとるのでデータがとても重要な役割を果たします。これが学習と呼ばれる理由です。
機械学習のプログラムだけあっても何の役にも立ちません、適切なデータで学習することで初めて価値を生みます。従来の演繹的アプローチではプログラム自体が重要な価値を持っていてデータはあくまで処理するものとなっているのと対照的ですね。


認知力アップ その2 非構造化データの認知力
機械学習ではデータが重要というお話をしました。より多くの多様なデータを活用することで機械学習の精度、適用分野も広がります。
世の中にはいろんなデータがるのですが、実は従来コンピューターが使っていたデータはその20%にしかすぎませんでした。
その20%は「構造化データ」をよばれるもので、ざっくりいうと "Excelのシートでまとめることができる、きちんと形式の決まったデータ" です。
残りの80%は「非構造化データ」といわれるもの。ざっくりいうと つぶやき,メール内容、 画像、音声など形式の決まっていないデータです。
これを活用しない手はない、ということで非構造化データをコンピューターが処理できる形式にして活用しようというのが最近の流行です。
非構造化データをコンピュータが認知できる形式にする際も機械学習が使われています。

*帰納的アプローチはこれまでのコンピューターの使い方に慣れている人にとっては抵抗感があるかもしれません。「おそらくだいたい正しい」「やりかたを説明できない」という
部分がとても頼りなくみえてしまうのです。『機械学習』に加えて『統計学・確率論』を理解するとこのもやもやが晴れていきます。

ゲームを制したコンピューターは現実世界も制するのか?
ゲームの世界では名人にせまる勢いのコンピューター、これをもって「コンピューターが人間を追い越す」という論調のお話も最近は聞かれます。
しかし現実の世界には囲碁、将棋とは全く異なる難しさがあります、コンピューターが人間を追い越すのはそんなに簡単なお話ではないと私は考えます。

ゲームのルール
チェス、囲碁、将棋はゲーム理論の定義では「二人ゼロ和有限確定完全情報ゲーム」という分類に入りますが、現実の世界のゲームには他のいろんな種類があります。

(1)完全情報
チェス、囲碁、将棋は判断に必要な相手の情報が全て分かっています。盤面の情報、自分が持っている駒、相手の持っている駒は全部わかりますよね。相手が急に隠し持った角を打ってくるなんてことは起こりませんよね。
同じゲームでもポーカーは相手の持ってる手札はわかりません。現実の世界では競争相手の情報を全部把握できるなんてことはまずありません。現実世界では不完全な情報下で意思決定を行う必要があるのです。

(2)確定
チェス、囲碁、将棋は偶然、確率の要素は全くありません。同じ盤面で同じ手を打てば必ず同じ状況になります。
同じゲームでもポーカーは次に来る手札によって大きく戦局がかわってきます。現実世界でも意思決定は確率的な要素を考えて行う必要があります。

(3)二人ゼロ和
チェス、囲碁、将棋は対戦する相手は一人、ゲームの結果は必ず勝ちと負け、もしくは引き分けととてもシンプルです。
同じゲームでもポーカーは複数の人と対戦するので戦略的な要素が入ってきます。現実の世界では目標達成のために複数の相手と時に競争し、時には手を組んでいきます。またその結果は必ずしもゼロサムではありません。
みんながプラスになるケースもありますし、逆にみんなマイナスになってしまうケースもあります。

(4)有限
チェス、囲碁、将棋は手を進めていくと必ず終わりに到達します。現実の世界ではエンドレスに戦いが続いていくケースもあります。

(5)そもそもルールは決まっている
チェス、囲碁、将棋ではゲームのルールは決まっており、定められたルールの中で最善を尽くす必要があります。
現実の世界では定められたルールの中で最善を尽くすこともありますし、最適な結果を得るためにルールを変更する場合もあります。

* 現実の世界のゲームはチェス、囲碁、将棋より複雑です。さまざまな現実の世界でのゲームで適切な判断を行うのに役立つのが『ゲーム理論』という考え方です。
* また一般的な経済のルールがうまく機能しない時に新しいルールを作成している例として『マーケットデザイン・オークション理論』などがあります。

目的設定
チェス、囲碁、将棋の目的はとてもシンプル「相手に勝つこと」、現実の世界では目的はあらかじめ決まっている訳ではありません。
意思決定をする人が「自分にとって最適な結果は何か?」「集団にとって最適な結果は何か?」を定義することから意思決定ははじまります。

* 意思決定の目的について理解するためには『経済学』が役立ちます。個人にとっての合理的選択、集団にとっての合理的選択、不確実な状況下での合理的選択などを理解すると
目的設定に関する理解が深まります。

コンピューターに出来ること
ゲーム名人を圧倒し始めたコンピューターは現実の世界のゲームで力を発揮できるのでしょうか?決して人間を圧倒はできないが、人間を強力に支援することができるというのが私の考えです。

(1)目的設定
まず意思決定をする際の目的設定、これは人間がやるしかないです。自分がやりたいことわかんないからコンピューター決めてとお願いする訳にはいかないですよね。

(2)仮説立案
目的を設定してそこに到達するために何をすればよいか、言い換えると「こうすれば目的達成できるはず」という仮説を立てる、これも人間のお仕事です。
「個人の経験、直感に基づいて筋のいい仮説を立てることが重要」と経営系の本にもよく書かれています。この方法、たいがいのケースでうまくいくのですが失敗するケースもあります。
従来と同じビジネスモデル(=ルール)で生産性を高めるという目的の場合はこの方法はとても有効です。一方まわりの状況が変わっていてそれに対応する必要がある状況では個人の経験、直感が「がんこな思い込み」になってしまうケースがあります。

人間の経験・直感は大切ですが、注意しないと過度な自信と思い込みを生んで道を誤る原因になるのです。
ではどうすればいいのか?ここは帰納的認知力を身につけたコンピューターの出番です。コンピューターに仮説をたてさせる、具体的には数多くのデータを元にコンピューターに人間では気づかない「おそらくだいたい正しい」相関を発見させて、その発見した相関を元に仮説を立てればいいのです。

*人間の思い込みの危険性・不合理性への理解を深めるには『行動経済学』『認知心理学』の知識が役立ちます。

コンピューターの苦手なこと
実はチェス、囲碁、将棋のような「二人ゼロ和有限確定完全情報ゲーム」は先手必勝、後手必勝、引き分け、のどれかなんです。
全部のパターンを調べるとそのどれか必ず分かるので、これを一瞬にして把握することができるゲームの神様同士の対戦は先手、後手を決めた時点で勝敗が決してしまうので神様にとっては面白くもなんともないんです。
実際同じゲームの分類であるチェッカーについてはお互い最善手を選択した場合必ず引き分けになることが判明しています。しかし冒頭に述べたように、チェス、囲碁、将棋のような選択肢が膨大にあるゲームでは全パターンを調べていたら
どんなに高速なコンピューターでもいつまでたっても終わりません。たとえば囲碁の盤面は19x19ですから初手の候補が361個(19x19)、次一手が360個、その次の一手がそれぞれ360個、となっていくので
全パターンは361x360x359x。。。。。これ最新コンピューターでも宇宙が始まってから今までずっと計算してても終わらないくらいの膨大な数字になります。
高速化が進むコンピューターですがこのような指数的に処理量が増加する処理はさすがにお手上げです。
この性質をうまく利用しているのが現代の暗号化技術です。因数分解をするための効率的なロジックは無く、しらみつぶしに候補を探す必要があります。因数分解対象の数字が一桁ふえるごとに処理量は
指数的に増えていくので2つの数字(素数)を掛けておおきな数を作ってみんなにみせても、2つの数字を見破られる可能性はほとんど無く、これが暗号化技術の元になっています。
いま話題の量子コンピューターを使うと因数分解を高速に処理できる可能性があります、量子特有の性質を使うことで因数分解対象の数字が一桁ふえても指数的に計算量がふえていかない仕組みを作れる可能性があるのです。