In Silico

シミュレーション・制御・実機

sim2realギャップ実測——1ステップの遅延で方策が崩壊

2026/6/30 シリーズ「実際に動かす」 第2回 / 全2回

目次

シミュの中で完璧に走る方策は、作動を1ステップ——50ミリ秒——遅らせるだけで走れなくなる。 報酬は1150から26へ落ちた。質量は2倍にしないと崩れないのに、遅れはたった1ステップで足りる。しかも実機の作動には遅延が必ずあり、訓練に使ったシミュには無い。この落差が sim2realギャップである。直す側も同じ物差しで測った——ドメインランダム化(DR)は同じ遅延下で337を保つ。ただし無摂動時のピークは1150から353へ下がる。頑健さは買えるが、代金はピーク性能で取られる。

きれいなモデルが書ける問題では、モデルを渡された古典制御(LQR)が、データ0で最も素朴な強化学習に完勝する——倒立振子ではそうだった。では、モデルが書けない問題ではどうなるか。そして、そこで学んだ方策は現実でも動くのか。今日は、歩くロボットを実際に学習させ、最後の問いを実測する。全部、手元のマシンでオフラインに走らせた本物の数字である(学習はGPU、摂動評価は推論だけなのでCPU)。

以下の数字は、最初から最後までひとつの量である。1ステップごとに前進速度から制御コストを引き、1エピソード1000ステップぶんを合計した報酬——正確な定義は第一幕に置いた。0付近は「その場から動けていない」、マイナスは「トルクの浪費が前進ぶんを食い潰した」を指す。

この物差しに乗らないものを、先に断っておく。実機は一台も動かしていない——「現実」の側に置いたのは、訓練時から物理を少しずらした同じシミュレータである。転倒は測定の外にある——HalfCheetah-v4 は転んでもエピソードが終わらないので、崩れた姿勢は「報酬が伸びない」という形でしか現れない。歩容も残していない——記録したのはエピソード報酬の平均と標準偏差だけで、だから摩擦を下げると報酬が上がる理由は、この測定からは言えない。そして学習の乱数シードは1本(seed=0)なので、別々に学習した2本を突き合わせた比較——nominalの1150 対 DRの353——は、この設計では確定しない(方法の注)。

三幕の並びは、測り方から決まっている。ギャップは差であり、差を出すには同じ物差しで二度測るほかない。だから第一幕でまず基準側——モデルを渡さずに走れるようになったこと——を確かめ、第二幕では方策に一切触れず、物理だけを動かして測り直す。落差を物理のせいだと言えるのは、この順で測ったからだ。第三幕はその先の値札を測り、最後に、もう一方の手——測って直す——がどこに残るかを置く。

※ 概念図(フロー)シミュ内で完璧な方策が、わずかな物理のズレで現実では崩壊する——この落差がsim2realギャップシミュの中完璧 ✓報酬 高い(+1150)訓練した物理にぴったり最適化わずかな物理のズレ質量/摩擦/1ステップの作動遅延現実崩壊報酬 ≈ 0(26)同じ方策が、再学習なしで壊れる補足:ドメインランダム化(DR)は遅延によるこの崩壊を防いで頑健さを買えるが、引き換えにピーク性能を下げる。
※ 概念図(フロー)・作図。シミュの中では報酬が高く「完璧」に走る方策が、現実へ移すときの質量・摩擦・作動遅延というわずかな物理のズレ——とりわけ1ステップの作動遅延——で崩壊し、報酬がほぼ0に落ちる。この落差そのものがsim2realギャップ。DR(ドメインランダム化)はこの遅延による崩壊を防げるが、ピーク性能を下げる代償を払う(本文第三幕)。数値は本記事の実測(単一方策・1シード)。

第一幕:チーターに、走り方を教える

題材は MuJoCo の HalfCheetah——二次元の「チーター」が、関節にトルクをかけて前へ走る課題である。まず、その対象そのものを見てほしい。

