零基础学习PPO
零基础学习PPO
基本概念
强化学习(RL)研究的是一个智能体如何通过与环境不断交互,学会做出好的决策。
核心循环是这样的:
- 状态(State)
:智能体观察到的环境状况 - 动作(Action)
:智能体根据当前状态选择一个可能的动作 - 奖励(Reward)
:环境根据某个动作给出的反馈信号,通常写作 表示在状态 下采取动作 获得的即时反馈 - 状态转移(Transition):通常表示为
,即在状态 下采取动作 以后,环境跳转到下一个状态 的概率分布
这个循环会不断重复,形成一条轨迹:
智能体的目标是最大化长期累积奖励,一般来说累积回报(Return)
这表示从时间步
这里有个关键概念:状态转移的概率分布通常是环境决定的,智能体无从得知,智能体能够决定的只有策略(Policy)
Markov Decision Process
马尔可夫决策过程是强化学习的数学模型,它是一个五元组:
其中
这个数学模型有一个重要性质:马尔可夫性质,即下一状态
智能体和环境的交互轨迹:在状态
状态价值函数和动作价值函数:
状态价值函数
状态价值函数
是指在状态 下,智能体按照策略 采取后续动作,拿到的期望累积折扣奖励。这个函数是对局面的评估,跟当下这一刻具体选什么动作无关。 动作价值函数
动作价值函数
是指在状态 下,智能体选择动作 ,后续再按照策略 采取行动,拿到的期望累积折扣奖励。这个函数是对“局面-动作”的评估。
按照策略
这两组等式构成了MDP的贝尔曼期望方程,也是各种RL算法的基础。有了状态价值函数
Policy-based
策略网络
优化目标与梯度计算
策略梯度算法的目标是最大化期望累积奖励:
这里的
如果想用梯度上升来优化策略,就需要计算策略梯度,即
根据链式法则,复合函数
也就是说,对一个概率分布求梯度,等于这个分布自己,乘以它自己的对数梯度。
假设一条轨迹
此时,策略梯度的计算就变成了一个期望的计算,期望的计算可以通过采样来近似,即:让策略多跑几次,算出每次的
轨迹
现在对
代入刚刚的策略梯度公式,我们得到策略梯度定理的最简形式:
注意,
改进策略梯度计算
每个动作
用未来折扣回报
代替整个轨迹的总奖励 ,因为时刻 的动作只能影响之后的奖励,所以更合理的分配是让 乘以从 时刻开始的回报 ;这个改进使得功劳分配更加合理,但是 本身的绝对值仍然可能很大,不同的轨迹之间波动也很剧烈,方差问题仍然没有解决。 为了进一步降低方差,我们需要减小梯度估计中乘数的数值,但是又不能改变梯度的期望方向;减去一个只依赖状态
的基线 ,它只依赖状态 ,不随动作变化。
于是原来的
我们可以把梯度估计的期望拆成两个部分:
对于任意一个概率分布,
所以不管
基线
将以上两点结合,取基线为状态价值函数
其中
Actor-Critic
蒙特卡洛方法的核心思想:用随机样本的均值来估计期望值。蒙特卡洛采样具备无偏性和高方差两个性质。
回想动作价值函数
这促使我们用函数近似来直接学习
引入价值网络
Critic网络使用时序查分误差(TD Error)来帮助估计优势:
这个
于是,Actor的梯度更新变成:
这就是最基础的Actor-Critic算法:Actor根据Critic提供的
Proximal Policy Optimization
GAE
单步TD Error的方差小,但是只考虑了一步真实奖励,其余全依赖Critic的估计。如果Critic本身不准确,那么优势估计就会带有较大偏差,导致Actor学到次优策略。相反,纯蒙特卡洛的
广义优势估计(GAE)将两者做了折中,它定义优势估计为未来TD Error的指数加权和:
其中,
- 当
时, ,退化为单步TD Error,偏差最大,方差最小 - 当
时, ,退化为蒙特卡洛优势,无偏,方差最大
取中间的
同时,我们也需要为Critic网络准备一个正确答案作为更新目标,通常是
Actor-Critic框架加上GAE的优势估计,就可以让训练变得稳定且相对准确。不过,我们还面临另一个独立的问题:策略更新的幅度。
PPO
即使有了低方差、偏差可控的优势估计,如果在一次更新中策略变化太大,依然会导致训练崩溃。原因是:
- 策略梯度更新是一个局部线性近似,只在当前策略附近可信
- 如果根据优势估计,大步修改策略参数,可能导致新策略完全脱离合理区域,这会引发两个灾难:
- 策略坍塌:策略变成确定性,不再探索;如果某个碰巧不错的动作其实并非全局最优,智能体就再也学不到更好的了
- 数据分布撕裂:下一轮采样时,因为策略大变,遇到的状态分布和之前完全不同;Critic网络瞬间过时,导致优势估计完全错误,错误的优势信号指导Actor进一步胡乱更新,陷入恶性循环
既然大步更新会导致策略坍塌和数据分布撕裂,那解决问题的思路就很明确——我们必须给策略更新加一道“安全锁”,让新策略不要离旧策略太远。
但在实际训练中,我们往往不会每轮都丢弃旧数据,而是用同一批数据做多次梯度更新。这就意味着:我们要用旧策略
为了在数学上把期望分布纠正过来,需要引入重要性采样权重:
这个比率恰好起到双重作用:
- 纠正分布差异:让旧样本能无偏地近似新策略的梯度,实现数据多轮复用;
- 充当差异标尺:
偏离 1 的程度,直接反映了新旧策略对该动作偏好的变化大小。
于是,“限制策略更新幅度”这件事就可以翻译成:不要让
- 当优势
时,我们鼓励提升概率比率 ,但不许它超过 ; - 当优势
时,我们要降低概率比率,也不许它跌破 ; - 一旦比率超出这个区间,
min函数就会截断梯度,相当于告诉优化器“这一步不能再远了”。
这样,就把策略更新的幅度牢牢锁在了安全范围内,既提升了样本效率,又保持了训练的稳定。
当然,我们也需要考虑Critic网络的更新,通常来说是一个均方误差:
最终的PPO损失函数定义为:
因为我们要最大化