TD学習と適格度トレース(TD(λ))
強化学習の更新を「待たずに・少しずつ」回す仕組みが腑に落ちます。TD誤差からn-step・TD(λ)まで、バイアスと分散をλ一本で調整する設計の理由を最短でつかめます。
- 1.TD学習はモンテカルロ(実測リターン)とブートストラップ(自分の予測で更新)の中間で、1ステップ進むたびにTD誤差で価値を少しずつ直せます。エピソード終了を待つ必要がありません。
- 2.n-stepとTD(λ)は「何ステップ先まで実測を使うか」でバイアスと分散を調整するノブです。λを上げるほど実測寄り(低バイアス・高分散)、下げるほど予測寄り(高バイアス・低分散)になります。
- 3.適格度トレースはforward viewのλリターンをオンラインで実装する仕組みで、過去に訪れた状態に減衰する「責任の痕跡」を持たせ、TD誤差を一括で過去へ配分します。
モンテカルロとブートストラップの間を埋める
価値関数 V(s) を学習する方法は、大きく二つの極があります。一方は モンテカルロ(MC) で、エピソードを最後まで走らせ、実際に得たリターン G_t を教師信号にして V(s_t) をそこへ近づけます。もう一方が 動的計画法(DP) で、次状態の価値 V(s_{t+1}) という自分の予測値を使ってベルマン期待方程式どおりに V(s_t) を更新します。MCは実測なので偏りがない代わりに、最後まで待たないと更新できず分散も大きい。DPは1ステップで更新できるが、環境の遷移確率を全部知っている必要があります。
TD学習(Temporal Difference learning) は、この二つのいいとこ取りです。MCのように環境モデルを必要とせず(実際の遷移をサンプルとして使う)、DPのように1ステップ進むだけで更新できる。鍵は ブートストラップ——まだ未完成な自分の予測 V(s_{t+1}) を、教師信号の一部として使い回すことです。
強化学習 の全体像と ベルマン方程式 を前提に、ここではその更新則の中身を分解します。
TD誤差:1ステップ先の現実と予測のズレ
最も基本的な TD(0) の更新則はこうです。
V(s_t) ← V(s_t) + α·δ_t
δ_t = r_{t+1} + γ·V(s_{t+1}) − V(s_t)
α : 学習率
γ : 割引率(0以上1以下)
δ_t : TD誤差
δ_t が TD誤差 です。意味を分解すると、r_{t+1} + γ·V(s_{t+1}) は「1ステップ実際に進んで得た報酬 + 次状態の現在の見積もり」、すなわち TDターゲット です。そこから現在の見積もり V(s_t) を引いた差が、いま得た情報による予測の修正量になります。「進んでみたら予想より良かった(δ > 0)なら価値を上げ、悪かった(δ < 0)なら下げる」という、ごく自然な誤差駆動の学習です。
TDターゲット r_{t+1} + γ·V(s_{t+1}) は、実測(r_{t+1})と予測(V(s_{t+1}))の混合です。報酬1ステップぶんだけは現実を取り込み、その先はすべて自分の予測でまとめて代用します。これが ブートストラップ で、エピソード終了を待たずに更新できる理由です。一方MCのターゲット G_t = r_{t+1} + γ·r_{t+2} + ... は全項が実測で、ブートストラップを一切使いません。TDはこの「実測と予測の境界」を1ステップ目に置いた特別な場合だといえます。
ここで重要なのは、TDターゲットが 真の V ではなく現在の推定 V(s_{t+1}) を含む 点です。教師信号自身が学習中のパラメータに依存するため、TDターゲットは正しくは固定の目標ではありません。この自己参照ゆえにTDは「偏った(バイアスのある)推定だが分散は小さい」という性質を持ちます。
バイアスと分散:MCとTDの対立軸
MCとTD(0)を同じ土俵で比べると、両者のトレードオフがはっきりします。
| 観点 | モンテカルロ (MC) | TD(0) |
|---|---|---|
| ターゲット | 実測リターン G_t(全項が現実) | r + γ·V(s') (1ステップ実測+予測) |
| ブートストラップ | しない | する(自分の予測を使う) |
| 更新タイミング | エピソード終了後 | 1ステップごと(オンライン) |
| バイアス | なし(不偏) | あり(推定Vに依存) |
| 分散 | 大きい(長い乱数の和) | 小さい(1ステップぶんの乱数) |
| 環境モデル | 不要 | 不要 |
| 継続タスク | 扱いにくい(終端が要る) | 扱える |
MCのターゲット G_t は将来の報酬すべての和なので、途中の確率的な遷移や行動の揺らぎがすべて積み重なり、分散が大きくなります。TD(0)は1ステップぶんの報酬と遷移しか含まないので分散は小さい。しかしその代償に、まだ正しくない V(s_{t+1}) を信じて更新するためバイアスが生じます。どちらが良いかは「実測をどこまで信じ、予測をどこから使うか」の選択 であり、その境界を連続的に動かせるようにしたのが次のn-stepとTD(λ)です。
n-step:実測と予測の境界をずらす
TD(0)は1ステップだけ実測しました。MCは終端まで実測しました。その中間が n-step TD です。n ステップぶんだけ実際の報酬を足し、その先をブートストラップで代用します。
G_t^(n) = r_{t+1} + γ·r_{t+2} + ... + γ^(n-1)·r_{t+n} + γ^n·V(s_{t+n})
V(s_t) ← V(s_t) + α·( G_t^(n) − V(s_t) )
n = 1 ならTD(0)、n をエピソード終端まで伸ばせばMCに一致します。n を大きくするほど実測の比率が増えて バイアスは減り分散は増える。小さくするほど予測に頼って バイアスは増え分散は減る。n はバイアスと分散を刻む整数のノブだといえます。ただし実務では「最適な n」を一つ選ぶのは難しく、しかもオンライン更新には n ステップ先まで待つ必要が生じます。そこで、複数の n をまとめて滑らかに混ぜる発想が出てきます。
TD(λ)とλリターン:forward view
すべての n に対する n-step リターン G_t^(n) を、λ(0以上1以下)で幾何的に重み付けして平均したものが λリターン です。これがTD(λ)の理論的な教師信号で、未来を見渡して定義するので forward view(前向きの視点) と呼ばれます。
G_t^λ = (1 − λ)·Σ_{n=1}^{∞} λ^(n-1)·G_t^(n)
重み (1 − λ)·λ^(n-1) は n について幾何分布をなし、総和は1になります。λ = 0 では n = 1 の項だけが残ってTD(0)に一致し、λ = 1 では実質的にすべての重みが終端のリターンへ集まりMCに一致します。λ 一本でTD(0)からMCまでを連続的にスイープできる のがTD(λ)の眼目です。
n-stepの整数ノブ n を、λ という連続パラメータに置き換えたのがTD(λ)です。λ を1に近づけるほど遠い実測リターンの重みが増し、低バイアス・高分散(MC寄り)に。0に近づけるほど近いブートストラップの重みが増し、高バイアス・低分散(TD寄り)になります。多くの問題では中間の λ(0.8 から 0.95 あたり)が、純粋なMCやTD(0)より速く安定して学習します。同じλの役割は 方策勾配法のGAE でアドバンテージ推定にもそのまま現れます。
forward viewには実用上の難点があります。G_t^λ は未来のすべての報酬を必要とするため、結局エピソード終了まで更新できず、MCと同じ「待ち」が発生します。これをオンラインで(1ステップごとに)等価に計算する仕掛けが、適格度トレースです。
適格度トレース:backward view
適格度トレース(eligibility trace) は、状態ごとに「最近・頻繁に訪れたか」を表す痕跡 e(s) を持たせます。訪れた瞬間に痕跡を立て、時間が進むごとに γλ で減衰させる。そして毎ステップのTD誤差 δ_t を、現在のトレースに比例させて すべての状態へ一括で配分 します。これは「過去を振り返って責任を配る」ので backward view(後ろ向きの視点) と呼ばれます。
各ステップ t で:
e(s) ← γ·λ·e(s) # 全状態のトレースを減衰
e(s_t) ← e(s_t) + 1 # いま訪れた状態にトレースを足す(accumulating trace)
δ_t = r_{t+1} + γ·V(s_{t+1}) − V(s_t)
V(s) ← V(s) + α·δ_t·e(s) # 全状態を一括更新
ポイントは、TD誤差 δ_t が その時点で訪問済みのすべての状態 に、トレースの大きさだけ波及することです。直前に通った状態は痕跡が濃いので大きく、ずっと前に通った状態は減衰して小さく更新される。「いま判明したズレ δ_t は、ここに至るまでに通った状態たちの責任である」という信用割当を、減衰した重みで分配していると読めます。
適格度トレースの巧妙さは、backward viewの逐次更新が、forward viewのλリターン更新と(オフライン更新の総和として)一致する点にあります。λ = 0 ならトレースは毎ステップ消え、訪れた状態だけが δ_t で更新される単なるTD(0)に退化します。λ = 1(かつ accumulating trace)ではMCと等価な更新になります。つまり適格度トレースは、未来を待つforward viewの理想を、過去の痕跡を持ち回ることでオンラインに実現する実装テクニックです。同じ δ_t を一度計算するだけで全状態へ配れるため、計算も軽い。
トレースの取り方には流儀があります。上記の e(s_t) ← e(s_t) + 1 は accumulating trace(累積型) で、同じ状態を短時間に何度も踏むとトレースが1を超えて伸びます。これに対し訪問のたびに1へ上書きする replacing trace(置換型) は、頻繁な再訪での過大評価を抑え、実用上より安定することが多いです。
制御への拡張:Sarsa(λ) と Q学習
ここまでは価値 V(s) の予測(方策評価)でしたが、行動価値 Q(s,a) に同じ枠組みを適用すれば制御(最適方策の学習)になります。状態と行動の組 (s,a) ごとにトレースを持たせ、オンポリシーで更新するのが Sarsa(λ)、TD誤差を貪欲行動で組むのが Q学習 系(Q学習とDQN 参照)です。
| 手法 | TDターゲット | 方策の扱い | トレースの相性 |
|---|---|---|---|
| TD(0) / TD(λ) | r + γ·V(s') | 方策評価(予測) | 良い(素直に等価) |
| Sarsa(λ) | r + γ·Q(s',a') | オンポリシー制御 | 良い(実際に取った行動で更新) |
| Q学習 | r + γ·max_a Q(s',a) | オフポリシー制御 | 注意(探索行動でトレースが破綻しうる) |
Q学習のようなオフポリシー手法では、貪欲方策とは異なる探索的な行動を取った瞬間に、それまでの痕跡が「別方策の経験」になってしまい、単純なトレースの伝播が不整合を起こします。古典的な Watkins's Q(λ) は探索行動を取った時点でトレースをゼロに切る(cutting)ことでこれを回避しますが、せっかく溜めた信用割当を捨てるため効率が落ちます。オフポリシー × ブートストラップ × 関数近似の三拍子は発散の危険がある「致命的な三つ組(deadly triad)」として知られ、適格度トレース(ブートストラップを伴う多ステップ手法)をオフポリシー × 関数近似と組み合わせる際はこの危険に注意が要ります。
まとめ
| 概念 | 解決した問題 | 核心アイデア |
|---|---|---|
| TD学習 | MCは待ちが長く分散大、DPはモデルが要る | 1ステップ実測+予測のブートストラップ |
| TD誤差 δ | 更新の駆動信号が要る | 実測ターゲットと現在の見積もりの差 |
| n-step | 1ステップでは偏りが大きい | n ステップ実測して境界をずらす |
| TD(λ)・λリターン | 最適な n を選べない | 全 n を λ で幾何平均する連続ノブ |
| 適格度トレース | forward view は終端まで待つ | 減衰する痕跡で δ を過去へ一括配分 |
TD学習の系譜は、「実測をどこまで信じ、予測をどこから使うか」という一本の軸 で見通せます。TD(0)は1ステップだけ実測する極、MCは終端まで実測する極、その間を整数で刻むのがn-step、連続で刻むのがTD(λ)です。そしてforward viewの理想(λリターン)を、過去の痕跡を持ち回ることでオンラインに実装したのが適格度トレース。同じバイアス分散の調整思想は 方策勾配法 のGAEへ受け継がれ、現代の強化学習の通奏低音になっています。
AI/機械学習 Article
TD学習と適格度トレース(TD(λ))を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
強化学習
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
n-stepとTD(λ)は「何ステップ先まで実測を使うか」でバイアスと分散を調整するノブです。λを上げるほど実測寄り(低バイアス・高分散)、下げるほど予測寄り(高バイアス・低分散)になります。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「強化学習 / TD学習」に近いか確認する。
- 強みである「TD学習はモンテカルロ(実測リターン)とブートストラップ(自分の予測で更新)の中間で、1ステップ進むたびにTD誤差で価値を少しずつ直せます。エピソード終了を待つ必要がありません。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。