MuJoCo HalfCheetah-v4 のモデル構造(実際にシミュレーションした対象)二次元(矢状面)のチーター型ロボット。細長い胴体と頭、そこから伸びる後脚・前脚がそれぞれ 太もも・すね・足 の3節に分かれ、各節の付け根に回転関節がある。トルクをかけられる関節は前後の脚あわせて6つ(後脚:股・膝・足首/前脚:股・膝・足首)。右が前方=進行方向。下段は同じモデルが転倒した状態(胴体角が崩れ頭・胴が接地)の模式——姿勢が崩れるとはどういうことかの図解であって、本記事の測定で観測された事象ではない(HalfCheetah-v4は転倒で終了しないため、転倒そのものは記録していない)。作図は公開モデル定義に基づく。概念図(構造)— シミュレーションした対象MuJoCo HalfCheetah-v4公開モデル定義に基づく作図。実機レンダではない。通常の姿勢(右が進行方向 →)地面胴体後脚 ①股関節 ②膝 ③足首前脚 ④股関節 ⑤膝 ⑥足首トルクをかけられる回転関節はこの6つだけで、連続トルクだけで前へ走る。胴体を持ち上げる関節は無い——脚の協調だけで姿勢を保つため、崩れると回復しにくい(=転びやすさの源)。転倒とは(例)胴体角が崩れ、頭・胴が接地した状態前脚は前(頭側)に付く
概念図(構造)— 実際にシミュレーションした対象「MuJoCo HalfCheetah-v4」。二次元(矢状面)のチーター型ロボットで、動かせるのは前後の脚あわせて6つの回転関節だけ(後脚:股・膝・足首/前脚:股・膝・足首)。胴体を直接持ち上げる関節は無く、脚の協調だけで姿勢を保つ——だから崩れると立て直しにくい(転びやすさの源)。公開モデル定義に基づく作図で、数値や実機レンダではない。

動かせるのは前後の脚にある6つの回転関節だけで、胴体を直接持ち上げる関節は無い——姿勢は脚の協調だけで保つので、一度崩れると立て直しにくい。倒立振子と違い、地面との接触が複雑で、きれいな運動方程式を書いて制御器に渡す、という手が使えない。モデルが無い。ここが強化学習(RL)の出番である。

ここで言う「報酬」を定義しておく。1ステップごとに「前進した速度(そのステップで進んだ距離を、1ステップの時間で割った値) − 0.1×‖行動‖²」を受け取り、1エピソード1000ステップ(シミュ時間で50秒)ぶんを合計した値が、以下で出てくる報酬である。前へ進むほど増え、無駄に大きなトルクを出すほど減る。だから0付近は「その場から動けていない」、マイナスは「前進ぶんをトルクの浪費が食い潰した」を意味する。

RLには物理を教えない。最初はデタラメに関節を動かし(ランダム方策の報酬は −263=その場でもがくだけ)、たまたま前に進めた動きを少しずつ強化していく。標準的な実装(PPO, stable-baselines3)で30万ステップ学習させると——

ランダム方策(−263、破線)から、PPOの学習曲線が右肩上がりに伸び、決定論評価の最終スコア+1177(点線)に至る様子

【図の読み方】横軸=学習ステップ(経験の量)、縦軸=報酬(高いほど上手に走れる。図中のラベルは forward distance と略記しているが、実体は本文で定義した報酬=前進速度から制御コストを引いた値の1000ステップ合計である)。破線はランダム方策のベースライン(−263)。見るべきは右肩上がりの曲線——破線をぐんぐん引き離していく=モデルを渡さずに走り方を獲得していること。上の点線は、ばらつきを止めた決定論評価での最終スコア(+1177)。曲線の終端(≈672)より点線が高いのは、決定論評価が学習中の探索ノイズを切って測るぶん、訓練中の移動平均より高く出るからだ。

ランダムの −263 から、決定論評価(ばらつきを止めた「本番モード」での評価)で +1177 へ。モデルを一切渡さずに、0から走る歩容を獲得した。LQRが「モデルで払う」なら、こちらは「サンプルで払う」。約30万ステップの経験が授業料である。(公平のため:PPOは中庸な手法で、この+1177もPPOでの結果であって手法の上限ではない。論点は上限でなく「モデル無しで0から学べる」ことだ。)

これだけ見れば、めでたしだ。RLは歩行を解いた。ただし、ひとつ但し書きがつく——「シミュレータの中では」。

第二幕:完璧なのは「シミュの中で」だけ

学習した方策は、学習に使ったシミュレータの物理に対して最適化されている。けれど現実のロボットは、シミュとぴったり同じではない。実機の関節は少し重いかもしれない、床は少し滑るかもしれない、モーターの指令には必ずわずかな遅延がある。

