シミュレーション・制御・実機
倒立振子を立たせてみる——自分の手で、制御で、強化学習で
目次
棒を一本、台車の上にヒンジで立てる。台車を左右に押して、棒を倒さないように保つ——これが倒立振子である。言葉にすれば一行。けれどこの問題は、半世紀以上にわたって制御とAIの最小の実験場であり続けてきた。小さくて全部見通せるのに、本質的な難しさ——不安定な釣り合いを、能動的に保ち続ける——を、歩くロボットとそっくり同じ形で持っているからだ。
賢く見える方法も無料ではない——必ずどこかで払う。 その支払いがどこで起きるのかを、同じ問題を三つの流派に解かせて測った。三つとは、自分の手、古典制御の自動操縦(LQR)、そして強化学習(REINFORCE)である。棒が立つかどうかで優劣は付かない。付くのは、立てるまでに何を先に渡したかの差だ——LQR には世界の物理を渡し、強化学習には転びながら試す時間を渡す。
比べる物差しは一つだけ置く。1000ステップのあいだに、倒さず何ステップ立っていられたか——これだけである。ただしこの物差しに乗るのは後ろの二つ(LQR と強化学習)だけで、どちらも MuJoCo の同じ環境で測った。最初にあなたが手で押す振子はブラウザ用の別実装で、力の上限も転倒閾値も1ステップの長さも違う。∴ ここで「人間 対 機械」の勝敗は付けられない。手で触るのは、不安定な釣り合いを保つ難しさを体で知るための入り口であって、測定ではない。
読む順序は、その制約に合わせてある。まず自分の手で押し、次に自動操縦へ渡し、次に強化学習に同じ問題を解かせ、最後に制御の遅延を足す。遅延を最後に置くのは、そこで自動操縦の「完璧」が壊れるからだ。LQR はいま見えている傾きに対して押し返す。遅延はその「いま」を過去にする——押し返す力が現在の傾きと合わなくなれば、振動は打ち消されずに増幅する。実機の作動には必ず遅延があり、シミュには無い。これが sim2real ギャップで、下のスライダーは「遅延ゼロ」という前提を少しずつ外していく操作にあたる。∴ データ0で立った完璧さも、その前提が崩れれば崩れる。
まずは、頭で理解する前に、手で触ってみる。
まず、自分の手で立ててみる
下の振子は、あなたのブラウザの中で本物の運動方程式に従って動いている。三つ、試してほしい。
- まず、あなたが操作する。 台車を直接ドラッグする(マウス、スマホなら指)か、◀ ▶ ボタン(← → キー)で押す。たぶん、すぐ倒れる。人間は不安定な釣り合いを保つのが苦手である。条件も対等ではない。◀ ▶ ボタンで押せる力は12N、ドラッグのときはポインタへ引っぱるバネが働く(自動操縦と同じ60Nまで)。それでも倒れるのは力の上限のせいではない——あなたが見ているのは台車で、自動操縦は棒の傾きと角速度を毎瞬見ているからだ。
- 次に、自動操縦に任せる。 「フィードバック則」は、傾きと速度から押す力を毎瞬計算する(後で出てくる LQR)。退屈なほど簡単に立て続ける。
- 最後に、遅延を足す。 スライダーを60ミリ秒(3ステップ)へ動かすと、棒は倒れない——けれど止まらなくなる。±14°ほどの振れが、いつまでも収まらない。そこからもう一段、80ミリ秒(4ステップ)にすると、自動操縦は倒れる。 これがsim2realギャップだ。実機の作動には必ず遅延があり、シミュには無い。
「あなたが操作」モード。台車を直接ドラッグ(マウス/指)するか、← → かボタンで押し、棒を立て続けてください。
手で触ると、二つのことが体に入る。自動操縦(LQR)はデータ0で完璧に立てること。そして、その完璧さは「遅延ゼロ」という前提に乗っていること。では、このLQRは何を「知って」いるのか。何も知らない別の流派——強化学習——と比べると、何が違うのか。同じ問題を、二つの流派で実際に解かせて、同じ物差しで測った。
同じ問題を、二つの流派で解かせて測る
シミュレータは MuJoCo(Multi-Joint dynamics with Contact)の InvertedPendulum。物差しは「1000ステップ中、倒さずに何ステップ立っていられたか」。流派は、古典制御の LQR と、強化学習の REINFORCE。全部、手元のマシンでオフラインに走らせた、本物の数字である。GPUを使ったのはPyTorchの方策の学習だけで、LQR側はCPUで走っている。
流派A:「モデルを渡す」——LQR
LQRには、世界の物理を教える。中身は、倒立点のまわりで運動方程式を線形化すること——倒立点の近くだけ、複雑な物理を直線で近似する。ただし今回それを紙の上で解いてはいない。シミュレータを任意の状態にセットする権限(set_state)を使い、有限差分で突いて線形モデルを読み出した。実機では入手しにくい特権である。得られた線形モデルから、「いまどれだけ傾いているか」から「どれだけ押し返すか」を、数学的に最適な形で計算させる。乱暴に一行で言えば——
押す力 = −(傾きや速度のズレ)×(モデルから決まる重み)
「ズレに比例して押し返す」だけ。ただしその重みは、物理を知っているからこそ決まる。もっとも、何を「最適」とするかの基準——状態の重み Q=diag(1,10,1,1)(MuJoCo側の並び ——つまり棒の角度に10倍の重み)と入力の重み R=0.05——は手で選んだ値である。世界のルールブックを手渡された者が、完璧にプレイする。
結果:20シードすべてで1000ステップ中1000ステップ、成功率100%。使った学習データはゼロ。ゼロなのは学習サンプルであって、無コストという意味ではない。線形モデルを読み出すためのシミュレータ操作と、重みの手選びが先に要る。上のデモの自動操縦も同じ考え方だが、同じ実験ではない。デモはブラウザ用の古典的な台車‑振子で、力±60N、|θ|>0.9radで転倒する。この測定のほうはMuJoCoの InvertedPendulum-v4 で、行動は ctrl ±3、環境XMLの gear="100" が掛かるので台車に効く力は±300N、|θ|>0.2radで転倒する。Gymnasiumのドキュメントは行動の単位を “Force (N)” と書いているが、±3 は ctrl の範囲であって、ニュートンで測った力そのものではない。MuJoCo側は力が強い代わりに許される傾きが4分の1以下で、別物の難しさである。1ステップの長さも違う——デモは0.02秒、MuJoCo側は frame_skip 2 × timestep 0.02 で0.04秒だ。以下の数字はすべてMuJoCo側のものである。
流派B:「サンプルを渡す」——強化学習
REINFORCEには、物理を一切教えない。手がかりは試行錯誤だけだ。デタラメに押すところから始め、たまたま棒が少し長く立った方向へ、自分を少しずつ寄せていく。マニュアルなしで、転びながら自転車を覚えるのに近い。
結果が下の図だ。600エピソード・約43,000ステップ練習しても、学習を止めてから測った評価は1000中535ステップだった。ただしこの535は、下の図の赤線の上には無い。赤線は探索ノイズを入れたまま学習中に測ったバッチ平均で、終端はおよそ97ステップ。535のほうは、学習後にノイズを切って決定論的に20本走らせた、別の測定である。しかも不安定で、学習曲線はエピソード350あたりで一度ピーク(平均207ステップ)に届いた後、崩れ、また少し戻る。高分散な方策勾配について言われる振る舞いと合うが、これは torch seed 0 の学習ラン1本の結果である(評価はどちらも20シード)。LQRのゲインは学習を伴わない決定的な値なのに対し、強化学習側は学習シードを振っての確認をしていない——非対称はここにある。学習を通して、一度も1000ステップを立ち切れなかった。

