🗺️

結局マルチモーダルAIって何?[未来編(世界モデルへ)]

に公開

はじめに

この記事は以下の記事の続編です。今回もかなり重い内容になりそうですが、一気に書いてしまいます。
https://zenn.dev/dxclab/articles/048cbfe84150d2

SIMA2

つい先日Googleから新たなエージェントSIMA2が発表されました。
https://youtu.be/Zphax4f6Rls
これまでのAIエージェントと大きく異なるのが、これまでのAIエージェントは外部Toolを使用することで検索をしたりメールを作成したりしていましたが、SIMA2はゲームという仮想的な世界の中で、プロンプトを通して人から受けた指示を実行できるようになりました。

つまり検索やメールの作成などを通してインターネット上で行動していたAIが、現実世界を模した仮想世界の中で行動が出来るようになったといえます。

Genie3

SIMA2を作成にあたって大きく貢献したと考えられるのがGenie3です。Genie3は動画を生成するモデルなのですが、従来の動画生成モデルと大きく異なる点として人間取ったアクションに応じて風景が変わるところです。
https://youtu.be/PDKhUknuQDg
https://youtu.be/7f3hMyQ4HoE?si=QDY5Ca9xQq8K2Lxa
このモデルの設計の中心にあるとされるのが今回お話しする世界モデルです。

世界モデルとは

「常識」がわからないAI

昨今、YoutubeなどでAIによる生成画像を見かけますが、一時期話題になったこの動画を知っていますか?
https://youtu.be/XQr4Xklqzw8?si=QVo9iwOl3KrYIfuG
俳優のウィル・スミスさんがスパゲッティを食べる様子を生成した動画ですが、このようにこれまでのAIは世界の常識(人は口からご飯を食べるなど)・物理法則などについて理解できていませんでした。

未来を予測しつつ「常識」を養う

世界モデルを説明する際によく使われるのが野球の例えです。

野球選手は時速160kmで飛んでくるボールを打ち返すときにボールの場所をピンポイントで見て打ち返しているでしょうか?おそらく、ある程度ボールの軌道を読んでバットを出していると思います(ソフトバンクホークスの柳田選手はボールが来てから打ってると言っていますが、、)。
これをAIにも転用し、以下のような設計思想が出来上がります。

AIの頭の中にその世界を模した小さなシミュレーターを作り次の状態を予測することでAIが世界の現象を理解し、現実世界で学習させないことで計算コストも大きく下がるであろう

まとめるとこのようになります。

LLMを含むこれまでのAI : 言語体系という「世界」だけを学習していた
世界モデルを含むAI : 我々が生きている「世界」そのものを学習する

世界モデルの構造

世界モデルは2018年に出版された論文「World Model」の中で提唱されました。
構造は以下の通りです。ここで言うWorld ModelはVAEのV(Vision)モデルとMDN-RNNのM(Memory)モデルの二つを組み合わせた内部構造です。ここで重要なのはVモデルとMモデルは別々に学習されている点とCモデルは外界からの情報を直接見ていない点です。

世界モデルの学習フェーズ

任意の時刻tでの潜在変数をZ_t、アクションをa_t、隠れ状態をh_tとします。
この時、以下のステップでモデルが学習されます。

  1. ランダムな方策(policy)で任意の試行(rollout)のデータを収集します。
  2. 任意の試行tにおける画像を入力として同じ画像を復元するようにVAE(Vモデル)を学習させる(ここで欲しいのは復元された画像よりも潜在変数Z_t)
  3. 任意の時刻tにおけるa_th_tZ_tを入力として一時刻先の潜在変数(Z_{t+1})を予測するようにRNNを学習させる
  4. 学習させたVモデルとMモデルが任意の時刻に出力するZ_th_tを基に最適なアクションa_tをするようにエージェント(Controller)を学習させる

このように、VモデルとMモデルを含む内部モデル(次の状態を予測するモデル)を学習させたものを使って、小さなControllerモデル(エージェント)を学習させます。

野球選手で例えるなら、バッティングセンターで10000回ボールの起動を見るのが1~3に該当し、実際に打てるように試行錯誤するのが4にあたります。これによって試合本番ではほとんど何も考えることなくボールを打ち返すことが出来ます。

具体的な損失関数や、モデルのパラメータは原論文や、以下を参考にしてください。
https://qiita.com/pocokhc/items/912667ef2bbd3f82aa87

潜在変数とは

さて、先ほどの説明で出てきた潜在変数ですが、それって何?ってなる方のために少し説明します。

VAE(変分オートエンコーダー)の設計思想

VAEの詳しい説明は本記事の趣旨から逸脱するので控えますが、基本的な設計思想は
入力データの背後にある確率分布を学習し、そこから新しいデータを生成できるようにする
ということです。

よく使われる例えが、顔画像生成器の例えです。

仮に、ボタンを押すだけで顔画像を生成できる機械があったとして、我々はそれを認知することが出来ない。どのようにしてそれ知るかというと、色々な顔写真を入力としてその機械の構造(確率分布)を推定します。推定した機械の構造(確率分布)から正しいボタンを押す(サンプリングしてDecode)すると入力の画像が復元されるように学習させれば、その機械の構造(確率分布)が分かったことになります。
この時に、サンプリングされた変数を潜在変数といいます。

より詳しくはこの記事が参考になります。
https://qiita.com/gensal/items/613d04b5ff50b6413aa0

2018年当時より発展した世界モデル

2018年に発表された当時より、VisionモデルもMemoryモデルも大きく進歩しました。
VisionモデルはGAN、拡散モデルなどのより高性能なモデルが登場しましたし、MemoryモデルはTransformerが登場しました。Genie3の具体的なモデルは公開されていませんが、拡散モデルやTransformerが使用されていると予想されています。

拡散モデルで画像生成

拡散モデルはライブラリが用意されていて、簡単に画像生成を実装することが出来ます。
Pythonで画像を生成してみます。

from diffusers import DiffusionPipeline

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipeline = DiffusionPipeline.from_pretrained(model_id, use_safetensors=True)
prompt = "portrait photo of a old warrior chief"
pipeline = pipeline.to("cuda")
image = pipeline(prompt).images[0]
image

これを実行すると以下の画像が生成されました。

こんなにも簡単に画像の生成が出来ます。(GeminiやGPTが普及しているので今更驚かないかもしれませんが、、)

さいごに

前回に引き続き、非常に重い内容でした。
世界モデルは仮想環境の中では人間と対話しながら行動を取ることが可能になってきました。
もしかすると、現実の世界で人間と対話しながら行動を取るのが可能になるのも目前に迫っているのかもしれません。
これからの世界モデルの発展に注目していこうと思います。

DXC Lab

Discussion