Skip to content

Latest commit

 

History

History
78 lines (48 loc) · 3.54 KB

File metadata and controls

78 lines (48 loc) · 3.54 KB

E.3.2 策略梯度与优势函数

前置知识E.3.1 导数、梯度与链式法则——你需要知道梯度的定义。


策略梯度从哪里来

上一节我们学会了用梯度调整参数来优化目标函数。现在把这个思路用到强化学习里。策略梯度的核心想法可以先用一句话理解:如果一个动作带来了高回报,就提高它在相应状态下被选中的概率;如果带来了低回报,就降低它的概率

假设在某个状态 $s$ 下,策略选择动作 right 的概率是:

$$ \pi_\theta(\text{right}\mid s)=0.2. $$

这次智能体选了 right,并最终得到回报 $G=10$。打个比方:如果一个篮球运动员在某个位置投篮命中了,教练就会鼓励他多在那个位置出手——策略梯度做的事与此类似。

策略梯度常见形式是:

$$ \nabla_\theta J(\theta) \approx G_t \nabla_\theta \log \pi_\theta(a_t\mid s_t). $$

它可以拆成两部分:

  • $G_t$(累计回报):这次结果好不好,决定更新的力度和方向。
  • $\nabla_\theta \log \pi_\theta(a_t\mid s_t)$(对数概率的梯度):怎样调整参数才能让这个动作更可能(或更不可能)发生。

如果 $G_t$ 是正的,就沿着”提高该动作概率”的方向更新;如果 $G_t$ 是负的,就反方向更新。


优势函数:比”好不好”更精确的判断

策略梯度给出了”好动作概率上调、坏动作概率下调”的大方向,但它有一个实际问题:用原始回报 $G_t$ 作为信号时,所有正回报的动作都会被鼓励,即使某些动作只是”碰巧拿到了正分”,实际上并不比平均水平好。这就好比考试全班平均 90 分,一个学生考了 80 分——虽然分数本身不算差,但相对而言并不值得表扬。优势函数就是为了解决这个”相对好坏”的问题而引入的。

$$ V(s)=8. $$

这次动作拿到回报 $10$,它不只是“好”,而是比平均水平好 $2$

$$ A(s,a)=10-8=2. $$

如果另一次拿到 $6$,虽然仍是正回报,但比平均差:

$$ A(s,a)=6-8=-2. $$

优势函数的作用就是回答:这个动作相对于当前状态的平均水平,到底更好还是更差?

策略梯度中常把 $G_t$ 换成优势估计 $\hat{A}_t$,这样"好多少"或"差多少"的信息更精确:

$$ \nabla_\theta J(\theta) \approx \hat{A}_t \nabla_\theta \log \pi_\theta(a_t\mid s_t). $$

用优势函数替代原始回报,能显著降低梯度估计的方差,让训练过程更稳定。


小结

本篇把梯度工具用到了策略优化上:

概念 公式 作用
策略梯度 $\nabla_\theta J \approx G_t \nabla_\theta\log\pi_\theta(a_t\mid s_t)$ 好结果对应动作概率上升
优势函数 $A(s,a)=R-V(s)$ 把"绝对好坏"变成"相对好坏"
优势加权 $\nabla_\theta J \approx \hat{A}t \nabla\theta\log\pi_\theta(a_t\mid s_t)$ 相对平均更好的动作被加强

策略梯度给出了方向,优势函数让信号更精确。但还有一个悬而未决的问题:每次更新应该走多大步?下一篇讨论 PPO 裁剪和 Adam 优化器如何控制更新幅度。

下一篇E.3.3 PPO 裁剪与 Adam —— 控制策略更新幅度和梯度噪声。