← 機械学習テキスト 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:Q学習とSARSA方策勾配法

要点(BLUF)


1. Actor-Critic:価値ベースと方策ベースの融合

Q学習とSARSA(価値ベース)と方策勾配法(方策ベース)は、これまで別系統の手法として扱ってきました。Actor-Critic はこの2つを1つのループに統合します。

役割中身何をするか
Actor(俳優)方策 πθ(as)\pi_\theta(a \mid s)行動を選ぶ。方策勾配で更新される
Critic(批評家)価値 Vw(s)V_w(s)行動の結果を採点する。TD学習で更新される

要するに、Actorが動き、Criticが「今のは平均よりよかった/悪かった」と評価し、その評価を使ってActorを直す——という分業です。

なぜCriticが要るのか:REINFORCEの高分散問題

方策勾配法の素朴な勾配(REINFORCE)は、軌跡全体の収益 GtG_t で方策を重み付けします。

θJ(θ)=E ⁣[tθlogπθ(atst)Gt]\nabla_\theta J(\theta) = \mathbb{E}\!\left[\sum_t \nabla_\theta \log \pi_\theta(a_t \mid s_t)\, G_t \right]

ここで GtG_t は1エピソードを最後まで回して得るモンテカルロ収益なので、運の要素が丸ごと乗り、分散が非常に大きいのが弱点でした。学習が遅く不安定になります。

そこでベースライン b(s)b(s) を引きます。ベースラインが行動 aa に依存しなければ、勾配の期待値(バイアス)は変えずに分散だけ下げられる——これは方策勾配法で示した性質です。最も自然なベースラインが状態価値 V(s)V(s) であり、その差し引きが優位関数(Advantage) です。

優位関数:その行動は「平均よりどれだけ良いか」

Aπ(s,a)=Qπ(s,a)Vπ(s)A^\pi(s, a) = Q^\pi(s, a) - V^\pi(s)

要するに AA は「この行動は、その場の平均的な行動と比べてどれだけ得か」を表す相対評価です。A>0A>0 なら平均より良い行動なので確率を上げ、A<0A<0 なら下げる。絶対値の収益 GtG_t ではなく相対値 AA を使うことで、状態ごとの収益水準のばらつきがキャンセルされ、分散が下がります。優位を使った勾配は:

θJ(θ)=E ⁣[tθlogπθ(atst)Aπ(st,at)]\nabla_\theta J(\theta) = \mathbb{E}\!\left[\sum_t \nabla_\theta \log \pi_\theta(a_t \mid s_t)\, A^\pi(s_t, a_t) \right]

TD誤差が優位関数の推定になる

QQVV も真の値は未知です。ところがTD誤差Q学習とSARSAで出た1ステップの予測誤差)が、優位関数の手軽な推定量になります。

δt=rt+γVw(st+1)1ステップ先の見積りVw(st)今の見積り\delta_t = \underbrace{r_t + \gamma V_w(s_{t+1})}_{\text{1ステップ先の見積り}} - \underbrace{V_w(s_t)}_{\text{今の見積り}}

真の VV のもとでは E[δtst,at]=Q(st,at)V(st)=A(st,at)\mathbb{E}[\delta_t \mid s_t, a_t] = Q(s_t,a_t) - V(s_t) = A(s_t,a_t) なので、δt\delta_t は優位関数の不偏推定です。つまり Critic が VwV_w さえ持っていれば、QQ を別途学ぶ必要なく、TD誤差ひとつで「Criticの自己評価更新」と「Actorの優位による更新」を同時にまかなえます。これが Advantage Actor-Critic(A2C) の中核です。

flowchart LR
    S["状態 s"] --> Actor["Actor(方策 πθ)"]
    Actor -->|"行動 a を選ぶ"| Env["環境"]
    Env -->|"報酬 r ・ 次状態 s'"| Critic["Critic(価値 Vw)"]
    Critic -->|"TD誤差 δ=優位の推定"| Update["更新シグナル"]
    Update -->|"δ で方策を補正"| Actor
    Update -->|"δ を小さくするよう回帰"| Critic

補足:TD誤差を1ステップで打ち切ると分散は小さいがバイアスが乗り、Nステップ/モンテカルロ寄りにすると不偏だが分散が増えます。このバイアス-バリアンスのつまみλ\lambda で連続的に調整するのが GAE(Generalized Advantage Estimation) で、PPOの標準装備です。バイアス-バリアンスの考え方自体は教師あり学習と同じ枠組みです。


