Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2018-04-05

人工知能とゲームプレイヤーの未来について高橋名人と対談してみた 07:51 Add StarAkapon

https://i.gyazo.com/ce9bab9603b5d4b5f8a07778f73c3969.png

 深層強化学習って面白いよな、と最初に思ったのはDeepMindのDQN(Deep Q Network)を見たときだった。

 ブロック崩しが面白いように攻略されていって、「へえ、こんなことができるのか」と感心したのだ。


 そもそもこういうものが欲しかった。

 欲しかった、という言い方が適切かどうかはわからないが、人々は昔から、こういう「機械」を求めていたのではないかと思う。


 つまり「汎用的な問題を解決する機械」である。


 DQNが汎用的な問題を解決できるか、という問いに関しては、実際にはそんなことはないのだが、それでも「汎用的な問題を解決できるかもしれない」という可能性の片鱗を見せてくれるには十分だった。


 フィクションの中では、コンピュータの役割というのは、人間が考えたくもならないような複雑な確率計算をすることだった。


 R2D2は氷の惑星ホスでルークの生存確率を計算するし、とにかく「コンピュータに聞いて」なんらかの作戦なり行動なりの成功率を出させる(しかもだいたい天文学的に低い成功率のものを根性と奇跡で跳ね返す)という演出はもはやおなじみと言って良い。



 人類が想像力によって進化を続けてきたとすれば、フィクションとは想像力の最先端である。


 従って人類がやがて手にするAIも、フィクションの影響を強く受けるはずだ。


 ダーティ・ペアではWWWA(世界福祉事業協会)のコンピュータが人間には理解できないレベルで意思決定され、ラブリーエンジェル(通称・ダーティペア)が派遣される。


 トラブルコンサルタントでありながらあちこちでトラブルを起こすダーティペアは常に上司の頭痛の種だが、WWWAの中央コンピュータの判断は常に人間の判断より正しいとされていて、人間の上司がダーティペアを謹慎処分にしても、中央コンピュータの判断で現場復帰させられる。


 AlphaZeroが極端に少ないソースコードでほとんどあらゆる種類のゲームに対応可能という事実を知った時、とても興奮した。人間は知性の評価方法そのものを変える必要があるかもしれないと思ったほどだ。


 AlphaZeroの「意思決定」のコードはとても奇妙だ。

        for i in range(self.args.numMCTSSims):
            self.search(canonicalBoard)

        s = self.game.stringRepresentation(canonicalBoard)
        counts = [self.Nsa[(s,a)] if (s,a) in self.Nsa else 0 for a in range(self.game.getActionSize())]

        bestA = np.argmax(counts)
        probs = [0]*len(counts)
        probs[bestA]=1
        return probs



 AlphaZeroはQ関数を毎回作り直す。そのときに指針とするのがニューラルネットワークによる「直感」だ。数十回の試行を繰り返し、結果として「もっとも頻繁に選択した良手」を打つ。

 Nsaは、ある場面sのとき、行動aを選択した「回数」である。

 

 ではNsaはどう決まるのかというと、searchという関数の中で更新される

        for a in range(self.game.getActionSize()):
            if valids[a]:
                if (s,a) in self.Qsa:
                    u = self.Qsa[(s,a)] + self.args.cpuct*self.Ps[s][a]*math.sqrt(self.Ns[s])/(1+self.Nsa[(s,a)])
                else:
                    u = self.args.cpuct*self.Ps[s][a]*math.sqrt(self.Ns[s])     
                if u > cur_best:
                    cur_best = u
                    best_act = a

        a = best_act

        next_s, next_player = self.game.getNextState(canonicalBoard, 1, a)
        next_s = self.game.getCanonicalForm(next_s, next_player)
        v = self.search(next_s) #再帰呼び出し

        # Nsaを更新
        if (s,a) in self.Qsa: 
            self.Qsa[(s,a)] = (self.Nsa[(s,a)]*self.Qsa[(s,a)] + v)/(self.Nsa[(s,a)]+1)
            self.Nsa[(s,a)] += 1
        else:
            self.Qsa[(s,a)] = v
            self.Nsa[(s,a)] = 1

 search関数では、適正(valid)な全ての打ち手(Action)に対してQ(s,a)を求める。Q関数を参照しながら一番マシと思われる手を検索し、それを実行する。


 実行した結果としてvを受け取るが、このvは勝利か負けか、その確率(ニューラルネットワークの出力による)である。


 もどってきたvにもとづいてQ関数を更新する。このときQ関数を更新すると同時にN(s,a)も更新する。

 場面sのとき行動aを選択した「回数」を記録するわけだ。


 もし良い手なら、Q関数がプラスのvで更新されるため、選択される回数が増えるはずである。悪い手なら、マイナスのvで更新されるため、選択される回数は減るはずだ。このようにして更新される。


 たかだかこのような仕組みで、人間並み、いや、人間以上に「ゲーム勘」を獲得できるという単純な事実は、やはりなんど見ても驚愕という言葉で表現するのがふさわしく思える。


 こういう話を踏まえると、人間がゲームを遊ぶということは一体どういうことなのか。

 もしかして人間にとってゲームを遊ぶということは、これまで考えてきたこと以上に重要な意味を持つのではないのか。


 確率論的ゲームを解かせるために開発したAIにどんな名前をつけるべきか迷った。最初はDeepGamerとかで行くか、とかんがえた。いや、AlphaZeroが元だからDeepZeroだろうか。しかしDeepZeroだと、普通の人にはほとんど何を言っているかわからないだろう。


 そこでゲームが得意、といえば日本人なら「名人」だろうと思った。もちろん頭にあったのは高橋名人だが、羽生名人もいるわけだし、名人といえばゲームの達人のことだ。


 ポーカーで実際に人間を対戦できるものを展示しよう、といい出したのは増田だったのだが、人手が足りないのでグルコースに協力を求めてフロントエンドはグルコースに開発してもらった。僕はAIの中身をひたすら作った。


 それで「DeepMeijin」というものを作ってみたのだが、せっかくだから本物の高橋名人に来てもらってトークイベントをやろう、という冗談のようなことを前ちゃんに言うと、やはりあの世代のコロコロコミックつながりで前ちゃんは個人的に高橋名人と仲が良かったらしく、すぐにブッキングしてくれた。


 高橋名人さん・・・と呼ぶのも変なので高橋名人と呼ばせていただくが、高橋名人の話は最初は少しとっちらかり気味で、「ディープラーニングってアレでしょ。寝てる間に学習するやつでしょ」と思っていたらしい。たしかに90年代にそんなのあった気がする。


 でも段々と本質の話に近づいていって、非常に面白かった。

 

 たとえば裏技の話。

 もともとは、ハドソンのロードランナーというゲームで、さんざんデバッグしたにも関わらず、ハシゴにとどまってあるポーズをすると敵がすり抜けてしまうというバグが発見されたのがきっかけだった。


 普通にプレイすれば、そもそも敵がやってくるのにのんきにポーズをとって休んだりはしないわけだ。だからハドソンのデバッガーたちも発見できなかったのだが、子どもたちはオトナの常識を遥かに超えた遊び方をする。


 全国の子供達から、たくさんのハガキ(そういう時代である)が寄せられて、100万本のカートリッジを回収・交換したら会社が潰れる・・・と、高橋名人は思ったそうだ。


 そこで「これはバグではなくて、裏ワザという名前をつけて公表してしまおう!」ということになった。これが「裏ワザ」誕生の瞬間である。


 おそらく人工知能は裏技を発見することはできるだろう。ただしそれを「面白い」と思ったりすることはできない。単に「バグ」であると検知するだけだ。


 いやむしろ問題にすら感じないかもしれない。人工知能は画面で起きていることを本質的に理解するわけではないからだ。


 仮に人工知能が裏技のようなバグを発見できたとしても、それを「これは面白いから裏技だ」と名付けることは遠い未来になってもできそうにない。そこまでしてくれる人工知能はフィクションの中にも登場しない。



 DeepMeijinは開発途中でルールが変わったりして学習を再度走らせることになったが、学習の進みが信じられないほど遅い。


 学習のプロセスは、挑戦者と暫定チャンピオンの自己対戦によって行われる。挑戦者が暫定チャンピオンに勝ち越した時に初めてチャンピオンが入れ替わる。


 これを繰り返すのだが、まるまる24時間、まったくチャンピオンが入れ替わらない時がある。

 進化の踊り場のようなところに出てしまうのだ。


