In Silico

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

強化学習のsim2realギャップを実測:遅延とドメインランダム化

2026/6/30 (更新: 2026/10/11)

  • sim2realギャップ
  • 強化学習
  • フィジカルAI
  • 歩行方策
  • MuJoCo
  • HalfCheetah
  • PPO
  • ドメインランダム化
  • ADR
  • system identification
  • LQR
  • 作動遅延
  • 方策
  • 報酬
  • 乱数シード
  • 頑健性
  • 摂動スイープ
  • 決定論評価
  • 倒立振子
  • 質量
  • 摩擦
  • Minitaur
  • ルービックキューブ
  • OpenAI
  • DORAEMON
  • 制御コスト
  • stable-baselines3
目次
背景・問い・要点
背景

脚で歩くロボットのように、地面との接触が複雑で運動方程式をきれいに書けない問題では、シミュレータの中で強化学習に方策を学ばせる手がよく使われる。学んだ方策は、訓練に使ったシミュの物理に合わせて最適化されている。ところが実機の物理は、そのシミュと少しずつ違う。関節は少し重いかもしれず、床は少し滑るかもしれず、モーターの指令には必ずわずかな遅延がある。この違いで方策の性能が落ちることを、sim2realギャップと呼ぶ。

本稿は、MuJoCo の HalfCheetah で歩行方策を手元で学習させ、物理だけをずらして測り直した実測を例に取る。実機は一台も動かしておらず、「現実」の側に置いたのは、訓練時から物理を少しずらした同じシミュレータである。

問い

訓練に使ったシミュの中でよく走る方策は、物理をどれだけずらすと崩れるのか。そして、訓練のあいだ物理を揺らすドメインランダム化で備えると、何が得られ、何を失うのか。

要点

訓練に使ったシミュの中でよく走る方策は、作動を1ステップ、つまり50ミリ秒遅らせるだけで崩れた。 報酬(前進速度から制御コストを引いた値の1000ステップ合計)は1150から26へ落ちた。質量は2倍にしないと崩れなかった。ドメインランダム化(DR)で学んだ方策は、同じ遅延下で337を保つ。ただし無摂動時の報酬は353で、1150より低い。頑健さは買えたが、ピークは下がった。 学習の乱数シードは方策ごとに1本なので、この差をDRの代金と言い切ることはできない。

モデル・例示

同じ方策で測った差と、別々に学んだ方策の差

※ この節の数値は説明のための仮定で、測定値ではありません。

歩行方策を一つ学習させ、訓練と同じ物理で12回評価すると、報酬の平均が1000だったとする。同じ方策を、同じ12個の評価シードのまま、作動遅延だけを足した物理で評価すると100だった。方策も評価の乱数も同じで、変えたのは物理だけなので、900の落差は物理の違いから来たと言える。

次に、訓練のあいだ物理を揺らして、別の方策をもう一つ学習させる。訓練と同じ物理での平均は400、遅延を足した物理では350だったとする。遅延下では揺らして学んだほうが250上回り、無摂動では600下回る。

この600には、二つのものが混ざっている。訓練の仕方の違いと、学習の乱数シードの当たり外れである。仮に、最初の方策を乱数シードだけ変えて学び直すと、無摂動の平均が500から1300まで散るとする。散らばりの幅が600より広いので、1本ずつの比較では、600のうちどこまでが訓練の仕方の差なのかを決められない。

900と600は、どちらも報酬の差だが、読める範囲が違う。

  1. 同じ方策で物理だけを変えた差は、学習の乱数を共有しているので、物理の違いとして読める。
  2. 別々に学習した方策どうしの差は、乱数シードによる散らばりと比べられるだけの試行を重ねるまで、訓練の仕方の差としては読めない。

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

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

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

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

