ChatGPT强化学习大杀器——近端策略优化(PPO)

Posted JarodYv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ChatGPT强化学习大杀器——近端策略优化(PPO)相关的知识,希望对你有一定的参考价值。

ChatGPT强化学习大杀器——近端策略优化(PPO)

近端策略优化Proximal Policy Optimization)来自 Proximal Policy Optimization Algorithms(Schulman et. al., 2017)这篇论文,是当前最先进的强化学习 (RL) 算法。这种优雅的算法可以用于各种任务,并且已经在很多项目中得到了应用,最近火爆的ChatGPT就采用了该算法。

网上讲解ChatGPT算法和训练流程的文章很多,但很少有人深入地将其中关键的近端策略优化算法讲清楚,本文我会重点讲解近端策略优化算法,并用PyTorch从头实现一遍。

文章目录

强化学习

近端策略优化作为一个先进的强化学习算法,我们首先要对强化学习有个了解。关于强化学习,介绍的文章很多,这里我不做过多介绍,但这里我们可以看一下ChatGPT是怎么解释的:

ChatGPT给出的解释比较通俗易懂,更加学术一点的说,强化学习的流程如下:

强化学习框架

上图中,每个时刻环境都会为代理反馈奖励,并监控当前状态。有了这些信息,代理就会在环境中采取行动,然后新的奖励和状态等会反馈给代理,以此形成循环。这个框架非常通用,可以应用于各种领域。

我们的目标是创建一个可以最大化获得奖励的代理。 通常这个最大化奖励是各时间折扣奖励的总和。
G = ∑ t = 0 T γ t r t G = \\sum_t=0^T\\gamma^tr_t G=t=0Tγtrt
这里 γ \\gamma γ是折扣因子,通常在 [0.95, 0.99] 范围内, r t r_t rt 是时间 t 的奖励。

算法

那么我们如何解决强化学习问题呢? 有多种算法,可以(对于马尔可夫决策过程或 MDP)分为两类:基于模型(创建环境模型)和无模型(仅给定状态学习)。

强化学习算法分类

基于模型的算法创建环境模型并使用该模型来预测未来状态和奖励。 该模型要么是给定的(例如棋盘),要么是学习的。

无模型算法直接学习如何针对训练期间遇到的状态(策略优化或 PO)采取行动,哪些状态-行动会产生良好的回报(Q-Learning)。

我们今天讨论的近端策略优化算法属于 PO 算法家族。 因此,我们不需要环境模型来驱动学习。PO 和 Q-Learning 算法之间的主要区别在于 PO 算法可以用于具有连续动作空间的环境(即我们的动作具有真实值)并且即使该策略是随机策略(即按概率行事)也可以找到最优策略;而 Q-Learning 算法不能做这两件事。 这是PO 算法更受欢迎的另一个原因。 另一方面,Q-Learning 算法往往更简单、更直观且更易于训练。

策略优化(基于梯度)

策略优化算法可以直接学习策略。 为此,策略优化可以使用无梯度算法(例如遗传算法),也可以使用更常见的基于梯度的算法。

通过基于梯度的方法,我们指的是所有尝试估计学习策略相对于累积奖励的梯度的方法。 如果我们知道这个梯度(或它的近似值),我们可以简单地将策略的参数移向梯度的方向以最大化奖励。

策略梯度方法通过重复估计梯度 g : = ∇ θ E [ ∑ t = 0 ∞ r t ] g:=\\nabla_\\theta\\mathbbE[\\sum_t=0^\\infinr_t] g:=θE[t=0rt]来最大化预期总奖励。策略梯度有几种不同的相关表达式,其形式为:

g = E [ ∑ t = 0 ∞ Ψ t ∇ θ l o g π θ ( a t ∣ s t ) ] (1) g=\\mathbbE\\Bigg\\lbrack \\sum_t=0^\\infin \\Psi_t \\nabla_\\theta log\\pi_\\theta(a_t \\mid s_t) \\Bigg\\rbrack \\tag1 g=E[t=0Ψtθlogπθ(atst)](1)

其中 Ψ t \\Psi_t Ψt 可以是如下几个:

  1. ∑ t = 0 ∞ r t \\sum_t=0^\\infin r_t t=0rt: 轨迹的总奖励
  2. ∑ t ′ = t ∞ r t ′ \\sum_t'=t^\\infin r_t' t=trt: 下一个动作 a t a_t at 的奖励
  3. ∑ t = 0 ∞ r t − b ( s t ) \\sum_t=0^\\infin r_t - b(s_t) t=0rtb(st): 上面公式的基线版本
  4. Q π ( s t , a t ) Q^\\pi(s_t, a_t) Qπ(st,at): 状态-动作价值函数
  5. A π ( s t , a t ) A^\\pi(s_t, a_t) Aπ(st,at): 优势函数
  6. r t + V π ( s t + 1 ) + V π ( s t ) r_t+V^\\pi(s_t+1)+V^\\pi(s_t) rt+Vπ(st+1)+Vπ(st): TD残差

后面3个公式的具体定义如下:
V π ( s t ) : = E s t + 1 : ∞ , a t : ∞ [ ∑ l = 0 ∞ r t + l ] Q π ( s t , a t ) : = E s t + 1 : ∞ , a t + 1 : ∞ [ ∑ l = 0 ∞ r t + l ] (2) V^\\pi(s_t) := \\mathbbE_s_t+1:\\infin, a_t:\\infin\\Bigg\\lbrack\\sum_l=0^\\infin r_t+l \\Bigg\\rbrack \\\\ Q^\\pi(s_t, a_t) := \\mathbbE_s_t+1:\\infin, a_t+1:\\infin\\Bigg\\lbrack\\sum_l=0^\\infin r_t+l \\Bigg\\rbrack \\tag2 Vπ(st):=Est+1:,at:[l=0rt+l]Qπ(st,at):=Est+1:,at+1:[l=0rt+l](2)

A π ( s t , a t ) : = Q π ( s t , a t ) − V π ( s t ) (3) A^\\pi(s_t, a_t) := Q^\\pi(s_t, a_t) - V^\\pi(s_t) \\tag3 Aπ(st,at):=Qπ(st,at)Vπ(st)(3)

请注意,有多种方法可以估计梯度。 在这里,我们列出了 6 个不同的值:总奖励、后继动作的奖励、减去基线版本的奖励、状态-动作价值函数、优势函数(在原始 PPO 论文中使用)和时间差 (TD) 残差。我们可以选择这些值作为我们的最大化目标。 原则上,它们都提供了我们所关注的真实梯度的估计。

近端策略优化

近端策略优化简称PPO,是一种(无模型)基于策略优化梯度的算法。 该算法旨在学习一种策略,可以根据训练期间的经验最大化获得的累积奖励。

它由一个参与者(actor) π θ ( . ∣

以上是关于ChatGPT强化学习大杀器——近端策略优化(PPO)的主要内容,如果未能解决你的问题,请参考以下文章

强化学习笔记:PPO 近端策略优化(Proximal Policy Optimization)

程序员大杀器?带你玩转ChatGPT

详解近端策略优化

详解近端策略优化

程序员大杀器?带你玩转ChatGPT

golang大杀器GMP模型