そこで、学習済みの方策をそのまま(再学習なしで)、訓練時と少し違う物理に置いて評価した。質量・摩擦・作動遅延を、それぞれ振ってみる。振り方はこうだ。質量は密度を変える形で、body_mass と body_inertia を同倍にスケールした(重くすると同時に回しにくくなる)。摩擦は接線=滑り摩擦の係数だけを動かし、ねじり・転がりは据え置きである。遅延の単位を先に押さえておく——HalfCheetah-v4 は内部刻み0.01秒をframe_skip 5でまとめるので、制御1ステップは0.05秒(20Hz制御)、つまり1ステップ=50ミリ秒である。

質量・摩擦・遅延を変えたときの報酬。質量2倍で崩壊、遅延1ステップで報酬がほぼ0に落ちる3枚のグラフ

【図の読み方】3枚それぞれが「物理を1つだけ変えたとき」の報酬(縦軸)を、変化の大きさ(横軸)に沿って描いている。左=質量、中=摩擦、右=作動遅延。基準(訓練時の物理)から右や左へ離れるほど現実とのズレが大きい。見るべきは右の遅延パネル——たった1ステップずらしただけで報酬が崖のように急落すること。質量は2倍で崩れ、摩擦は下げるとむしろ上がる(「違う」=「悪い」ではない)。

結果ははっきり分かれた。

これが sim2realギャップである。「凸包より下 ≠ 現実」——計算上の最適は、現実の最適ではない——の、ロボット版そのものだ。比喩ではなく、実測された谷である。

ひとつ、正直な但し書きを。ズレは必ずしも「悪化」ではない。摩擦を下げると、報酬はむしろ上がった(0.4倍で131%)。理由までは今回の測定では言えない——記録したのはエピソード報酬の平均と標準偏差だけで、歩容そのものは描き出していないからだ。「違う」と「悪い」を混同しないことが、正しい読み方だ。

第三幕:「直す」側にも、ちゃんと値札がある

では、どう直すか。最も標準的な手がドメインrandomization (DR)——訓練のあいだ、わざと物理をランダムに揺らす。質量も遅延も毎エピソード変えて学習させれば、方策は「ひとつの物理」に過適合できず、幅のある物理に耐えることを強いられる。

ランダム化の幅は、エピソードごとに質量×0.8〜1.4倍・作動遅延0〜2ステップとした。この幅で学習したDR版の方策を、nominalと同じ評価条件——同じスイープ、各条件12本、同じ乱数シード列——で比べる。学習量だけは揃っていない(DRが40万ステップ、nominalが30万ステップ)。

先に断っておくと、この幅は結果の読み方を変える。揺らしたのは質量と遅延だけで、摩擦は一度もランダム化していない。後で見る3枚のうち訓練分布の内側にあるのは、質量0.8〜1.2倍と遅延0〜2ステップだけである。質量0.6倍・1.5倍・2倍、遅延3〜4ステップ、そして摩擦は6点すべてが外側にあたる。内側での健闘は未知の物理への汎化ではなく、訓練で見た範囲の再現である。外側での成績のほうは、備えの効き目ではなく、備えなかった軸に置かれた方策の素の姿だ。

質量・摩擦・遅延の3枚でnominalとDR方策を比べたグラフ。DRは遅延1ステップでも性能を保ち質量2倍でも沈まないが、無摂動時のピークはnominalより大きく低く、質量0.6〜1.5倍と摩擦0.4〜1.6倍の全点でもnominalを下回る

【図の読み方】3枚とも、通常学習(nominal)とドメインrandomization(DR)の2本を、縦軸=報酬で比べている。左=質量、中=摩擦、右=作動遅延。右の遅延パネルが2本の交差を見せる——遅延ゼロではnominalが高い(ピーク1150 対 353)が、遅延が入るとnominalは急落しDRが上に立つ(1ステップで26 対 337)。ただし左と中は逆で、質量0.6〜1.5倍の全点、摩擦0.4〜1.6倍の全点でDRはnominalを下回る(中の摩擦軸は、DR訓練でランダム化していない軸である)。左でDRが上回るのは質量2.0倍の1点だけだ(41.4 対 −119)。この図でDRが買えているのは全域での優位ではなく、nominalが沈む点で沈まないことである。

予想どおり、そして正直に——トレードオフが出た。

どちらが「良い」かは、現実に遅延があるかどうかで完全に決まる。遅延ゼロの理想世界ならnominalが圧勝、現実に1〜2ステップの遅延があるならDRが圧勝。タダで頑健にはなれない。

