« 前のひとこと | トップページ | 次のひとこと »

cocolog:95705029

「「多層目的=アテンション」を確かめる二足歩行の実験」を行った。今回は「歩行」としてはギコチナイが、前進を続けることができてうれしかった。 (JRF 0254)

JRF 2025年11月 3日 (月)

今回の実験は Grok 4 さんと Gemini 2.5 Flash さんの協力によりなされた。会話も両者とによる。

成果物は↓。

《humanoid_nested_attention_dt.ipynb - Colab》
https://colab.research.google.com/drive/1xecuAY7anGjCRuaWyr--RBl9KdXMp4lz

JRF2025/11/36205

……。

……。

アイデア。

jrf:> 以前考えた多層的な最適化(参: 拙著『宗教学雑考集』《目的の多層性》)とアテンションは何かつながりがあるように思う。どういう集団(層)に対して最適化するのか…と目的へのアテンションが似ているように思う。

JRF2025/11/37352

Grok:>あなたが指摘する「多層的な最適化」と「アテンション」のつながりは、AI(特にTransformerベースの深層学習)でまさに実現・研究されている核心的なメカニズムと直結します。数学/プログラミングの単純な「和/最大値最適化」が「不自然」に感じる理由も、ここにあります。人間(や社会/進化)の最適化は、並列・階層的な「主体」(層/ヘッド/エージェント)が動的に「アテンション(注意・重み付け)」で協調/コントロールするからこそ、多目的・多主体の「総体最適」を自然に達成しているのです。<

JRF2025/11/35102

……。

jrf:> アテンションを逆に多層最適化に直すことで、ニューラルネットから、プログラム的システム的な方向に設計しなおす「構造的学習」(参: [cocolog:95666408](2025年10月))が可能になる…なんてことはありうるだろうか?

JRF2025/11/32822

Gemini:>実現には大きな課題が伴います。

* 層/主体の定義の困難さ:学習されたアテンションから、人間が理解できる意味を持つ「層」や「主体」を自動的に切り分ける(クラスタリングする)のが非常に難しい。

* アテンションの滑らかさ:アテンション・スコアは通常、滑らかに変化するため、プログラム的な明確な閾値(例:0.7か0.8か)を設定することが困難です。

しかし、「アテンションを多層最適化の優先度として解釈し直す」というフレームワークは、AIシステムの「なぜそうしたのか」という質問に答えるための、非常に有望な出発点になるでしょう。

JRF2025/11/33954

……。

jrf:> 強化学習的なものについても、多層的最適化のようなものがありえると思う。ある大きな目的について学習しているが、途中、何が実際役に立ったかについて、もっといろいろな目的を適用するような感じで。

すると、評価値(報酬)にそもそもアテンションを用いることが可能なのだろうか?

JRF2025/11/35832

Grok:>はい、完全に可能—まさに「多層的最適化」が強化学習(RL)の最先端で標準化されつつあり、報酬(評価値)にアテンションを直接適用する手法が2024-2025の論文/実装で爆発中です。

あなたの「大きな目的で学習 → 中間多目的適用 → 役立ったか評価」は、Hierarchical RL (HRL) + Attention-weighted Rewards でぴったり。

JRF2025/11/36263

……。

jrf:> しかし、そのアテンションをどう学習させるかを考えるとメタ報酬的なものが必要なのだろう。

動物などが、多層的目的を持ちながら、結局は、子孫をできるだけ残したものが環境に残っていくというようなものが、メタ報酬なのだろうか…。

JRF2025/11/37395

そこにおいて遺伝子から来る身体性が学ぶときのバイアスになる。ニューラルネットは結局はバイアスを学んでいる。ロボットに学習させるときは、ある部分のバイアスをいかに固定するかが大事なのかもしれない。そういう汎用バイアスを見つけるのが、今、E2E や強化学習で作ろうとしている部分なのかもしれない。それさえできれば、「ファインチューニング」程度で、いろいろな動作が可能になるのかもしれない。

そういうバイアスが多次元的にあるからこそ、多層的目的は意味を持ってくるのだろうか…? バイアスの持つ「意思性」が多様だから?

JRF2025/11/36375

Gemini:>バイアスが多様である(つまり、人間には「生きたい」だけでなく、「認められたい」「表現したい」といった多様な欲求がある)からこそ、それらの間で優先順位をつけたり、協調させたりするための「動的なアテンション」の仕組み、すなわち「多層的目的」のフレームワークが必要になるのです。

バイアスが単一であれば目的も単一で済みますが、バイアスが多次元的であるため、どのバイアス(目的)を優先するかという「意思性(アテンション)」の多様性が生まれる、という見方は非常に論理的です。

JRF2025/11/36332

……。

……。

バイアスが遺伝情報などからパッと求まるならいい。動物などはそうなのだろう。多層目的もバイアスからパッと求まらないだろうか。今ある問題についてバイアスがあれば多層目的へのアテンションが決まる…そんな感じ…。

バイアスと問題が与えられれば、多層目的の・報酬のアテンション重みが出力されるように学習できないか?

JRF2025/11/36079

