TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

強化学習の枠組み:MDP、状態・行動・報酬・割引、方針と価値関数を卓球のラケットで読み解く

ステータス:ドラフト(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. 図:このシリーズのトイプロブレム

장난감 문제: 옆에서 본 1자유도 진자 라켓 탁구대 끝 y = −1.37 네트 회전축 준비 φ = −0.5 타격 φ > 0 공(상대가 친 실제 타구) 상태: φ, φ̇, 공 y·z·v_y·v_z(지연·잡음 가능), 시각, 바운스 여부 행동: 10 ms 마다 관절 가속도(직접) 또는 첫 걸음에 타격 파라미터 2개 보상: 상대 탁구대에 넣으면 1(희소) 또는 형태를 준 보상
図:横から見た1自由度の振り子ラケットとボール、状態・行動・報酬

学習を数分以内に終わらせ、複数のシードで実行して中央値を算出するためには、問題を小さくする必要があります。そのため、次のように設定しました。

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% -

4.1 環境をまとめてシミュレーションする

強化学習は多くのサンプルを消費します。第12回の1回の学習では、環境ステップを約140万回使用します。そのため、複数の環境をベクトル化して同時にシミュレーションすることが基本となります。 numpyを使用してN個の環境を同一の配列演算で並行処理し、スループットを測定しました(他の計算がない状態、5回中最初の1回を除外して中央値を算出)。

환경을 한꺼번에 굴리면: 병렬 수와 처리량 1 16 256 4,096 1,000 10,000 100,000 1,000,000 한꺼번에 굴린 환경 수(로그) 환경 걸음/초(로그) 1,103 15,742 82,200 180,870 389,283 numpy 벡터 연산, CPU 코어 하나. 걸음 = 10 ms 제어 한 번(물리 10번).
図:同時にシミュレーションする環境数に応じたスループット
同時にシミュレーションした環境数 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. 制限事項

6. まとめ

一言メモ。 ボールが落ちて初めて上手くいったかどうかが分かるんだ。だから、1秒前のスイングまで褒賞が届くように、割引率を0.99と大きめに設定したよ!

参考文献

すべての資料は2026-10-18に閲覧しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます