NEROにおける学習と進化


〜 「ゲームAI連続セミナー第5回」レポート 〜






■はじめに

長久さん三宅さんがやっている「ゲームAI連続セミナー」 の第5回に行ってみました。 今回のテーマは、進化です。
今回も三宅さんの講演とグループワークの2部構成です。

フロムさん初潜入でした。1階の広めの会議室で80人ぐらい参加していました(その先もスペースがありそうだったが?)。

基本的にセミナー中にメモったものを起こし直したので、 聞き漏らしたり、勘違いしているところがあると思います。すいません。


■最初(長久さん)

概要紹介
 遺伝的アルゴリズム
  そんなに数式はむずかしくないよ
 ニューラルネットワーク

セミナーを受講するときの姿勢
 メモ取れ
 その場で理解しなくても、後でググッたりWikipediaで調べればよい


■NEROにおける学習と進化(三宅)

□セミナーの紹介
グループワークはうまくいきにくいので個人ベースに変更

□今回のセミナーについて
てーま:生物学の法則をゲームに持ち込む
 生殖遺伝
  遺伝的アルゴリズム
 学習原理
  ニューラルネット
 生物の進化
  遺伝的アルゴリズム×ニューラルネット

人間は、学習、行動、環境からのフィードバックで発展する
人工知能の流派
 シンボリズム
  シンボルによる知識表現によって人工知能を組み立てる方法
  今までのゲームAIセミナーでやってきたこと
  C4アーキテクチャ
 コネクショニズム
  結合回路によって人口知識を組み立てる
  回路が動的に変化することで成長をする
  ニューラルネットワーク
集団を進化させる方法が遺伝的アルゴリズム

□C4アーキテクチャ
デジタル世界で生きる生物の知性のために提案されたアーキテクチャ
 外界からデータを読み込んで(認識して)、ワーキングメモリに書き込む。
 そこから、アクションを選択して、掲示板に書き込んで、それを見て動く

以下のことが可能
 記憶によって、「予測」が可能になる。
 予測が失敗したら、「驚き」を起こすことができる。
 学習
 固体差の表現

認識ツリー
  NPCを組むときは、まず記憶を溜め込む。それによって賢くなれる
 人間が間違えそうなところで間違えることができる。
 精緻化によって賢くできる。
  条件判定のロジックやパラメータをより詳細にしていく。
 生物ごとに必要な認識が違う
  ツリーを部分的に選択することで個性が出せる。

行動
 アクションタプルで記録
  トリガー条件、行動、オブジェクト情報、
 強化学習:だんだんと1つの行動を起こすようにする
  もっとも高い評価値を実行
  プレイヤーが報酬を与えられる。
  評価がよければ、原因となったトリガーの評価値が高くなるようにする

どう情報を抜き出すかを考えれば賢いAIができる。

□遺伝的アルゴリズム
ある集団がいて、「遺伝子」を入れ替えながら世代交代を行う。
だんだんとミッションをクリアしていくようになる。
 シミュレーションして、結果を評価していいものほど多く残すように遺伝させる
  評価値から適応度を計算する(上の方が差が少ないとかある)
   色々なテクニックがある(順位スケーリング、シグマスケーリング、ボルツマンスケーリング)
 突然変異もさせる
  適当にビット反転とか

アストロノーカ
 裏で20体の試行を行っている
 1日で5世代分の進化
  適応度がなるべく一定になるように調整している

□Q&A
Q.組み込んだけど、自由度が高すぎてどうすれば良いかわからなくなった。
A.各ステップごとにノウハウが存在する
 多点交差は、性質が保存されにくいとか
 なるべく余裕があるときに実験すること
  マスターアップ直前に組み込むのは駄目
 グラフで可視化しておくと、パラメータの関係がわかる
 理屈は読んでも「う〜ん」となる。

□ニューラルネットワーク
PONGのAIにニューラルネットを使った例
 ボールのX,Y、前の位置からネットワークの強さを切り替えて進化
ニューロンを数学的モデルとして実現
 回路(人口ニューロン)をいっぱい作って階層化
 誤差伝播法という難しい方法があるが、ゲームではあまり使われてない。
  お勧めでもない(労力の割りに…初期値による不安点とかある)

□NEAT(Neuron Evolution of Augmenting Technologies)
ニューラルネットワークを定義して、遺伝的アルゴリズムで、進化を決定。
 動的につながりを変更
 繋がっている情報を遺伝子に組み込む
 シンプルで有効
ゲームデザインが要

□まとめ
遺伝的アルゴリズム、ニューラルネットは文献が多くて勉強しやすい
ゲームへの実例は少ない
原理を理解してデザインを生み出すことがこれから大事では。

まずは、技術を使ったもので遊びましょう
 動作させては結果を見て、実験して遊ぶ
 デモは簡単なものなので、それを見て使えないと判断しては駄目。

□Q&A
Q.ニューロンの数はどうやって決定?
A.重みの数が自由度になる。入力に対する応答の豊かさも影響する
 でも、実験するしかない。


■グループワーク

各自、宿題をやってきて、それを講演を元に修正して、 みんなに評価してもらう。
以降は自分のネタ。

□宿題:自分で進化するものを考えてみよう。

題目:ユーザークリエイションアルゴリズム(アルゴリズム2.0)

一般的に、ユーザーにアルゴリズムを考えてもらって
その評価として遺伝的アルゴリズムを使う。

たとえば、セカンドライフのようなものに虫を作りましょう。
誰が一番。繁殖できるでしょうか?
(サーバーの負荷とかも考慮できると良いですね)

したがって、テストファーストな手法。

動的言語が必要もしくは、関数テーブルの嵐になりそう

□解決の方向性を見つける:講演を踏まえて、どのように実現する?

各虫のインスタンスをエージェント化(遺伝+ニューラル)

ルールをどう与える?
入力と出力を与えられる。
 こうなったときに、こうなるように振舞うようがんばれ。
  入力、出力は簡単なものを組み合わせる
  入力
   人が見えたとき
   障害物が見えたときに…
  出力
   首を振る。
   前、斜めに動く。
   〜の後に〜をする。

 暗黙の制限(サーバーの負荷を上げるものは悪いアルゴリズムなど)による適応度の上位的な変更はある。

 矛盾のルールもOK

□グループで発表して、意見をもらう

増えるのは?
 それによって、得点が割れていくのは面白いかもしれない。

食物連鎖は?
 複雑になり過ぎそう


■グループワークの結果を何人か紹介

□デバッグに使う
 パラメータ調整が失敗したかを確認
 レベルデザイナの考えで設定したパラメータが、もともとの目的に合致しているか?
 例:機動力が高いキャラを作ろうとして足を速くしたら、うまく曲がれなくて反応が鈍いキャラに仕上がってしまったのをAIによってチェック

□カードゲーム
 思考ルーチン、デッキは用意されたとする(追加はOK)。
 AIがデッキを作る。
 遺伝的アルゴリズムで対戦させて良いデッキを作る。
 新しいカードが配信したときに、それを組み込んだデッキを勝手に作る。
 プレイスタイルに流行があるので、それにも対応できる。


■次回

12/15:プロジェクターが使える懇親会を考えている
自動生成の話
AoE3


■さいごに

遺伝的アルゴリズムは、組んだことないですが、森川さんの本は持ってたりするので、
結構、知っていた内容でした。

グループワークでも話が出ていたのですが、強くするAIを遺伝的アルゴリズムで作ってもしょうがないので、 たのしませるAIを如何にして作るか考えて幸せになりたいですね。





もどる

imagire@gmail.com