Reinforcement Learning for Real-Time Vision-Language-Action Policiesを読んだメモ

 低速VLA + 高速Edit方策の構成で、かつオンライン強化学習でFine-Tuningする手法が、一連の論文(EXPO, EXPO-FT, そしてこれ)でだいぶ良い形になっているように見えました。

手法

 そもそもVLAは推論に時間がかかるので、行動チャンキングは当然やるとしても長いチャンクを実行していると状況の変化に対応しにくいという問題がありました。なのでEXPOの頃から、高速なEdit方策として、VLAが出した行動チャンクを現在の観測を取り入れながら少しだけ修正していく小さいネットワークを学習するというモチベーションで一連の研究がなされていました。

 Real-Time EXPO-FTでは、実機での遅延分まで考慮して強化学習を行う形になり、実機動作としてはかなり正当な手法になったのではないかと感じます。

 まぁ細かい手法の内容はPDFをChatAIに投げつけて各自読んでいただくのが良いとして、所感みたいなものを残せたらと思います。

所感

 全体としてかなり自分のやりたかったことの一つがやられているという印象で、低速方策と高速方策の枠組み、およびそれを強化学習していく大枠の設計としてはこれを真似すればだいたい上手くいくのではないかと感じます。

 良さそうに思った点を列挙すると

  • SAC的な学習なので一応毎ステップ/毎エピソードの学習予算もコントロールしやすい(とはいえ実行中では学習せずにエピソード終わりにだけで学習トリガーがある)
  • SAC的な学習なのでデモンストレーションや介入データなども自然に混ぜられる
  • VLA部分も学習されている(成功したエピソードでの行動を模倣学習する。Editが入っているので改善になっている)
  • Training-Time RTC も入っている
  • 複数サンプリングした元の行動系列とEditされた行動系列のうち、実際に行うものとして良いものを行動価値で決定する仕組みもある
  • 報酬も変なshapingをしていない
  • コードも公開されている

などになります。

 強いて言えば実験結果がものすごく強い感じではなさそうには見えますが、実機での学習ができていることを考えると優れていると思われます。

 utd_ratio=20というのが結構大きめには見えるでしょうか。サンプル効率のためにはこれが重要なのかもしれません。ただし、前述した通り学習タイミングはエピソード終わりだけのようなので、償却すると大雑把には1ステップに1回分のパラメータ更新にはなりそうです。


 こうなると「認知的にはVLAで解けているが動作が難しい」タスクは結構これでいいのではという気分になってきます。とはいえ、これは事前にVLAとしてある程度良い方策があるのが前提となるため、自分のドメインで行動空間が全然違うとなると大変な部分はあるかもしれません。結局ヒューマノイドが大流行すれば行動空間の違いなんて存在しなくなって、すべて人間体の全身制御という話に集約されるのかもしれませんが。

 最近自分が取り組んでいるAnimal-AIだと、行動空間は前後移動と左右振り向きくらいなので難しくはなく、どちらかといえば認知的な難易度が高いものとなるのかもしれません。Qwen3.8-27BでもReasoning時点で完璧なテキストが出ているかというと怪しいため、そこのVLM部分自体をFine-Tuningして性能を上げるという、とても難しいことをやっていかないといけないのかもしれません。当初の想定ではVLM部分は固定までありえると思っていたのですが……困ったものです。

【断想】連続的意思決定タスクでのVLMとハーネス

 VLMを画像入力の連続的意思決定問題に使っていると、履歴が長くなったときに重くなることが気になります。とはいえ履歴が短いと状況理解の深さに限界があるように感じます。重みが更新されているならともかく、パラメータを凍結してVLMを利用しているだけでは、Animal-AIというおそらく学習データにほとんどなかったであろう世界に対して、理解が深まることなくその場で毎回初見のものとして推論していることになります。

 別の言い方をすれば、ワーキングメモリを超えている記憶、1時間〜1日くらいの長さの記憶に興味があります。Animal-AIでいうと、少なくとも複数のエピソードをまたいだ記憶ということになると思います。常識や意味記憶のような長い記憶であればネットワークのパラメータに埋め込まれると考えて良いとは感じ、また逆にエピソード内部で完結するような数秒程度の短い記憶であればVLMのコンテキストウィンドウに含めることができそうです。その中間くらいの記憶がVLMを各自の環境で使う上では大事になってきて、かつそこから長期記憶への転写という仕組みまでできれば継続的な学習になるのかもしれません。

 この意味での記憶とは内部状態の一種であると思います。以前やっていたストリーミング強化学習で毎ステップ重み更新というのは、ネットワーク全体のパラメータを状態とみなしたいという気持ちの現れでもありました。Fast Weight型のTest-Time Trainingがネットワーク全体に広がったというイメージです。しかし、それはやはり現実的には簡単に上手くいくものではなさそうでした。

 最近のLLMのエージェント的活用を見るには、このあたりの状態はハーネス的なもので管理されていることが多いと思われます。Geminiなどがポケモンをプレイするというのでもそれなりにいろいろなハーネスは使用されており、汎用的に画像環境に適用でき、かつ10Hz程度のリアルタイム動作も維持できるようなものができれば、実践的には十分なのかもしれません。

 ハーネスの作り込みというのはアドホックな対処には見え、データや計算資源を潤沢に用意できるなら余計な仕組みは入れたくないのが自然なのですが、現実的にはそうもいかないのではないかと思い始めています。

 VLMの低速方策と、そのサブ目標を受けて動く高速方策という分離は一定重要だと思います。そして低速方策は低速方策の方でハーネス気味のパラメータ更新は伴わない知識の更新のようなことをやり、高速方策は高速方策の方で従来的強化学習で器用さを向上させていく、みたいな構図を現状では考えています。