多層目的は何(主体)が何を目的とするかが問題となる。主体が変化するのが特徴なため、アテンションも、どのアテンションを重視するかというアテンション、つまりアテンション層を最低二段は必要とするのかもしれない。

バイアスと問題の与え方について。バイアスはモデルそのものとすれば、モデルを入力にするのは大きすぎて扱えなくなる。バイアスの実現を入力とすべきかもしれない。バイアスの実現とは行動が物理的に作用した結果であるとすれば、観察の入力がバイアスの入力を兼ねられるのかもしれない。

JRF2025/11/37339

一方、問題については、それも一つの目的だとすると、アテンションが扱うべき目的の一つということになるのかもしれない。言語的変形があるなら、アテンション層に問題がどういう形でか接続されるのだろう。

行動決定の後、バイアス=観察の入力があり、それが報酬のアテンションを決定し、それが方策となり行動決定となる。これが LLM 的なつながりであろう。ただし、「問題」はアテンションの決定に接続される。LLM 的な発想だと、「問題」はプロンプトの最初に与えられるべきものだが、それがアテンション層にもスキップ接続がある感じだろうか。…?

JRF2025/11/30477

…とここまで Grok さんに「壁打ち」したところ、Grok さんは具体的な実装を示してくれた。具体例として選ばれたのは二足歩行問題である。それは古い IPYNBを参考にしていたため、すぐには動かなかったが、今度は Gemini さんにお願いすることで、動作にまでこぎつけることができた。それが今回の実装である。

JRF2025/11/35874

……。

……。

実装の核。

SkipPromptDT() クラスが実装の核となる部分で、ここが Grok さんのアイデアによる。注意機構(アテンション)の Transformer を2段(というか4段)重ねて目的プロンプトのスキップ接続がある残りは、Linear というシンプルなモデルである。

実験に使う軌跡データは、D4RL というのが当初想定されていたのだが、これが古くなっていてうまく扱えず、それを継承した Minari のデータを使った。Mujoco の Humanoid-v5 の歩行データである。

JRF2025/11/37217

Mujoco。ロボット関連では話題になっていて一度使ってみたかった。使えてよかった。

JRF2025/11/33540

……。

……。

実験結果。

軌跡データを単純に使うだけだと「歩行」は創発しなかったが、前進した上位5% のデータを prompt_id=2 として与えることで、「前進」が創発した。ビデオに記録されているとおりである。ただ、きれいに歩く姿になってはおらず、とにかく前進するというだけの軌跡になっている。

以前歩行を試みた実験(↓)では歩行に完全に失敗していたが、今回はまがりなりにも前進ができたので、うれしかった。

JRF2025/11/39853

《llm_bipedal_walker_structural_learning.ipynb - Colab》
https://colab.research.google.com/drive/1n-XrjKZdGlDelVmO9eXq1vp3kjqDdCHu?

《llm_bipedal_walker_structural_learning.ipynb - GitHub Gist》
https://gist.github.com/JRF-2018/8068e4464db9747c2989c34f6edf3506

JRF2025/11/38481

……。

……。

結果を受けた考察。

jrf:> 歩行という感じじゃなく前進に過ぎないのが若干残念ですが、前進でも私にとってはこれまでなかった成果です。うれしいです。

Transformer を2段というか、4段重ねていますが、他はそれぞれ Linear が一段で、これほど能力があるのは驚きです。

アテンションが、多層目的に対応しているというのは、おそらく今回の実験では、全体の歩行という目的に対し、右足や左足といったより小さな単位での目的と同時にあって、それが適切に選択された結果である…ということでしょう。

JRF2025/11/31311

基本的に、これは、強化学習の実験ではなく、おそらく特定のモデルで強化学習で作られた軌跡データを別のモデルで「コピー」する実験だったのだと思います。

ロボットのモデルの実装というのは、こういうものなのですね。私にとっては大事な知見です。

ただ、これは Grok さんの作ったモデルの成果なのかな?…という疑いはあります。というのは、DecisionTransformer というもの自体がこういうことが可能なモデルとして知られていて、要は Transformer がこういう能力のあるものということでしかないのではないか…とも思えるからです。

JRF2025/11/37437

Gemini:>今回の成果について改めてお祝い申し上げます! 🎉 「歩行という感じじゃなく前進に過ぎない」としても、以前は数ステップで倒れるか微動するだけだったHumanoidが、1000 ステップも継続的に前進し、8000 を超えるエキスパート報酬を達成したことは、オフライン強化学習の難しさを考えると、間違いなく画期的な成功です。

JRF2025/11/32767

「全体目標(歩行)と局所目標(右足、左足の協調)の同時達成」という解釈は、Decision Transformer (DT) のトランスフォーマー構造と、あなたが設計したSkipPrompt DTのMeta-Attentionの機能を深く理解されている証拠です。

JRF2025/11/30741

……。

jrf:> ニューラルネットがタスク分担でできるという解釈を以前得ました(参: [cocolog:95690194](2025年10月))。今回は、実験でアテンションが多層目的と解釈できるということがわかりました。それらを合わせて、ニューラルネットやアテンションという今回必要となった部分について、それらを使わないで「構造的学習」ができるかもしれない…という方向は示せたかな…と思います。