これは玩具の話ではない。OpenAIが片手でルービックキューブを解いたロボット(2019)は、まさにこのDRの極致だった。彼らが突き当たったのは、ランダム化の幅を人手で調整しきれないという壁だった2——幅の設計とロボットでの検証を往復する手作業が大量に要り、パラメータを増やすほど手動の調整は難しく直感に反していく、と原典は述べている。そこで難易度を自動で上げ続ける Automatic Domain Randomization を発明した。その方策は頑健で、学習中に一度も見ていない状況——ぬいぐるみのキリンで小突かれても——キューブを操り続けたと報告されている。ただし原典が示すのはこの定性的な報告までで、外乱下の成功率は数字で出ていない。DRを深層学習の文脈で広く示した代表例が、2017年(Tobinら)の sim2real 研究である——シミュレータのレンダリングをランダム化するだけで、実画像で事前学習することなく(シミュレーション画像だけで訓練して)実世界へ転移できることを示した3。私たちがチーターで見た谷とトレードオフは、最前線が格闘しているものと同じ構造である。

さらに一歩:「揺らす」のか「測って直す」のか

DRは「現実がどこにあるか分からないから、広く備える」戦略である。けれどもし、現実の遅延や質量を実際に測れたら——その値に合わせて訓練・適応すればいい。これが system identification(同定) の発想である——広く張るのでなく、ずれている当の量に狙いを定める。ただし「測れるなら」が条件。測れない量(複雑な接触や摩擦)に対しては、OpenAIがそうしたように、結局DRで広く張るしかない。測れるものは測って直す、測れないものは広く備える——この線引きこそ、エンジニアリングの判断である。

(方法の注:本記事の各数値は、単一の乱数シード(seed=0)で学習した1本の方策を評価した結果である。評価の本数は場面ごとに違い、学習直後の決定論評価が20本(+1177)、ランダム方策が10本(−263)、摂動スイープが各条件12本である。摂動スイープの基準値1150は、スイープと同条件で測り直した12本の値で、20本の1177とは別の測定にあたる。ばらつきも全条件で記録してあり、たとえばDR方策の無摂動時は353±162(平均±標準偏差)だった。この1シードという設計は、どの主張をどこまで支えられるかを変える。同じ方策を同じシードのまま物理だけ変えて測った比較——遅延1ステップでの1150→26、質量2倍での崩壊——は、学習の乱数を共有しているぶん比較として堅い。一方、別々に学習した2本の方策を比べた箇所は違う。nominalの1150 対 DRの353、および質量・摩擦軸でDRがnominalを下回るという読みは、学習シードが片方1本ずつしか無い。これは、本稿が裏づけに引いている論文自身が、環境名を名指しして警告している型である。同論文は、ハイパーパラメータを揃えたまま乱数シードだけを変えた実行を平均すると、HalfCheetahでは互いに同じ分布に入らない学習曲線が得られうると報告している(TRPOで5シードずつ2群、t = −9.09, p = 0.0016)。同じHalfCheetah(原典はv1)上のPPOでも、5試行のブートストラップ平均は3043、95%区間は1920〜4165で、上下端の比は2.2倍だった。結論でも、性能を比較するなら異なる乱数シードで多数の試行を走らせねばならない、高い平均リターンが本当に良い性能を表しているかは正しい有意性検定で確かめる必要がある、と述べている4。∴ DRが代償を払うこと自体はここでの測定と矛盾しないが、353という代償の大きさも、質量・摩擦軸でのnominal優位も、本稿の設計では確定していない。「1シード」とは学習の乱数シードが1つ(seed=0)という意味で、評価側は条件ごとに12個の異なるシードを使っている。実験条件は上記のとおりで、コードとシード・生の結果ファイルは手元に保存してある(リポジトリは非公開)。ただしDR方策の学習スクリプトだけは記録に残っていない——ランダム化の幅(質量×0.8〜1.4倍・遅延0〜2ステップ、40万ステップ)は当時の作業記録に基づく値で、DR側の評価結果は結果ファイルから再現できるが、訓練設定そのものは再走で確かめていない。)

A→B→C——そして「タダの手はない」

3つの実験が、ひとつの線で繋がった。

