Rの利点

近ごろよくR言語を用いることが多いので、利点を挙げてみる。

 

  • ベクトル指向プログラミングとも呼ばれるように、繰り返しの記述が簡潔。

  • グラフィックライブラリのggplot2の図表化ツールとしての完成度はピカイチ。
    reshape2やplyr, dplyrと合わせるとSQLのように正規化もできるため、「このデータのあれとあれとあれをこことここに表示」という、指を何箇所にも指してはじめて一つに定まるような指示が統一的に記述できる。

  • GNUが実装しているため、マルチプラットフォームも保証されている。しかもUNIXツールと違ってWindows上での安定性が高いのもいい。

  • 関数の引数を表示して確認したり、関数名をp = pasteのようにつづめたりすることが容易。特に後者は関数内の記述をとても簡潔にする。

  • runif, rnorm, qnormなど名前付けの規則性が高い。

  • ほぼ全ての関数にドキュメントが存在する。ドキュメントがなくても、ソースコード自体をインタプリタ上で表示させることが可能。

  • R-bloggerでは毎回なかなか先駆的なことをやっている。

 

 

スクウェア・エニックス AIアカデミー第5回(最終回)「キャラクターの学習」感想

第5回の要約:

  第5回ではゲームAIでは滅多に見られない学習について取り上げた。

 

 実際の商業ゲームでは、ゲームデザインや計算量の制約からゲームAIを成長させることは難しい。さらにゲームの環境がこれまでハリボテだったことも問題になっている。厳密なゲーム空間が定義されないと、ゲームの中で学習をさせることは難しい。

 

 また現状の「キャラクターの学習」は、大学で研究される学習アルゴリズムとは違い、単純なルールや知識といった記憶の蓄積で既に必要十分であるケースも少なくない。

 

 このように「キャラクターの学習」は、大学で一般に言う学習すなわち機械学習とはかなり違った方向で検討されている。ただし、機械学習を用いて商用ゲームを作った実例も、国内外で複数存在する。

 

f:id:caprice_j:20140925015035j:plain

 

第1回の感想はこちら

第2回の感想はこちら

 