AnimalAI(その6)Stage01,02におけるQwen系のゼロショット動作

 前回はAnimal-AIのStage02について簡単なプロンプトで成功率を調査していました。今回はそこからプロンプトや実行方法の工夫を加えて、モデルサイズも広げて調査しました。

やったこと

 モデルのデフォルトのReasoningはオンにするととても長い思考が始まってしまうのでオフにし、代わりに1,2文程度の簡単な状況説明テキストを出力させます。その後、行動をAnimal-AIの9つの離散値で出力させます。形式は前回と同様です。

 前回からの変更点として

  • 前回: 8回に1回VLMで行動を出力させ、8回は選ばれた行動を繰り返す
  • 今回: 8回に1回VLMで行動を出力さて、1~8回から一様ランダムに選んだ回数繰り返し、残りはなにもしない行動とする

としました。これは、左右の振り向きについてランダム性を導入することで「右に振り向く」「左に振り向く」という行動を続けたときに、完全に同じ状態に戻ってまた振り向きループが始まることを防ぐ意図があります。実際、多少は有効に作用していたと思われます。

 重みは差し替えて複数のものを試しますが、どれもプロンプトや動作方法を完全に揃えたので、純粋にモデル性能の比較になっています。

結果

 一番右のQwen3.7-flashはOpenRouter経由のAPIで動かしています。価格はかなり安いので気軽に試行ができたのが良い点でした。結果としてゼロショットで65%ものタスクが解けています。

 右から2番目はQwen3.8-27Bであり、4ビット量子化まですればGPUメモリ使用量25GBくらいで動作が可能であり、5090一枚でも現実的な時間で動きました。

prompt 生成 prefill decode 合計
1813 tok 30 tok 605ms 32ms/tok 1.55s

 結果としても、APIで使うようなモデルに近いレベルまで性能が達しており、これがローカルで動くというのはかなり衝撃が大きいです。

 右から3番目はQwen3.5-9Bであり、かなりガクッと正答率が落ちます。

 右から4番目のQwen3.5-0.8Bは、そもそも行動の出力フォーマットを守れずパース失敗で行動できないことが多く、やはり相当厳しいかなと感じるところです。

 モデルの大きさでハッキリと性能差が出るレベルまで確認できたので、やはり大きなモデルをどう使っていくかという方向になるのではないかと思いました。最も素朴な方針としては、たとえば方策オフ学習をする最初のタイミングでバッファを貯めるための挙動方策として使うなど。LoRAを使ったとして、VLM自体の学習をすることはサイズの観点から難しいかもしれませんが、事前方策としての利用はまだ可能性がありそうに感じられるところです。

 なんとか利用方法を考えていると差分方策的な考え方に吸い込まれてしまいそうで、しかし以前軽く調べた限りでは、あまり良い方法にも思えなかった気がするので、どうするかは悩ましいところです。

AnimalAI(その5)Stage02におけるQwen系のゼロショット動作

 Qwen系の認知能力を調査するために、主に左右の2ルートから適切な方を選択する必要があるStage02においてゼロショット(学習なし)での正答率などを比較しました。

 もともとAnimal-AIは、前後移動(前進・ニュートラル・後退)と左右向き変更(右に向く・ニュートラル・左に向く)の3x3=9通りの離散行動として定義されているので、そのうちの1つをテキストで出力させることで行動決定とします。適切なフォーマットでテキスト出力できていなかった場合、ニュートラルでの出力にします。