緑の直線がLQR(データ0で天井に張り付く)、細い赤がREINFORCEのバッチ平均、太い赤がその5点移動平均である。同じ問題、同じ物差しで、これだけ違う。
同じ問題、違う「通貨」
どちらも棒は立てられる。けれど、支払う通貨が違う。
- LQR は「モデル」で払う。物理を知っている(測れている)必要がある1。その代わり、データ0で完璧。
- 強化学習 は「サンプルと不安定さ」で払う。モデルは要らない。その代わり、600回転んで約43,000ステップぶんの経験を使い、今回は半分しか立てなかった。
この対比は後付けではない。後で出てくる Barto・Sutton・Anderson 1983——このベンチマークを広めた論文——の要旨自体が、「台車‑振子の運動方程式は既知でないと仮定する」と明示し、そこで手に入る評価信号は「標準的な適応制御が要求するよりずっと質が低い」と断っている2。モデルを取り上げると何が高くつくかは、問題設定のほうに最初から書き込まれていた。
(公平のための補足:今回のREINFORCEは最も素朴なRLである。PPOやSACといった現代的な手法は、今回走らせていない。だからこの535はRLの上限ではない3。ここで見たいのも上限ではなく、支払う通貨が違うという構造のほうだ。)
本当の問いは——それは何を、どこで支払ったのか。その「どこ」を測るのが、エンジニアリングの本体だ。理論上いくら賢くても、有限の予算の中で何を払わされるかは別問題だ——舞台を変えても同じ話である。
そして、最初に手で触った遅延の話が、ここに重なる。ブラウザデモでは、60msで完璧ではなくなり(倒れないが振れが止まらない)、80msで崩れた。MuJoCo側でも同じことを測った(注6)。結果は段階的な劣化ではなく崖である——40ms(1ステップ)では20シードすべてが1000ステップ完走して成功率100%のまま、80ms(2ステップ)では成功率0%・平均24ステップで倒れる。デモとは別の台車‑振子で、力の上限も刻みも違うのに、80msで崩れるという一点は一致した。ただしこの台車は40msより細かい遅延を表現できない(1ステップ=40ms)ので、崖が40msと80msのどちらに寄っているかは、この計器では決められない。デモの「60msで振れが止まらない」はその区間の中にある。∴ この100%について言えることは変わらない——あれは「遅延ゼロ」という前提の上に載った100%である。賢さの通貨も、測れなかったものも、同じ一言を指している——どこかで必ず払う。
では、強化学習は要らないのか?——歴史がそれに答える
いいえ。RLが存在する理由は、まさにモデルが書けない場合にある。きれいな振子の運動方程式は書けても、デコボコの地面を接触しながら歩くロボットの方程式は、同じようには書けない。モデルが尽きるところから、RLの出番が始まる。この記事は、その線引きを手元の実測でなぞったものにあたる。
面白いのは、この分野の二本の柱が、どちらも「運動」と「脳」を理解しようとした人たちから生まれていることだ。
- 倒立振子が学習制御のベンチマークとして広まったのは 1983年、Barto・Sutton・Anderson の論文からだ。“Neuronlike adaptive elements that can solve difficult learning control problems”(IEEE Trans. SMC-13: 834–846)は、後の actor-critic の原型を導入した。しかもその枠組みを動物の条件づけ・神経科学との関係で論じている。上のデモで指で倒した棒は、質量も長さも刻み幅もこの論文の棒と同じものだ(下の「仕組み」を参照)。ただし始点はここではない。同じ問題を試行錯誤で解かせる試みは、Michie & Chambers の “BOXES: An experiment in adaptive control” が先行している(Machine Intelligence 2, 1968, pp.137–152)。副題のとおり狙いは最初から「適応制御の実験」で、書籍は E. Dale and D. Michie 編、Edinburgh の Oliver and Boyd 刊。
- そのMuJoCo自体、運動の制御を研究する神経科学者 Emo Todorov が作ったもの。しかも Todorov は、非線形な生体運動に線形二次レギュレータを反復適用する iLQR(Li & Todorov, 2004)の共著者でもある——この記事が対立させる二つの流派は、舞台を作った一人の中で地続きだった。DeepMindが2021年に買収し、2022年にApache 2.0でオープンソース化したからこそ、今日この実験を誰でも無料で走らせられる。
ベンチマークもシミュレータも、出発点は「動きと脳をどう理解するか」だった。
物理は標準的な台車‑振子の運動方程式、自動操縦はその線形化に対するLQR系の固定ゲイン(詳しい来歴は下の注3)。賢い方が無料で勝つわけではない——LQRはモデルで、強化学習はサンプルと不安定さで、それぞれ払っている。そして遅延を上げれば、完璧な制御則でも振れ幅が収まらなくなり、やがて倒れる(デモ側での実測)。どちらの「完璧」も、その下の測定と、測れなかったもの(遅延)に支配されている。
仕組み——数式で書くとどうなるか(クリックで展開)
台車の状態は4つの数 で表す(台車位置・台車速度・棒の角度・角速度。 は鉛直からの傾きで、0 が真上)。物理定数は台車 、棒 、棒の半長 、重力 、加える力 。ここに書く式は、上のデモが内部で計算しているものと同一だ。この4つ(, , , )と、次に出てくる 秒は、上で触れた Barto・Sutton・Anderson 1983 が使った値そのものである。ただし同論文は台車とヒンジの摩擦(、)を含み、力は N、積分は素のオイラーだった4。ここでは後の Gym 系の慣例に倣って摩擦を落とし、力を N、積分を準陰的オイラーにしている。
- 運動方程式(標準の台車‑振子)。 力 と現在の状態から、台車の加速度 と棒の角加速度 を出す。分母の は、棒を一様な剛体棒とみなしたときの慣性モーメントから来る項である。
- 一歩進める(準陰的オイラー、 秒=50Hz)。 まず加速度で速度を更新し、その更新後の速度で位置を進める(速度を先に使うこの順序=準陰的オイラーは、素朴なオイラーより振動系で安定する)。
- 自動操縦=LQR(線形二次レギュレータ)。 4つの状態それぞれに重み を掛けて足し、その符号を反転した力を加える=。ゲイン は、上の非線形式を真上まわりで線形化したモデルに対して解いた固定値だ。ただし正直に書いておくと、解くときに使った重み は記録が残っておらず、格子探索でも復元できなかった(最良でも要素差 2.7 程度)。解いたあとに手で調整した可能性も排除できない。確かめられたのは、この がこの非線形シミュを実際に安定化すること(5シード×5000ステップで一度も倒れない)までである。力は にクランプする。
-
遅延=この記事の主役の一つ。 制御が計算した力をすぐには効かせず、いったんキューに積んで ステップ遅らせてから台車に渡す(スライダーが を 0〜6 ステップ=0〜120ms で動かす)。完璧なはずの LQR でも、遅延が積もるとゲインの符号合わせが間に合わなくなり、振動が増幅して転倒閾値を超える。手元で同じ物理を再実装して確かめた結果はこうだ。0/20/40 ms では が指数的に 0 へ収束する(1,000ステップごとの最大 が桁で落ち続け、最後の窓では 未満)。60 ms になると平衡そのものが不安定になり、力が N に飽和することで振れ幅だけが頭打ちになる——20,000ステップ倒れないが収束もせず、 は 0.2416 rad(約 13.8°、転倒閾値の約 27%)の定常振動に落ち着く。試した500通りの初期値がすべて同じ振幅へ行き着いた。そこから一段上げた 80 ms で、振れ幅は 0.9 rad を超える(力は N に張り付いたままなので、無限大に発散するわけではない)。つまり境界は 40 ms と 60 ms のあいだにある——線形化した閉ループの成長率は 40 ms で 0.977、60 ms で 1.006 と、1 をまたぐ。棒が落ち着いたところで「つつく(外乱)」を当ててみると、0/20/40 ms は50回中0回、60 ms は50回中16回倒れた。「倒れる/倒れない」の二値では 40 ms と 60 ms が同じに見えるが、外乱を一発入れれば違いは出る。これがsim2realギャップ——実機の作動には必ず遅延があり、シミュには無い——を手元で再現している。棒が 傾くか台車が軌道端()に達したら「転倒」。
-
強化学習側(流派B)。 MuJoCo の
InvertedPendulumを REINFORCE(最も素朴な方策勾配)で600エピソード学習させた。評価は学習を止めた固定方策で「1000ステップ中、何ステップ立てたか」を、探索ノイズを切って20本走らせた平均。LQR と違い学習データを要し、結果は高分散だった。学習の設定は次のとおり。環境はInvertedPendulum-v4(行動は ctrl ±3=実効 ±300 N、|θ|>0.2radで終了)、最適化は Adam・学習率 3e-3、割引なし(γ=1)、ベースラインは収益の指数移動平均、更新は10エピソードごとのバッチ、評価は決定論的な20本。 -
MuJoCo 側の遅延掃引(2026-09-01 実測)。 制御と台車の間に長さ の FIFO を挟み、制御は ステップ前の観測に対して力を決める。LQR の導出(有限差分による線形化 → Riccati 反復)・重み ・20シード・1000ステップ上限は本文の測定と同一で、 は記録済みの結果を再現する(ゲイン ・平均1000ステップ・成功率100%)。結果は 0ms/40ms で成功率100%(20/20 が完走)、80ms で成功率0%(平均24ステップ・最短19)、120〜200ms でも平均19〜20ステップ。⚠ 1ステップ=40ms なので、この台車は40msより細かい遅延を表現できない——崖が40〜80msのどこに在るかは、この計器では決められない。掃引スクリプトと結果 JSON は本文の測定と同じ来歴管理下に置いてある。⚠ 本文の LQR/RL の数値は RTX 3090 で取ったものだが、本掃引は CPU で走らせた(LQR は numpy のみで GPU を使わない)。同一性の根拠は機械ではなく、 がゲインと結果を完全に再現したことである。
出典4件
-
S. Dean, H. Mania, N. Matni, B. Recht & S. Tu, “On the Sample Complexity of the Linear Quadratic Regulator,” Foundations of Computational Mathematics 20, 633–679 (2020)(DOI 10.1007/s10208-019-09426-y。逐語は著者らの arXiv 版要旨 arXiv:1710.01688 から)。本稿は LQR 側の代償を「物理を知っている必要がある」と書くが、原典は”the optimal control problem known as the Linear Quadratic Regulator in the case when the dynamics are unknown”を扱い、“a multi-stage procedure, called Coarse-ID control, that estimates a model from a few experimental trials, estimates the error in that model with respect to the truth, and then designs a controller using both the model and uncertainty estimate” によって “end-to-end bounds on the relative error in control cost” を与える。∴ モデルは「持っていなければならない前提」ではなく、試行回数という別の通貨で買える量でもある——本稿の二分法(モデルで払う/サンプルで払う)は、この意味で線が固定ではない。ただし原典は線形力学を仮定した理論保証であり、また”simple control schemes that do not take the model uncertainty into account fail to stabilize the true system”とも報告している——買えば済むという主張ではない。 https://doi.org/10.1007/s10208-019-09426-y ↩
-
A. G. Barto, R. S. Sutton & C. W. Anderson, “Neuronlike Adaptive Elements That Can Solve Difficult Learning Control Problems,” IEEE Transactions on Systems, Man, and Cybernetics SMC-13(5), 834–846 (1983)。引いた2文はいずれも要旨にある——“It is assumed that the equations of motion of the cart-pole system are not known and that the only feedback evaluating performance is a failure signal that occurs when the pole falls past a certain angle from the vertical, or the cart reaches an end of a track.” および “This evaluative feedback is of much lower quality than is required by standard adaptive control techniques.”(同じ制約は本文 §I と §V「A Learning Control Problem: Pole Balancing」でも繰り返される)。ただし原典はこの制約を Michie & Chambers に倣って意図的に課したものだと明言しており、「よく確立された適応制御の手法の多くは棒立てに適用でき、実際に適用されてきた(が、我々が課す制約の下でそのまま使えるものは知らない)」とも書いている——制御では棒を立てられないという主張ではなく、本稿の「どちらも棒は立てられる/違うのは支払う通貨」と同じ立て付けである。 https://doi.org/10.1109/TSMC.1983.6313077 ↩
-
M. P. Deisenroth, D. Fox & C. E. Rasmussen, “Gaussian Processes for Data-Efficient Learning in Robotics and Control,” IEEE Transactions on Pattern Analysis and Machine Intelligence 37(2), 408–423 (2015)。要旨は本稿の前提(“autonomous reinforcement learning (RL) approaches typically require many interactions with the system to learn controllers, which is a practical limitation in real systems”)を認めたうえで、確率的な遷移モデルを学ぶことで “Compared to state-of-the art RL our model-based policy search method achieves an unprecedented speed of learning” と述べる。本文の実測はさらに具体的で、実機の台車‑振子について “To solve the swing-up plus balancing, PILCO required only 17.5 s of interaction with the physical system”(§7.2、シミュレーション側は15エピソード=37.5秒ぶん)。本稿の REINFORCE は約43,000ステップ=刻み40msで約1,720秒ぶんを使ったので(この換算は本稿側の計算)、同じ「RLのサンプル代」でも手法によって桁が動く。∴ 本稿が測ったのは「RLの値段」ではなく「最も素朴なRLの値段」である。なお PILCO の課題は振り上げ+静定で本稿の「立った状態を保つ」より難しく、17.5秒は実機での値——数字をそのまま本稿の535と並べることはできない。 https://doi.org/10.1109/TPAMI.2013.218 ↩
-
同上(Barto・Sutton・Anderson 1983)の付録の定数表。“g = -9.8 m/s2, acceleration due to gravity” / “m_c = 1.0 kg, mass of cart” / “m = 0.1 kg, mass of pole” / “l = 0.5 m, half-pole length” / “mu_c = 0.0005, coefficient of friction of cart on track” / “mu_p = 0.000002, coefficient of friction of pole on cart” / “F_t = +/-10.0 newtons, force applied to cart’s center of mass at time t”、および “the results reported in this article were produced using Euler’s method with a time step of 0.02 s”。本稿が「この論文の棒と同じ値」と書いている4定数と刻み 0.02 秒、および本稿が落とした摩擦2つ・力の大きさ・積分法の裏づけ。なお同論文は当初 Adams–Moulton 予測子修正子法を使い、掲載した結果は計算速度のためオイラー法で出したと断っている——「素のオイラー」は掲載結果についての記述であって、著者が他法を試していないという意味ではない。 https://doi.org/10.1109/TSMC.1983.6313077 ↩
この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。