第4回の感想を書いていないが、とりあえず第5回の感想を書くことにする。

 

 「キャラクターの学習」というタイトルは一見するとシンプルだが、まさに今回の講義の内容を言い表していたように思う。

 

 すなわち、キャラクターの学習は機械学習とはほとんど重ならない。
 情報系学科で「学習」と言った場合にふつう指す機械学習とは大きく異なる。
 この点は今回の大きな発見だった。

 

 やはり、そこそこ負けてくれる敵を倒す悦楽を生み出す手段の提供に、まだ機械学習がそれほど貢献できていないという感じを受ける。将棋でも「強いAI」の次は接待将棋(相手が気分を害さない程度にうまく負けてくれるAI)が求められるのではという話があるが、まだ数年先の話である。

 

 最終的に「プレイヤーが気持ちよくなるように負けてくれるAI」が誕生しそうなのは分かる。10年後くらいだろうか。

 それまではキャラクターの学習は機械学習とはかなり違う方向へ、具体的には何を記憶させるかどう実装するかといったゲームAI固有の知見形成に向かうだろう。これらの話は大学では新規性がないものとして扱われない。だが、AIが人間らしく振舞う前段階として、いろいろ実験ができる分野だと感じた。

 

 翻って、アストロノーカの独自性が際立つ。

 

 アストロノーカは、98年にエニックスから発売されたプレステの育成シミュレーションゲームである。

 農夫である主人公が野菜を育てているのだが、栽培の途中で害獣が野菜を襲いにくる。この害獣を追い払うために主人公は各種のトラップを仕掛ける。しかし、害獣は世代を経るごとに以前のトラップのパターンを学習して、上手いこと野菜を狙いにくる。この主人公と害獣との攻防を、「トラップバトル」と呼ぶらしい。

 

 作者の論文によれば、この学習の方法として遺伝的アルゴリズムが利用されている。特に、プレイヤに楽しんでもらうための工夫が興味深い。

 

  1. ゲーム中では害獣は3体しか現れないが、プレステのバックグラウンドでは20体がトラップバトルを行って学習を進めている。
  2. ゲーム中では1日で害獣が1世代交代すると説明されるが、実際には5世代の交代を行っている。
  3. この5という数字は、学習速度を監視しながら適宜調整する。
  4. 突然変異は、害獣が昔身に着けたトラップ耐性を急に失くすことがないよう、いくつか制約を設けている。

 

 この学習速度を制限すると言った話や、突然変異を制限すると言った話は、とにかく最速で何でもありで生物の学習との整合とか全く気にしないでガンガン行く機械学習の思想とはだいぶ違う。突然変異を制限するのは例があるだろうが、学習速度を制限するという話にはまずならない。これは、学習途上の害獣の動きを見るのもあんがい楽しいという、ゲームならではの要素が影響している。

 

 その後にはテクノロジー推進部の新入社員の方から研修で作ったというシューティングゲーム内でのパス探索の応用の話と、ドリアンクール・レミ氏からゲーム製作の展望についての講義があった。どちらも面白かったが、疲れているのでここで第五回の感想は終える。

 

 

 これで全5回のスクウェア・エニックスAIアカデミーが終了したので、以下に総感を述べたいと思う。

 

 大学とは違うAIの姿を見れた、という点で非常によい経験だったと思う。大学のAIというとロボットを動かしたりSVMで倒産分析したりと現実現実し過ぎている上に、どこか速足で通り過ぎてしまうきらいがある。

 僕はオンラインゲームは(小学生のときに500時間ほどを費やしたので)大嫌いだが、文化人類学をやっている友人(FF14内でもプレイヤの行動調査などをしていた)からすると、MMOの世界観の作られ方は非常に凝っているそうだ。氷山や砂漠などと言った多様な地形、そこに暮らす民族の特徴付け、服や階級といった文化、神話や信仰対象などの設定、交易や戦争などのイベント。

 

 どれを取ってみても、世界の側面を象徴している。

 

 人間の想像力は、そんなに遠い距離を飛べない。ゲームの中に出てくるということは、誰かが現実で見たものを、少しずつ少しずつ想像力で遠くのものにしていったはずだ。旅行が必ずしも現地の実情を教えてくれない一方で、ゲームは必ずしも虚構でできてはいない。むしろ僕は、現実を忘れる娯楽でありながら、現実の見えにくい側面を無意識に学ばせてくれる存在として、ゲームに期待を寄せている。

 

 その中で、ゲームの裏で活躍するAIの仕組みを想像しながら、何がその事象を成り立たせているのか考えることは、微分方程式でボールの動きを理解するような種類の知恵を僕らに渡してくれるのではないかと思っている。既にいくつかそのためのネタは存在するのだが、実装する時間が足りない。老後の楽しみにでも取っておく。

 

 貴重な機会を用意してくれた関係者各位の方々に感謝したい。

 

サンプルプログラムを実際に自分で書くことを写経と呼ぶのは根本的にミスリーディングである

  • 写経の経験がないために「写経は基本的に前から線形的に筆もしくは修正可能な筆記具で書いていくもの」と仮定する。以下でこの仮定と矛盾する点を挙げる。
  • 変数宣言は「変数を使ったあと」に、数行戻って書き込むことが多い(C++など)。このようなことは写経では行わない。
  • 関数宣言も同様。
  • 写経と違い、プログラムには「現在書いたコード部品で実行可能か」や「数行のテストコードを挿入して実行して動きを確かめる」など実行に関わる手順が挟まれる。このようなことは写経では行わない。
  • 写経は終了後、文章の間に新しい経典の文句を追加することは行われない。ましてや経典の文字や数字を数文字だけ変更して何が変わるかを確認することなど恐らくご法度だろうと思われる。プログラムではそのようなことは日常茶飯事である。
  • スコープについての考え方も違う。写経にはクロージャの考え方がない。

 

類推による問題解決は、問題にいくつか共通点があって、片方に用いられる解決法がもう片方にも同じように適用できるときに効果を発揮する。その点から考えると写経というソリューションはほとんどプログラムにおける問題を解決しない。

一般的に勉強と呼ばれるものを、知識決定は包含する