実験設定

環境

 Animal-AIの競技用アリーナのうち、Stage02からバリアント01系のもの30個(02-01-01 〜 02-30-01)を1回ずつ使用します。観測画像は256x256サイズとします。

 30個の中でも前半20個(02-01-01 〜 02-20-01)は、正面を見て左右のどちらかにのみ緑の玉が置かれていたり、左右で緑の玉のサイズが違ったりして、どちらか適切な方を選ぶ必要があるタスクになっています。

行動の出力形式

 行動は<move>, <rotation>という語句の対で書かせます。moveはstand still / walk forward / walk backward、rotationはno turn / turn right / turn leftの3通りずつです。

 コードのパースは移動と向きについて順序非依存にしてあります。つまりstand still, turn leftとturn left, stand stillは同じ行動として受け付けますが、turn left, no turnのように両方がrotationである場合は不正としています。不正だった場合は何も実行せず、その区間は静止します。

プロンプト

 システムプロンプトは、環境の説明と行動語彙、そのアリーナのタスク文、出力形式の指示から構成されます。

You control the agent in Animal-AI (first-person view). Find and reach the
green or yellow goal sphere; avoid red zones. Action space: one move and one
rotation, applied on the same tick, written as `<move>, <rotation>`. ...
Face what you are heading for before you close on it: while it sits off to one
side of the view, turn on the spot towards it, and walk forward once it is
centered. You see only what is in front of you while the arena extends all
around you, so what you are looking for is out of view more often than not,
and turning on the spot is how it is found.
What this arena asks of you follows as `Task:`. Task: <アリーナごとの指示>
Reply with exactly two sections and no other text. First, in AT MOST two short
sentences inside <think>...</think>, say what in the current image decides your
next action ... Then output the action inside <answer>...</answer>, which must
contain ONLY the action -- no commentary, no labels.

 毎ステップの入力として、画像に加えて速度・報酬・累積報酬・pass mark・体力・ステップ数を数値で与えています。過去16ターン分の会話(画像と数値、それに対する自分の応答)を履歴として保持します。

推論の頻度

 VLMは16ステップに1回だけ生成し、その間は同じ行動を保持します。エピソード長は最大250ステップなので、1エピソードあたり最大16回の行動決定となります。

モデルと生成条件

項目 設定値
ローカル Qwen3.5-2B / 4B / 9B
API Qwen3.7-flash(OpenRouter経由)
生成長 max_new_tokens: 128、</answer>で打ち切り
温度 0.5
thinkingモード 無効(プロンプト側で<think>を書かせているため、モデル自身の思考は使わない)

結果

 ローカルで動かせるものとしてQwen3.5の2B, 4B, 9Bのサイズを使用し、OpenRouter経由でQwen3.7-flashを使用しました。

図の見方

 各図は30個のアリーナを1パネルずつ並べたもので、床を真上から見た平面にエージェントの軌跡を描いています。線の色は経過ステップで、薄い青が開始、濃い青が終了です。エピソード長が13〜750ステップと幅があるため、色はエピソードごとに正規化しています。

 背景はアリーナの実際の配置で、エピソードが読み込んだyamlから緑球・黄球・赤球・壁・ランプなどを描いています。パネル下の数字は、エピソード長・移動した総距離・開始から終了までの移動距離です。

Qwen3.7-flash

 こちらでは30通り中14シナリオが解けており、失敗したものも最初に向かう方向としては正しく、16ステップ刻みであるため制御が難しかったと推察されます。

 前半20個が左右から適切なものを選ぶタスクであり、そこから左右の移動方向の正しさだけでカウントすると19/20では最初に良い方向を選べていると判断できます。

Qwen3.5-9B

 9Bでは成功数が3/30とかなり低くなりました。

 テキスト出力を見ていると、

The yellow goal sphere is still on the left, so I must keep turning left to
center it before moving forward. <answer>turn left, no turn</answer>

というように、最後行動としてturnの指示を2つ書いてしまい、不適切ということがたびたび出ています。

 左右の判断自体を細かく確認すると、19/20ではおおよそ正しい方向には進もうとはしていそうでした。フォーマットのエラーを修正すれば良くなるかもしれません。

Qwen3.5-4B

 4Bでは成功数が8/30となっており、失敗している中でも左右の移動判断は悪くなさそうです。最初に行けている方向の判断でカウントすると15/20では正しい方向に行けていて、残り5では左右どちらにも行けていないという状況になっています。このレベルの判断であればいったん4Bサイズでもできるかもしれません。