https://i.gyazo.com/68922e018d1e708e6b0eccb8265b205a.png


 こうなると待つしかない。

 入れ替わりは、平均で2割以上勝ち越さないとおきないようになっている。


 本来は一ヶ月くらい学習させたいところだが、月末に再学習をかけたため、展示しているDeepMeijinはまだ数日しか学習してない。慣れた人間なら余裕で勝ち越せる程度の強さであるる。それでも、「え!?」と驚くような手で不可解な勝ち方をすることがある。


 こっちが2のスリーカードで待っていると、AIはエースのペアを崩してでもストレートかフラッシュを狙いに行く。


 人間だとどうしても手元に役ができてるときはそれを守ろうと考えてしまうが、AIはそこに対する執着がない。


 また、こちらが弱い手、たとえば2のワンペアくらいだと、AIは3のワンペアくらいで安心して思考を止めてしまう。


 「勝てない」と思わせないと本気を出さないため、たとえばAIが思考する時に相手よりも1000ポイント勝ち越さないと勝ったとは言えない、というようなバイアスを加えて判断させるとより強い手を出したりする。このあたりは試行錯誤を繰り返さないと見つけられないところだ。


 高橋名人の話でもうひとつ興味深かったのは、「シューティングゲームで高得点を出そうと思ったら、敵が出る前に位置を覚えて撃つのが最も効率的」だということ。だけどそれをやっちゃうと、宣伝マンとしての仕事にならない。敵を十分見せた上で撃たないと面白さが伝わらないから、どうしてもゲームのハイスコアを狙うというやり方と、遊び方を見せるというやり方は異なってくるのだという話。


 ゲーマーにはeスポーツのような、ハイスコアを目指す方向性と、宣伝マン、いまでいうYoutuberのような、ゲームの面白さを伝えるという方向性の2つがあり、自分はどちらかというと後者だという話だった。


 AIに決定的に欠けていて、いまのところ目処がたたないのは「これって面白い」と感じる心であると思う。「敵が現れてぐるっと一周動くのは面白いから見せたい」という気持ちに自発的にさせるのはかなり骨だ。


 ということは、AIにとって、eスポーツもYoutuber的な方向性もとりあえずは興味はないということだろう。AIによるゲームプレイで最も期待されるのはデバッグだが、高橋名人はデバッグの会社を経営しているので「あと20年くらいはデバッグの仕事が残ってないと困る」のだという。


 この話に関しては残念ながらそんなには残らないんじゃないかと思う。

 既にいくつか試みはある。


