ステータス:ドラフト(2026-10-18)、実測。 数値はノートパソコン(Apple M1 Max、macOS 26.5)のPython 3.9.6・numpy 2.0.2で直接計算したシミュレーション値です。 元データとコード:作業ディレクトリ
measure/robot-arm-basics/rl/のttenv.py(環境)、ヌルbaselines.py,thr.py、結果out/rl/baselines.json,out/rl/throughput.json。トイプロブレムは原理を示すために意図的に小さく作成したものであり、実際のロボット実験はありません(ハードウェア未計測)。 ボールの初期状態はDeepMindのデータセット(CC-BY 4.0)に基づいています。参考資料は2026-10-18に閲覧しました。 作成ルール:実測データを基本とし、計測できなかったものは「未計測」、確認できなかったものは「未確認」と表示します。
目次
1. 直感:結果は遅れてやってくる
第1〜第10回の方法では、「何が正しいか」を事前に計算していました。強化学習(reinforcement learning, RL)はそのような計算を行いません。試してみて、結果を見て、結果が 良かった方向へ行動を少しずつ修正していきます。子供がボール投げを学ぶ方法と同じです。
卓球では、この「結果」が遅れてやってきます。ラケットを後ろに引いた瞬間にはそれが正しいかどうかは分かりません。0.5秒後にボールが相手の卓球台に落ちて初めて成功というシグナルが 届きます。その間に、腕は何十回もの決定を下しています。 どの決定が成功に寄与したかを切り分ける作業(クレジット割り当て、credit assignment)が強化学習における最大の難所であり、 この記事で紹介する割引率や価値関数、第12回のアドバンテージ関数は、すべてこの問題に対処するための仕組みです。
第10回では「何を学習に委ねるか」という疑問を投げかけました。第11〜15回では、その疑問の「学習」の側面を原理から見直します。第11回で枠組みを構築し、第12回でPPOを独自に実装し、 第13回で報酬と行動空間を、第14回でシミュレーションから現実世界への移行(Sim-to-Real)を、第15回で評価方法を扱います。
2. 図:このシリーズのトイプロブレム
学習を数分以内に終わらせ、複数のシードで実行して中央値を算出するためには、問題を小さくする必要があります。そのため、次のように設定しました。
- 横から見た2次元空間。 卓球台の長さ方向(y)と高さ方向(z)のみを残し、幅方向(x)は省略しました。座標系は第1〜第10回と同じです。
- 1自由度の振り子ラケット。 回転軸が(y, z)=(-1.95, 0.90)mにあり、長さ0.75mのアームが下向きにぶら下がって前後にスイングします。ラケット面の法線はアームに垂直であり、 最下点を通過した後(φ > 0)にボールをヒットすると、前上方へ打ち上げます。関節の制限は φ ∈ [-0.9, 0.9] rad、速度20 rad/s、加速度300 rad/s²です(第10回の前提と同じ大きさ)。
- ボール。 DeepMindのデータセットから、ロボット側に向かう実際の打球のy・z位置・速度およびω_xの回転をそのまま使用しました。飛行モデルは第6回(重力・抗力・マグナス効果・バウンド)、 ラケットの反発モデルは第7回(e_r = 0.8、摩擦無視)です。物理演算は1 msのタイムステップで積分します。
- 成功。 バウンドしたボールがネットを越えて相手側の卓球台(0 < y < 1.37 m)に落ちれば成功です。
- ボールの分割。 ラケットの円弧付近を通過する7,315個のボール(ロボット側に向かう14,703個のボールのうち)の中から1,000個を評価用に切り分け、学習には使用しません(第15回)。
1自由度であるため、ラケットの角度とラケットの速度を個別に選ぶことはできません。いつヒットするかによってラケット面の角度が直接決まります。そのため、一部のボールはどのように打っても返すことができず、この限界を 第4節で「上限」として測定します。
3. 枠組み:マルコフ決定過程
強化学習の問題は通常、マルコフ決定過程(Markov decision process, MDP)として定式化されます。5つの要素を卓球のラケットに対応させると次のようになります。
| 要素 | 意味 | トイプロブレム | 実際の卓球ロボット |
|---|---|---|---|
| 状態 s | 将来を決定するために必要なすべての情報 | φ, φ̇, ボール y・z・v_y・v_z, 時刻, バウンドの有無(8個) | 関節の角度・速度、ボールの位置・速度の直近の履歴、対戦相手の情報 |
| 行動 a | 各ステップで選択するもの | 10 msごとの関節加速度1つ(直接)、または打撃パラメータ2つ(第13回) | 関節の速度・トルク指令、または打撃スキルの選択 |
| 遷移 P(s′|s, a) | 次の状態が決定されるルール | 第6・7回の物理法則(学習者は知らない) | 現実世界 |
| 報酬 r | ステップごとに受け取る数値 | 入れば1(スパース)、またはシェーピングされた報酬(第13回) | 設計者が決定する |
| 割引率 γ | 将来の報酬をどれだけ割り引くか | 0.99 | 問題ごとに設定 |
マルコフ性。 「現在の状態さえ分かれば過去は不要である」という仮定です。ボールの位置だけを与えて速度を抜くと、この仮定が崩れます。同じ位置であっても、ボールが近づいているのか遠ざかっているのか 分からないためです。遅延がある場合もこの仮定は崩れます。20 ms前のボールを見ている場合、その間に自分が送った指令も知らなければ現在の状態を把握できません。そのため、実際のシステムでは 直近の複数の観測値を状態に含めます。D'Ambrosioら(2024)の低水準方針では、ボールの位置・速度と関節状態の直近8ステップを入力として受け取ります(arXiv:2408.03906 セクションII-C)。
方針と価値。 方針(policy)π(a|s)は、状態から行動を選択するルールです。このシリーズの方針は、ニューラルネットワークが平均を計算し、正規分布から行動をサンプリングするガウス方針です。価値関数は「この状態でこの方針に従った場合、将来得られる割引報酬和の平均はどれくらいか」を表します。
되돌림(return): G_t = r_t + γ r_{t+1} + γ² r_{t+2} + …
상태 가치: V(s) = E[ G_t | s_t = s ]
행동 가치: Q(s, a) = E[ G_t | s_t = s, a_t = a ]
이점(advantage): A(s, a) = Q(s, a) − V(s) 「평소보다 얼마나 나은 행동이었나」
アドバンテージは、第12回のPPOが行動を修正する方向を決めるために使用されます。「良い結果」ではなく**「普段より良い結果」**に対して褒賞を与えることで、ボールが簡単だったのか、それとも行動が良かったのかを 区別することができます。
割引率とホライズン。 γは将来の報酬を1ステップごとにγ倍に割り引きます。おおむね1 / (1 - γ) ステップ先まで「見えている」と考えることができます。
| γ | 0.9 | 0.95 | 0.99 | 0.999 |
|---|---|---|---|---|
| 有効ホライズン 1 / (1 - γ) | 10ステップ(0.1 s) | 20ステップ | 100ステップ(1.0 s) | 1,000ステップ |
トイプロブレムのエピソード長は、ランダム方針で測定した結果、第5・50・95パーセンタイルがそれぞれ62・105・137ステップでした(10 msステップ)。成功報酬はエピソードの最後に1回だけ与えられるため、γ = 0.9では 80ステップ前のスイング開始時点におけるその報酬は 0.9⁸⁰ ≈ 0.0002 しか残りません。そのため、0.99を使用します。代わりに、ホライズンが長くなるほどリターンの分散が大きくなりますが、これに対処するのが第12回のGAEです。
4. 実測:学習なしでどこまで行けるか
学習を開始する前に、ベースラインを測定します。第15回で改めて述べますが、ベースラインのない学習曲線を何も物語りません。評価用の1,000個のボールに対する結果です。
| 方法 | 成功(返球成功) | ラケットにヒット |
|---|---|---|
| ランダム方針(毎ステップ加速度を一様にランダム選択) | 1.5% | 27.4% |
| 何もしない(準備姿勢を維持) | 0% | 9.6% |
| ハイブリッド行動空間における最適な定数行動(すべてのボールに対して同じ打撃パラメータ) | 45.9% | - |
| 古典的プランナー:回転を知らないモデルで119個の格子を試してボールごとに選択 | 40.0% | - |
| ハイブリッド行動空間の上限:真の結果を用いて格子からボールごとに選択 | 85.4% | - |
- モデルが間違っている場合、プランナーは定数行動よりも劣る可能性があります。 回転を知らないモデルを使用してボールごとに「最も良さそうに見える」行動を選択したプランナー(40%)は、すべてのボールに同じ行動を用いた場合(46%)よりも 結果が劣りました。誤ったモデルはボールごとに異なる方向に間違えるためです。第6回の「回転を知らなければ5cmの誤差」という点が、ここで成功率として表れています。
- 上限 85%。 同じ行動空間において、結果を事前に知った上で選択したとしても、15%は返球できませんでした。これが1自由度ラケットの限界です。学習によってこの数値を超えた場合、それは行動空間が 異なっていることを意味します(第13回で直接制御とハイブリッドが比較されます)。
- 先にお伝えすると、第12回のPPOは同じボールに対して直接制御により中央値83%に到達しました。
4.1 環境をまとめてシミュレーションする
強化学習は多くのサンプルを消費します。第12回の1回の学習では、環境ステップを約140万回使用します。そのため、複数の環境をベクトル化して同時にシミュレーションすることが基本となります。 numpyを使用してN個の環境を同一の配列演算で並行処理し、スループットを測定しました(他の計算がない状態、5回中最初の1回を除外して中央値を算出)。
| 同時にシミュレーションした環境数 | 1 | 16 | 256 | 1,024 | 4,096 |
|---|---|---|---|---|---|
| 環境ステップ / 秒(中央値) | 1,103 | 15,742 | 82,200 | 180,870 | 389,283 |
| 環境が1つの場合との比率 | 1倍 | 14倍 | 75倍 | 164倍 | 353倍 |
環境を1つだけシミュレーションする場合はPythonの1ステップあたりのオーバーヘッドが大半を占めますが、配列が大きくなるとそのコストが複数の環境に分散されます。Rudinら(2021)はこの発想をGPU物理エンジンで押し進め、 数千台のロボットを並列シミュレーションし、平地歩行の方針をワークステーションのGPU1枚で4分以内に学習させたと報告しています(arXiv:2109.11978 抽象)。 D'Ambrosioら(2024)は、ベース方針を6,000個の並列シミュレーションワーカーを用いて約24億ステップ学習させました(セクションII-C)。これについては第14回で改めて扱います。
5. 制限事項
- 2次元・1自由度という設定は、実際の卓球のラケットとは異なります。ボールの左右の位置、ラケット面の左右の向き、回転軸のその他の成分はすべて省略されています。
- ラケットは指示された加速度を誤差なく発揮します(第9回の制御問題は除外しています)。第14回において、遅延とノイズのみを個別に導入します。
- スループットはこのトイエンロ環境における数値です。MuJoCoのような物理エンジンのスループットは未計測です。
6. まとめ
- 強化学習の枠組みは、状態・行動・遷移・報酬・割引の5つから構成されます。卓球のラケットに置き換えると、「ボールと腕の状態」、「関節の指令または打撃パラメータ」、「物理法則」、「入ったかどうか」、「どれくらい先を見据えるか」に相当します。
- 遅延が存在する場合、マルコフ性が崩れるため、観測の履歴を状態に含めます。
- 成功報酬が1秒後に与えられるため、γ = 0.99のような長いホライズンが必要になります。
- 学習の前にベースラインを測定します。トイプロブレムでは、ランダムが1.5%、誤ったモデルを用いたプランナーが40%、行動空間の上限が85%となっています。
一言メモ。 ボールが落ちて初めて上手くいったかどうかが分かるんだ。だから、1秒前のスイングまで褒賞が届くように、割引率を0.99と大きめに設定したよ!
参考文献
すべての資料は2026-10-18に閲覧しました。
- D'Ambrosio 他, Achieving Human Level Competitive Robot Table Tennis, arXiv:2408.03906, II-C節(ポリシー入力)。
- Rudin, Hoeller, Reist, Hutter, Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning, arXiv:2109.11978, アブストラクト。
- Google DeepMind, competitive_robot_table_tennis, CC-BY 4.0.