Skip to content
Published on

ロボットはどう学ぶのか — 模倣学習と強化学習

Authors

はじめに

ロボットに「コーヒーカップを掴んで動かせ」と言うのは簡単です。しかしその一文の背後には、指先の力加減、カップの位置推定、腕の軌道計画、滑りの検知といった無数の低レベル制御が潜んでいます。人間は幼い頃から何度も転び、こぼしながらこうした感覚を身につけますが、ロボットは最初からそのすべてを自ら学ぶか、誰かから学ばなければなりません。

ロボットが技能を獲得する方法は、大きく四つに分けられます。人が手本を示せばそれを真似て学ぶ模倣学習、試行錯誤と報酬を通じて自ら最適な行動を見つける強化学習、仮想環境で大量の経験を積むシミュレーション学習、そして人が規則や軌道を直接コーディングする事前プログラミングです。

この記事では、特に近年のロボット学習研究の中心にある模倣学習と強化学習を掘り下げます。それぞれがどう動くのか、どんな場面で強く弱いのか、どれだけデータを必要とするのか、そしてなぜ最新の研究が両者を組み合わせようとするのかを見ていきます。正確を期すため、具体的な数値や特定システムの詳細仕様は確実なもののみに触れ、不確かな部分は一般化して述べます。

ロボット学習の四つのアプローチ

まず全体を俯瞰しましょう。下の図は、ロボットが行動方策(どの状態でどの行動を取るかを決める関数)を得る四つの経路を示しています。

                   ロボット方策(Policy)を得る経路
                   ──────────────────────────────

  (1) 事前プログラミング          (2) 模倣学習
  ┌───────────────────┐      ┌───────────────────────┐
  │ 人が規則・軌道を     │      │ 人が手本を示し、        │
  │ 直接コードで記述     │      │ ロボットがデータで学ぶ   │
  │                   │      │                       │
  │ 例: 溶接ロボットの   │      │ 例: テレオペで収集した   │
  │     固定経路        │      │     操作デモ            │
  └─────────┬─────────┘      └───────────┬───────────┘
            │                            │
            ▼                            ▼
       ┌──────────────────────────────────────────┐
       │            行動方策 π(a | s)                │
       │      状態 s ──▶ 行動 a を決める関数           │
       └──────────────────────────────────────────┘
            ▲                            ▲
            │                            │
  ┌─────────┴─────────┐      ┌───────────┴───────────┐
  │ 大量の仮想経験で     │      │ 報酬を最大化するよう     │
  │ 方策を訓練          │      │ 試行錯誤で方策を改善     │
  │                   │      │                       │
  │ 例: 物理エンジン内で │      │ 例: 倒れなければ +報酬  │
  │     数千時間の並列    │      │     倒れれば -報酬      │
  └───────────────────┘      └───────────────────────┘
  (3) シミュレーション学習       (4) 強化学習

これら四つのアプローチは排他的ではありません。実際のシステムでは、シミュレーションで強化学習により大まかな方策を作り、現実の人間のデモで模倣学習によって仕上げるといった具合に、複数の方法を組み合わせることが多いのです。以下の節で模倣学習と強化学習を一つずつ詳しく見ていきます。

模倣学習 — 手本を見て真似る

模倣学習(Imitation Learning)の発想は単純です。専門家(多くは人間)が課題を遂行する様子をデータとして残し、ロボットがそのデータから「この状態ではこの行動を取る」という対応関係を学ぶのです。要点は、明示的な報酬関数を設計しなくてよいことです。「何が良い行動か」を数式で定義する代わりに、良い行動の例を見せればよいのです。

デモデータの収集方法

模倣学習の成否は、デモデータの質と量にかかっています。データを収集する代表的な方法は次のとおりです。

  • テレオペレーション(Teleoperation): 人がジョイスティック、VRコントローラ、あるいはロボットアームを模したマスター装置でロボットを遠隔操作します。このときロボットの関節角度、グリッパの状態、カメラ画像が一緒に記録され、状態-行動の組が作られます。ロボット自身の身体でデータが集まるため、身体の不一致問題が少なくなります。
  • モーションキャプチャ(Motion Capture): 人の動作をマーカーやカメラで追跡して軌道を得ます。自然な動作を大量に得られますが、人とロボットの身体が異なるため、そのまま移せないリターゲティング(retargeting)の問題があります。
  • キネステティック教示(Kinesthetic Teaching): 人がロボットアームを直接手で掴んで動かし、望む軌道を示します。直感的ですが大規模収集には不向きです。