三宅さんの話を聞いてから、勉強と知識決定の違いについて考えていた。

 

自分は昔から、大量の情報をバーッと見せられると慌ててしまって何も覚えられない、ということがよくある。それは特に大学で頻発して、とても1学期では読みきれない莫大なテキストを使うようになってから、問題として克服できていないままだったように思う。

何度も苦労しているのに、問題として克服できていないままだったように思う。

 

勉強、と聞くと自分はどうしても、文章や単語など、一般に「知識」と呼ばれるものを暗記することを思い浮かべてしまう。

 

10ページなり20ページなりの教材が手渡される。それは既知の知識未知の知識で構成されていて、既知の知識が使えるかを確認しながら未知の知識を取り込んでいく…そういうプロセスだったように思う。

 

これは人工知能の枠組みからすると、目的が固定化している。

 

AIの枠組みでは後続する意思決定や行動決定に結びつかないものは知識ではない、という明確な線引がされている。

 

単に実装上そうならざるを得ないだけだ、という意見もあるだろう。ほんとうは実装時に予想していないもの(実装時に「知識」として認識していないもの)も知識として取り込めたほうが、例外により柔軟に対処できるようになる。

 

それは分かる。

だがそれは一般的な「目的」を遂行するための勉強ではなく、試験勉強ではないだろうか?

 

カロリング朝を覚えたとして、試験では「カロリング朝の成立年は」「後続する王朝は」と例外がバンバン出る。このときは何となく取り込んでいた知識が役立つだろう。

でもこのような知識の取り込み方は試験以外に役に立つだろうか?

 

一般的に歴史の目的は「現状に似た過去事象からよりよい認識(知識決定)や行動決定を学ぶ」で間違いないと思う。そうであればカロリング朝について学ぶべきは「この王朝の盛衰は××王朝と似ている」「この王朝の▲▲王の手法は●●において有意義である」「この王朝は〜〜の貿易に目をつけた」「この理念はもっと洗練できる」といった、将来予測や組織編成、商業戦略や理念形成ではないだろうか?

 

ここの方向性について、高校までの教育はかなりミスリードであったように思う、とかいう批判はまあ横に置いておいて、このような

 

意思決定・行動決定のための知識決定 (目的ドリブン型の学習)

 

は、一般的に勉強と呼ばれるもの(例外対策を目的とした)より、もっと広いものなのだろう。

 

先行論文を読む時には「何がこの論文の背景か」「手法の新規性は何か」「自分で作る(書く)としたらどこを改良するか」の同定を目的とする。

家族と話すときには「何が相手を行動させる決め手となったか」「どこまで裁量があるか」の同定を目的とする。

 

知識決定と呼ばれるものは、かなり実生活に有用な考え方だと思う。

それに気づいたのもまた、目的が「実学を学ぶ」となったからか。

 

 

 

 

 

スクウェア・エニックス AIアカデミー第2回「キャラクターの持つ知能」感想

 

第一回の感想はこちら

 

