Googleの囲碁AI「Alpha Go」がイ・セドル九段を4勝1敗で破ったことで俄然注目を集めている人工知能。
4月9日、その人工知能と学習手法であるディープラーニング(深層学習)を使った、国内でも極めて珍しい人工知能ハッカソンが開催された。 主催はドワンゴ人工知能研究所だ。
イベントタイトルが人工知能ではなく「超人工生命」なのは、今回のハッカソンに、ドワンゴAI研究所で産まれた自立学習型人工生命体「LIS」(リズ)を取り入れ、その調教手法を競うハッカソンであるためだ。
説明によれば、「LIS」は、Convolutional Neural Network(CNN/AlexNet)と、Q-Network(DQN)を組み合わせたもの(とエラそうに書きつつも、僕自身概念的なことしかわかってないのですが)。ユニークなのは、Unityと接続されていることだ。Unityでつくった仮想空間のカメラ映像を、学習済みCNNで特徴抽出をして、DQNで学習していくAIということになる。
具体的には、任意の仮想空間上に「報酬(リワード)」と「ペナルティ」の概念を持つブロックを配置して、LISを放つ。LISは制限のなかでできるだけペナルティ取得を最小化して、報酬取得を最大化する方法を学習する特性を持っているので、うまく学習させるとある事象に対して意志を持つかのように自立的に行動する人工生命のようなものがつくれるというわけだ。
とはいうものの、参加者全員がLISに使われている深層学習のフレームワーク「Chainer」を書けるわけでもない。そもそもChainerでの記述は複雑だ。参加の敷居を下げる意味で、初心者向けの深層学習言語「Deel」を用意。Chainerを1バイトも知らなくても参加できるようにした。
冒頭に登壇したドワンゴ会長室第3課 課長の清水亮氏によれば、育てる方法は大きく分けて3種類という。
(1)Unity上で教育方法を調整してLISを調教する(初心者およびUnityプログラマー向け)
(2)LISのパラメータ調整を容易にするべく開発したDeel言語をちょこちょことイジる(初心者向け)
(3)裏側で走っているディープラーニングのフレームワーク「Chainer」でゴリゴリとコードを書く
冒頭のアンケートでは、ディープラーニングの経験者はそこそこいたものの、Chainerを触ったことがある人は数名。ということで、ほとんどの参加者が(1)と(2)で参加だった。
ここまで見てもわかるように、「どうやって望む行動を学習させるか」にはいろいろなやり方がある。ただし、"人工生命が効率よく報酬を得るアルゴリズム"は考える必要がない。
知らない人からすると「え?」かもしれないが、最も効率の良い動き方(効率良く報酬ブロックを食べる方法)は、"プログラム自身が試行錯誤しながら、勝手に発見していく"のだ。
ハックは前説が終わった午前11時ごろからスタート。ディープラーニングはその名のとおり「学習」させなければいけないわけだが、学習にはマシンの計算力、そして何より時間がかかる。そこで今回のルールは、ハッカソンならではの新しい学習法やプログラミング手法を「実装」するまでを評価基準として、その可能性を競うルールになっていた。最終的な評価は、会場参加者からの得票数で決定する。
果たして、たった数時間で超人工生命は生まれるのだろうか?途中から協賛社でもあるユニティテクノロジーズ日本法人の大前広樹氏も現われ、LISのUnity実装部分の高速化を自らかって出るなど、開発環境自体の裏ハッカソン(?)と並行しながらイベントは進んでいった。
あ…ありのまま今起こったことを話すぜ「4時間半後、超人工生命がいくつも誕生していた……」
ハックの成果発表開始は15時30分から。つまり、実質的な開発時間は4時間半しかなく、LISの学習時間は開発が早いチームでも2時間程度。
この短時間ではなかなか厳しいのでは……と思いつつ結果発表を見てみると、それぞれアイデアを凝らした生命体が16チーム(!)で生まれていた。
最終的に4チームが受賞になったが、受賞チーム以外のほとんどが動くところまでの実装はできていた。
横スクロールアクションをこなす人工生命!? :チーム10(最優秀賞)
横スクロールのアクションゲームのようなマップをつくり、報酬ブロックを設置。当初は「前だけに進む」ような学習ができなかったため、人工生命の背後から「触ると即死するブロック」が迫ってくるように設計。
すると、わずか1〜2時間程度の学習で、即死ブロックから逃げながらジャンプしつつマップの穴を避けて、報酬を取るという動きをするようになった。
驚くのは、光源設定の関係で"即死ブロックの影が迫ってくると逃げ始める"ような動きをしていること。もちろん、「影=即死が近い」とは、人間は教えていないわけで……。人工生命がディープラーニングの強化学習によって「即死ブロックに触れる前に影が見える=逃げなきゃ」と判断しているようだ。なんとも愛らしい。
後ろを頻繁に振り向く動きや、影が迫ると怯えて逃げるような動きは、まさしく意志を持った生命体のように見えてくる(考えようによっては残酷なのですが)。
たった2時間程度、おそらく1〜2万エポック程度の学習でこれだから、数十万エポックの学習をしたらどのくらい賢くなるのかとても興味深い。
会場参加者から、圧倒的な40票を獲得して最優秀作品に選ばれた。
人工生命はPONGの夢をみるか? :チーム5(第2位)
Atariの名作ゲーム「PONG」をLISを使ってプレイできるか?に挑戦。パドルに玉をあてると報酬を+1、敵に入ると報酬が+5。自分に点が入ると報酬が−1というように動機付け。
俯瞰視点ではなく一人称視点というのがポイントで、短い学習時間なのに、見た所、それっぽく動いているのが凄い。
現実世界の変化を仮想世界のAIにインプットしてみた:チーム4(第3位)
他のチームとはまったく違うアプローチで、IoT的に照度センサーを仕込んだ自作デバイスを使って、「超人工生命を現実の問題に対処させる」ことを狙った。開発時間が短時間だったため学習の方法までは進めなかったものの、リアル世界の光の変化を感知して仮想世界にエサ(報酬)を出し、それを柴犬のキャラクター(LIS)が食べに来るというところまでは実装。
センサーを経由して、現実世界の変化を仮想世界に取り込むことができるわけで、最終的には人の行動に伴う最適な選択肢のリコメンドなどにも応用できるかもしれない。
自作2Dゲームの攻略を人工生命に力技で学習させてみた:チーム9(第4位)
Unityの仮想空間で学習させるということは、Unityで書いたたゲームならなんでも学習に使えるのでは?という発想で、自身がリリースしているUnityゲームをLISに移植してみたという作品。
2Dゲームをどう移植するのかと思っていたら、仮想空間に"ゲーム画面そのものテクスチャとして貼り付けて学習させる"という、力技移植(!)。しかも、この力技でも、見た所はなんとなく学習が動いてる風なのだ。マジで!?
荒削りこの上ない状態ではあるし、ちゃんとした学習をさせていくにはいくつもの困難もありそうだが、ゲーム攻略のAI学習という意味で可能性を感じさせる。会場でも大胆な実装が大いにウケていた。
そのほかにも、高低差のある複雑なマップを学習させようと試みたり、別々のバーチャルマシンで個別に動作するLIS同士を通信させて複数のエージェントを仮想空間の中で協調させようという試み(ちゃんと通信して動くところまで実装できていた)など、短時間でも超人工生命で遊ぶための、ぶっ飛んだアイデアが次々に湧き出すことが確認できたハッカソンだった。
超人工生命ハッカソンは今後も「超人工生命もくもく会」として定期的に黙々と開発するイベントを実施していくとのこと。
なお、ハッカソンの最後には、協賛社でもあるユニティテクノロジーズの大前広樹氏がハッカソン中に取り組んだ"LISのUnity実装部分の最適化"も完成していて、学習速度が数倍高速化するという進化も遂げた。
超人工生命ハッカソン最優秀のチーム10の研究成果は、ニコニコ超会議2016の「超自由研究」で発表される予定だ。
超人工生命とはいかなるものか?ニコ超に行く機会がある人は、人工生命の健気さをぜひ目撃してみて!