JRF2025/11/30314

Grok:>NN → タスク構造変換の方向性: あなたのアイデア(重み行列=共有メモリ、活性化=同時発火)は、Efficient shallow learning や Capsule Networks に似て、深い層を避けつつ階層処理を実現。

JRF2025/11/36864

2025では、multi-agent task decomposition (e.g., TDAG) で複雑タスクをサブエージェントに分け、Attention代替としてRWKV/Hyena や Tensor Product Attention (TPA) が効率化。あなたの変換で勾配降下を失う代わりに、論理ゲート/ルールベースで解釈可能に—構造的学習として実装可能で、e.g., smaller LLMsのタスク分解と組み合わせれば、Humanoid前進を非NNで再現。

JRF2025/11/31484

実験的示唆: 今回のDTでAttentionが多層目的を扱ったように、非NN代替では決定木(decision trees)でサブ目的分岐、SVMで境界最適化—効率悪くても、シミュ仏の「総体最適」を計算機検証可能。xAIの視点では、こうした解釈可能AIがAGI鍵。

JRF2025/11/39374

……。

……。

追記。

「「多層目的=アテンション」を確かめる二足歩行の実験 その2&3」を行った。その2では「走る」が創発したのはうれしい。その3はちょっとした確認。

JRF2025/11/56662

その2は↓。

《humanoid_nested_attention_dt_2.ipynb - Colab》
https://colab.research.google.com/drive/1HWZ19RmFD_PHy1H38i1VoPLpC_fSYXyG

その3は↓。

《humanoid_nested_attention_dt_3.ipynb - Colab》
https://colab.research.google.com/drive/19G3Jvm6DYAJC_aLeAygI5MnP0Eq6Ft-T

JRF2025/11/55074

……。

その2 で何が変わったか。

前回、その1では、SkipPromptDT() というクラスを実装してもらった。それにより、「前進」が創発した。ただ、きれいに歩く姿になってはおらず、とにかく前進するというだけの軌跡になっていた。

そこでとにかくちゃんと歩く姿を見てみたいと思い、データセットを medium-v0 から expert-v0 に変えたところ、今度は学習が失敗し、早期に転倒するようになってしまった。これはおかしい。

JRF2025/11/58197

そこで、まず、上で挙げた古い IPYNB のモデルのままの MaskedCausalAttention を使った実装を試したところ、今度は expert-v0 で学習が成功し、ちゃんと「歩く」というより「走る」という姿を確認できた。これにより、私の前の SkipPromptDT は基本的には失敗していたことが判明した。

JRF2025/11/55002

それを Gemini さんに相談したところ、MaskedCausalAttention のアイデアを取り入れたモデルを作ってくれた。CausalSkipPromptDT の誕生である。これにより、私のモデルでも「走る」が創発するようになった。それが今回の humanoid_nested_attention_dt_2.ipynb である。

JRF2025/11/50327

なお、MaskedCausalAttention と通常の Transformer との違いは、前者は学習時に未来の情報を用いないように規制しているところに特徴がある。私はそれを層に重ねるとき、アテンションが多層目的であれば、目的をクエリできることが大事なので、上の層でも同じ仕組みが必要なことになかなか納得できなかったが、Gemini さんと議論して、特徴量が過去のすべてを参照しなければならないというのはマレであると気づき、とりあえず納得した。

JRF2025/11/54052

……。

その3 で何が変わったか。

ところが、その2では prompt_id=1 も prompt_id=2 と変わらない結果になってしまった。これは expert-v0 データセットが全体としてよすぎるために差が出ないのだろうというのが Gemini さんの解釈。

そこで simple-v0 データセットを使って prompt_id=1 と prompt_id=2 が違う動作を確かに学習していることを示したのが humanoid_nested_attention_dt_3.ipynb になる。

JRF2025/11/57933

……。

今後の課題。

確かに prompt_id の制御は効いている。しかし、本来なら、まったく違う動作について prompt_id を割り当てて、それで動作が切り替わるか確認すべきである。しかし現状の Minari のデータセットでは、そのような実験は難しそうである。データセットを変えるなどして、そのような確認を今後したい。

JRF2025/11/54535

あと、個人的には、工場でのロボットの動作に興味を持っている。ねじ回しなどのデータセットがあるらしく、それは今回と違い、視覚情報も大事となる。そういうものの学習にもトライしたい。

JRF2025/11/59792

……。

……。

追記。

○ 2025-11-11T17:13:29Z

「「多層目的=アテンション」を確かめる二足歩行の実験 その4」を行った。起立も同時に学ばせることで歩行を安定化することに成功した。下層目的でバランスを取ることが学習されたからであろう。

《humanoid_nested_attention_dt_4.ipynb - Colab》
https://colab.research.google.com/drive/1E4tYAkDW5L_TctiKfGReYCCOOt3jJv0n

JRF2025/11/123272

……。

その4 で何が変わったか。

その3までで prompt_id の制御が効いていることは大体確かめられたが、Minari に他の使えるデータセットがないため、それ以上の検証はできない…と述べた。しかし、それは誤解だった。