行動クローニング — 最も基本的な形

模倣学習の最も単純な形は行動クローニング(Behavioral Cloning, BC)です。これは本質的に教師あり学習です。状態を入力、専門家の行動を正解ラベルとして、方策ネットワークがその対応を真似るように学習させます。

# 行動クローニングの概念的な学習ループ(疑似コードに近い例)
import torch
import torch.nn as nn

class PolicyNet(nn.Module):
    def __init__(self, obs_dim, act_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(obs_dim, 256), nn.ReLU(),
            nn.Linear(256, 256), nn.ReLU(),
            nn.Linear(256, act_dim),
        )

    def forward(self, obs):
        return self.net(obs)

policy = PolicyNet(obs_dim=32, act_dim=7)
optimizer = torch.optim.Adam(policy.parameters(), lr=1e-4)
loss_fn = nn.MSELoss()

# demo_states, demo_actions: 専門家デモから集めた状態-行動の組
for states, expert_actions in dataloader:
    predicted = policy(states)
    loss = loss_fn(predicted, expert_actions)  # 専門家の行動との差を最小化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

行動クローニングは実装が容易で学習が安定するという大きな利点があります。しかし致命的な弱点が一つあり、それが分布シフト(distribution shift)の問題です。

分布シフトと複合誤差

行動クローニングで学習した方策は、デモで見た状態でしかうまく動きません。ロボットが実際に動くと小さな誤差が生じ、その誤差のせいでデモで一度も見たことのない状態に到達します。そうした状態では方策が何をすべきか分からないため、さらに大きな誤差を出します。この誤差が雪だるま式に膨らむことを複合誤差(compounding error)と呼びます。

   デモ分布(専門家が通った状態)
   ●●●●●●●●●●●●●●●●●●●●●●▶ 目標
        │ 小さな誤差が発生
   ○ ── デモにない状態(方策が未熟)
        │ より大きな誤差
   ○ ─────── ますます見知らぬ状態へ逸脱
             (複合誤差で課題が失敗)

DAgger — 見知らぬ状態にも備える

この問題を緩和する代表的な手法がDAgger(Dataset Aggregation)です。核心は「ロボットが実際に訪れる状態で専門家ならどうしたか」を追加で尋ねることです。

手順は次のとおりです。まず初期デモで方策を学習します。その方策を実際に走らせると、ロボットはデモにない新しい状態を訪れます。このときそれらの状態を記録しておき、専門家に「この状態では何が正しい行動か」をラベル付けさせます。新たに得た状態-行動の組を既存データに合わせて方策を再学習します。この過程を繰り返すと、方策が訪れる状態分布と学習データの分布が次第に一致していきます。

   DAgger の反復ループ
   ────────────────────

   [1] 現在の方策でロボットを実行
   [2] ロボットが訪れた状態を収集
   [3] 専門家がその状態に正しい行動をラベル付け
   [4] データセットに蓄積後、方策を再学習
            └────────▶ (再び [1] へ)

DAgger の代償は専門家の反復的な介入です。人が継続的にラベル付けをしなければならず、コストが大きくなります。それでも複合誤差の問題を実質的に減らすため、広く使われています。

強化学習 — 試行錯誤で自ら学ぶ

強化学習(Reinforcement Learning, RL)はまったく異なる哲学から出発します。手本を見せる代わりに、「何が良いか」を報酬(reward)というスカラー信号で定義します。ロボット(エージェント)は環境と相互作用しながら行動を取り、その結果として報酬を受け取ります。目標は累積報酬(長期的に受け取る報酬の総和)を最大化する方策を見つけることです。

中核をなす構成要素