デバッグやテストをAIで自動化―HEROZが2億円を調達してハーツユナイテッドと提携 | TechCrunch Japan

[CEDEC 2017]ゲームの品質管理はAIに任せる時代!? スクウェア・エニックスが活用法を語る - 4Gamer.net

 

 ただ、AIは人間のデバッガのように「ここは面白い」とか「ここは退屈」とか「ここはわかりにくい」と指摘することはできないので、AIと人間のハイブリッドなデバッグ会社が誕生していく流れは不可避だろう。日本でだけ守っても、海外でAIのデバッグと併用する会社が現れたら太刀打ちできない。


 僕は人間はあらゆる事象を「ゲーム」として捉えているとかんがえている。自分がゲーム屋だったからそう思うのかもしれないが、「ゲーム」とは、「ルールと、それを守らせる力」によって成立するのだとすれば、まさしく世の中のほとんどの意思決定が「ゲーム」であると考えられる。


 その意思決定の一部から半分程度をAIに委任できるようになると、これは人間というのは非常に豊かな生活を送ることができるようになる。日々の悩みから開放され、自分らしく生きる方法を模索する必要すらなくなるだろう。


 「昼ごはん何食べよう」「なんでもいい」「だけどカロリーが、いや、ダイエットが」みたいなくだらないことで悩まなくてもよくなったら幸せだと僕は思う。もちろん悩む楽しみもあるが、敢えて悩みたいときというのはほとんどない。


 その昔、学生の頃、何を食べるか悩む時間がもったいなくて、自動的に夕飯を提案するプログラムを書いたことがある。自分がよく食べるものを入力しておいて、ランダムに選んでくれる「だけ」のものだ。


 そんなものでも役に立ったし、AIが絡んでくれればもっとマシになるだろう。

 同じ服を何着も持つことによって下らない意思決定の回数を減らすというのと同じ程度に、食事の選択を減らすことができれば、これはこれで革命的なライフスタイルの変化であると思う。


 こういうコンセプトに昔ぼくは「ライフナビゲーション」と名付けた。

 カーナビは目的地を示せば道順を示してくれるが、道順に従わなくても黙ってリルートしてくれる。


 ライフナビも目的(痩せたい、健康になりたい、ストレスを開放したい)を指定しておけばそれに最適な食事なりデートコースなりを提案してくれて、従うか従わないかの自由は人間に委ねられている。考えたくなければライフナビの提案に従えばいいし、ライフナビの提案を見て別のことを思いついたならそっちに切り替えてもいい。


 「昨日はカレーだったから、今日は火鍋はどうでしょう」と提案されて、「それでいいや」と思うか思わないかの違いでしかない。


 昨日の夕方とか、展示会でへとへとになって夕飯をどうするかかんがえた時、本当に考えるのが面倒くさくて面倒くさくて仕方なかった。


 「新規開拓するか」と思い立つも、万が一ハズレをひいて嫌な気分になったら嫌だし、結果的におっさんはいつも行く店に自然と行くしかないのである。でも本当はまだ見ぬ素敵な店や料理との出会いがあるかもしれないのに。


 AIがあればそれはきっと解決する。

 個性的だが美味しい料理を出す店と、個性的な人間の幸せなマッチングができるようになる可能性は低くない。


 そしてAIにとってユーザーが次に食べるものを提案するというのは単なるゲームに過ぎない。こういうゲームを攻略してくれるAIは大歓迎だと思うのだ。