策略的进化:从随心所欲到稳健前行
想象一个正在学习下棋的孩子。起初他可能偶然走出一步妙手,尝到甜头后就拼命重复这步棋,完全不顾棋盘局势的变化,结果很快被对手抓住破绽。强化学习中的智能体也面临同样的困境。策略函数就是智能体的决策方式,它告诉智能体在某个状态下该做什么。要让智能体真正变强,关键不在于让它多么拼命地追求好结果,而在于让它每一步改进都稳健扎实,不因一次胜利就得意忘形,也不因一次失误就畏缩不前。
策略函数是什么
策略函数是强化学习的核心概念。如果把智能体看作一个决策者,策略函数就是它的决策准则。在连续控制任务中,比如操控机械臂抓取物品或者控制赛车转向,策略函数输出的不是一个固定的动作,而是一个动作的概率分布。智能体从这个分布中抽样得到具体动作。这种随机性是有意设计的,它让智能体在探索环境时能够尝试不同的可能性,而不是死板地重复同一个动作。
这个概率分布通常由神经网络来生成。神经网络接收当前的环境状态作为输入,输出两个关键参数:动作的均值和方差。有了均值和方差,就确定了一个正态分布,智能体从这个分布中抽样得到动作。这个带参数的分布记作:
πθ(at∣st) \pi_\theta(\mathbf{a}_t | \mathbf{s}_t) πθ(at∣st)
其中 θ\thetaθ 代表神经网络的参数,st\mathbf{s}_tst 是当前状态,at\mathbf{a}_tat 是智能体选择的动作。这个表达式读作在状态 st\mathbf{s}_tst 下选择动作 at\mathbf{a}_tat 的概率。神经网络的参数就是我们需要优化的对象。
优化的目标很直接:让智能体获得的累积奖励最大化。这个目标写成数学形式就是:
J(θ)=E∑t=0∞rt J(\theta) = \mathbb{E} \left \\sum_{t=0}\^{\\infty} r_t \\right J(θ)=Et=0∑∞rt
这个式子说的是,在策略 πθ\pi_\thetaπθ 的控制下,智能体从环境中获得的所有奖励之和的期望值。我们要找的就是能让这个期望值最大的那组参数 θ\thetaθ。
为了优化这个目标,我们需要知道参数朝哪个方向调整能够增加奖励。策略梯度方法给出了这个方向的计算公式:
g^=E^t∇θlogπθ(at∣st)A\^t \hat{g} = \hat{\mathbb{E}}_t \left \\nabla_\\theta \\log \\pi_\\theta(\\mathbf{a}_t \| \\mathbf{s}_t) \\hat{A}_t \\right g^=E^t∇θlogπθ(at∣st)A\^t
这个公式看起来复杂,含义却很朴素。∇θ\nabla_\theta∇θ 表示对参数 θ\thetaθ 求梯度,也就是寻找上升最快的方向。logπθ\log \pi_\thetalogπθ 是策略对数概率,A^t\hat{A}_tA^t 是优势函数,它衡量某个动作相比平均水平好多少或者差多少。整个公式的意思就是:如果某个动作带来了好结果,就沿着让这个动作概率增加的方向调整参数;如果带来了坏结果,就沿着反方向调整。
实践中我们并不直接计算这个梯度,而是通过采样来估计它。对应的损失函数是:
LPG=E^tlogπθ(at∣st)A\^t L^{PG} = \hat{\mathbb{E}}_t \left \\log \\pi_\\theta(\\mathbf{a}_t \| \\mathbf{s}_t) \\hat{A}_t \\right LPG=E^tlogπθ(at∣st)A\^t
优化这个损失函数,就等价于让好动作更可能出现、坏动作更少出现。这个逻辑看似完美,实际操作中却会引发严重的问题。
贪婪更新的陷阱
按照这个朴素的策略梯度方法,智能体根据一次尝试的结果来调整策略。某次尝试碰巧获得了极高的奖励,梯度就会猛烈地增加对应动作的概率。这会导致策略瞬间偏科,几乎只会选择这一个动作,完全忘记了之前学到的其他有用经验。更糟糕的是,如果这个高奖励只是运气使然,策略就会卡在一个次优的位置上再也无法进步。
这种情况在机器学习中被称为灾难性遗忘。智能体像一个记性很差的学生,考试前突击复习某个知识点,考完就忘得一干二净。强化学习的训练过程是持续进行的,智能体需要不断从新数据中学习,同时又不能丢掉已经掌握的能力。纯粹的贪婪更新无法平衡这两者。
问题的根源在于更新步长。梯度告诉我们应该往哪个方向调整参数,却没有告诉我们调整多少是合适的。步子太小,学得太慢;步子太大,容易摔跤。强化学习的特殊之处在于,数据是由策略自身产生的。一旦策略发生剧烈变化,后续收集的数据就会完全不同,等于智能体进入了一个全新的环境。如果这个新环境比原来的更糟糕,智能体可能永远找不到回去的路。
给策略戴上缰绳
解决这个问题的思路很朴素:既然大步流星容易跌倒,那就限制每一步的幅度。Trust Region Policy Optimization正是基于这个想法,它给策略更新加了一道硬性约束。
在TRPO中,智能体先按照旧策略 πθold\pi_{\theta_{\text{old}}}πθold 去收集数据,然后在这些数据的基础上优化一个新策略 πθ\pi_\thetaπθ。优化完成后,新策略就变成下一次迭代的旧策略。为了保证每次更新都安全,TRPO要求新旧策略之间的差异不能太大。这个差异用KL散度来衡量,它本质上衡量的是两个概率分布之间的距离。约束条件写成:
E^tKL\[πθold(⋅∣st),πθ(⋅∣st)]≤δ \hat{\mathbb{E}}_t \left KL \\left\[ \\pi_{\\theta_{\\text{old}}} (\\cdot \| \\mathbf{s}_t), \\pi_\\theta (\\cdot \| \\mathbf{s}_t) \\right \right] \leq \delta E^tKL\[πθold(⋅∣st),πθ(⋅∣st)]≤δ
δ\deltaδ 是一个预设的小正数,比如0.01。这个约束强制新策略与旧策略的行为差异被控制在一个很小的范围内。
优化目标本身也要做一些调整。因为新策略和旧策略不一样,直接使用原来的目标函数会产生偏差。TRPO引入了一个概率比来解决这个问题:
Rt(θ)=πθ(at∣st)πθold(at∣st) R_t(\theta) = \frac{\pi_\theta(\mathbf{a}t | \mathbf{s}t)}{\pi{\theta{\text{old}}} (\mathbf{a}_t | \mathbf{s}_t)} Rt(θ)=πθold(at∣st)πθ(at∣st)
这个比值衡量的是同一个动作在新策略下出现的概率是旧策略下的多少倍。如果比值接近1,说明两个策略对这个动作的偏好差不多;如果比值远大于1或者远小于1,说明策略发生了显著变化。
TRPO的完整优化问题变成:
maximizeθE^tRt(θ)A\^t \underset{\theta}{\text{maximize}} \quad \hat{\mathbb{E}}_t \left R_t(\\theta) \\hat{A}_t \\right θmaximizeE^tRt(θ)A\^t
subject toE^tKL\[πθold(⋅∣st),πθ(⋅∣st)]≤δ \text{subject to} \quad \hat{\mathbb{E}}_t \left KL \\left\[ \\pi_{\\theta_{\\text{old}}} (\\cdot \| \\mathbf{s}_t), \\pi_\\theta (\\cdot \| \\mathbf{s}_t) \\right \right] \leq \delta subject toE^tKL\[πθold(⋅∣st),πθ(⋅∣st)]≤δ
这个方法的数学推理很严谨,能够保证策略在理论上单调改进。但它有一个明显的短板:实现起来过于复杂。约束优化问题涉及二阶导数和共轭梯度等数值计算工具,代码实现极易出错,调试困难,计算开销也大。许多实践者虽然认可这个方法的原理,却因为实现的复杂性而望而却步。
于是研究者们继续寻找更简洁的方案。目标很明确:保留约束更新的安全性,同时去掉复杂的数学运算。这个追求最终催生了Proximal Policy Optimization,也就是PPO算法。它用了一个极其巧妙的替代方案,用截断代替约束,用惩罚代替强制。
截断的精妙之处
PPO的核心思想是把KL散度约束转化成目标函数内部的一个截断操作。它保留了概率比 Rt(θ)R_t(\theta)Rt(θ) 这个核心概念,但不再把它放进约束条件里,而是直接放进目标函数中加以限制。
PPO的目标函数是:
LCLIP=E^tmin(Rt(θ)A\^t,clip(Rt(θ),1−ϵ,1+ϵ)A\^t) L^{CLIP} = \hat{\mathbb{E}}_t \left \\min \\left( R_t(\\theta) \\hat{A}_t, \\text{clip}(R_t(\\theta), 1 - \\epsilon, 1 + \\epsilon) \\hat{A}_t \\right) \\right LCLIP=E^tmin(Rt(θ)A\^t,clip(Rt(θ),1−ϵ,1+ϵ)A\^t)
这个公式里出现了两个新的符号。clip\text{clip}clip 函数把 RtR_tRt 的值限制在 1−ϵ1-\epsilon1−ϵ 和 1+ϵ1+\epsilon1+ϵ 之间,如果 RtR_tRt 小于下限就取下限值,如果大于上限就取上限值。ϵ\epsilonϵ 是一个小正数,通常设为0.2。min\minmin 函数则是在两个候选值之间取较小的那个。
这个看似简单的数学变换,却实现了非常精妙的控制。我们把它的效果拆成两种情况来理解会更清楚。
当优势函数 A^t\hat{A}_tA^t 为正数时,说明这个动作的结果比平均水平好,我们希望增加它出现的概率。未截断的目标是 RtR_tRt 乘以 A^t\hat{A}_tA^t,为了让这个乘积变大,算法会试图增大 RtR_tRt。但截断操作把 RtR_tRt 的上限定在了 1+ϵ1+\epsilon1+ϵ。如果算法想把 RtR_tRt 推到1.5,clip\text{clip}clip 函数会把它拉回到1.2。同时 min\minmin 函数选择截断后的值作为最终损失,因为截断后的值更小。这样算法就失去了继续增大 RtR_tRt 的动力,好动作的概率最多只能提升 ϵ\epsilonϵ 的比例。
当优势函数 A^t\hat{A}_tA^t 为负数时,说明这个动作的结果比平均水平差,我们希望降低它出现的概率。未截断的目标是 RtR_tRt 乘以一个负数,为了让乘积变小,算法会试图减小 RtR_tRt。但截断操作把 RtR_tRt 的下限定在了 1−ϵ1-\epsilon1−ϵ。如果算法想把 RtR_tRt 降到0.5,clip\text{clip}clip 函数会把它拉回到0.8。同样,min\minmin 函数选择截断后的值,算法失去了继续减小 RtR_tRt 的动力,差动作的概率最多只能降低 ϵ\epsilonϵ 的比例。
用一个具体例子来感受这个机制。设 ϵ=0.2\epsilon = 0.2ϵ=0.2,范围就是0.8到1.2。某个好动作在当前策略下的概率是百分之十,就算这个动作带来了极高的奖励,一次更新后它的概率最多变成百分之十二。某个差动作的概率是百分之三十,就算它带来了极差的后果,一次更新后它的概率最少也是百分之二十四。
这个设计最聪明的地方在于主动放弃一部分梯度信号。当算法试图把概率比推到截断范围之外时,那些极端的梯度就被舍弃了。这完全符合我们的直觉:偶尔一次的高回报很可能是运气,不值得为此剧烈改变策略;偶尔一次的低回报也可能是意外,同样不值得为此剧烈改变策略。
三种方法的对照
原始策略梯度方法没有步长限制。它的损失函数是 LPG=E^tlogπθA\^tL^{PG} = \hat{\mathbb{E}}_t \\log \\pi_\\theta \\hat{A}_t LPG=E^tlogπθA\^t。它追求每一步的最大收益,却因为步子太大而频繁跌倒。这个方法的优点是概念简单直接,缺点是不稳定,在复杂任务中几乎无法收敛。
TRPO用硬约束来限制步长。它的优化目标是最大化 E^tRtA\^t\hat{\mathbb{E}}_t R_t \\hat{A}_t E^tRtA\^t,约束条件是 KL 散度小于等于 δ\deltaδ。这个方案通过KL散度保证新策略不会偏离旧策略太远,数学上严谨可靠。缺点是实现复杂,计算成本高,对实践者不够友好。
PPO用截断机制替代约束。它的损失函数是 LCLIP=E^tmin(RtA\^t,clip(Rt,1−ϵ,1+ϵ)A\^t)L^{CLIP} = \hat{\mathbb{E}}_t \\min( R_t \\hat{A}_t, \\text{clip}(R_t, 1-\\epsilon, 1+\\epsilon) \\hat{A}_t ) LCLIP=E^tmin(RtA\^t,clip(Rt,1−ϵ,1+ϵ)A\^t)。这个方法在效果上可以媲美TRPO,但实现简单得多,只需要在目标函数中加上几行截断代码。正是这种简洁性让PPO成为了当下最广泛使用的策略优化算法之一。
从无限制到硬约束再到软约束,这条演进路径反映了强化学习领域的一个重要认识:限制不是对进步的阻碍,而是对进步的保障。一个懂得自我节制的智能体,比一个横冲直撞的智能体走得更远。
稳健进步的力量
策略改进的故事给我们一个更普遍的启示。无论是机器学习算法还是人类的学习过程,纯粹的贪婪往往适得其反。每次尝试都急于把收益最大化,反而会破坏已有的基础,让长期进步变得不可能。真正有效的学习需要一种温和的自我约束,在探索新可能性和守住已有成果之间找到平衡。
PPO的截断机制看似简单,甚至有些粗糙,却抓住了这个平衡的本质。它没有使用复杂的数学工具,只是设定了一个朴素的界限,然后坚定地执行。这种大道至简的风格正是它广受欢迎的原因。好的方法不必繁复,关键是要触及问题的核心。
回到开头那个下棋的孩子。真正的好教练不会让他因为一步妙手就反复使用同一招,也不会让他因为一步臭棋就彻底放弃某种走法。教练会告诉他:每次调整一点,保持住整体的平衡,在不断的微调中找到最优的策略。这就是策略函数从原始梯度到PPO的进化之路,也是任何复杂系统持续改进的朴素真理。
参考文献
1 Lafarge N B,Miller D,Howell K C,et al. Guidance for closed-loop transfers using reinforcement learning with application to libration point orbitsC//AIAA Scitech Forum:1 PartF. American Institute of Aeronautics and Astronautics Inc, AIAA,2020.