JRF2025/11/124860

Minari には mujoco/humanoidstandup/(simple|medium|expert)-v0 というデータがあり、それを使えば、prompt_id の制御について、もっとはっきりしたことが言えそうなことに気づいた。前はその場合の開始が寝た状態なので、データが共存できないと私が誤解していたのだ。Gemini さんもそうだったのかもしれないが、この起立のデータが使えないかと聞いたところ「使える」とのことで、わずかな変更でそれができることが示された。

そうして実験した結果、確かに prompt_id の制御は効いていることがわかった。

JRF2025/11/128918

実験前に、アテンションが多層目的であるなら、起立の学習も行うことで、バランス感覚がアテンションの下層で養われ、それは歩行にも良い影響があることが予想された。

そして、確かにそのような実験結果が出たようだ。前は微妙に失敗していた prompt_id=1 は成功するようになったし、prompt_id=2 を見ても、ときに不安定になりながら、バランスを回復する様子が見られた。不安定になったのは、prompt_id=3 の起立を学んだため、逆に歩行専心より少し不安定になったのだと解釈できる。

JRF2025/11/122212

結果的に prompt_id=1 と prompt_id=2 がほぼ変わらないようになってしまったが、今回は許容できる結果だと思われる。

JRF2025/11/123845

問題の prompt_id=3 の起立は、ただ、完全な起立にはならなかった。これはどうも学習データそのものが完全な起立にはならないようだ。prompt_id を使わない DecisionTransformer の実験で確かめてみると、medium データでは起立に失敗していた。ただ、その場合の起立の試みは、今回の prompt_id=3 よりも勢いがあった。この点 Gemini さんに言わせると、爆発的なトルクが起立には必要だが、それが歩行訓練で「希釈」され、うまくいかなくなったことが考えられるとのことだった。

JRF2025/11/126334

ただ、「希釈」もある程度想定内であり、prompt_id で分ける実験そのものは成功したと私は解釈する。もちろん、n=1 とか 2 で統計的にちゃんとした結果ではないけれども。

JRF2025/11/122578

……。

今後の課題。

おもしろい実験が思いついたのでそれを近々やる予定。成功するかはわからないが、失敗したとしてもアイデアは発表したいので、公開することになると思う。それをお楽しみに…ということで。

JRF2025/11/123821

……。

……。

追記。

○ 2025-11-19T15:28:40Z

「「多層目的=アテンション」を確かめる二足歩行の実験 その5」を行った。Latent Skill Prompt (LSP) の導入により学習された上層目的を取り出せないかと試みた。しかし、実験は概ね失敗だった。

《humanoid_nested_attention_dt_5.ipynb - Colab》
https://colab.research.google.com/drive/1ESMR2-DvIfNILZddRSKlYSCyXvb2TA2t

JRF2025/11/203613

……。

今回のその5で何が変わったか。

今回の一連の実験のような模倣学習でとにかくいろいろな動作を覚える。その上で、強化学習で望ましい行動を学んでいくという方向があると思う。いずれその方向も追及したい。

しかし、その前に、模倣学習だけでも汎用な下層目的…例えば「バランスを取る」など…がすでに学ばれていることをその4で見たのだった。ならば、上層目的の「良い歩行」ももしかするとすでに学ばれているのかもしれない。プロンプトや RTG などとは違う基準の目的として。

JRF2025/11/206111

すると、それを取り出せるなら強化学習を経ずに模倣学習だけで例えば「良い歩行」が創発したとできるかもしれない。

それを取り出す方法がないかと Gemini さんに聞いたところ提案されたのが、潜在変数を設定する Latent Skill Prompt (LSP) という仕組みだった。その5はそれを試す実験になる。

JRF2025/11/209955

ソースを見ていただきながら解説すると、latent_skill_prompts は整数 0 から 7 (0 は「未使用」用に予約されている)の lsp_idx ごとに設定されたテンソルである。これが prompt_id に相当するベクトルと合わさって、combined_prompt_embed となり、その4までのプロンプトに相当するものとして扱われる。

学習時には lsp_idx は(1から7の)ランダムに設定される。なぜこれで良いのか理解に苦しんだが、Gemini さんの説明を私が理解したところによるとこうである。

JRF2025/11/205306

prompt_id の指示と lsp_idx を同時に指定されているわけだが、通常は lsp_idx はノイズでしかない。当初は lsp_idx は無視され prompt_id だけに注意が向けられるようになる。しかし、prompt_id よりもより細かい動作目的がある場合のみ、徐々にそれが特定の lsp_idx に「偶然」割り当てられるようになる。

JRF2025/11/203647

そうなった lsp_idx がたまたま学習対象である動作に合致するとき、lsp_idx の無視をやめ prompt_id よりも lsp_idx に注意が向けられるようになり、ロスが有利になっていく。それによって prompt_id に必ずしも表されていない潜在的な目的が LSP に自然に学習される。…とのことだった。

JRF2025/11/202028

lsp_idx に対する latent_skill_prompt テンソルが、何を学習しているかも私は疑問に思った。テンソルは固定でもいいのではないか、木構造とか直交系とかで固定すれば、あとはアテンション機構がイイ具合に学んでくれるのではないかと考えた。

しかし、Gemini さんによると、木構造にするとしてもどこで枝をのばすかを決めさせたほうが学習効率がよく、latent_skill_prompts はテンソルにして「符号化」されていくほうがよいのだ。…とのことだった。

JRF2025/11/200939

実装上の注意点がもう一つ。それは、その4で「バグ」として、モデルの forward に RTG (Reward to Go) がまったく使われていなかったのが見つかったのだが、実はそのほうがロスの減りがよいこともわかった。RTG を使わないほうが、今回のデータセットだけかもしれないが、汎化がうまくいくようだ。だから当初 RTG を使ってなかなかうまくいかずに悩んでいたのを、その「バグ」をむしろ復活させることで学習を安定化させることに成功したのだった。

JRF2025/11/201278

そして実験結果だが、学習は安定したものの LSP による「符号化」には失敗したとせざるを得ない。lsp_idx の違いによる動作の違いといったものは確認できなかった。

Gemini さんによると…

JRF2025/11/200831

> LSP のコンセプト(多様なスタイルの抽出)は、RTG デカップリングによる DT の性能向上という決定的な成果を生み出したものの、Walk/Stand Up の単純なタスク設定では、PID/RTG の強力な優位性により、LSP 自体が明確な特徴を持つスキルの創発には至らなかったと結論づけられます。

JRF2025/11/205866

……。

今後の課題。

Gemini さんがコードを生成してくれればの話だが、LSP をもう少し変わった実装…LoRA に近い実装を試したい。その実験も失敗するかもしれないが、アイデアが形にできるか確認したい。この実験は近々したい。

JRF2025/11/208945

あと、ビデオ→OpenPose→リターゲティング で本当の「歩行」を学習するような実験を行いたい。OpenPose の「歩行」データはすでにあるだろうからビデオからでなくそこからはじめ、今回のような模倣学習で訓練したデータをその「歩行」データに合うよう強化学習させることでリターゲティング相当のことができないか…などと考えている。この実験はいつになるかわからない。

JRF2025/11/209837

……。

追記。

○ 2025-11-24T04:29:11Z

「「多層目的=アテンション」を確かめる二足歩行の実験 その6」を行った。Latent Skill Prompt (LSP) の実験続き。Mixture of Experts (MoE) または競争的学習の仕組みを取り入れた。学習はまずまず成功したが、本来の目的だった上層目的的動作の抽出は叶わなかった。

JRF2025/11/243422

《humanoid_nested_attention_dt_6.ipynb - Colab》
https://colab.research.google.com/drive/1P3F3SxNH6xzyMypBJiRsI8Op5djvc7v_

JRF2025/11/240355

……。

今回のその6で何が変わったか。

LSP の実験を続ける。それを違うアーキテクチャで試してみるのがその6である。

その5では、LSP ID をランダムに選んでそれがうまく符号化されるのを待つというアーキテクチャだった。

その6では、すべての LSP ID で試して最小のものをロスに設定するというアーキテクチャにすることで、LSP をやや外挿し、上層目的を表すものを見つけやすくなることを目指す。

JRF2025/11/247595

ただ、それだけだと、1つの LSP ID についてだけロスが減っていって、いつまでたっても他の LSP ID に関して学習されないということになるかもしれない。そこで、バッチ内で LSP ID が偏って「選択」されたことに対し、ペナルティを課すことを考えた。

このアイデアを Gemini さんに相談したところ実現したのが今回のプログラムになる。

Gemini さんによると基本的にこの考え方を「競争的学習」と呼び、先行研究があるという。

JRF2025/11/242783

>今回実装している 潜在スキルプロンプト (LSP) と負荷分散ペナルティを組み合わせた学習方法は、既存の機械学習分野である Mixture of Experts (MoE: 専門家混合モデル) のアプローチを、Decision Transformer (DT) のコンテキストで応用したものです。

JRF2025/11/241370

迷ったこととしてはソースを検索していただくと、loss_balance の計算。このソースでは LSP ID が 0 の場合、特別な処理をしているが、これをそうしないことも考えた。特別な処理をする場合、LSP ID 0 はベースラインとして機能する。そうしない場合、LSP ID 0 は他と競争相手になり、探索にもっと「やる気」を出させることができるだろう。しかし、「やる気」は、バランスを取ることの強制を意味し、あまり特徴的でないものもバランスが取れるという理由だけで選ばれやすくなると思われる。

JRF2025/11/248982

そのため、今回は、特徴的な上層目的が浮かび上がってきやすいと思われる、LSP ID 0 に特別な処理をする方法をとった。

JRF2025/11/246606

工夫した点としてはその5でもチラと言ったが、LSP を直交系で固定することである。これは私の中では「遺伝子」のイメージ。LSP 自体は学習せず、LSP を参照するアテンションが学習すればいいという考えによる。ちなみに LSP 自体も学習するモデル(動的LSP)だと、学習が崩壊し、歩行も起立もまったくできなかった。動的LSP に関しては、LOAD_BALANCING_BETA を変えてよいものを探したりしたが無駄に終った。

JRF2025/11/248622

実験結果としてはロスがかなり揺れてしまい、前までの実験のロスに相当する Mean も前の実験のロスあたりを揺れていて、大きく改善したということもない。そういう意味では新しい上層目的を発見したとは思いにくい。ただ、バッチ内偏りの度合いを表す Balance が 0 ではないということは、それなりに上層目的的なものを利用する方向はある。バッチサイズを大きくして Balance の揺れを抑えたりすれば、もしかすると揺れは少なくなるのかもしれない。そういうパラメータ探索をさらにしたほうがよいかもしれない。

JRF2025/11/240299

しかし、先行研究があるとのことなので、そこまで一生懸命パラメータ探索をする必要もないかと思って、多くを試すことなく諦め、結果を公開することにした。

JRF2025/11/248509

出力されたビデオを見ると、「歩行」というより「前進」または「走行」は確かにできている。「起立」は、前の良いときも完璧でなかったが、それよりは若干落ちるぐらいである程度できている。ただ、実験目的であったプロンプトに表されない上層目的の抽出はできてないようだ。これは使ったデータセットの問題かもしれない。特徴のある前進などがデータセットにないということかもしれない。

JRF2025/11/242660

……。

今後の課題 (その5と変わらず)。

Gemini さんがコードを生成してくれればの話だが、LSP をもう少し変わった実装…LoRA に近い実装を試したい。その実験も失敗するかもしれないが、アイデアが形にできるか確認したい。この実験は近々したい。

JRF2025/11/240416

あと、ビデオ→OpenPose→リターゲティング で本当の「歩行」を学習するような実験を行いたい。OpenPose の「歩行」データはすでにあるだろうからビデオからでなくそこからはじめ、今回のような模倣学習で訓練したデータをその「歩行」データに合うよう強化学習させることでリターゲティング相当のことができないか…などと考えている。この実験はいつになるかわからない。

JRF2025/11/247447

……。

……。

追記。

「「多層目的=アテンション」を確かめる二足歩行の実験 その7」を行った。Latent Skill Prompt (LSP) の実験続き。歩行の expert と simple のデータを混合し、そこから expert と simple が LSP で分化するか確かめようとした。分化は成功したと言えるが、expert の抽出は失敗した。

JRF2025/11/278297

《humanoid_nested_attention_dt_7.ipynb - Colab》
https://colab.research.google.com/drive/1JWWWVb_K2bx1BwBJQLwmqG0KBWN6P20M?hl=ja#scrollTo=qPjZMvYxeSJ2

JRF2025/11/271935

……。

今回のその7で何が変わったか。

まず、その6を終わった直後、ほんの少しの変更でできる大きなアイデアが浮かんだ。その6がうまくいってるかを確かめるには、'mujoco/humanoid/simple-v0' と 'mujoco/humanoid/expert-v0' を同じプロンプト ID (prompt_id=1) にして混合して学習し、その prompt_id=1 が lsp_idx によって最低でもデータセットごとにちゃんと「分化」するか見ればいい。そういう実験をすればいいと思い付いた。

なんでこれがすぐ思い付かなかったかなぁ…。

JRF2025/11/279003

その変更はごくわずかで済んだのだが、実際に実験してみると、その6の手法では「分化」は(ほぼ)起きていない…という結論になった。分化が起きていれば、expert を学習した LSP では報酬が 10000 を越えるはずである。しかし、そのような LSP は現れずどれも最大で 5000代に留まるものばかりで、特徴的な LSP がないという結論になった。

JRF2025/11/275428

そこで、これを分化させるにはどうすればいいか Gemini さんに尋ねたところ、提案されたのが、「正規化ロス」を導入する方法だった。これはこれまでのロスの計算について、異なる LSP に対する行動予測どうしが、距離が離れているほどよいというロスを加えるという方法である。

しかし、それだけだとバランスが崩壊し、特定の LSP だけが選ばれるという症状が起き、そこから学習が進まなくなってしまった。

JRF2025/11/276081

これを解決すべく Gemini さんが提案したのが Soft Assignment である。私のモデルは MoE において「ゲート」として「min(最小)」を使うというものにあたるものだったらしい。それは Hard Assignment と言って、この場合、最小以外の LSP に勾配が及ばないことになる(飢餓状態というらしい)。これを避けるために、min ではなく softmax (softmin) を使うという方法が Soft Assignment である。

JRF2025/11/273941

こうすると正規化ロスだけで十分で、バランスロスを全体ロスに足し合わせる必要もなくなると Gemini さんはいったのだが、バランスロスをなくして実験すると、成功する一部の LSP とそうでない LSP に分かれたのだった。これはバランスロスをなくしたため、一部の有利なもの以外の学習が、Soft Assingment 導入前の 0 ではないものの、かなり制限されたからだと考えた。

JRF2025/11/272018

そこで、バランスロスを再導入したのが今回のプログラムになる。この結果、ある程度「分化」が成功したらしい実験結果が数値的には得られたのだが、分析してみると、expert にふさわしい LSP はなく、どうも特定の失敗モードが LSP の特徴として学ばれただけのようだった。一部だけ歩行が成功するのは分化のあかしだが、それ以外は歩行については失敗モードを学んだようである。歩行は、その6よりのきなみ成績が悪化した。expert は数は多いが、学びにくいせいか、失敗モードのほうが優先して学ばれたのであろう。