第2回の要約:

 第2回ではキャラクターAIの基礎となる、意思決定について取り上げた。

 

 生物は生きるために未来の色んなところを創っていかなければならない。高等な生物になるほど目的ポリシーなどを創ることが必要になる。そうでなければ単なる反射に過ぎない。


 1980年代から発展したエージェント・アーキテクチャからすると、この意思決定の流れは大きく分けて2つある。1つは単なる外部刺激に対する反応(=reactiveな意思決定)の流れ、そしてもう1つは記憶を再解釈するなど外部刺激を必要としない思考(=非reactiveな意思決定)の流れである。後者は見逃されることが多いが、実はほとんどの意思決定のプロセスは高等な生物であればあるほど思考など頭の中だけで回っている。心の中の整理状態を更新することも一つの立派な意思決定である。

 

 また、生物は意思決定の結果も外部刺激として入手する。意思決定が世界に与えた結果は解釈され、また次の意思決定の材料として使われる。その点で意思決定は、世界の記述のされ方と不可分である。


 このような、入ってきた情報が変換されて別の情報として生まれ、またそれが入ってきて変換されて、といった循環をインフォメーションフロー(情報回廊)と呼ぶ。この回廊のパターンは無限に思えるほど存在しているため、例えばゴミと電源のことだけ考える掃除ロボット、作業のことだけ考える工場ロボットなどのようにいくつかの回廊だけが実装されている(フレーム問題の解決)。

 

 では意思決定の実装はゲームAIに限ればどうなっているか?構成最小単位で分けると主に7つの構成法があるが、特にステートベースAIビヘイビアベースAIを取り上げる(両方ともリアクティブな意思決定である)。


 ステートベースAIは制約のないグラフ構造であり、00年代前半まではゲーム開発の主流だった。しかしステートを追加したときの変更とデバッグが困難だった。


 04年にデバッグ容易なビヘイビアベースAIが提唱されてからはそちらが主流となっている。ステートベースAIにいくつかの制約を追加したビヘイビアベースAIは、AIの表現力と可読性を両立させた。

 

 ゲーム開発においてAIの問題は、大学の研究のように問題を確実に・より正確に解くAIを作ることが目的ではなく、いかに多人数によるゲーム製作というワークフローの中にAI作りを無理なく取り込むか、が最重要課題である。ビヘイビアベースAIはステートベースAIの弱点を補う形で現状のゲーム開発のワークフローに取り込まれている。

 

 人工知能の観点で考えれば、知能を持つ生物の主観的世界が現在ゲーム業界のキャラクターAIでは、それら7つの方法で工学的に構成されているということになる。

 

 


 

 

第二回目全体について

第2回目は、第1回目に説明した3つのAIのうちの1つ、キャラクターAIに関する講義とワークショップが行われた。前回とは異なる机の配置とワークショップ用マシンが用意されており、1時間強の講義、15分の休憩(質疑応答)、1時間半程度のワークショップという流れで進められた。

 

講義について 

 抽象的で分かりにくいかもしれませんが、という枕詞が何度も入ったが、聞き方としてはそんな気はしなかった。例も豊富だった上、小さいAIを実装した経験が役に立った。話を聞きながら「ああ、あのコード部分ってそういう意味を持っていたのか」と、暗黙知から形式知に整理できた。あとは個人的に意思決定というテーマを考える機会がよくあったからかもしれない(人工知能ではないが)。

 

 ただ「創造による解決」だけは何を指しているのかが理解できなかった。(開発者に)予期されていなかった入力を取り込んで、予期されていなかった計算をして、予期されていなかった(優れた)出力をする、という状況を指すのだろうか?

類義語としては「洞察」「発見」あたりだろうか。

 

 第一回目よりも資料の権利関係に気を遣っている様子だった(同日にSNKプレイモアとの訴訟問題が出たことも影響してるのだろうと勝手な邪推)。ゲーム画面で載せれれば理解しやすいのだろうがまあ仕方ない。それよりもスクウェア自体の過去作品で使われていたであろうAIが全く例に出てこないのが気になる。FF12ガンビットとかドラクエガンガンいこうぜみたいなのはルールベースAIの典型例だと思うが一切触れられなかった。三宅氏がFFの初期から関わっている人物ではないから、ということも関係しているだろうが、他に何か理由があるのだろうか。例として出てくるのは普段縁のないHaloとかFPSみたいなのが多い。

 

 

ワークショップ( Luminous Studio によるAI作成体験 ) について 

 ワークショップでは今回は、スクウェア内製のAI Graph Editorなるソフトを触ることができた。これはどうやらスクウェアゲームエンジンLuminous StudioのGUIフロントエンドの一つのようだった。

 操作は非常に直感的で、10分程度の説明を経たらもうAIの基礎が組めるほどだ。全体のカラースキームなども美しく、単なる社内用ソフトに留まらない価値を感じた。

 

 AI Graph Editorでは、ステートベースAIやビヘイビアベースAIの記法である有限状態オートマトンやビヘイビアツリーが作成できる。別の参加者の話ではビヘイビアツリーはUnityなどにもプラグインとして存在するようだが、調べてみたところGUIのデザインやパーツの用語名などはけっこう違っていた。

 

 いちばん驚いたのは、ビヘイビアツリーの作成過程でSequence制御子(後続するノードを上から順に実行する)に後続する2つのノードの画面上での位置を入れ替えると、それだけで実行順序が変わるというところだった。何の事はない、恐らくy座標を比較しているだけなのだろうが、しかし状態機械を考えている際に「ルートが最左にある配置において、上下に意味をもたせる」という発想は僕にはなかった。自分がたまに研究で用いている(全く別の分野での)グラフGUIエディタは、並列で配置されたノードについて実行順序は全く保証されていない。

 

