前言
近端策略优化(PPO)算法是OpenAI在2017提出的一种强化学习算法,本文将从PPO算法的基础入手,理解从传统策略梯度算法直到PPO算法的演进过程,以及算法迭代过程中的优化细节。
一、Policy Gradient(策略梯度算法)
在强化学习(Reinforcement Learning, RL)领域,智能体(Agent)通过与环境(Environment)的交互来学习如何做出决策。这个过程可以概括为以下几个关键步骤:
-
智能体(Agent):这是学习过程中的主体,它负责根据当前的状态(State)选择动作(Action)。
-
策略(Policy, π):智能体根据策略来选择动作。在深度强化学习中,策略通常由一个神经网络表示,这个网络的参数集通常表示为 θ(theta)。
-
环境状态(State, s):这是环境在某一时刻的具体情况,智能体根据当前状态来选择动作。
-
动作(Action, a):智能体在给定状态下选择的具体行为。
-
环境反馈:环境接收到智能体的动作后,会反馈新的状态和奖励(Reward, r)给智能体。
-
奖励(Reward, r):这是环境对智能体所执行动作的评估,它是一个标量智能体动作好坏的数值。
-
学习过程:智能体根据从环境中获得的反馈来更新其策略网络的参数,目的是最大化长期累积奖励。
-
游戏结束(Episode End):当达到某个终止条件时,如达到最大步数或完成特定目标,一个游戏周期结束。
-
循环迭代:智能体不断重复上述过程,通过多次迭代来逐渐学习如何在不同状态下选择最佳动作。
在深度强化学习中,策略 πθ 通常由一个深度神经网络来参数化,网络的权重就是 θ。通过训练,网络学习如何根据输入的状态 s 来预测输出最优的动作 a。这个过程涉及到策略的更新,价值函数的估计,以及可能的探索策略,如 ε-greedy 策略等。
策略梯度算法的过程如下图所示:
一个完整的eposide 序列,用表示,而一个特定的序列发生的概率为:
对于一个完整的序列,它在整个游戏期间获得的总的奖励用R()来表示。对于给定参数θ的策略,我们评估其应该获得的每局中的总奖励是:对每个采样得到的序列(即每一局)的加权和,即:
在决策过程中,通过调整策略参数θ,得到的Rθˉ 越大越好,因为这意味着选用的策略参数能平均获得更多奖励。这个形式就是调整θ,获取更大的Rθˉ ,所以可以利用梯度下降的方式来求解。于是用期望的每局奖励对θ来求导,如下图:
通过上述式子,把求导替换为期望,期望又可以由采集到的数据序列进行近似,即将每一个数据序列展开成每个数据点上的形式。每一条采样到的数据序列都会希望θ向着自己的方向进行更新,总体上,我们希望更加靠近奖励比较大的那条序列 ,因此用每条序列的奖励来加权平均他们的更新方向。所以完整的PG方法就可以表示为下图所示,即先采集数据,然后利用前面得到的梯度提升的式子更新参数,随后再根据更新后的策略再采集数据,再更新参数,反复循环。
二、PG算法的几个改进Tips
1.增加baseline
在策略梯度(Policy Gradient, PG)方法中,核心思想是通过调整策略以增加获得高奖励的动作的概率,同时减少获得低奖励的动作的概率。这种方法直接优化策略参数,使得智能体在环境中的行为能够带来更高的累积奖励。
然而,当奖励设计不够合理时,可能会出现问题。特别是当所有动作都能获得正奖励时,可能导致未被采样的潜在优秀动作被忽略。这是因为在策略梯度更新的公式中,未被采样的动作可能因为奖励为零而被错误地认为是次优的。这可能导致智能体错过学习到最优策略的机会。
为了避免这种情况,可以引入一个基线(baseline)来调整奖励,使得奖励有正有负,更加真实地反映动作的价值。基线的常见做法是将所有采样序列的平均奖励作为基线。这样,奖励不仅考虑了原始奖励的大小,还考虑了奖励相对于平均水平的偏差。
通过这种方式,即使是未被采样到的动作,只要它们相对于平均水平有正的偏差,也会被赋予正的调整后奖励,从而鼓励智能体探索这些动作。这有助于策略更新时平衡探索和利用,避免过早地收敛到次优策略。如下图所示:
2.使用折扣因子
-
即时奖励与未来奖励:在许多环境中,智能体在做出决策时不仅要考虑当前获得的奖励,还要考虑其行为对未来可能获得的奖励的影响。这类似于投资决策中,当前的收益与未来潜在收益之间的权衡。
-
折扣因子(Discount Factor) :折扣因子,通常用 γ(gamma)表示,是一个介于 0 和 1 之间的数值,用于调整未来奖励的当前价值。如果 γ=1,意味着未来奖励与即时奖励被赋予相同的价值。如果 γ<1,未来奖励的价值会随时间递减,这反映了未来奖励的不确定性或时间偏好。就像是我们拥有的货币一样,当前的一块钱比未来期望的一块钱更具有价值。因此在强化学习中,对未来的奖励需要进行一定的折扣:
三、PPO(近端策略优化算法)
在强化学习中,策略的更新方法可以分为两大类:on-policy(同策略)和off-policy(异策略)。
-
On-Policy(同策略)方法:这类方法中,用于训练的智能体(Agent)与用于收集数据的智能体是同一个实例。在训练过程中,智能体根据当前策略进行决策并收集经验数据,然后使用这些数据来更新策略。这种方法的优点是可以直接从经验中学习,但缺点是更新策略时的样本效率较低,因为智能体的探索和利用是同步进行的。
- 优点:直接从智能体的经验中学习,不需要额外的样本存储或重放机制。
- 缺点:更新策略时需要重新与环境交互,这可能导致学习过程较慢,尤其是在探索新动作时。
-
Off-Policy(异策略)方法:这类方法中,用于训练的智能体与用于收集数据的智能体是不同的实例。这意味着智能体可以在不直接影响当前策略的情况下,从其他来源(如重放的经验回放或从其他智能体的经验中)学习。这种方法允许智能体从过去的经验中学习,而不必重新经历相同的交互。
- 优点:可以更有效地利用过去的经验,允许智能体从历史数据中学习,而不是仅依赖于当前的交互。
- 缺点:可能需要额外的存储或重放机制来保存和重用经验。
为了提升训练速度,让采用到的数据可以重复使用,可以将on-policy的方式转换为off-policy的方式。即训练数据通过另一个相同结构的网络得到。这就涉及到重要性采样:
在强化学习和概率论中,重要性采样(Importance Sampling)是一种估计技术,用于估计一个函数关于未知概率分布 pp 的期望值。这种方法特别有用当我们无法直接从分布 pp 采样时。以下是重要性采样的基本概念和步骤:
-
目标:估计函数 f(x) 关于未知分布 p的期望 Ep[f(x)]。
-
直接采样的问题:我们无法直接从 p 采样,因为 p是未知的。
-
使用已知分布采样:我们从一个已知的分布 q 采样,这个分布 q 比 p 更容易采样。
-
重要性权重:为了校正从 q 采样的结果,我们为每个采样点 xi 分配一个重要性权重 wi,这个权重是 p(xi)和 q(xi)的比值。重要性权重的计算公式为: wi=p(xi)/q(xi)
-
期望估计:使用重要性权重,我们可以估计 f(x) 的期望值:
-
其中 N是采样点的数量。
通过这种采样方式的分布p和q不能差距过大,否则,会由于采样的偏离带来问题。即如下图:
-
期望估计问题:如果我们的目标是估计 f(x)的期望,但是 f(x) 的值可能为负,这意味着我们希望从 q(x) 中采样的样本大多数都集中在分布的右半部分,这样f(x) 可能大于 0,从而使得期望为正。
-
采样偏差:如果我们从 q(x) 中采样,而不是p(x),我们可能会引入偏差,因为 q(x) 可能与 p(x) 有显著差异。
-
重要性采样:重要性采样通过为从q(x) 中采样的每个样本 xi 分配一个权重 wi=p(xi)/q(xi)来调整 q(x) 采样的结果,使其更好地反映 p(x) 的特性。这样,即使我们从q(x) 中采样,我们也可以得到关于 p(x)的无偏估计。
-
PPO(Proximal Policy Optimization):在PPO中,我们希望在更新策略参数后能够重复利用之前收集的数据。如果我们在参数 θ′下收集数据,然后更新参数到 θ,直接使用这些数据可能会导致偏差,因为数据是基于旧策略收集的。
-
PPO中的重用数据:为了解决这个问题,PPO使用重要性采样来调整旧数据,使其适用于新策略。这样,即使数据是基于旧策略 θ′ 收集的,我们也可以使用重要性采样和新策略 θ来更新参数。在PPO中,计算旧策略 θ′ 和新策略 θ 下的行动的重要性权重,然后使用这些权重来调整旧数据,使其反映新策略的期望。这样,就可以在不牺牲样本效率的情况下,利用旧数据来更新策略。
根据上面的方式,记忆库中的旧数据更新参数的方式变为:
1、PPO-Penalty------基于 KL散度惩罚项优化目标函数
同时,根据重要性采样,pθ和pθ′不能差太远,因为差太远会引入问题,这并不是说参数的值不能差太多,而是说,输入同样的state,网络得到的动作的概率分布不能差太远 。所以要用KL散度来惩罚二者之间的分布偏差。得到动作的概率分布的相似程度,将其加入PPO模型的似然函数中,变为:
同时需要动态改变对θ和θ′分布差异的惩罚,如果KL散度值太大,我们增加这一部分惩罚,如果小到一定值,我们就减小这一部分的惩罚,得到PPO算法的过程:
2、 PPO-Clip------PPO截断
PPO 的另一种形式 PPO-截断(PPO-Clip)更加直接,它在目标函数中进行限制,以保证新的参数和旧的参数的差距不会太大。下图中绿色的线代表min中的第一项,即不做任何处理,蓝色的线为第二项,如果两个分布差距太大,则进行一定程度的裁剪。最后对这两项再取min,防止了θ更新太快。
参考文献:李宏毅老师Q-learning (Advanced Tips)_哔哩哔哩_bilibili