2. 深層強化学習:価値・方策を関数近似する

ここまでの VVQQπ\pi は、状態が少なければ表(テーブル)で持てました。しかし状態が画像のように高次元になるとテーブルは破綻します(Q学習とSARSAの関数近似の必要性)。

深層強化学習(Deep RL) は、この VwV_wQwQ_wπθ\pi_\thetaニューラルネットで近似するアプローチの総称です。画像入力なら畳み込みニューラルネットワークを、系列入力なら系列モデルを特徴抽出器に使います。Actor-Critic はこの関数近似と相性がよく、深層RLの土台になっています。

ただし「テーブルなら収束が保証されたQ学習」をニューラルネットに載せた途端に発散しやすくなる——この不安定性の克服が、以降の DQN・PPO の主題です。


3. DQN:Q学習 + 深層ニューラルネット

DQN(Deep Q-Network) は、Q学習とSARSAのQ学習の Q(s,a)Q(s,a) をニューラルネット Qw(s,a)Q_w(s,a) で置き換えたものです。Atariのゲーム画面(生ピクセル)を入力に、人間並みのスコアを出して深層RLブームの火付け役になりました。画面入力の特徴抽出には畳み込みニューラルネットワークを使います。

学習則はQ学習と同じく、ベルマン最適方程式の右辺を目標値(ターゲット) として二乗誤差を最小化します。