強化学習の相互作用構造は次のように要約できます。

        強化学習の相互作用ループ
        ──────────────────────────

        ┌────────────────────────┐
        │       エージェント        │
        │   (方策 π: s ──▶ a)      │
        └───────┬────────────────┘
                │ 行動 a
        ┌────────────────────────┐
        │        環境             │
        │  (ロボット + 物理世界)   │
        └───────┬────────────────┘
                │ 新しい状態 s'、報酬 r
        ┌────────────────────────┐
        │ 経験 (s, a, r, s') を蓄積 │
        │  ──▶ 方策 π を改善        │
        └────────────────────────┘
  • 状態(State): ロボットと環境の現在の状況。関節角度、物体位置、カメラ画像など。
  • 行動(Action): ロボットが取りうる操作。関節トルク、目標速度など。
  • 報酬(Reward): 各時点で受け取る即時の評価信号。例えば目標に近づけば正の報酬、物を落とせば負の報酬。
  • 方策(Policy): 状態を行動に写す関数。強化学習が改善しようとする対象です。
  • 探索と活用(Exploration vs Exploitation): 既に良いと分かっている行動を繰り返す(活用)か、より良い行動を求めて新しい試み(探索)をするかのバランス。このバランスが強化学習の中核的な難題の一つです。

報酬設計の難しさ

強化学習の性能は、報酬関数をどれだけうまく設計するかに大きく左右されます。報酬が疎すぎると(例: 課題を完全に成功したときだけ +1)、エージェントは偶然成功するまで何の学習信号も得られません。逆に報酬を密に設計すると(reward shaping)学習は速くなりますが、設計者が意図しない仕方で報酬を最大化する報酬ハッキング(reward hacking)が起こりえます。

   疎な報酬(sparse) vs 密な報酬(dense)
   ───────────────────────────────────

   疎:  ......................●   (成功の瞬間だけ +1)
        学習信号が稀で、初期探索が非常に困難

   密:  ▁▂▃▄▅▆▇█             (目標に近づくほど漸増)
        学習は速いが、設計を誤ると報酬ハッキングの危険

データ効率と安全性の問題

物理ロボットで強化学習を直接回すには、二つの大きな障壁があります。

第一にデータ効率です。強化学習は通常、数十万から数百万回の相互作用を必要とします。現実のロボットでこれほどの試行錯誤を行うには、膨大な時間と摩耗が生じます。そのため多くの研究が、シミュレーションで学習してから現実へ移す sim-to-real のアプローチを選びます。

第二に安全性です。探索の過程でロボットはほぼランダムに近い行動を試みますが、これがロボット自身や周囲を損傷しうるのです。現実での学習では、安全制約を設けるか、人が介入する安全装置が不可欠です。

逆強化学習 — デモから報酬を推論する

模倣学習と強化学習の間には興味深い中間地帯があります。それが逆強化学習(Inverse Reinforcement Learning, IRL)です。

一般的な強化学習は、報酬関数が与えられたときに最適方策を見つけます。逆強化学習はその逆です。専門家のデモが与えられたとき、「この専門家はどんな報酬を最大化しようとしたのか」という隠れた報酬関数を推論します。そうして推論した報酬で再び強化学習を回して方策を得ます。

   一般 RL vs 逆強化学習(IRL)
   ──────────────────────────

   一般 RL:  報酬関数 ──▶ (強化学習) ──▶ 方策

   IRL:      専門家デモ ──▶ (報酬推論) ──▶ 報酬関数
                                    (強化学習) ──▶ 方策

逆強化学習が魅力的なのは、単に行動を真似る代わりに、行動の「意図」を含む報酬を復元しようとするからです。報酬関数は状態に対する簡潔な評価なので、デモにない新しい状況にもより良く一般化する余地があります。ただし、一つのデモを説明する報酬関数が複数ありうる(曖昧性)ため推論が根本的に難しいという限界があります。

このアプローチは模倣学習(デモの活用)と強化学習(報酬に基づく最適化)をつなぐ橋と見ることができ、報酬を手で設計しにくい課題で特に有用です。

二つのアプローチの比較

これまでの内容を表にまとめます。

項目模倣学習強化学習
学習信号専門家のデモ報酬関数
報酬設計不要必要(核心的な難題)
データ源人のデモ環境との相互作用
データ効率相対的に高い相対的に低い
初期性能デモ水準まで速く到達序盤は非常に低い
性能上限おおむね専門家水準専門家を超えうる
主な弱点分布シフト・複合誤差探索・報酬ハッキング・安全性
代表手法行動クローニング、DAgger方策勾配、アクター・クリティック

核心的な対比を一文でまとめるとこうなります。模倣学習はデータ効率が良いがデモの品質に縛られ、強化学習は理論上デモを超えうるが膨大な経験と綿密な報酬設計を要求します。

二つのアプローチを組み合わせる

近年の研究の大きな流れは、両方法の長所を合わせることです。代表的な組み合わせ方は次のとおりです。

ブートストラップ — 模倣で始めて強化で仕上げる

最も直感的な組み合わせは、模倣学習で方策を初期化してから強化学習で改善することです。模倣学習が方策をもっともらしい出発点に置けば、強化学習は序盤の途方もないランダム探索を飛ばし、その近くで性能を引き上げます。デモが探索の方向を定めてくれるわけです。

   模倣 → 強化 のブートストラップ
   ──────────────────────────────

   ランダム方策 ──(模倣)──▶ デモ水準の方策 ──(強化)──▶ デモ超えの方策

   [ 性能 ]
     高 ┤                              ╭──────  強化で追加向上
        │                    ╭─────────╯
        │          ╭─────────╯  ← 模倣で速く到達
     低 ┤──────────╯
        └──────────────────────────────────▶ [ 学習時間 ]

オフライン強化学習 — デモデータを強化学習で扱う

オフライン強化学習(Offline RL)は、あらかじめ収集した固定データセットだけで方策を学習する方法です。新たな相互作用なしに、デモや過去のログに含まれる状態-行動-報酬の情報を活用します。これは模倣学習のようにデータ効率が良く、かつ強化学習のように報酬情報を使ってデータに含まれる良い行動と悪い行動を区別できます。ただし、データにない行動を過大評価する問題に対処するための保守的な手法が別途必要です。

VLA — 大規模デモで学習する汎用方策

2020年代半ばの大きな流れは、大規模なロボットデモデータとウェブの視覚言語データを一緒に活用する Vision-Language-Action(VLA)モデルです。これらは本質的に大規模な模倣学習に根ざしつつ、言語理解と視覚認識の能力を事前学習済みの大型モデルから受け継ぎ、新しい課題への汎化を狙います。

  • RT-2(Google DeepMind): 視覚言語モデルをファインチューニングし、離散化された(discretized)行動トークンを出力させるモデルです。
  • Open X-Embodiment / RT-X: 複数機関の異なるロボットから集めた横断的なデータで学習し、ロボットの身体を越えた汎化を試みます。
  • OpenVLA: 約97万件のデモで学習された7B規模のオープンモデルで、視覚エンコーダ(DINOv2、SigLIP)と言語モデル(Llama 2)を組み合わせています。
  • π0(Physical Intelligence): flow matching / diffusion 系の手法で連続的かつ高周波の行動を生成するアプローチを取ります。
  • GR00T N1(NVIDIA): 速い反応を担う System 1(diffusion ベース)と遅い計画を担う System 2 を組み合わせた二重構造を志向します。

これらのモデルは多くの場合、ウェブの視覚言語データとロボットの軌道を一緒に学習する co-fine-tuning を活用し、LoRA のような手法で効率的に新しいロボットや課題へ適応することもあります。詳細な仕様はバージョンや実装によって異なる場合があるため、最新の情報は各公式資料を確認するのがよいでしょう。

実務での判断基準

実際のプロジェクトでどの方法を選ぶかは状況によります。おおよその判断基準をまとめると次のとおりです。

  • 良いデモが容易に得られ、課題が比較的定型的なら、模倣学習(特に行動クローニング + DAgger)が速く安定した出発点になります。
  • シミュレータが十分に正確で報酬を明確に定義できるなら、シミュレーション強化学習でデモなしに方策を作れます。
  • 専門家水準を超える性能が必要、あるいは新しい状況に適応する必要があるなら、模倣で初期化してから強化学習で改善する組み合わせが有力です。
  • 複数課題への汎化と言語指示の理解が重要なら、大規模デモに基づく VLA アプローチを検討できます。

データ効率を数値で理解する

「模倣学習はデータ効率的だ」という言葉はよく出てきますが、その意味をもう少し具体的に押さえておく必要があります。データ効率は、望む性能に到達するまでに必要な相互作用の量として理解できます。

行動クローニングは教師あり学習なので、デモが N 個あればその N 個を数エポック繰り返し学習すれば十分です。追加の環境相互作用は不要です。一方オンライン強化学習は、方策を改善するたびに環境から新しい経験を収集する必要があり、その収集量は数十万から数百万ステップに及びます。

   到達性能に対する必要相互作用 (概念的な規模)
   ────────────────────────────────────────

   行動クローニング : デモ収集後、追加の相互作用なし
                     (必要: 良いデモ N 個)

   DAgger          : デモ + 反復的な専門家ラベリング
                     (必要: N 個 + 数ラウンドの専門家の介入)

   オンライン RL   : 大量の環境ステップ
                     (必要: 数十万~数百万ステップの試行錯誤)

   ▶ 同じ性能でも「何を」必要とするかが異なる:
     模倣は人のデモを、強化は環境ステップを要求する。

ここで重要な洞察は、データ効率を単一の軸で比較するのが難しいという点です。模倣学習は「人の時間」という高価な資源を消費し、強化学習は「環境ステップ」という(シミュレーションなら相対的に安価な)資源を消費します。どちらが有利かは、デモをどれだけ容易に得られるか、そしてシミュレータがどれだけ正確かにかかっています。

方策評価の方法論

ロボット方策を学習することと同じくらい難しいのが、その性能を正しく評価することです。ベンチマークの数値一つでは方策の本当の実力を判断しにくいからです。

  • 成功率(Success Rate): 複数回の試行のうち課題を完遂した割合。最も基本的な指標ですが、初期条件を十分に多様に変えないと過大評価されやすいものです。
  • 汎化評価: 学習時に見なかった新しい物体、新しい背景、新しい照明での成功率。方策が暗記したのか理解したのかを見分けます。
  • 頑健性評価: 外乱(妨害)やセンサ雑音を意図的に与えたとき、どれだけ耐えるか。
   方策評価の階層
   ────────────────

   [1] 学習分布内の評価   ──▶ 基本の成功率
        │  (同じ物体・環境)
   [2] 分布外の汎化評価   ──▶ 新しい物体・新しい環境
   [3] 頑健性評価        ──▶ 外乱・雑音の注入
   [4] 長期信頼性評価     ──▶ 反復実行時に性能を維持

   ▶ 上位の階層ほど実際の配備適合性をよく反映する。

評価でよくある落とし穴は、少数の成功場面だけを見て方策が完成したと錯覚することです。ロボット方策は初期条件に非常に敏感なので、統計的に意味のある回数の試行を多様な条件で繰り返してはじめて信頼できる結論が得られます。

一つの課題で見る全体の流れ

これまでの内容を「机の上の物を箱に入れる」という仮想の操作課題でまとめてみます。

まずテレオペレーションで人がロボットを操作し、50~100回のデモを集めます。このデモで行動クローニング方策を学習すると、デモと似た配置ではそれなりに成功します。しかし物が デモにない位置に置かれると、複合誤差で失敗が増えます。

このとき DAgger を適用します。方策を実際に走らせて失敗する状況を集め、その状況で専門家が正しい行動をラベル付けしてデータに追加します。数ラウンドを経ると、見知らぬ配置でも成功率が上がります。

より高い性能が必要なら、この模倣方策を初期値として、シミュレーションで強化学習により仕上げます。シミュレータが不正確だと sim-to-real のギャップが問題になるため、ドメインランダム化のような手法を併用します。最後に、多様な物体と照明で反復評価して汎化と頑健性を確認してはじめて配備を検討します。

   課題全体のパイプライン要約
   ──────────────────────────

   テレオペレーションのデモ収集
   行動クローニングで初期方策
   DAgger で見知らぬ状況を補強
   (任意) RL で性能向上
   多様な条件で反復評価
        └──▶ 十分に検証できれば配備

落とし穴と注意点

  • デモの偏り: 模倣学習はデモに含まれる癖や偏りまでそのまま学びます。示範者が特定の状況を避けていれば、ロボットもその状況に弱くなります。
  • 報酬ハッキング: 強化学習で報酬が本来の目標を完全には反映しないと、エージェントは目標ではなく報酬の数値だけを最大化する抜け道を見つけます。
  • シミュレーションのギャップ: シミュレーションで学んだ方策が現実で崩れるのはよくあることです。この問題は sim-to-real 転移という独立した主題として扱うほど重要です。
  • 評価の難しさ: ロボット方策の性能は、環境、物体、初期条件によって大きく変わります。少数の成功事例だけで汎化性能を断定してはいけません。

おわりに

ロボット学習において、模倣学習と強化学習は対立する二つの陣営というより、相互補完的な道具です。模倣学習は人間の知識を速くデータ効率的にロボットへ伝え、強化学習はその知識を超える改善と新しい状況への適応を可能にします。近年の VLA モデル、オフライン強化学習、ブートストラップの方式は、いずれも両者の境界を溶かしながらより強力な方策を作ろうとする試みです。

次の記事では、この記事で繰り返し登場したシミュレーションと現実のギャップ、すなわち sim-to-real 転移の問題を本格的に扱います。

参考資料