種別[gsm] 2025-11-24T04:29:11Z
セクショングローバル共有メモ
日時2025-11-24T04:29:11Z
元URL(URLなし)

「「多層目的=アテンション」を確かめる二足歩行の実験…

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

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

……。

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

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

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

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

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

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

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

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

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

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

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

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