動かせるのは前後の脚にある6つの回転関節だけで、胴体を直接持ち上げる関節は無い。姿勢は脚の協調だけで保つので、一度崩れると立て直しにくい。倒立振子の実測では、モデルを渡した古典制御(LQR)がデータ0で20シードすべて1000ステップ倒れずに立ち、最も素朴な強化学習は約43,000ステップ学習しても535だった。ただしそのLQRも、制御に80ミリ秒の遅延を足すと立てなくなった。チーターは倒立振子と違い、地面との接触が複雑で、きれいな運動方程式を書いて制御器に渡す、という手が使えない。モデルが無い。ここが強化学習(RL)の出番である。

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

RLには物理を教えない。最初はデタラメに関節を動かし(ランダム方策の報酬は −263)、たまたま前に進めた動きを少しずつ強化していく。標準的な実装(PPO, stable-baselines3)で30万ステップ学習させた。以下は全部、手元のマシンでオフラインに走らせた本物の数字である(学習はGPU、摂動評価は推論だけなのでCPU)。

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

【図の読み方】横軸=学習ステップ(経験の量)、縦軸=報酬(高いほど上手に走れる。前進速度から制御コストを引いた値の1000ステップ合計)。破線はランダム方策のベースライン(−263)。見るべきは右肩上がりの曲線である。曲線が破線を引き離していく=モデルを渡さずに走り方を獲得している。上の点線は、ばらつきを止めた決定論評価での最終スコア(+1177)。曲線の終端(≈672)より点線が高い理由は二つある。曲線は直近100エピソードの平均なので学習の進み方より遅れて動き、決定論評価は学習中の探索ノイズを切って測る。

ランダムの −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ギャップである。「凸包より下 ≠ 現実」、つまり計算上の最適は、現実の最適ではないということの、ロボット版そのものだ。比喩ではなく、私たちが実測した谷である。

遅延が方策を崩すという向きは、実機でも報告されている。Tanら(2018)は四足ロボット Minitaur の sim2real を扱い、アクチュエータのモデルの不正確さと遅延がモデル化されていないことを、現実ギャップの二大原因として挙げた1。同論文によれば、物理シミュレータ Bullet では指令が即座に効き、センサも状態を即座に返すので、シミュ内のフィードバック制御器の安定領域は実機よりずっと広くなる。そのためシミュで学んだ方策が実機で振動し、発散し、最後には失敗する例がよく見られる、と同論文は述べる。ただし遅延の桁は本稿と同じではない。Tanらが実機で測った遅延は、マイコン上のPDサーボが3ミリ秒、TX2上の歩行制御器が通常15〜19ミリ秒で、どちらも本稿の1ステップ=50ミリ秒より小さい。本稿は遅延を制御ステップ単位で入れたので、50ミリ秒がこの設計で入れた最小の遅延である。したがって本稿の結果が示すのは、この設計で入れた最小の遅延(1ステップ)で方策が既に崩れることであって、同論文の実機程度の遅延で崩れることではない。

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

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