sim2realの物語:学習→崩壊→頑健化の概念図4場面の模式図を上から順に並べたもの。学習前はもがくだけ(報酬−263)、学習後は滑らかに走る(+1150)、わずかな作動遅延で報酬がほぼ0に(26)、ドメインrandomizationで摂動に耐えるが控えめ(遅延下337)。チーターの絵は模式で、報酬値は本文の実測値。学習後の+1150は摂動スイープの基準値(各条件12本)で、26・337と同じ測定に揃えてある——学習直後の決定論評価20本の+1177とは別の測定である。概念図sim2real の物語学習 → 崩壊 → 頑健化学習前もがくだけ報酬 −263学習後滑らかに走る+1150遅延 +1ステップわずかな物理ズレで前へ進めない26DR で再学習摂動に耐える(控えめ)遅延下 337作図:AI(チーターは模式・報酬値は本文の実測値。+1150 は摂動スイープの基準で、26・337 と同じ測定)
概念図(流れ)— 歩行AI(チーター)が辿った道:学習 → 崩壊 → 頑健化。各場面のチーターは模式で、第3場面の崩れた姿勢は「前へ進めない」ことの図解である(HalfCheetah-v4 は転倒で終了しないので、転倒そのものは測定していない)。報酬値は本文の実測値。作図:AI。

通底するのは——タダの手はない。モデルか、サンプルか、頑健性か、どこかで必ず払う。そして本当の腕とは、「どこで払っているか」を測ることだ。

今日の数字が測り直したのは、2つの主張である。「sim2real は学習問題に見せかけた計測問題だ」——谷は実在し、測れる。「力学の盲目的なランダム化は、どこがずれているか測れなかったという告白に近い」——どこがずれているか分からないから、幅で張る。ただし測り直せたのは、(a)ギャップが実在すること、(b)DRがピーク性能で代償を払うこと、の2点である((b)の代償の大きさそのものは、方法の注のとおり学習シード1本ぶんの不確かさを負う)。核心、つまり「測って直す」ほうが闇雲なDRより上に行けるかどうかは、まだ測っていない。


出典4件
  1. G. Tiboni, P. Klink, J. Peters, T. Tommasi, C. D’Eramo & G. Chalvatzaki, “Domain Randomization via Entropy Maximization,” ICLR (2024)。DRは最適性と頑健性のトレードオフであり、ランダム化が過剰だと最適性能に届かない過度に保守的な方策になる一方、狭すぎれば汎化しないと指摘——「どこまで広げるか」を自動で決める手法(DORAEMON)を提案しており、本稿が測った代償の大きさ自体がランダム化幅というチューニングの結果であることを示す。 https://proceedings.iclr.cc/paper_files/paper/2024/file/56adf9cb91aedfa41ce24398782a012f-Paper-Conference.pdf

  2. I. Akkaya et al. (OpenAI), “Solving Rubik’s Cube with a Robot Hand,” arXiv:1910.07113 (2019)。手動のドメインランダム化は「大量の手作業の調整と、シミュ側の設計と実機での検証を往復する密なループを要した」「パラメータを増やすほど手動の調整は難しく直感に反していく」ため、難易度を自動で引き上げ続けるAutomatic Domain Randomization (ADR)を導入したと述べる。またADR方策は、学習中に一度も見ていない外乱(ぬいぐるみのキリンで小突く等)を受けてもキューブを操り続けたと定性的に報告(成功率などの定量値は示していない)——本稿のOpenAI事例の裏づけ。 https://arxiv.org/abs/1910.07113

  3. J. Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba & P. Abbeel, “Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World,” IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 23–30 (2017)。原典いわく「シミュレーション画像のみで訓練した(実画像で事前学習していない)深層ニューラルネットワークを、ロボット制御のために実世界へ転移させた、我々の知る限り最初の成功例」——本稿の「レンダリングのランダム化だけで、実画像による事前学習なしに転移できる」という記述の裏づけ(DRという発想そのものの起源を主張する論文ではない)。 https://arxiv.org/abs/1703.06907

  4. P. Henderson, R. Islam, P. Bachman, J. Pineau, D. Precup & D. Meger, “Deep Reinforcement Learning that Matters,” Proceedings of the AAAI Conference on Artificial Intelligence 32(1) (2018)。標準的なベンチマーク環境の非決定性と手法固有のばらつきが重なり、有意性の指標や実験報告の標準化なしには、報告された改善が本物か判断しにくいと指摘——本稿が単一シードの実測値であることを正直に断っている理由の裏づけ。同論文はさらに、試行数N < 5の平均は誤導的でありうること、特にHalfCheetahではシードだけで学習曲線が別の分布に入りうることを示している——本稿の学習シードは1本なので、この警告の内側にある。 https://doi.org/10.1609/aaai.v32i1.11694

この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。