これはコードの次元で考えている人間の発想ではない。

不特定多数が関わるゲーム開発の現場で考えている人間の発想である。

 

こういう細部にも使いやすさの差が出るのかと一人感心していた。

 

 

 何度も繰り返すが非常に直感的な操作だった。僕は有限オートマトン - Wikipedia みたいな5つ組として授業で習い、NFAからDFAの変換アルゴリズムなどの抽象さに超苦労していたため、これは数学に魂を売った人間しか扱えないものだと思い込んでいた。ビヘイビアAIのように特殊な制限のついた木で、適切な図示のもとで考えると一般人に扱える程度までAI構築は簡単になる、というのは眼から鱗だった。

 

 ゲームとは、状態マシンの化け物である。一方でバイトのマニュアルに載っているようなフローチャート(お客様が入ってきたら「いらっしゃいませ」)を理解できない人はまずいない。あのレベル近辺にまで落とし込んでいた。ここまでツールとしての難易度が落ちれば、本来の仕事に集中できるだろう。

 

 ちなみにうちの研究室の内製ソフトはデザインなどほぼ気にされていないし、裏ワザみたいな操作が多くて泣ける。

 

 

 

AIアカデミー第2回に関するレポートは以上です。

 

なお次回の第三回目には僕は私用で参加できないため、

どなたかレポを書いて頂けると嬉しいです。

 

 

 

以下は個人的な整理です。

 

 

 

講義内容から外れた考察(読書について)

 

 三宅さんの意思決定の講義を聞きながら僕がふと考えたのは、読書のことだった。

 

 

 読書は効用関数の最大化問題とみなせるという仮説を立てた。

 

 

 僕は幼い頃から、読書というものが死ぬほど苦手だった。どうしても最後まで読めない。1章や2章集中して読んだり、音読すること自体に苦手はないのだが、通して読むということができない。

 

 次にルールが分からない。何をしたら「◯◯読んだよ」と言えるのか、その一種の勝利宣言をするための勝利条件が何なのか分からない。頁の最初から最後までめくったら勝ちというなら、本屋でパラパラ捲るのも読書になるだろうし、一字一句読まなきゃ駄目というなら、僕は今までの生涯で十数冊程度しか読んだことがないことになる。

 

 そして、読書が成功(人工知能的に言えば、目的の達成)について致命的に大事であることも分かっている。死ぬほど読み込んだ例としての一つは高校数学Aの教科書だろう。中間試験で42/100というクラス平均点を遥かに下回る点を取ったため、ページ数すら音読する勢いで丁寧に読むことを続けたら、最終的に数学は何とかなった。 あのときは、事前の努力が足りなかった訳ではなく、読み方を間違えていた。(具体的に言えば、例題を読み飛ばしていた。高校数学の教科書において例題を読み飛ばすのは自殺行為である。なぜなら、定義から自分が読み取れた以上のことがそこで起きており、それを知らないと定義の必要な意味が読めていないからである。)

 

読書について最高の解など見つかるはずがない。

 

ただ何か指標を定めて、
その読後の効果について最大化を図ることはできるはずだ、
と講義を聞きながら考えていた。
本も世界の一部に過ぎないのだから。

 

仮に読書を「どれくらい満足したか(楽しかったか、役に立ったか、時間が潰せたか)」を表す数値を返す効用関数について、それを最大にするような将棋風に言えば「次の1手」を探す問題だと捉えてみる。

