强化学习—PPO
On-policy方法专注于使用当前策略生成数据并进行学习,适合那些需要频繁策略更新的场景,但样本效率较低。Off-policy方法允许智能体使用与当前策略不同的策略生成数据,并能够重用经验库中的数据,因此在样本效率和学习灵活性上表现更好,但可能会引入更多的训练不稳定性。根据具体的应用需求,可以选择使用 On-policy 或 Off-policy 方法,或者在某些情况下结合两者的优势。
On-Policy 和 Off-Policy
在强化学习中,on-policy 和 off-policy 是两种不同的策略学习范式,分别代表了智能体如何学习和更新策略的方式。这两种方法在数据采集、策略更新和使用的策略上有着显著的区别。
如果被训练的agent和与环境做互动的agent(生成训练样本)是同一个的话,那么叫做on-policy(同策略)。
如果被训练的agent和与环境做互动的agent(生成训练样本)不是同一个的话,那么叫做off-policy(异策略)。
Policy Gradient 在处理连续动作空间时 Learning rate 取值抉择困难。Learning rate 取值过小,就会导致深度强化学习收敛性较差,陷入完不成训练的局面,取值过大则导致新旧策略迭代时数据不一致,造成学习波动较大或局部震荡。
On-Policy
On-policy 强化学习方法是指智能体在学习过程中使用的策略和用于生成数据的策略是相同的。换句话说,智能体使用当前的策略与环境进行交互,从中收集数据,并根据这些数据直接更新当前的策略。
特点:
- 策略更新:On-policy 方法直接更新当前正在执行的策略。这意味着每次策略更新后,收集新数据时智能体会使用更新后的策略。
- 探索与利用:由于策略在更新时可能带有探索行为(如 ε-greedy 策略中的 ε 部分),On-policy 方法通常要求智能体在收集数据时兼顾探索和利用的平衡。
- 稳定性与收敛性:因为 On-policy 方法总是在更新当前策略,因此在特定情况下,策略的稳定性和收敛性可能较好,但它在利用之前的经验上效率较低。
常见算法:
- SARSA:在 SARSA 中,智能体根据当前策略进行动作选择,并使用这些数据更新策略。
- PPO(Proximal Policy Optimization):PPO 是一种先进的 On-policy 策略梯度算法,通过控制策略更新的步长来保持训练的稳定性。
Off-Policy
Off-policy 强化学习方法则允许智能体使用与当前策略不同的策略来生成数据和更新策略。这意味着智能体可以使用一种策略来探索环境(称为行为策略,behavior policy),但可以使用另一种策略(称为目标策略,target policy)来学习和更新。
特点:
- 策略更新:Off-policy 方法使用一种策略(行为策略)与环境交互,但用另一种策略(目标策略)进行学习。行为策略可能包含更多的探索性,而目标策略则更加专注于优化。
- 利用历史数据:Off-policy 方法可以利用过去生成的数据,无论这些数据是如何生成的。这使得 Off-policy 方法可以从不同来源的经验中学习,通常更为高效。
- 样本效率:由于可以重用经验池中的数据,Off-policy 方法的样本效率通常较高。
常见算法:
- Q-learning:Q-learning 是一种经典的 Off-policy 算法,智能体根据 ε-greedy 策略(行为策略)进行探索,但更新时基于最大化当前估计的 Q 值。
- DQN(Deep Q-Networks):DQN 是 Q-learning 的深度学习扩展,使用经验回放(experience replay)和目标网络(target network)来稳定训练。
- DDPG(Deep Deterministic Policy Gradient):DDPG 是一种用于连续动作空间的 Off-policy 算法,结合了策略梯度方法和深度 Q-learning 的优点。
On-Policy 与 Off-Policy 的对比
-
策略依赖性:
- On-policy:智能体只能根据当前策略学习,并且必须在每次更新后重新生成数据。
- Off-policy:智能体可以根据不同的策略生成数据并进行学习,能够重用历史数据。
-
样本效率:
- On-policy:样本效率相对较低,因为它只能使用当前策略生成的数据。
- Off-policy:样本效率更高,可以从各种来源的经验中学习。
-
稳定性:
- On-policy:由于直接基于当前策略更新,可能更稳定,但在复杂环境中收敛速度较慢。
- Off-policy:更为灵活,但也更容易出现不稳定,尤其是在处理非平稳策略时。
-
应用场景:
- On-policy:适用于需要策略不断改进和调整的场景,如策略梯度方法。
- Off-policy:适用于需要从多源数据中学习或具有较高样本效率的场景,如 Q-learning 和深度 Q 网络。
总结
- On-policy 方法专注于使用当前策略生成数据并进行学习,适合那些需要频繁策略更新的场景,但样本效率较低。
- Off-policy 方法允许智能体使用与当前策略不同的策略生成数据,并能够重用经验库中的数据,因此在样本效率和学习灵活性上表现更好,但可能会引入更多的训练不稳定性。
根据具体的应用需求,可以选择使用 On-policy 或 Off-policy 方法,或者在某些情况下结合两者的优势。
近端策略优化(Proximal Policy Optimization)
PPO (Proximal Policy Optimization) 是一种强化学习算法,旨在通过引入较为简单的约束来改进策略梯度方法的稳定性和效率。PPO 是 OpenAI 提出的,它结合了 Trust Region Policy Optimization (TRPO) 的优势,同时简化了实现和计算过程,因此在实践中非常受欢迎。
核心思想
PPO 的核心思想是通过限制策略更新的幅度来防止策略发生过大的变化,从而保持训练的稳定性。与 TRPO 类似,PPO 也关注策略的更新步长,但它采用了更简单且高效的方式进行约束。
PPO 提供了两种主要的实现方法:
- Clip Objective(剪切目标函数):
- PPO 使用了一个剪切函数来限制策略更新的范围。具体来说,PPO 对策略更新的目标函数进行调整,使得当策略更新幅度超出设定范围时,更新的收益被剪切,避免策略发生剧烈变化。
- Adaptive KL Penalty(自适应 KL 惩罚项):
- 另一种方法是在目标函数中加入一个自适应的 KL 散度惩罚项,动态地调整策略变化的幅度。当策略变化过大时,惩罚项增大,反之则减小。这种方法更接近 TRPO 的原理,但实现更加简便。
原理
通过重要性采样由On-policy 转化为Off-policy
PPO算法是在Policy Gradient算法的基础上由来的,Policy Gradient是一种on-policy的方法,他首先要利用现有策略和环境互动,产生学习资料,然后利用产生的资料,按照Policy Gradient的方法更新策略参数。然后再用新的策略去交互、更新、交互、更新,如此重复。这其中有很多的时间都浪费在了产生资料的过程中,所以我们应该让PPO算法转化为Off-Policy。
Off-Policy的目的就是更加充分的利用actor产生的交互资料,增加学习效率。
Importance Sampling 是一种用于估计在一个分布下的期望值的方法。在强化学习中,我们需要估计由当前策略产生的样本的值函数,然后利用该估计值来优化策略。然而,在训练过程中,我们通常会使用一些已经训练好的旧策略来采集样本,而不是使用当前的最新策略。这就导致了采样样本和当前策略不匹配的问题,也就是所谓的“策略偏移”。
E x − p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x − q [ f ( x ) p ( x ) q ( x ) ] E_{x-p}[f(x)] = \int f(x)p(x)dx = \int f(x)\frac{p(x)}{q(x)}q(x)dx=E_{x-q}[f(x) \frac{p(x)}{q(x)}] Ex−p[f(x)]=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex−q[f(x)q(x)p(x)]
上面的式子表示,已知x服从分布p,我们要计算f(x),但是p不方便采样,我们就可以通过q去采样,计算期望。重要性权重 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)
PPO应用了importance sampling,使得我们用性为策略获取的数据,能够更新目标策略,把A2C从在线策略,编程离线策略。
TD error去乘重要性权重。
衡量两个分布是否一样,需要期望 μ \mu μ 和方差 σ \sigma σ都一样才行,虽然使用了重要性权重去修正了q分布的期望 μ \mu μ,但是方差还是不同的。
E x − p [ f ( x ) ] = E x − q [ f ( x ) p ( x ) q ( x ) ] E_{x-p}[f(x)] = E_{x-q}[f(x) \frac{p(x)}{q(x)}] Ex−p[f(x)]=Ex−q[f(x)q(x)p(x)]
V A R [ X ] = E [ X 2 ] − ( E [ X ] ) 2 VAR[X] = E[X^{2}] - (E[X])^{2} VAR[X]=E[X2]−(E[X])2
V a r x − p [ f ( x ) ] = E x − p [ f ( x ) 2 ] − ( E x − p [ f ( x ) ] ) 2 Var_{x-p}[f(x) ] = E_{x-p}[f(x)^{2}] - (E_{x-p}[f(x)])^{2} Varx−p[f(x)]=Ex−p[f(x)2]−(Ex−p[f(x)])2
V a r x − q [ f ( x ) p ( x ) q ( x ) ] = E x − q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x − q [ f ( x ) p ( x ) q ( x ) ] ) 2 = E x − p [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x − p [ f ( x ) ] ) 2 Var_{x-q}[f(x) \frac{p(x)}{q(x)}]= E_{x-q} [(f(x) \frac{p(x)}{q(x)})^{2}] - (E_{x-q}[f(x) \frac{p(x)}{q(x)}])^{2} = E_{x-p} [f(x)^{2} \frac{p(x)}{q(x)}] - (E_{x-p}[f(x)])^{2} Varx−q[f(x)q(x)p(x)]=Ex−q[(f(x)q(x)p(x))2]−(Ex−q[f(x)q(x)p(x)])2=Ex−p[f(x)2q(x)p(x)]−(Ex−p[f(x)])2
如果对p和q采样的次数足够多,两个分布会相同;反之,方差差距会越来越大。
使用自适应的 KL 散度惩罚项来限制分布差距
PPO-Penalty 的主要思想是将非负约束视为一种奖惩机制。具体来说,当一个行为不符合约束条件(比如动作小于0)时,我们会对策略进行惩罚。这种惩罚采用了一种类似于强化学习中的奖励机制的方式,即在损失函数中引入一个 penalty term。
在 PPO-Penalty 中,我们可以将惩罚项添加到 PPO 算法的损失函数中,可以是在 KL 散度约束项的后面添加一个 penalty term 或者在损失函数中添加一个额外的 penalty term。这个 penalty term 会根据动作的非负性来惩罚那些不符合约束条件的行为,从而强制策略学会产生符合约束条件的行为。
注意,KL计算的不是参数上面的距离,而是参数使得性为动作表现上的距离,也就是策略(action上面的概率分布)的距离
J p p o θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta^{'}}_{ppo}(\theta) = J^{\theta^{'}}(\theta) - \beta KL(\theta,\theta^{'}) Jppoθ′(θ)=Jθ′(θ)−βKL(θ,θ′)
适应的 KL 散度超参数 β \beta β动态调整
i f K L ( θ , θ ′ ) > K L m a x , i n c r e a s e β if \ KL(\theta,\theta^{'})>KL_{max},increase\ \beta if KL(θ,θ′)>KLmax,increase β
i f K L ( θ , θ ′ ) < K L m i n , d e c r e a s e β if \ KL(\theta,\theta^{'})<KL_{min},decrease\ \beta if KL(θ,θ′)<KLmin,decrease β
使用TPRO架构
TRPO 使用 KL 散度来度量新旧策略之间的差异。具体来说,TRPO 通过以下优化问题来更新策略:
maximize θ E s ∼ π old , a ∼ π old [ π θ ( a ∣ s ) π old ( a ∣ s ) A π old ( s , a ) ] subject to E s ∼ π old [ KL ( π old ( ⋅ ∣ s ) ∣ ∣ π θ ( ⋅ ∣ s ) ) ] ≤ δ 其中: \text{maximize}_{\theta} \quad \mathbb{E}_{s \sim \pi_{\text{old}}, a \sim \pi_{\text{old}}} \left[ \frac{\pi_{\theta}(a|s)}{\pi_{\text{old}}(a|s)} A_{\pi_{\text{old}}}(s, a) \right] \\ \text{subject to} \quad \mathbb{E}_{s \sim \pi_{\text{old}}} \left[ \text{KL} \left( \pi_{\text{old}}(\cdot|s) || \pi_{\theta}(\cdot|s) \right) \right] \leq \delta 其中: maximizeθEs∼πold,a∼πold[πold(a∣s)πθ(a∣s)Aπold(s,a)]subject toEs∼πold[KL(πold(⋅∣s)∣∣πθ(⋅∣s))]≤δ其中:
- $ \theta $ 是策略的参数。
- π old \pi_{\text{old}} πold 是旧策略, π θ \pi_{\theta} πθ 是新的策略。
- A π old ( s , a ) A_{\pi_{\text{old}}}(s, a) Aπold(s,a) 是 Advantage Function,表示在旧策略下某个动作的优势。
- δ \delta δ是一个超参数,用来控制策略更新时允许的最大策略变化。
这个约束确保每次策略更新时,新的策略不会偏离旧策略太远,避免了由于步长过大导致的性能急剧下降。
Clip来限制策略更新的范围
目标是在优化策略的同时,控制策略更新的幅度,以避免更新过大导致策略发生剧烈变化。这可以提供算法的稳定性,并且有助于收敛到一个比较好的策略。
具体来说,PPO-Clip 在优化过程中使用一个剪切函数来限制新旧策略之间的差异。这个剪切函数用于计算出新旧策略在每个动作样本上的比例,并将其与一个预先设定的范围进行比较。剪切函数使用的是一个剪切比例,通常表示为 clip_ratio,它是一个介于0和1之间的数值。比如,如果 clip_ratio 设置为0.2,那么在计算新旧策略比例时,会将比例限制在0.8到1.2之间。
J p p o θ k ( θ ) = ∑ s t , a t m i n ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) , c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) A θ k ( s t , a t ) ) J^{\theta^{k}}_{ppo}(\theta) = \sum_{s_{t}, a_{t}} min(\frac{p_{\theta}(a_{t}|s_{t})}{p_{\theta^{k}}(a_{t}|s_{t})}A^{\theta^{k}}(s_{t},a_{t}) ,clip(\frac{p_{\theta}(a_{t}|s_{t})}{p_{\theta^{k}}(a_{t}|s_{t})},1-\epsilon,1+\epsilon)A^{\theta^{k}}(s_{t},a_{t})) Jppoθk(θ)=st,at∑min(pθk(at∣st)pθ(at∣st)Aθk(st,at),clip(pθk(at∣st)pθ(at∣st),1−ϵ,1+ϵ)Aθk(st,at))
本质就是将新旧动作的差异限定在 [ 1 − ϵ , 1 + ϵ ] [ 1 − ϵ , 1 + ϵ ] [1−ϵ,1+ϵ]。
当 A > 0 A>0 A>0时,说明这个动作的价值高与平均,训练会使得 p θ ( a t ∣ s t ) p_{\theta}(a_{t}|s_{t}) pθ(at∣st)变大从而 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}(a_{t}|s_{t})}{p_{\theta^{k}}(a_{t}|s_{t})} pθk(at∣st)pθ(at∣st)变大,如果太大了,是的分布差距就变大了。
PPO 的主要步骤
-
采集数据:通过当前策略与环境交互,采集状态、动作、奖励等数据。
-
计算优势函数:使用 Advantage Function (A(s, a)) 计算每个状态-动作对的相对优势。通常使用广义优势估计(GAE, Generalized Advantage Estimation)来降低方差。
-
策略优化:
-
剪切目标函数:PPO 定义了一个新目标函数,它包含两个部分:旧策略和新策略的比率 r ( θ ) = π θ ( a ∣ s ) π θ old ( a ∣ s ) r(\theta) = \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} r(θ)=πθold(a∣s)πθ(a∣s)和一个剪切阈值。目标函数为:
E [ min ( r ( θ ) A ( s , a ) , clip ( r ( θ ) , 1 − ϵ , 1 + ϵ ) A ( s , a ) ) ] \mathbb{E} \left[ \min \left( r(\theta) A(s, a), \text{clip}\left(r(\theta), 1 - \epsilon, 1 + \epsilon\right) A(s, a) \right) \right] E[min(r(θ)A(s,a),clip(r(θ),1−ϵ,1+ϵ)A(s,a))]
其中 ϵ \epsilon ϵ 是一个小的剪切系数,用于限制策略更新的幅度。 -
自适应 KL 惩罚项:PPO 也可以选择在目标函数中加入 KL 散度惩罚项:
E [ r ( θ ) A ( s , a ) − β KL ( π θ old , π θ ) ] \mathbb{E} \left[ r(\theta) A(s, a) - \beta \text{KL}\left(\pi_{\theta_{\text{old}}}, \pi_{\theta}\right) \right] E[r(θ)A(s,a)−βKL(πθold,πθ)]
其中 β \beta β是一个动态调整的系数,用于控制 KL 惩罚项的权重。
-
-
更新策略:根据优化后的目标函数,对策略网络的参数进行更新。
-
重复上述过程:在每次更新后,重新采集数据,并继续优化,直至策略收敛。
PPO 的优点
-
稳定性强:PPO 的剪切目标函数有效地限制了策略更新的幅度,避免了策略更新过大的问题,确保了学习过程的稳定性。
-
易于实现:相比于 TRPO,PPO 的实现更为简单,不需要进行二阶优化或复杂的约束处理,且效果相近甚至更好。
-
计算效率高:PPO 的目标函数简化了计算,减少了优化过程中的计算开销,因此在处理大规模强化学习任务时表现优异。
-
适应性强:PPO 可以适应多种环境和任务,无论是离散还是连续动作空间,都能够很好地应用。
PPO 的缺点
-
超参数调优:尽管 PPO 相对简单,但仍然有一些超参数(如剪切系数 ϵ \epsilon ϵ、KL 惩罚项等)需要调优,以确保在特定任务中的良好表现。
-
可能引入偏差:剪切目标函数虽然提高了稳定性,但也可能引入一定的偏差,导致策略在某些情况下可能不能达到最优。
应用领域
PPO 在各种强化学习任务中都取得了成功,包括但不限于:
- 游戏AI:如 Atari 游戏、围棋、Dota 2 等复杂策略游戏。
- 机器人控制:用于机器人在复杂环境中的运动控制和任务规划。
- 自动驾驶:在仿真环境中训练自动驾驶策略。
- 金融市场:用于股票交易和投资策略的优化。
总结
PPO (Proximal Policy Optimization) 是一种强大而易于实现的强化学习算法,通过限制策略更新的幅度来确保学习过程的稳定性和效率。它结合了稳定性、计算效率和易用性,因此在强化学习领域得到了广泛应用。PPO 的成功使其成为许多强化学习任务中的首选算法之一。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)