目录
[Metric 1: Average Value(平均状态价值)](#Metric 1: Average Value(平均状态价值))
[Metric 2: Average Reward(平均即时奖励)](#Metric 2: Average Reward(平均即时奖励))
[第四步:梯度上升算法 → REINFORCE](#第四步:梯度上升算法 → REINFORCE)
[网格世界下的 REINFORCE](#网格世界下的 REINFORCE)
[β_t 的解读:自动平衡探索与利用](#β_t 的解读:自动平衡探索与利用)
核心思想:从"间接"到"直接"
┌──────────────────────────────────────────────────────────────────┐
│
│ 之前 (Value-based):
│ 先学 Q 值表/函数 → 再从 Q 值推出策略(ε-greedy)
│ 间接方法:学的是"打分",策略是附带产物
│
│ 现在 (Policy Gradient):
│ 直接学策略函数 π(a|s, θ)
│ θ 是参数,直接输出"在状态 s 选动作 a 的概率"
│ 通过梯度上升优化 θ,让某个目标 J(θ) 最大化
│
└──────────────────────────────────────────────────────────────────┘
第一步:策略如何参数化?
之前(表格策略):
┌────────┬───────┬───────┬───────┬────────┐
│ │ ↑Up │ ↓Down │ ←Left │ →Right │
├────────┼───────┼───────┼───────┼────────┤
│ s₁ │ 0.1 │ 0.7 │ 0.1 │ 0.1 │ ← 直接存在表里
│ s₂ │ 0.2 │ 0.2 │ 0.5 │ 0.1 │
│ ... │ ... │ ... │ ... │ ... │
└────────┴───────┴───────┴───────┴────────┘
状态多了存不下!
现在(参数化策略):
┌──────────────┐
状态 s ─────────→ │ 神经网络 │──→ π(Up|s) = 10%
│ 参数 θ │──→ π(Down|s) = 70%
│ │──→ π(Left|s) = 15%
│ (softmax │──→ π(Right|s) = 5%
│ 输出层) │
└──────────────┘
↑
调整 θ 就改变了所有状态的策略!
Softmax 策略:保证输出是合法概率(都>0,加起来=1)
π(a|s, θ) = exp(h(s,a,θ)) / Σ_{a'} exp(h(s,a',θ))
例子:h 是线性函数,h(s,a,θ) = θ^T · φ(s,a)
在 s₁ 状态,假设 θ = [2.0, 1.0],各动作的特征:
φ(s₁, Up) = [0.1, -0.5] → h = 2×0.1 + 1×(-0.5) = -0.3 → exp(-0.3) = 0.74
φ(s₁, Down) = [0.8, 0.3] → h = 2×0.8 + 1×0.3 = 1.9 → exp(1.9) = 6.69
φ(s₁, Left) = [0.2, 0.1] → h = 2×0.2 + 1×0.1 = 0.5 → exp(0.5) = 1.65
φ(s₁, Right) = [-0.1, 0.0] → h = 2×(-0.1)+1×0 = -0.2 → exp(-0.2) = 0.82
总和 = 0.74 + 6.69 + 1.65 + 0.82 = 9.90
π(Up|s₁) = 0.74/9.90 = 7.5%
π(Down|s₁) = 6.69/9.90 = 67.6% ← 最大概率
π(Left|s₁) = 1.65/9.90 = 16.7%
π(Right|s₁) = 0.82/9.90 = 8.3%
第二步:优化什么目标?(Metrics)
策略好不好,需要一个标量来衡量。这里给出两个指标:
Metric 1: Average Value(平均状态价值)
v̄_π = Σ_s d(s) · v_π(s)
──── ──────
权重 该状态的价值
含义:"按照策略 π 行动,从各状态出发的平均长期回报"
例子:3×3 网格,G=(2,2),γ=0.9
假设策略 π₁(比较笨,经常绕路):
v_π₁(s₁) = 2.0, v_π₁(s₂) = 3.0, ... v_π₁(s₉) = 0
如果 d(s) = 1/9(均匀分布):
v̄_π₁ = (2.0 + 3.0 + ... + 0) / 9 = 1.8
假设策略 π₂(比较聪明,走最短路):
v_π₂(s₁) = 5.0, v_π₂(s₂) = 6.0, ... v_π₂(s₉) = 0
v̄_π₂ = (5.0 + 6.0 + ... + 0) / 9 = 4.2
v̄_π₂ > v̄_π₁ → π₂ 更优!
d(s) 的选择
┌─────────────────────────────────────────────────────────────┐
│ Case 1: d 与策略无关
│ - d₀(s) = 1/|S| 所有状态等权
│ - d₀(s₀) = 1, 其余 = 0 只关心从 s₀ 出发
│ 此时 v̄_π = v_π(s₀)
│
│ Case 2: d = d_π(平稳分布,依赖策略)
│ - 经常去的状态权重大,很少去的权重小
│ - 好策略让智能体经常待在高价值区域
└─────────────────────────────────────────────────────────────┘
Metric 2: Average Reward(平均即时奖励)
r̄_π = Σ_s d_π(s) · r_π(s)
含义:"长期来看,每一步平均能获得多少即时奖励"
例子:
策略 π₁ 经常在低奖励区域晃悠 → r̄_π₁ = 0.5/步
策略 π₂ 经常在高奖励区域活动 → r̄_π₂ = 2.0/步
重要关系:
r̄_π = (1 - γ) · v̄_π
两者等价,最大化一个就等于最大化另一个!
第三步:怎么算梯度?(最难的部分)
核心公式 Policy Gradient Theorem:
┌──────────────────────────────────────────────────────────────────┐
│
│ ∇_θ J(θ) = Σ_s η(s) Σ_a ∇_θ π(a|s,θ) · q_π(s,a)
│
│ 等价形式(用 log-trick):
│
│ ∇_θ J(θ) = E_{S~η, A~π} [ ∇_θ ln π(A|S,θ) · q_π(S,A) ]
│ ────────────── ─────────
│ "得分函数" "权重"
│ (往哪个方向调θ) (调多大力度)
│
└──────────────────────────────────────────────────────────────────┘
Log-trick 推导:
关键等式:∇_θ π = π · ∇_θ ln π
所以:
Σ_a ∇_θ π(a|s,θ) · q_π(s,a)
= Σ_a π(a|s,θ) · ∇_θ ln π(a|s,θ) · q_π(s,a)
= E_{A~π} [ ∇_θ ln π(A|s,θ) · q_π(s,A) ]
这样就可以用采样来近似梯度了!
第四步:梯度上升算法 → REINFORCE
Step 1: 标准梯度上升
θ_{t+1} = θ_t + α · ∇_θ J(θ_t)
= θ_t + α · E[ ∇_θ ln π(A|S,θ_t) · q_π(S,A) ]
↓ 真实梯度(期望)算不出来,用单个样本代替
Step 2: 随机梯度上升
θ_{t+1} = θ_t + α · ∇_θ ln π(a_t|s_t, θ_t) · q_π(s_t, a_t)
↓ 真实 q_π 也不知道,用 Monte Carlo 回报估计
Step 3: REINFORCE
θ_{t+1} = θ_t + α · ∇_θ ln π(a_t|s_t, θ_t) · q_t(s_t, a_t)
───────────────
MC 回报估计
举例
网格世界下的 REINFORCE
场景:
+------+------+------+
| S | | | S=(0,0), G=(2,2)
+------+------+------+ 每步 r=-1,到G r=+10
| | | | γ=0.9, α=0.01
+------+------+------+ θ = [0.5, 0.3](初始参数)
| | | G |
+------+------+------+
回合 1:生成轨迹
按当前 π(θ) 采样一整个回合:
t=0: s₀=(0,0), π→a₀=Right, r₁=-1
t=1: s₁=(0,1), π→a₁=Down, r₂=-1
t=2: s₂=(1,1), π→a₂=Right, r₃=-1
t=3: s₃=(1,2), π→a₃=Down, r₄=+10 → 到达 G!
算每一步的 Monte Carlo 回报 q_t
t=0: q₀ = -1 + 0.9×(-1) + 0.81×(-1) + 0.729×10 = 4.58
t=1: q₁ = -1 + 0.9×(-1) + 0.81×10 = 6.20
t=2: q₂ = -1 + 0.9×10 = 8.00
t=3: q₃ = 10 = 10.0
更新每一步的 θ
对 t=0: s₀=(0,0), a₀=Right, q₀=4.58
当前 π(Right|s₀, θ) = 0.35(假设 softmax 算出)
∇_θ ln π(Right|s₀, θ) = [0.4, -0.2](假设算出的梯度)
θ ← [0.5, 0.3] + 0.01 × [0.4, -0.2] × 4.58
= [0.5, 0.3] + [0.0183, -0.0092]
= [0.518, 0.291]
含义:q₀=4.58 > 0 → 这回合从(0,0)选Right最终赚了
→ 增大 π(Right|s₀) 的概率!
对 t=2: s₂=(1,1), a₂=Right, q₂=8.00
∇_θ ln π(Right|s₂, θ) = [0.6, 0.1]
θ ← θ + 0.01 × [0.6, 0.1] × 8.00
= θ + [0.048, 0.008]
含义:q₂=8.00 更大 → 更新幅度更大!
这步离终点近,信号更强
β_t 的解读:自动平衡探索与利用
┌────────────────────────────────────────────────────────────────┐
│
│ 利用: β_t ∝ q_t
│ q 大 → β 大 → 增大该动作概率 → "多做赚钱的事"
│ q 负 → β 负 → 减小该动作概率 → "少做亏钱的事"
│
│ 探索: β_t ∝ 1/π
│ π 小(很少选的动作)→ β 大 → 给它更多机会
│ π 大(经常选的动作)→ β 小 → 已经够多了,少加一点
│
│ 两者自动平衡!不需要手动设 ε
│
└────────────────────────────────────────────────────────────────┘
举例子:
假设在 s₁ 状态:
动作 π(a|s₁) q(s₁,a) β = q/π 效果
────────────────────────────────────────────────────
↑ Up 0.05 6.0 120.0 ← 很少选但回报高 → 大幅提升!
↓ Down 0.70 5.0 7.1 ← 经常选且回报高 → 小幅提升
← Left 0.15 2.0 13.3 ← 偶尔选回报一般 → 中等提升
→ Right 0.10 -3.0 -30.0 ← 很少选且亏钱 → 大幅降低!
整体总结
Policy Gradient 的完整逻辑链:
┌───────────────┐
│ 定义目标 J(θ) v̄_π 或 r̄_π
└───────┬───────┘
↓
┌───────────────────────┐
│ 推导梯度 ∇_θ J(θ) Policy Gradient Theorem
│ = E[∇ln π · q_π] (最核心的公式)
└───────┬───────────────┘
↓
┌───────────────────────┐
│ 用样本近似梯度 随机梯度上升
│ ∇J ≈ ∇ln π · q_t
└───────┬───────────────┘
↓
┌───────────────────────┐
│ θ ← θ + α∇ln π · q_t REINFORCE 算法
│ (q_t 用 MC 回报估计)
└───────────────────────┘
| 特性 | 说明 |
|---|---|
| 学什么 | 直接学策略 π(a|s,θ),不学 Q 值 |
| 输出 | 动作的概率分布(softmax) |
| 目标函数 | J(θ) = v̄_π 或 r̄_π |
| 更新方式 | 梯度上升:θ += α · ∇ln π · q |
| 采样要求 | On-policy(必须用当前策略采样) |
| 更新时机 | 回合结束后(Monte Carlo) |
| 探索机制 | softmax 天然保证 π(a) > 0,自动探索 |
| 下一步扩展 | Actor-Critic(下一讲,用 TD 代替 MC 估计 q) |