Qwen3.5-2B

 2Bではでは成功数が4/30となっており、左右最初に進む方向でも失敗があることが気にかかります。最初の20個でカウントすると、6/20程度であり、チャンスレートより低いところまでになっているかもしれません。

まとめ

 やはり基本的には大きいモデルの方が良い性能であることがこのドメインでも確認できそうでした。フォーマットエラーも出るところはあるので、プロンプトの修正や軽く強化学習を入れていくことは試してみたいところです。

JCSS2026参加記

 8/31(月)〜9/2(水)の日程で日本認知科学会第43回大会が行われていました。自分のポスター発表、聴講などの記録を残します。

自分のポスター発表

ストリーミング強化学習による VLA モデルの訓練

 私は修士の頃は、コンピュータ将棋への大会参加が多かった + M2の人工知能学会での発表はコロナによりリモート開催だったため、こういう学会へ現地参加してポスター発表するというのは初めてでした。2時間ほどの時間でしたが、それなりに多くの人に来ていただいて暇になるということはあまりなかったです。

 内容面では、やはりストリーミング強化学習の利点というものがあるとして、それをまだ考えきれていない、詰めきれていないというのは感じました。性能が良いわけではないし、速度面・メモリ面での軽量化も本当に必要に迫られている設定を作り出せているわけでもないため、普通にリプレイバッファ使えば良いだけになってしまっています。もっと巨大なVLMとかを使って、そもそもバッチサイズ16なんて無理だというくらいにしなければいけないのかもしれません。

 またCARLAでの実験もLIBEROでの実験も、まだ結果が弱いので、どうしても微妙な主張になってしまうという点は大きかったと感じます。VLA x RLの分野もプレイヤーは多いので、ここで明確に性能向上を出していかないといけないのは大変なのですが、それをやるための博士課程でもあります。

 そのためには、もっとVLMの言語生成によるChain of Thoughtを動作決定に活かしていく必要があると思っています。どうしても重いので毎ステップではなく非同期的に、かつできれば言語モデル部分も強化学習でFine-Tuningしながら……という方向性を考えたいところです。

オーガナイズドセッション

 各種の認知的振る舞いに関する議題が話されていました。私は人工知能側の研究者なので、これらの挙動をいかにして実装・実現することができるかという点に考えを巡らせながら聞いていました。

夜明け前の認知:違和感ともどかしさの探究 Part-2

 このセッションでは、ある程度の時間の長さにわたって違和感や疑義を抱いた状態から、最終的にひらめきや理解へ至るという心理的状態の変化について話されていました。

 ある瞬間では不確実性の多い内部状態が、なんらかの契機を伴って収束していくという過程として考えると、これを人工知能で表現するなら、やはり(信念)状態の確率分布を考える必要があるのではないかと思いました。そのやり方としては、正規分布などでパラメータを使って分布を表現するというよりも、パーティクルフィルタみたいなイメージが先に去来します。

 最近の言語モデルでも、Reasoningなしでは解けないような難しい問題に対して、かなり長大なChain of Thoughtをして最終的に回答を出すということは多く見られると思います。その過程は必ずしも直線的な思考だけではなく、様々な方針を考えて検証して、というステップが入っているでしょう。となると結局、特別な工夫がそれほどあるわけではない自己回帰出力の中で、ある程度不確実性の維持やその解消というものが行われているのかもしれません。

 我々が自分の内面を反省したり、他の人の創作過程のインタビューを見聞きした結果得られる洞察として、不確実性の維持や解消という過程があること自体は正しいのでしょうが、それをどこまで明示的な仕組みとして実装しにいくべきなのかは悩ましいところです。データが多ければ素朴なTransformerで多くの振る舞いが実現できるのかもしれませんが、一方で計算資源やデータ量の問題でそれをできない研究者としては、バイアスが乗ってしまうことを受け入れつつ、考えたダイナミクスを実装していくしかないような気もします。

内省の認知動力学:創造性/精神病理/プロジェクションの計算論的理解に向けて

 このセッションでは、内省という行為を"自己の認知を変容させる内的行動"として捉えつつ、広くは自由エネルギー原理とも関連するものとして、単一目的関数の最適化から様々な認知的振る舞いが説明可能なのではないかという考え方が話されていました。

 内省という行為を一種の行動としてちゃんと考えることは重要そうに感じます。そう定式化してしまえば、一応強化学習の枠組みには乗るので、良い内省を出力するように言語モデルをパラメータ更新していく余地自体は生まれると思われます。本当にそれで上手く学習できるかというと実践的には大変そうですが。

 Chain of Thoughtを内省と見なすこととすると、その効果がどこまで大きいのかが重要になってきます。To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoningという論文では、結局CoTが有用なのは主に数学・記号的推論の問題に限られるとも言われており、多方面での活用にはまだ課題もありそうです。一方、直観的にはなにか良い活用方法がなにかあるのではと思われます。

 そもそもロボットなどでのタスクではあまり長時間動作を止めて考え続けるのも微妙ではあるのですが、先に書いた非同期動作なども検討しつつ、CoT(あるいはより広く言語を使った認識の強化)の恩恵を探っていきたいところです。