では、どう直すか。最も標準的な手がドメインランダム化(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)とドメインランダム化(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が上(1150 対 353)、1〜4ステップの遅延ではどの点でもDRが上だった(1ステップで26 対 337)。ただし遅延ゼロでも、質量2倍ではDRが上回る(41.4 対 −119)。50ミリ秒より短い遅延は測っておらず、いずれも1シードずつの方策どうしの比較である。

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

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

DRは「現実がどこにあるか分からないから、広く備える」戦略である。けれどもし、現実の遅延や質量を実際に測れたら、その値に合わせて訓練・適応すればいい。これが system identification(同定) の発想である。広く張るのでなく、ずれている当の量に狙いを定める。ただし「測れるなら」が条件になる。OpenAIのルービックキューブの事例は、両方を使っている。手の関節の力学は、実機で記録した関節位置に合わせて校正し、ADRの出発点に置いた。キューブのほうも、力学をごく初歩的に校正して実物におおまかに合わせ、ランダム化の出発点とした。同じ論文の別の節は、キューブをシミュで正確に捉える方法は無いので力学を校正する努力はせず、代わりにADRでランダム化を自動化した、とも書いている3。Tanらの四足ロボットでも、アクチュエータのモデルと遅延の扱いをシミュに入れないままランダムな摂動を加えて学んだ制御器は実機で性能が低く、両方を入れたうえで摂動も加えた群だけがシミュと実機で同程度の性能を出した1。測ることと広く備えることは、二者択一ではない。DORAEMONを提案したTiboniらの論文は、実データから力学パラメータの事後分布を推定し、その推定をDRに使う手法群を挙げ、この手法群が Adaptive Domain Randomization と呼ばれていると整理している2。測って直す手と広く備える手は、同じ設計の中で組み合わせられる。

狙いを定めて測って直すほうが、幅で備えるDRより上に行けるかどうかは、本稿ではまだ測っていない。

方法の注:学習シード1本で確かめられる範囲

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

本記事の各数値は、方策ごとに学習の乱数シードを1つだけ使って学習した1本ずつの方策を評価した結果である。nominal方策のシードはseed=0で、DR方策のシードは記録に残っていない。評価の本数は場面ごとに違い、学習直後の決定論評価が20本(+1177)、ランダム方策が10本(−263)、摂動スイープが各条件12本である。摂動スイープの基準値1150は、スイープと同条件で測り直した12本の値で、20本の1177とは別の測定にあたる。ばらつきも全条件で記録してあり、たとえばDR方策の無摂動時は353±162(平均±標準偏差)だった。「1シード」とは学習の乱数シードが方策ごとに1つ(nominalはseed=0)という意味で、評価側は条件ごとに12個の異なるシードを使っている。

この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倍だった。結論でも、性能を比較するなら異なる乱数シードで多数の試行を走らせねばならない、高い平均リターンが本当に良い性能を表しているかは正しい有意性検定で確かめる必要がある、と述べている5。∴ DRが代償を払うこと自体はここでの測定と矛盾しないが、353という代償の大きさも、質量・摩擦軸でのnominal優位も、本稿の設計では確定していない。

実験条件は上記のとおりで、コードとシード・生の結果ファイルは手元に保存してある(リポジトリは非公開)。ただしDR方策の学習スクリプトは記録に残っていない。ランダム化の幅(質量×0.8〜1.4倍・遅延0〜2ステップ、40万ステップ)は当時の作業記録に基づく値で、DR側の評価の数値は結果ファイルに残っているが、DR方策のファイルはリポジトリに無く、評価も訓練設定も再走で確かめていない。


出典5件
  1. Tan, J. ほか「Sim-to-Real: Learning Agile Locomotion For Quadruped Robots」RSS XIV, 2018. https://arxiv.org/pdf/1804.10332v2 — アクチュエータのモデルの不正確さと、遅延がモデル化されていないことを現実ギャップの二大原因とし、実機の遅延を3msと15〜19msと測る。 ↩ ↩2 ↩3

  2. Tiboni, G. ほか「Domain Randomization via Entropy Maximization」ICLR, 2024. https://proceedings.iclr.cc/paper_files/paper/2024/file/56adf9cb91aedfa41ce24398782a012f-Paper-Conference.pdf — DRを最適性と頑健性のトレードオフと先行研究に帰属し、幅を実データ無しで自動で決めるDORAEMONを提案する。 ↩ ↩2

  3. Akkaya, I. ほか (OpenAI)「Solving Rubik’s Cube with a Robot Hand」arXiv:1910.07113, 2019. https://arxiv.org/abs/1910.07113 — 手動の調整の限界からADRを導入し、実機の外乱は定性報告のみ、失敗確率はシミュ上の摂動で測る。 ↩ ↩2

  4. Tobin, J. ほか「Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World」IROS, 2017. https://arxiv.org/abs/1703.06907 — シミュ画像だけで訓練し、実画像の事前学習なしで実世界のロボット制御へ転移させたと書く。 ↩

  5. Henderson, P. ほか「Deep Reinforcement Learning that Matters」AAAI 32(1), 2018. https://doi.org/10.1609/aaai.v32i1.11694 — 乱数シードだけでHalfCheetahの学習曲線が別の分布に入りうると示し、比較には多数の試行と有意性検定を求める。 ↩

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。