長久さんや三宅さんがやっている「ゲームAI連続セミナー」 の第5回に行ってみました。
今回のテーマは、進化です。
今回も三宅さんの講演とグループワークの2部構成です。
フロムさん初潜入でした。1階の広めの会議室で80人ぐらい参加していました(その先もスペースがありそうだったが?)。
基本的にセミナー中にメモったものを起こし直したので、 聞き漏らしたり、勘違いしているところがあると思います。すいません。
概要紹介
遺伝的アルゴリズム
そんなに数式はむずかしくないよ
ニューラルネットワーク
セミナーを受講するときの姿勢
メモ取れ
その場で理解しなくても、後でググッたりWikipediaで調べればよい
□セミナーの紹介
グループワークはうまくいきにくいので個人ベースに変更
□今回のセミナーについて
てーま:生物学の法則をゲームに持ち込む
生殖遺伝
遺伝的アルゴリズム
学習原理
ニューラルネット
生物の進化
遺伝的アルゴリズム×ニューラルネット
人間は、学習、行動、環境からのフィードバックで発展する
人工知能の流派
シンボリズム
シンボルによる知識表現によって人工知能を組み立てる方法
今までのゲーム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を如何にして作るか考えて幸せになりたいですね。