L9 Policy Gradient Method (一)

目录

核心思想:从"间接"到"直接"

第一步:策略如何参数化?

第二步:优化什么目标?(Metrics)

[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)
相关推荐
非社会人士10 天前
verl 中序列长度相关配置梳理:理清数据、Rollout 与 PPO 训练边界
大模型·强化学习·verl
强化学习与机器人控制仿真10 天前
Kimodo 入门教程(一)英伟达开源人形机器人动捕数据集训练运动学动作扩散模型
人工智能·神经网络·机器人·强化学习·扩散模型·英伟达·人形机器人
绵满16 天前
强化学习基础(RL)笔记
深度学习·强化学习·基础知识
WWZZ202517 天前
具身智能入门Isaac Sim——机器人设置-初级设计轮式机器人2
人工智能·机器人·大模型·强化学习·具身智能·四足·人形
智算菩萨18 天前
Chain-of-Thought Prompting:为什么逐步推理能提升大模型准确率
人工智能·深度学习·机器学习·语言模型·强化学习
Baihai_IDP25 天前
回头看 RLHF、PPO、DPO、GRPO 与 RLVR 的发展路径
人工智能·llm·强化学习
大傻^1 个月前
强化学习与大模型融合:从理论到机器人实践全解析
机器人·llm·大语言模型·强化学习·urdf·ppo·奖励设计
山顶夕景1 个月前
【LLM】ROLL团队的Agentic RL训练坑点
大模型·llm·强化学习·rl·agentic rl