すると次の1手とは、以下のどれかだ(ここでは小説は除くとする)。

 

  1. 読む( 理解したかをチェックする?それとも単に流し読みする? )
  2. 読み飛ばす( どこまで? )
  3. 目次に戻る( 何のために? )
  4. メモを取る( 紙に?エバーノートに? , 目的は感想?引用?図示整理? )
  5. 付箋を貼る・ページの角を折る( 何のために? )
  6. 感想を書く( ブクログ?読書メータ?アマゾン?日記? )
  7. 友人と感想を交換する( 誰と? )
  8. 人に贈るとしたら誰がいいかを考える
  9. 別の本(辞書含む)を持ち出して記述を比較する
  10. 読み直す( 何行前から? , 何を理解するために? , どの段階で読み直すのを諦める? )
  11. 図表の参照先に飛ぶ( その図を手元ですぐ参照できるように別に表示させる? )
  12. 思考する( どの記述について?あるいは読んできた部分の全体について? )
  13. 推測する( 本全体を?章全体を? )
  14. その他

 

上記のように、読書における「1手」(合法手)は限りなく多い。
加えて時間制限(締切や飽きるまでの平均時間)も大抵は厳しい。
制限時間内に最大化を図ることが難しい、ものすごく難しいゲームだと思う。

 

 だから、たいていの人(僕含む)は、形式化を意識しなくても読めるような本、「かんたんな本」を読む。 著名学者の間で取り交わされた手紙、前提知識が必要な数学書とかは「ボスキャラ」に当たる。 僕はボスキャラを倒せるほど強くない。 今はこの問題を手で解く練習をしている段階である。

 

 それと大事なのは、書かれていることに対して必ずしもそれを実行する必要がないということだ(フレーム問題の解決)。 「図3から分かるのは」と書いてあっても、もし自分の効用関数が告げるなら図3なんて見なくて良いし、自社製品の宣伝が書かれていたらネットで★1の下馬評を探す、なんて風にしてもいい。大学生になるまで、こういう切り捨てができなかった。この考え方はUtility-based Agentsの設計思想に似ていると思う。効用関数さえ定まっていれば、世界を全て探索する必要はないのだ。

 

この問題は、読書法を再考する上で非常に重要となる。

僕の仮説としては、実は1.読む ではなく9.別の本(辞書含む)を持ち出して記述を比較する が自分の効用関数にとっては最適なのではないかと考えている。自分は辞書の記述を比較するのが好きであり、どちらかと言えば一冊読み通すよりそちらのほうが楽に満足感が得られる。

 

 現代は多様化した。ビジネスマンが新幹線の移動中に1時間で読んでホームのゴミ箱に捨てる本と、2000年前から読み継がれてきた本では読書が違う。読書と呼ばれる行為体系が、もう少しその内実の面から用語の再整理が行われてもいいのではないだろうか。読書を意思決定の問題として捉えることは、その一助になる気がした。

 

プログラム学習中ににっちもさっちも行かなくなることをhelplessnessと名付けよう

プログラミングをしているとにっちもさっちも行かなくなるということがたまにある。具体的には以下の場合である。

  • 予想していたのと違う場所のデータが変更されている!
    (実際は、値渡しと参照渡しを理解していない)
  • バグの場所が分からない
    (実際は、狭める方法である二分探索やデバッガを知らない)
  • 複雑すぎて扱えない
    (実際には、オブジェクト指向や構造化プログラミングなどを知らず今の目的上無視できるものは何かを認識していない)
  • 以前に上手くいっていたことが、エラーが出てできない
    (実際には、パスや経路表など何かが変更されている)
  • どうすれば精度が上がるのか/事項が理解できるのかが分からない
    (たとえば「割り込み」や「関数定義」、倍精度、ビットシフト演算について、しっくりこない)

 

僕はこのような状態を「手を尽くしたあとの膠着状態」と呼んでいたが、helplessness(どうすることもできないこと、無力)という単語が一番しっくりくる気がした。

この概念は注目に値すると僕は考える。というのはこの概念は、googleで検索することで解決されない問題について扱っているからだ。

 

解決に結びつく情報を得られるという意味で適切な検索クエリを思いつけない場合、

  • 情報を知っていそうな人に聞く(Stack OverflowやGithub Issue)
  • 情報を得られそうな試行をする