ポスト学習時代の認知科学:汎化可能な学びの展開

 このセッションでは、深層学習によって一部の"学習"については性能が良いものが得られており、理解、洞察、創造性などの次のステップを考える講演が行われていました。

 今井むつみ先生の講演で特に強調されていましたが、一つの事例から過剰に一般化しようとするバイアスがまだ人工知能では弱いのではないかという意見には一定納得できるものがあります。結局、言語モデルの性能自体は高いかもしれませんが、学習する能力という意味では高いのかどうかよくわかりません。少なくともパラメータを凍結して運用している状態では、学習能力なんて一切ないとも言えます。

 過剰に目の前のルールを適用しようとする振る舞いとして考えると、In-Context学習は近いものがあるかもしれません。先に示したルールやテキストに強く束縛されて出力も決まっていくということです。ただこれも「全体」を考えて広く適用しているのではなく、単に即応的な振る舞いという印象も受けます。両者の区別は本当にできるものなのかは怪しいかもしれませんが。

 こうした振る舞いはかなり複雑に見えるので、素朴なレベルでパラメータ最適化を考えると、それほど複雑な振る舞いが創発することはないのでは、なにか特殊な仕組みが必要なのではと思ってしまうところもあります。一方で、超巨大なネットワークだとそういう素朴な直観というのは上手く当たらないのだろうなとも思われます。

 基本的には、やはり最も上手くいっているニューラルネットワークのことを参考にして、あまり特別な機構を手組みしていくのではなく、スケール性を阻害しないようにするという意識で取り組むのが大事なのかなとは感じました。

 JCSSとは関係ない動画ですが、【第102回】大学等におけるオンライン教育とデジタル変革に関するサイバーシンポジウムにおける「LLMは何をどのように記憶しているか」乾 健太郎では、LLMの内部状態(活性値)などの研究から、現段階では

と整理されており、こういうアプローチを進めていくのが重要なのかなと感じます。

総括

 ロボティクスと認知科学の交点の一つとして、CoT・あるいはテキスト生成を活かしたVLAというのは一つ重要なテーマになってくると思うので、そこでなんとか成果を出していきたいと感じました。

AnimalAIデータ調査

 900シナリオから最初のバリアントだけ(つまり300通り)を自分でプレイしたので、いくつか気になることをメモします。

前提

 今までTrainデータが別途分かれていていると思っていましたが、確認してみると結局同一のようでした。

 よって、この評価データと思っていたコンペティションのバリアント01系をプレイしました。

難易度所感

 基本的には全てギミックは一目でわかり、理解の問題で解けないというものはなさそうでした。加速度の制御的に操作性が難しいところはあるのと、微妙なミスで溶岩に触れて即終了とかは少しありましたが、認知的には解けてほしいところです。

 一方で、一番難しいタスクまでの難易度勾配が十分になだらかであるかというと確信は持ちきれないところもあるため、このタスクセットだけをやっていて、認知的な能力がゼロに近いところから育てられるかは怪しい気もします。

 特に物体の移動については

 300件のシナリオの簡単な説明はスプレッドシートに書きました: https://docs.google.com/spreadsheets/d/1Hvpjj3PL3SHCfVK6sEB1QW1EOYjAaCFXcXkYoUbcnCo/edit?usp=sharing

問題がありそうなもの

 いくつか問題がありそうなものは見つかったので記録します。使用バイナリはv4.3.2です。

(1) 02-27-01: バグっぽい挙動でなにもしなくてもクリアになる

 02-27-01は以下のようなシナリオです。

 青い線は段差になっており、反対側にはいけません。これは左下に初期化されるエージェントが、行けない反対側にある黄色い玉は無視し、右下の緑色の玉に向かうことを要求しているタスクです。

 問題であるのは、黄色い玉が横方向についてはランダムな配置になっているのですが、ランダム性によってはこの幅に5個の玉が置ききれない状況が発生し、その際はプログラムの様々な都合によりほぼバグ的な挙動でちょうどエージェントの真上に黄色い玉が生成されます。それが重力によって降ってきてエージェントが正の大きな報酬を獲得し、そこで即クリアとなってしまいます。

 対策として、ランダムではなく等間隔に配置するようにしました。

