強化学習と模倣学習の違いと特徴 — RLHF まで理解する入門ガイド

強化学習(Reinforcement Learning)と模倣学習(Imitation Learning)はどちらも「エージェントに行動を学習させる」手法ですが、何を手がかりに学習するかが根本的に異なります。本記事では両者の仕組み・特徴・使い分けを整理し、RLHF のような応用例まで俯瞰します。

強化学習(Reinforcement Learning)

強化学習はエージェントが環境と相互作用しながら報酬を最大化するように行動を学習する枠組みです。

エージェント ──行動(action)──▶ 環境
     ▲                          │
     └──状態(state)+報酬(reward)──┘

主な構成要素

要素説明
エージェント (Agent)行動を決定する学習主体
環境 (Environment)エージェントが作用する対象(ゲーム・ロボット等)
状態 (State)現在の環境の観測値
行動 (Action)エージェントが選択できる操作
報酬 (Reward)行動の良し悪しを示すスカラー値
方策 (Policy)状態から行動を決定するルール(学習の対象)

特徴

  • 報酬設計が全て: 何を「良い行動」とするかを数値で定義しなければならない
  • 探索コストが高い: ランダム探索から始まるため序盤の学習効率は低い
  • 性能上限が高い: 人間のデモを超える「超人的な性能」を理論上達成できる(AlphaGo など)
  • 遅延報酬への対応: スパース報酬での学習は難しい

代表的なアルゴリズム

Q-Learning / DQN

Q値(状態・行動の価値)を学習するモデルフリー手法です。

import gymnasium as gym
import numpy as np

env = gym.make("CartPole-v1")

Q = np.zeros((env.observation_space.shape[0], env.action_space.n))

obs, _ = env.reset()
for _ in range(200):
    action = env.action_space.sample()  # ε-greedy で選択
    next_obs, reward, done, truncated, _ = env.step(action)
    # TD更新: Q[s,a] += lr * (reward + gamma * max(Q[s']) - Q[s,a])
    if done or truncated:
        break
    obs = next_obs

PPO(Proximal Policy Optimization)

方策勾配法の代表格。安定した学習が得られます。

from stable_baselines3 import PPO

env = gym.make("CartPole-v1")
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=50_000)
model.save("ppo_cartpole")

模倣学習(Imitation Learning)

模倣学習は専門家(エキスパート)のデモンストレーションを手がかりに行動を学習します。報酬を設計せずに「専門家のように行動する」ことを目標にします。

特徴

  • デモデータが必須: 専門家の行動データの質・量が性能を左右する
  • 報酬設計不要: 何が「良い行動」かを数値化しなくてよい
  • サンプル効率が高い: 最初から専門家の行動を学ぶので序盤学習が速い
  • 性能上限が専門家に縛られる: デモの品質を超えることは難しい

行動クローニング(Behavior Cloning, BC)

最もシンプルなアプローチで、デモデータを(状態, 行動)のペアとして教師あり学習します。

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset

states = torch.randn(1000, 4)
actions = torch.randint(0, 2, (1000,))

dataset = TensorDataset(states, actions)
loader = DataLoader(dataset, batch_size=64, shuffle=True)

class PolicyNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(4, 64), nn.ReLU(),
            nn.Linear(64, 64), nn.ReLU(),
            nn.Linear(64, 2)
        )
    def forward(self, x):
        return self.net(x)

model = PolicyNet()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()

for epoch in range(10):
    for s, a in loader:
        loss = criterion(model(s), a)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

問題点: 分布シフト(Distribution Shift)。デモで見たことがない状態に陥ると、エラーが雪だるま式に蓄積します。

DAgger(Dataset Aggregation)

BC の分布シフト問題を解決します。学習した方策でロールアウトしながら専門家にラベル付けを継続的に依頼してデータを追加していきます。

GAIL(Generative Adversarial Imitation Learning)

GAN の枠組みを模倣学習に応用。識別器が「専門家の行動」か「学習者の行動」かを判別し、その出力を報酬として RL で学習します。

強化学習 vs 模倣学習 比較表

観点強化学習(RL)模倣学習(IL)
学習の基準報酬の最大化専門家への模倣
デモデータ不要必須
報酬設計必須(難易度高い)不要
性能上限理論上無制限専門家レベルが上限
サンプル効率低い(探索コスト大)高い
向く問題ゲーム、ロボット最適制御自動運転、言語モデルの調整

組み合わせ応用

RLHF(Reinforcement Learning from Human Feedback)

ChatGPT などの LLM ファインチューニングで広く使われる手法です。

1. 教師ありファインチューニング(SFT)── デモから BC
2. 報酬モデルの学習 ── 人間の好み比較データから
3. PPO で LLM を報酬モデルに対して最適化

模倣学習(SFT)で初期化したモデルを RL でさらに洗練するパイプラインで、両手法の組み合わせの好例です。

IL → RL の初期化パターン

# Step 1: BC で初期方策を学習
bc_model = train_behavior_cloning(demo_data)

# Step 2: BC モデルの重みで RL エージェントを初期化
rl_model = PPO("MlpPolicy", env)
rl_model.policy.load_state_dict(bc_model.state_dict())

# Step 3: RL でファインチューニング
rl_model.learn(total_timesteps=100_000)

ハマりやすいポイント

強化学習

  • 報酬ハッキング: 設計した報酬を「抜け穴」で最大化してしまう
  • スパース報酬: ゴール到達時だけ報酬が出る設定では学習が進まない。HER(Hindsight Experience Replay)で対処する
  • ハイパーパラメータ感度: PPO の clip_range・学習率・エントロピー係数などが結果に大きく影響する

模倣学習

  • 分布シフト(BC): 学習時と実行時の状態分布のズレがエラーを雪だるま式に蓄積させる
  • デモの質: 専門家がコンシステントに行動していないとノイズが入る
  • GAIL の学習不安定性: GAN ベースなので Discriminator と Generator のバランス調整が難しい

業務での使いどころ

手法向いている場面
RL を選ぶゲーム AI、最適制御・スケジューリング、超人的性能が必要
IL を選ぶ自動運転・ロボットアーム、LLM のスタイル制御、医療など失敗コストが高い環境
ハイブリッドLLM の RLHF 調整、Sim2Real 転移学習

まとめ

RLIL
「何が良いか」の情報源報酬関数専門家デモ
最大の課題報酬設計・探索効率分布シフト・デモ収集コスト
強みを活かす場面ルール明確・超人性能が必要デモ豊富・報酬設計困難

現代の実用システムでは純粋な RL か IL かの二択ではなく、IL で初期化して RL でファインチューニングする IL → RL パイプラインRLHF のようなハイブリッド手法が主流です。