JRF2025/11/270693

ただ、起立についてはビデオを見る限り、その6に比べて「個性」が発現しているような気はする。ただ、それが「分化」のせいなのかははっきりとは言えない。

つまり、分化はしたが、分化して学んだのは歩行の失敗モードまたは起立の個性であるようだ。expert の分化には失敗した。

JRF2025/11/278783

expert を学ばせるには報酬への考慮などが結局は必要で、そうでない限り学びやすい失敗モードが学ばれるということかもしれない。または、今後の課題で述べる LoRA 的なものを導入するとき、expert だけを LoRA に覚えさせるという方向でこの点は対応できるのかもしれないとは思う。

JRF2025/11/278126

……。

今後の課題 (その5と変わらず)

Gemini さんがコードを生成してくれればの話だが、LSP をもう少し変わった実装…LoRA に近い実装を試したい。その実験も失敗するかもしれないが、アイデアが形にできるか確認したい。この実験は近々したい。

JRF2025/11/272850

あと、ビデオ→OpenPose→リターゲティング で本当の「歩行」を学習するような実験を行いたい。OpenPose の「歩行」データはすでにあるだろうからビデオからでなくそこからはじめ、今回のような模倣学習で訓練したデータをその「歩行」データに合うよう強化学習させることでリターゲティング相当のことができないか…などと考えている。この実験はいつになるかわからない。

JRF2025/11/274680

……。

……。

追記。

「「多層目的=アテンション」を確かめる二足歩行の実験 その8」を行った。simple walk と expert run を混合したデータに LoRA を適用し、expert run を「復元」することを試み、成功した。またパラメータのスパース化のためL1正則化も試したが、こちらは失敗した。

JRF2025/12/21347

その8は 8_2 と 8_3 の二つの実験からなる。↓。

《humanoid_nested_attention_dt_8_2.ipynb - Colab》
https://colab.research.google.com/drive/1bs7cr4C60Qf807YI4spMf_1u55JxRpSy

《humanoid_nested_attention_dt_8_3.ipynb - Colab》
https://colab.research.google.com/drive/1F0RhRJcfcFVq9Vx_SvDEq29J-3m5D4RS

JRF2025/12/25450

……。

今回のその8で何が変わったか。

その8は後述のように 8_2 と 8_3 の二つの IPYNB からなる実験である。さらに実験の前に 4_4 の実験を行いそのモデルを生成しておく必要がある。

JRF2025/12/23066

今回のアイデアとしてはまず、アテンションの層ごとに LSP みたいなのを求めることはできないか…というところがあった。アテンションが多層目的であるなら、下層と上層をそれぞれ別に目的を指示することで細かな動作も指定できるのではないか…というアイデアである。

JRF2025/12/21564

それを実装するなら、アテンションの層の間になにかをかませて変調する…という方向になるだろう。そういう技術としてはすでに LoRA という技術がある。アテンションの特定のクエリ(に対するバリュー)を強調するような LoRA のようなもの…それができないか Gemini さんに聞いたところ「できる」という回答が得られ、生成してもらったのが今回のプログラムになる。

JRF2025/12/21581

LoRA 自体が状態を入力として変調されるべきかともちょっと思ったのだが、状態の変化もアテンションが認識していると信じて今回は状態の入力はせず、アテンションの変調だけに留めるコードとなっている。

JRF2025/12/23076

本来 LoRA は数少ないデータから学べるのが利点である。究極的には一つのデータから LoRA へと逆変換できるのがカッコイイ。しかし、それはあまりにも難しいためせめて LoRA をスパースにする L1正則化(Lasso)を試みた。こうすることで、LoRA にありがちな過学習も防げるし、多層目的のどこに作用しているかという説明可能性も上がるというのが、Gemini さんの話である。

JRF2025/12/21998

あと、私の構想の一つとして、RLRMDiffusion (Reinforcement Learning Result Model Diffusion)というコンセプトがある([cocolog:95459644]](2025年5月))。そこでは、強化学習の戦略記述を「コマンド」として強化学習で得たモデルを生成することを考えていた。

JRF2025/12/22045

ビデオのような大きなデータを生成できるぐらいだから、大きな学習済みモデルもいずれ生成できるのかもしれないが、今は、LoRA ぐらいがせいぜいではないかという考えている。今回、説明可能性の上がったスパースな LoRA のほうが、RLRMDiffusion で生成しやすいだろうという読みもあった。

JRF2025/12/25420

実験としては expert と simple を prompt_id=1 で、standup を prompt_id=3 で学習した「元のモデル」(humanoid_nested_attention_dt_4_4.ipynb で訓練したモデル)を固定し、そこから expert と standup を LoRA によって「回復」できるかを見ることになる。すでに「元のモデル」に「創発」されていたものの「発見」を目的とするのだ。

JRF2025/12/22228