(2) 04-22-01/02/03: 足場が低すぎて溶岩を抜けられない

 このシナリオは以下のgif動画の通り、溶岩地帯を足場で回避することが想定されたものだと思われますが、足場が低すぎて乗っても溶岩により失敗判定となってしまいます。

 おそらくAnimal-AIのバージョン変更で、溶岩の最低高さなどが変更された影響だと思われます。

 対策として、足場をもう少し高くするようにしました。

(3) 08-29-*, 08-30-* において玉が溶岩地帯の中に留まってしまう

 このシナリオでは、報酬をもつ緑色の玉が転がっていき、先端の方で左右どちらかに跳ね返るのでそれを見て適切な方に降りていくことを求めているタスクです。

 しかし、柱との位置関係の影響で柱に引っかかって溶岩地帯から出ないため、玉に触ることが不可能になっています。

 対策として、もう少し柱を外側に配置することで、玉が止まる位置が溶岩地帯の外側になるようにしました。


 以上3点の修正を入れて、ほぼ300点(おそらくバリアントも含めて900シナリオ)がクリア可能になったと思われます。

 作業においていくらかClaude Codeを使った箇所もあり、Claudeがスクリーンショットを撮って状況を把握することなどはそこそこできていたように感じるため、最近のVLMであば一定状況の把握はできるのではないかという予感がします。

 実践的に自分のマシンで動かせるような小さいモデルでは性能が十分ではないかもしれませんし、このAnimal AI環境に慣れていくという面を強化学習で実現するのかハーネス的なものの方が効率良いのかなどはいろいろありそうですが、ゼロから複雑な認知を学習させるよりは希望があるのかなと。今後もまだしばらくそのあたりを触ってみようと思います。

AnimalAI(その4)コンペティション1位解法の仮再現

 前回に調べた通り、Animal AIは2019年にコンペティションが行われていました。

 その1位解法はGitHubで公開されています。

 まずAnimal AIのバイナリがv1であり、最新のv4からすると古いため、これを更新することを試みました。しかし、最新のv4では見た目が変わっているため、学習済みモデルをそのまま適用すると成功率が下がります。

条件 900シナリオでの成功率
v1バイナリ + 公開されている学習済みネットワーク 44.8%
v4バイナリ + 公開されている学習済みネットワーク 17.4%

 よって、学習側全体をTensorFlow→PyTorchに置き換え、学習し直せるようにしました。

 また学習データとしても、元々はコンペティション前に作業されていたものであるため自作のシナリオが使用されていましたが、今後平等な設定で実験していくために、Animal-AIの学習データとして使われていたaai3-paper-experiments/tree/master/ppo/aai/configs/paperをこちらでも使うように変更しました。

学習データの量と性能の関係

 学習データは評価タスクと同じ10カテゴリに分類されています。カテゴリは論文のTable 2に対応しています。

カテゴリ 内容
1 Food Retrieval 障害物のない空間に置かれた餌を取る
2 Preferences 複数の選択肢から良い方を選ぶ
3 Static Obstacles 壁などに遮られた餌に回り込む
4 Avoidance 溶岩などの負の領域を避けて到達する
5 Spatial Reasoning 坂や台を使って高所の餌に進む
6 Generalisation 1〜5と同じ課題を、色などの見た目を変えて出題
7 Internal Modelling 途中で暗転する
8 Object Permanence 餌が物陰に隠れる
9 Numerosity 量や大きさの異なる選択肢から最大を選ぶ
10 Causal Reasoning 可動物体に働きかけないと餌に届かない

 ここではカリキュラム学習こそしませんが、カテゴリ1からどこまで含めて学習すれば最も良い性能になるのかを調査しました。学習条件はすべて共通で、24並列 × 256ステップ × 2500エポック = 約1536万ステップ、1本あたり約3.8時間です。評価はコンペティションでの900シナリオを使っています。

 結果としては、見える壁の色のランダム性が生じるカテゴリ6を含むタイミングで最も高い成功率となりました。カテゴリ10あたりは難しいため学習には良い影響を与えないようですが、ものすごく大きな性能低下ではないのでわかりやすく学習データを全部使うカテゴリ10までの採用としたいと思います。

評価結果の一例

 採用することにした、カテゴリ10まですべてを学習データとした場合の内訳です。