の2つの試みがあると思う。前者をやるだけの勇気がない若しくはそこまで明確に問題を把握できていない、把握できない(たとえばMakefile上の問題などは聞くことが非常に困難)場合、helplessnessに陥っていると言えるだろう。

 

「どう考えても自分としては解決に結びつくとは思っていなかったが、やってみたらふと問題の所在が明らかになってhelplessnessという平衡状態から事態が動いた」という状況を何度も経験したことがある(もちろん解決する割合としては試行全数に対して数%に過ぎない)。

 

そう考えると、この解決する割合を向上させるためには、helplessnessという状態の特徴についてより良く理解すべきではないかと思うのだ。

この概念についてはとりあえず今日は名前を付けるだけにして、今後ゆっくりと考えていくことにする。

スクウェア・エニックス AIアカデミー第1回「ゲームAI入門」感想

 本日7月23日に株式会社スクウェア・エニックス本社で行われた「スクウェア・エニックス AIアカデミー」の初回次に参加してきた。

 

 内容は、まずゲームにおけるAIについて1時間の講義を受けたのち、実際にスクエニ製のオリジナル・ボードゲームを使ってAIになってみるというものだった。ボードゲームによるワークショップはおよそ2時間をかけて行われた。合計3時間のイベントであった。

 

 

今回の講義の概要 (僕の解釈であり、必ずしも講義中に出た語を用いていない):

 

 ゲームAIは時代を経る中で大きくキャラクターAI、メタAI、ナビゲーションAIの3つに整理された。

 

 キャラクターAIは環境情報*1などから判断してユーザーの目の前で自律的に行動するもの、メタAIは全知の視点からゲーム性を調節するもの(難易度や戦術、敵の生成速度や配置)、ナビゲーションAIは環境情報を利用してキャラクターAIにとって有益な情報(最短路、安全路)を提供するものである。

 

 3つのAIはプレイヤーには見えないが裏で支える舞台装置のようなものだと解釈できる。たとえば敵が用いる戦術を司るメタAIを変えるだけで全く違った舞台になる。

 

 かつてはScripted AIという「ゲームデザイナーが操る糸」のみで制御されていた単純な世界は、これらの役割分化した自律的AI (Autonomous AI)が行動の最終決定権(意思決定権)を持つようになったことでゲームとしての豊かさを増し、デジタルゲームの目的である「多様なユーザー体験(User Experience)を作ること―――集めたい、壊したい、解きたい、切り抜けたいと言ったユーザーの感情に一層適切に的確に応えることを可能にした。

 

 

 

 

 まず講義について。僕は大学で1コマだけ人工知能の授業を受けたことがあり(dfsやbfs、8クイーンの実装、遺伝的アルゴリズムなどの説明)、ゲームの文脈でどうやってAIが語られるのか興味があった。

 

 大学の講義で僕がAIについて辿り付いた結論は「知能とは計算であり、およそ知的と呼ばれる作業の多くは関数の最大化問題に帰着できる」というものだった。ひとことで言ってしまえば、予想以上にいろいろな問題がAIで解決できるよ、というものだった。人工知能について学んだ人の多くがたどり着く結論だと思う。

 

 だが、講義で自分の想像が追い付いていないと感じていた。「およそ知的と呼ばれる作業」の中でどんな作業が他には含まれているのかが将棋やオセロのような二人零和有限確定完全情報ゲームの枠を超えなかった。

 

 今回のスクエニの講義では、その想像を超えたところで働いてるAIの姿を見ることができて良かった。特に

環境情報を埋め込んで、実際にユーザーが見ているものとは違う世界をAIに与えることで彼らの活動が容易になる

という話は非常に興味深かった。

 

 将棋やオセロでは環境情報として別個に考える必要がないくらい世界が狭いので、いったい何を環境として伝えるべきか判断する必要がなかった*2

 

 「ゲームデザイナーの操る糸」という表現が耳に残っている。糸というのはつまりは外部動力(外力)の比喩であり、Autonomous AIというのは動力が知識と行動リストという形で以ってAIの中に入ったということを表すのだ、と理解した。

 

 

 そして何より今回はワークショップがすごかった。スクエニの本気を見た。