L(w)=E ⁣[(r+γmaxaQw(s,a)目標 yQw(s,a))2]L(w) = \mathbb{E}\!\left[\Big( \underbrace{r + \gamma \max_{a'} Q_{w^-}(s', a')}_{\text{目標 } y} - Q_w(s, a) \Big)^2 \right]

なぜ素朴に載せると壊れるのか

ナイーブにこれをやると発散します。原因は2つ:

  1. サンプルの相関:環境を順番に進めると、連続する (s,a,r,s)(s,a,r,s') は強く相関します。相関したデータで勾配を回すと、直近の状況に過剰適応して学習が偏る(i.i.d.前提が崩れる)。
  2. 目標が動く(moving target):上式の目標 yyQwQ_{w} 自身を含みます。ww を更新すると予測値も目標値も同時に動き、自分の影を追いかけるフィードバックループになって振動・発散します。

2つの安定化技術

技術何を解決するか仕組み
経験再生(experience replay)サンプルの相関経験 (s,a,r,s)(s,a,r,s') を大きなバッファに貯め、そこからランダムにミニバッチを取り出して学習。時間順を崩し、相関を断つ。データを使い回せるのでサンプル効率も上がる
ターゲットネットワーク目標が動く問題目標計算用に別のネット QwQ_{w^-} を用意し、その重み ww^- は普段は固定。数千ステップごとにだけ ww をコピーする。目標を一定期間凍結することで、追いかけっこを止め発散を防ぐ

上の損失で目標側を QwQ_{w^-}(ターゲットネット)にしているのがその表れです。この2つがDQNの本質で、ネット構造そのものより「いかに学習を壊さないか」の工夫が効いています。問題意識は重み初期化と正規化——深層ネットの学習を発散させずに安定させる——と通じます。

派生(要最新確認):過大評価を抑える Double DQN、重要な経験を優先的に再生する Prioritized Experience Replay、状態価値と優位を分けて推定する Dueling Network などが標準的な改良です。


4. 方策勾配の改良:TRPO と PPO

方策勾配法や A2C には、もう1つの不安定性があります。1回の更新で方策を変えすぎると壊れる問題です。

教師あり学習ならデータは固定ですが、強化学習では方策が変わると集まるデータ自体が変わる。更新が大きすぎて方策が悪い方向に飛ぶと、そこから取れるデータも悪くなり、二度と立て直せないことがあります。そこで「信頼できる範囲でだけ更新する」という発想が出てきます。

TRPO:KL制約付きの信頼領域

TRPO(Trust Region Policy Optimization) は、更新前後の方策の差をKLダイバージェンスで測り、一定以下に抑える制約のもとで代理目的を最大化します。

maxθ E ⁣[πθ(as)πθold(as)A^]s.t.E[KL(πθoldπθ)]δ\max_\theta\ \mathbb{E}\!\left[ \frac{\pi_\theta(a \mid s)}{\pi_{\theta_{\text{old}}}(a \mid s)}\, \hat{A} \right] \quad \text{s.t.}\quad \mathbb{E}\big[ \mathrm{KL}(\pi_{\theta_{\text{old}}} \,\|\, \pi_\theta) \big] \le \delta

ここで r(θ)=πθ/πθoldr(\theta)=\pi_\theta / \pi_{\theta_{\text{old}}}重要度比(新旧方策で同じデータを使い回すための補正)。要するに「優位 A^\hat{A} が正の行動の確率を上げたいが、方策を前から大きく動かしすぎるな」 という制約付き最適化です。理論的には単調改善が保証される一方、二次の制約を解くため計算が重く実装も複雑です。

PPO:比のクリッピングで一次法に簡略化

PPO(Proximal Policy Optimization) は、TRPOの「動かしすぎない」をはるかに簡単に実現した手法で、現在の実務の定番です。制約を陽に解く代わりに、重要度比 r(θ)r(\theta)クリッピングして目的関数に組み込みます。

LCLIP(θ)=E ⁣[min(r(θ)A^,  clip(r(θ),1ϵ,1+ϵ)A^)]L^{\text{CLIP}}(\theta) = \mathbb{E}\!\left[ \min\Big( r(\theta)\,\hat{A},\ \ \mathrm{clip}\big(r(\theta),\, 1-\epsilon,\, 1+\epsilon\big)\,\hat{A} \Big) \right]

要するに、比 rr[1ϵ,1+ϵ][1-\epsilon,\, 1+\epsilon] を超えて方策を動かそうとしても、目的関数の改善が頭打ちになるよう天井を付ける——という仕掛けです。min\min と組み合わせることで、優位が正でも負でも「行きすぎ」に報酬を与えません。これでTRPO並みの安定性を、ただの一次の勾配上昇(標準的なAdam等)で得られます。PPOは中身としては Actor-Critic(優位はGAEで推定)であり、本ノートの流れの集大成です。

flowchart TB
    PG["方策勾配(REINFORCE)"] -->|"分散を下げる:優位 A=Q−V"| AC["Actor-Critic(A2C)"]
    AC -->|"更新しすぎを防ぐ"| TRPO["TRPO(KL制約の信頼領域)"]
    TRPO -->|"制約を比のクリッピングで簡略化"| PPO["PPO(実務の定番)"]

5. RLHF への橋渡し

PPO の応用先として今いちばん重要なのが RLHF(Reinforcement Learning from Human Feedback)——大規模言語モデルを人間の選好に合わせる手続きです(大規模言語モデル 目次のアラインメント)。典型的には3段構成です:

  1. SFT(教師ありファインチューニング):人手のお手本で土台モデルを整える
  2. 報酬モデルの学習:人間が「どちらの応答が好ましいか」をランク付けし、それを再現するスカラー報酬 RϕR_\phi を学習する
  3. PPOで方策最適化:言語モデルを方策とみなし、報酬モデルのスコアを報酬として PPO で更新。元モデルから離れすぎないようKLペナルティを足す

ここでの対応関係を掴むのがポイントです:

強化学習の概念RLHFでの中身
方策(Actor)言語モデル(次トークンの分布を出す)
行動トークンを1つ出力する
報酬人間の選好を学んだ報酬モデルのスコア
安定化PPOのクリッピング + 元モデルとのKLペナルティ

要するに、人間の好みを報酬という形に変換し、それを最大化する方策をPPOで探す——というのがRLHFです。本ノートのActor-Critic・PPOが、そのまま現代のLLMアラインメントの基盤になっています(詳細は大規模言語モデル 目次)。

⚠️ 要最新確認:RLHFは進展が速く、PPOの代替としてDPO(Direct Preference Optimization) など報酬モデルやRLループを簡略化する手法が広く使われています。最新の主流手法は必ず確認してください。


⚠️ よくある誤解・落とし穴


まとめ


対応するシミュレーション

simulations/actor_critic.py:報酬にノイズを乗せた廊下MDPで、REINFORCE(モンテカルロ収益で更新)とActor-Critic(批評家 V(s)V(s) を学び TD誤差 δ=r+γV(s)V(s)\delta=r+\gamma V(s')-V(s)=優位で更新)を多数のシードで学習し、学習曲線の平均±標準偏差の帯を比べます。Actor-Critic のほうが速く最短手数へ近づき、シード間のばらつき(帯の幅)も小さい=分散が小さいことを可視化します。A2C・PPO の土台です(方策勾配法)。

REINFORCE vs Actor-Critic(分散低減)

関連ノート