カテゴリ 成功率 平均報酬
全体 41.3% (372/900) 0.944
1 Food Retrieval 84.4% 2.951
2 Preferences 58.9% 1.298
3 Static Obstacles 26.7% -0.571
4 Avoidance 28.9% -0.357
5 Spatial Reasoning 45.6% 1.050
6 Generalisation 55.6% 0.997
7 Internal Modelling 81.1% 1.238
8 Object Permanence 30.0% 0.072
9 Numerosity 1.1% 3.771
10 Causal Reasoning 1.1% -1.013

 全体では41.3%で、冒頭に挙げた「v1バイナリ + 公開されている学習済みネットワーク」の44.8%にはわずかに届いていません。バイナリも学習データも変わっているので単純な比較は不適切ですが、移植と再学習が機能していることの一応の確認にはなります。

今後

 まずこの手法では24並列でエージェントと環境を動かして軌跡を収集してPPOを行います。実際の動物では1個体1環境であると考えられるため、そこに対するアプローチを検討したいところです。

 また、カテゴリ9,10は成功率が低いため、このあたりの高度な判断が必要とされるタスクで改善できる手法が作れると良いと思われます。

Animal-AIの学習データ・評価手順

 Animal-AIの既存の結果として記述されているものを整理します。

The Animal-AI Environment: A Virtual Laboratory For Comparative Cognition and Artificial Intelligence Research

4.1.1 Foraging Experimentや4.1.2 Operant Chamber Experimentは部分的な評価となっているので、いったん4.1.3 The Animal-AI Testbedをメインで見ます。