だから、LoRA の再学習に元のモデルよりも学習コストがかかったとしても「創発」が「発見」されればその価値があると考え、学習コストは気にしない。LoRA だからといって、効率よく学べるかどうかは関係ないと考えた。

実験結果を少しずつ説明しよう。

JRF2025/12/22106

まず、最初の構想ではこれまでの LSP に対する学習のクセから、expert も simple も standup も一気に LoRA を作ろうとした。しかし、expert はまったく発現しなかった。これは三つの理由があると思われる。一つは、バッチのロスがそれぞれのタスクのロスと微妙に異なるせいでまとめての学習だとうまくいかないという点である。もう一つはL1正則化の縛りが強い過ぎて十分なパラメータが残らない…という点である。さらに一つは LORA_RANK が 4 では表現力が足りないという点である。

JRF2025/12/26677

これらを解消したのが、humanoid_nested_attention_dt_8_2.ipynb である。これは expert タスクだけを「隔離学習」し、L1正則化をなしにし、LORA_RANK を 16 にしたものである。これをエポック数5まで学習させることにより、expert の(再)発現が確認できた。一安心である。

JRF2025/12/27437

では、L1正則化がどれほど意味があるか。それを調べたのが humanoid_nested_attention_dt_8_3.ipynb である。これは prompt_id=1 の「歩行」系にあえて、standup (起立)タスクを学ばせる(隔離学習させる) LoRA である。prompt_id=1 にとっては、見知らぬタスクを下層目的だけあるところから学ぶことになる。

JRF2025/12/23520

これはどうも expert を発現するよりは簡単なタスクと見えて、L1正則化なしだと、エポック数1で概ね「起立」タスクが発現する(LORA_RANK は元の 4 のままである)。これに対し、L1正則化(L1_REG_LAMBDA)を再設定すると発現がほぼなくなる。L1_REG_LAMBDA の強さを 5e-5 から徐々に、発現が邪魔されない強さまで下げていくと、結局 L1_REG_LAMBDA = 5e-7 まで下げることで再発現と言える状況にすることができた。

JRF2025/12/21363

コツとしては、L1正則化ロス(L1 Reg)が、最初以外むしろ上がっていって、模倣ロス(Imitation)が下がるほうが優先されるぐらい弱くするのがよいようだ。

しかし、そうやって「許される」スパース度は、わずか 0.83%。これでは L1 正則化の意味はほとんどないであろう。

結論としては LoRA は割とうまく機能するが、L1正則化を入れるとほとんど機能できなかったと言えるだろう。

JRF2025/12/28719

……。

その1からその8までの総括と今後の課題。

「多層目的=アテンション」という直感にしたがい、二足歩行に関する実験をしばらく行った。

この一連の実験で、模倣学習の DecisionTransformer の層を増やし、プロンプトをスキップ接続で導入した実験は成功し、MoE で混合したデータから学習したモデルから元の純粋データが「創発」することを試す実験をして失敗し、LoRA を使って混合して学習されたモデルから純粋データに近いものを「復元」する実験は成功した。

JRF2025/12/26811

しかし、私の勉強にはなったものの、残念ながら、新規性はほぼないだろう。私のアイデアと思ったものは Gemini さんによると既存の技術の組み合わせでしかないことがわかった。また、それら実験のプログラムは Gemini Flash さんに頼り、そのあっさりとした生成を考えると、元となるプログラムはどこかにあることを感じる。そのものズバリの論文がすでにあるか、論文に発表するまでもないとしてどこかの研究室にはすでにある程度のものなのだろう。

JRF2025/12/24428

今後の方向としては、まず、その7までの MoE 的枠組みをその8の LoRA の枠組みに PPAP (ペンパイナッポーアッポーペン) よろしく、フンッと合体させることが考えられる。技術もコードもほぼできあがっているので、その実験自体はすぐにできるだろう。

JRF2025/12/26062

しかし、その7で expert run が発現しなかったこと、その8で判明した expert run の難しさを考えると、PPAP しても expert run は発現しないと思われる。おそらく expert run ではなく、データセットを変えてもっと発現しやすいタスクで実験すべきなのだと思われる。それは、そういうデータセットが使えるやりたい方・後進の方に委ねたい。

JRF2025/12/26022

私の今後としては、二足歩行を対象とするのは続けるけれども、強化学習を取り入れる方向に進もうと思っている。時期的にはしばらく休んで、おそらく年末も休んで、来年(2026年)に入ってからになるかもしれない。

とりあえずここで一区切りとして、お礼を述べさせてください。一連の長い実験におつきあいいただきありがとうございました。

JRF2025/12/29552

……。

……。

追記。

○ 2025-12-03T14:56:44Z

「「多層目的=アテンション」を確かめる二足歩行の実験 その8」の反省。L1正則化でスパース化をこころざすなら、Dropout はなしか、かなり少なく設定する必要があったかもしれない。また「元のモデル」もL1正則化しておいたほうがよかったかもしれない。ただ、L1正則化するとうまくいくといっても学習時間がかかるんだよな。うまくいくかどうかもわからないし。

JRF2025/12/48405

« 前のひとこと | トップページ | 次のひとこと »