僕は普段ボードゲームは全くしない(=楽しさをほとんど感じない)のだが、普通に楽しんでしまい、2時間があっという間に過ぎた。

 

 ワークショップでは、スクエニお手製と思われるボードゲームを4人で対戦した。1人がプレイヤ(キャラクターAI)、2人がエネミー(キャラクターAI)、1人がメタAIかつナビゲーションAIを担当し、迷路の中でゲームを進めていく。僕はプレイヤとして参加した。

 

 一度キャラクターAIとして世界を見てみると

こんなに何も見えないのか

 と驚くものがあった。

 

 僕は結局2体のエネミーに囲まれてゲームオーバーになったわけだが、ゲーム終了後に振り返りとして彼ら(2人組)が持っていた情報を見させてもらうとものすごい少なくて、エネミー自体もこれだけ暗くて頼りない情報の下で意思決定をして、しかも目的を遂行できたのかと驚いた*3。これは非常に面白い示唆だった。

 

 プレイしている中で、自分の予測が結構楽観的だなというのも分かった。今回のゲームは移動した瞬間に初めてそのマス目がどのマス目へ繋がっているのか判明するというルールだったのだが、隠されているマス目を開示する前は常に自分にとって一番都合のいい経路を想定していた。結果、都合の悪いつながり(例えば行き止まり)が出てくると次の手を探しあぐねるということが多かった。言ってみれば僕のプレイ中の思考傾向はデキの悪いNPCのようだった。例えば一番都合の悪い経路を先に想定するようにしたらゲームの見え方や、自分が選ぶ行動がどう変わったのか、時間があれば試して検討したかった。

 

 それと、別の卓でプレイしていたとあるエネミー氏は、ルールを見てすぐに最適戦略を見つけたということでプレイヤを瞬殺していたらしい。解散後に操作主にどういう戦略を取ったのかを教えて頂いたが、自分でうんうん頭を捻りながら見ていた同じルールに対してこれだけ全く違った戦略がありえるのかということで驚いた。

 

 もう少しこの点について考えてみると、確かに「エネミーはコスト1のみで6マス分の経路情報が手に入る」というのは相対的に有利すぎた。目的地であるG点まで確実にたどり着ける情報でなくても、自分にとって未踏のマス目について入口と出口が6つ分コスト2で分かるのは、

「1マス先(たとえばA5)から2マス先(たとえばB5)に行けるのか?」

「行けたとして、それは直線(=1ターンで行ける)か?それともコの字型の迂回(=最低2ターンかかる)か?」

でプレイヤーの生死が変動しうるあのゲームにおいては破壊的に有利だった。

 そして、このゲームはプロトコル(モンスターの間での情報のやりとり)がノーコストというのも大きかった。片方がマッパーとしてダンジョンの構造を把握する中で、もう一体に対してお前はあっちへ行けと指示を出す、という方法を取れば指令系統が情報強者から弱者へと統一される。

 プレイヤーはエネミーの位置を知っているので、全く動かない1体が何か悪さをしているなと感知はできても、その目的がマッパー自身がプレイヤーに奇襲をかけるベストポイントを探していることだとは気付きにくい。(見た目には、うろちょろしているもう一体の方が怖くて仕方がないので。)

 

 AIをボードゲームで学ぶこのようなワークショップを開くのは大学では無理だ。だからこそ価値がある体験だった。「どれくらいAIがお互いのことを知らないのか」(不完全情報ゲーム)を体験できる点で、優れたイベントだったと思う。

本を読んだり自分で実装していたのでは、なかなかそのことを知るのは難しい。

ワークショップの格好の題材だったのではないか。

 

*1:グラフとして整形された、AIに持たせる知識。講義中ではナビゲーションメッシュと呼ばれていた

*2:ただ今思うと、ビットボードで局面を表すのは、AIに渡す環境情報を選ぶという話かもしれない。

*3:この驚きは、自分が慣れ親しんだことのない不完全情報(プレイヤーはエネミーがどの点を目指して動いているのか知ることができない)というゲームの性質に起因していた。完全情報のゲーム(オセロ、将棋、囲碁)ばかり実装していたので、「一寸先が闇」ということがどれほどAIにとって怖いか、ということを考えたことがなかった。