学習・評価プロトコル

 論文ではPPO(Stable Baselines3)とDreamer-v3(https://github.com/Kinds-of-Intelligence-CFI/animal-ai-dreamerv3)を試しています。

 学習では11の段階のカリキュラム学習が用いられています。

  • 第1段階では「Food Retrieval (Level1)」の30のタスクを使って200万ステップの学習を行います
  • 第2段階では「Food Retrieval (Level1)」および「Preferences (Level2)」の計60タスクを使って200万ステップの学習を行います
  • ... 同様のパターンが第10段階まで繰り返されます(第10段階では「Level1」から「Level10」までの計300タスクを使って200万ステップの学習を行います)
  • 最終段階では、第10段階(「Level1」~「Level10」のタスクによる計300タスク)を使ってさらに500万ステップの学習を行います

 合計は200万 * 10 + 500万 = 2,500万ステップとなります。

 このとき使われる学習データとしてのyamlは以下で公開されています。

 評価用のコンペティション向けの900シナリオとは別に用意されているので、学習データ300シナリオで学習、評価データ900シナリオで評価という形式になります。

 これによる学習結果がFigure 16に示されています。

 画像左が学習中のScoreの推移(しかしこれは対象とするシナリオ分布が変化していくので参考程度にしかなりませんが)と、右が最後の段階での900シナリオに対する評価となっています。

Animal-AI Olympicsコンペティション

 コンペティションに参加したエージェントはそれら900シナリオが未公開の状態で、つまりそれぞれ独自のやり方で学習されていたとのことです。よって学習〜評価のプロトコルとして参考にはしづらいところもあるかもしれませんが、1位、2位がそれぞれコードが公開されています。

 コード自体は結構古そうなので直接利用するよりも参考値に留まるでしょうか。

学習データ

 自前の可視化なので描画しきれていないものも多いですが、10カテゴリの30タスクの初期配置をそれぞれ1枚にまとめて表示しました。

カテゴリ1: Food Retrieval

 基本的に赤を避けて緑の報酬に向かっていけば良いです。特徴的なところがあるとすれば、最初のタスクがいきなり赤玉Onlyなので待っているのが正解というタスクであることでしょうか

カテゴリ2: Preference

 左右どちらかしかないパターンがあるので、過学習してしまうことが不安です。

カテゴリ3: Static Obstacle

 細い道を正確に渡っていかないといけないタスクは難しそうです。

カテゴリ4: Avoidance

 赤いゾーンには触れてはいけないので、単なる壁よりも一段以上難しくなると思われます。

カテゴリ5: Spatial Reasoning and Support

 ある場所に報酬の玉がないことを以て、違う場所にあると推測しないといけないため、かなり難しそうです。一方で、バリエーションが限られているのでそこの過学習がどうなるかが気になります。

カテゴリ6: Generalization

 今までのカテゴリの合わせ技なので当然難しいです。

カテゴリ7: Internal Modeling

 Generalizationに追加して暗転します。

カテゴリ8: Object Permanence and Working Memory

 動きが大事なカテゴリだと思われるので、初期配置だけ見てもわからないところは多いものになります。

カテゴリ9: Numerosity and Advanced Preferences

 床に降り立つ前に数をカウントして一番多いところを目指さないといけないというのが、どう考えても難しそうです。

カテゴリ10: Causal Reasoning

 道具的なものを使わないといけないという点もあるようなので初期配置だけ見ても難しさが伝わりきらないかもしれないです。

所感

 とりあえずは公式の学習・評価プロトコルが使えることがわかってきたと思います。これで現状のコードがどの程度性能が出るのかを確認したいところです。

AnimalAI(その3)次の停滞点・位置の線形probe

 前回はクリア条件を修正し、1つ目の停滞点を突破できることを確認しました。

 今回は学習量を増やし、次の停滞点がどこになるかを確認します。学習条件は相変わらずバッチサイズ16でのDACER2的方策オフ学習で行っています。

  • 奇数回目は「まだ解けてないシナリオから先頭のものを選んで開始」
  • 偶数回目は「解けたことのあるシナリオから、失敗率からソフトマックス分布のようなものを構築してランダムに選んで開始」

学習結果

 前回500Kステップまでだったものを1Mステップまで回したところ、以下のような結果になりました。

 VLMであれば231まで到達しましたが、VAE+4層の追加ネットワークではずっと88で停滞してしまいました。入っている情報としてはほぼ変わらないはずですが、画像と収益や目標値を適切にエンコードする能力はVLMの方が高いようです。

 VLM側の方について、カテゴリ3から可視化すると以下のようになりました。

 カテゴリ3はStatic Obstaclesということで、壁や透明な障壁など、静的な障害物の反対側にある報酬に到達するタスクが集められています。解いている様子を見ると、賢くやっているというよりもランダムに動いてみて壁の向こうに行けたときに報酬へ移動していくだけになっています。

 なので、一番最後の細い道を適切に進んでいく必要があるタスクでは全く成功していません。ログを見ると482回挑戦して一回も成功できていないようです。

線形Probe

 その他、VLMの表現を確認するために、PolicyやValueヘッドに分岐する状態ベクトル部分を取り出して、線形ProbeとしてAnimal-AIの方でGTとして情報が得られるX, Y座標に対する線型回帰を試しました。

 結果が以下の通りです。

 Trainデータに入っているものについてはある程度できていそうですが、Validデータに入っている方はあまり正しく相関していなさそうです。よく考えると、これは表現部分の学習を現状では行っていないため、そういうものかもしれません。

 現状はいったん分析方法などの目処をつけたくらいで、具体的には今後やっていこうと思います。

Cosmos3

 Cosmos3-Edgeが自分の用途、つまりPolicy重視で軽量に動かしたいという目的のためにどの程度現実的であるかを検証しました。結果としてはなかなか難しそうと判断して、一時保留ということにしました。

やったこと

 Bench2Driveのデータセットにおいて、オープンループ評価を行いました。具体的には AccidentTwoWays_Town12_Route1102_Weather10 のシナリオを使用しました。

 GPU3090が1枚搭載されているマシンでの実行になっています。これでまともに動かせるだけすごいことですが、欲張りなので品質まで求めてしまっています。

結果1

 まず、Cosmos3OmniPipeline をできるだけそのまま使うようにしました。mode="policy"で自動運転ドメインの行動として実行しました。

 生成された動画は以下の通りです。

 生成速度は1フレームあたり7.6秒ほどと遅く、その割にとても良い生成というわけでもないため、とりあえずこの方針は見送ることにしています。

結果2

 ある程度独自実装を入れて、履歴を入力できるようにしたり、デノイジングステップを35→4に減らしたりして実行しました。

 特筆する条件は

  • 履歴長: 5フレーム
    • 最近よくあるTemporal VAEとして、1フレーム目は特別扱い、そこから4フレームずつ1塊にするというタイプのものを使っているようなので、複数フレームであるうちの最小ということで5フレームを選択しました。
  • 予測長: 4フレーム
    • 同様に4フレームが1塊なので最小の予測長として4を選択しました。

 生成された動画は以下の通りです。

 実行速度はデノイジングステップ4にしてだいたい1ステップあたり3.9秒でした。おおまかには

  1. 画像やテキストのエンコード: 1.1秒
  2. 行動生成0.5秒
  3. 潜在変数の動画デコード: 2.3秒

という内訳でした。動画デコードをしなければ動かせなくもないかもしれませんが、いずれにしても性能面で十分ではないと感じて、いったん見送ることにします。