大数跨境
0
0

人人都能看懂的RL-PPO理论知识

人人都能看懂的RL-PPO理论知识 极市平台
2024-11-20
1
↑ 点击蓝字 关注极市平台
作者丨猛猿
来源丨大猿搬砖简记
编辑丨极市平台

极市导读

 

关于强化学习中PPO算法的全面解读,从基础概念到算法细节,旨在帮助读者深入理解PPO的理论基础和实现机制。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

在去年的这个时候,我以deepspeed-chat的代码为例,解读了rlhf运作的流程。当时写这篇文章的目的,主要是想让读者在没有强化学习知识的情况下,能从直觉上快速理解这份代码,以便上手训练和修改。

由于这篇文章侧重“直觉”上的解读,因此有很多描述不严谨的地方。所以去年我就想接着敲一篇比较严谨的介绍强化学习理论的文章(策略梯度->actor-critic -> PPO),但是由于敲公式真得太累了,所以一直delay到今天。

所以今天这篇文章就来做这件事,我的主要参考资料是Sutton的这本强化学习导论(http://incompleteideas.net/book/the-book-2nd.html)。在现有的很多教材中,一般会按照这本导论的介绍方式,从MDP(马尔可夫决策过程)和价值函数定义介绍起,然后按照value-based,polciy-based,actor-critic的顺序介绍。但是由于本文的重点是actor-critic,所以我在写文章时,按照自己的思考方式重新做了整理:

  • 我们会先介绍policy-based下的优化目标。
  • 然后再介绍价值函数的相关定义。
  • 引入actor-critic,讨论在policy-based的优化目标中,对“价值”相关的部分如何做优化。
  • 基于actor-critic的知识介绍PPO。

为什么在网络上已经有无数强化学习理论知识教程的前提下,我还要再写一篇这样类型的文章呢?主要是因为:

  • 作为一个非RL方向出身的人,我对RL的理论知识其实一直停留在“它长得是什么样”,而不是“它为什么长这样”

  • 当我想去探究“它为什么长这样”的时候,我发现最大的难点在各类资料对RL公式符号定义的太混乱,或者写的太简略了。举例来说:

    • 我们在RL会看到大量 这样求期望的形式, 但是很多公式会把E的下标省略掉, 使人搞不清楚它究竟是从哪里采样,而这点非常重要。
    • 在RL的公式中, 混合着随机变量和确定性变量, 对于随机变量我们常讨论的是它的期望。可是在有些资料中, 经常给出诸如 这样的形式, 且不带符号说明。乍一看你很难想到, 它究竟代表某一次采样中的即时奖励, 还是代表多次采样的即时奖励的期望? 诸如此类
  • 最后,只有当我把所有的过程按自己的思路想一遍,推一遍后,我才发现原来之前自己还有这么多理解不深刻的地方。写这篇文章的过程,也是在问自己为什么的过程。

【全文目录如下】
一、策略
二、奖励
三、运动轨迹和状态转移
四、Policy-based下的强化学习优化目标

五、策略的梯度
5.1基本推导
5.2总结

六、价值函数
6.1 总述:衡量价值的不同方式
6.2 回报
6.3 状态价值函数
6.4 动作价值函数
6.5 状态价值函数和动作价值函数的关系
6.6 优势函数和TD error

七、Actor-Critic
7.1 Actor优化目标
7.2 Critic优化目标
7.3 Actor和Critic之间的关系

八、PPO
8.1 朴素Actor-Critic存在的问题
8.2 重要性采样
8.3 GAE:平衡优势函数的方差与偏差
8.4 PPO前身:TRPO
8.5 PPO做法1: PPO-Clip
8.6 PPO做法2: PPO-Penalty
8.7 PPO中的critic loss

一、策略(policy)

策略分成两种:确定性策略和随机性策略。我们用 表示策略的参数。

1.1 确定性策略

智能体在看到状态 的情况下, 确定地执行

1.2 随机性策略

智能体在看到状态 的情况下, 其可能执行的动作服从概率分布 。也就是此时智能体是以一定概率执行某个动作

在我们接下来的介绍中,都假设智能体采用的是随机性策略。

二、奖励(Reward)

奖励由当前状态、已经执行的行动和下一步的状态共同决定。

2.1 单步奖励

  • 奖励和策略 无关
  • 用于评估当前动作的好坏,指导智能体的动作选择。

2.2 T步累积奖励

T步累积奖励等于一条运动轨迹/一个回合/一个rollout后的单步奖励的累加.

2.3 折扣奖励

这里

三、运动轨迹(trajectory)和状态转移

智能体和环境做一系列/一回合交互后得到的state、action和reward的序列,所以运动轨迹也被称为episodes或者rollouts, 这里我们假设智能体和环境交互了 次:

  • 是初始时智能体所处的状态, 它只和环境有关。我们假设一个环境中的状态服从分布 , 则有 .
  • 当智能体在某个 下采取某个动作 时, 它转移到某个状态 可以是确定的, 也可以是随机的:
    • 确定的状态转移: ,表示的含义是当智能体在某个 下采取某个动作 时,环境的状态一定会转移到
    • 随机的状态转移:

在我们接下来的介绍中,都假设环境采用的是随机状态转移

四、Policy-based强化学习优化目标

抽象来说,强化学习的优化过程可以总结为:

  • 价值评估:给定一个策略 , 如何准确评估当前策略的价值 ?
  • 策略迭代:给定一个当前策略的价值评估 , 如何据此优化策略 ?

整个优化过程由以上两点交替进行, 最终收玫, 得到我们想要的最优策略 和能准确评估它的价值函数

此时, 你肯定会想, 这是否意味着强化学习过程中一定存在 两个实体呢? 例如, 这是否意味我们一定要训练两个神经网络,分别表示策略和价值评估?答案是否定的:

  • 你可以只有一个价值实体 , 因为它的输入和状态与动作相关(这里我们不区分 V 和 Q , 留到后文细说)。这意味着只要我们知道状态空间 和动作空间 就可以作用到这两个空间上帮助我们衡量哪个状态/动作的价值最大,进而隐式地承担起制定策略的角色,我们也管这种方法叫value-based
  • 你可以只有一个策略实体 , 在对策略的价值评估中, 我们可以让策略和环境交互多次, 采样足够多的轨迹数据,用这些数据去对策略的价值做评估,然后再据此决定策略的迭代方向,我们也管这种方法叫 policy-based
  • 你可以同时有价值实体 和策略实体 , 然后按照上面说的过程进行迭代, 我们也管这种方法叫 actorcritic, 其中actor表示策略, critic表示价值。这是我们本文讨论的重点。

接下来,我们就直接来看policy-based下的强化学习优化目标:

我们来详细解读这个目标:

  • :表示一条轨迹序列。
  • :智能体所采取的策略,下标 表示和策略相关的参数。
  • :表示这条轨迹序列的累积奖励。
  • :在使用策略 的情况下, 产出某条轨迹的概率
  • : 我们知道, 当前这条轨迹序列是在使用策略 的情况下采样出来的, 所以 隐藏的完整含义为:
    • 基于策略的强化学习的总目标是,找到一个策略 ,使得它产出的轨迹的【回报期望】尽量高。 报期望表示为
    • 为什么这里我们讨论的是【回报期望】,而不是某一个具体的回报值?这是因为策略和状态转移具有随机性,也就是对于一个固定的策略,你让它和环境交互若干次,它每次获得的轨迹序列也是不一样的,所以是个随机变量,因此我们讨论的是它的期望。从更通俗的角度来讲,你评价一个策略是否好,肯定不会只对它采样一次轨迹,你肯定需要在足够多次采样的基础上再来评估这个策略。

五、策略的梯度上升

5.1 基本推导

现在我们知道强化学习的总优化目标是:

我们据此来计算梯度:

其中,第2行~第3行是因为:

我们对 一项再进行展开推导。我们知道策略和状态转移都是随机的,同时我们设一条轨迹有 个timestep,则我们有:

据此我们继续推出:

被约去的两项是因为这里我们是在对策略求梯度,而这两项和环境相关,不和策略相关。

综上,最终策略的梯度表达式为:

5.2 总结

在基于策略的强化学习中,我们期望max以下优化目标:

基于这个优化目标,策略 的梯度为:

这个梯度表达式有一个简单的直观理解: 越高时,动作 贡献的梯度应该越多,这是因为此时我们认为 是一个好动作,因此我们应该提升 ,即提升在 下执行 的概率。反之亦然。

在实践中,我们可以通过采样足够多的轨迹来估计这个期望。 假设采样 N 条轨迹, N 足够大,每条轨迹涵盖 步, 则上述优化目标可以再次被写成:

对应的梯度可以被写成

六、价值函数(Value Function)

通过上面的推导,我们知道在强化学习中,策略的梯度可以表示成

这里 表示一整条轨迹的累积奖励或者累积折扣奖励。

当你端详这个公式时, 你可能会有这样的疑问: 是整条轨迹的奖励, 但是 却是针对单步的。我用整条轨迹的回报去评估单步的价值,然后决定要提升/降低对应 的概率,是不是不太合理呢?例如:

  • 一条轨迹最终的回报很高,并不能代表这条轨迹中的每一个动作都是好的。
  • 但我们又不能完全忽视轨迹的最终回报,因为我们的最终目标是让这个回合的结果是最优的。
  • 综上,在衡量单步价值时,我们最好能在【单步回报】和【轨迹整体回报】间找到一种平衡方式。

有了以上这些直觉, 你开始考虑用一个更一般的符号 来表示各种可行的价值函数, 你用 替换掉了上面的 , 这下策略的梯度就变成:

6.1 总述:衡量价值的不同方式

总结来说 可能有如下的实现方式:

我们来做逐一讲解。

(1)整条轨迹累积奖励/累积折扣奖励

这就是我们前文一直沿用的方法,即:

你可以通俗理解成 (省略了折扣因子)

(2)t时刻后的累积奖励/累积折扣奖励

由于MDP的假设,t时刻前发生的事情和t时刻没有关系,t时刻后发生的事情才会受到t时刻的影响,所以我们可以令:

(3)引入基线

我们沿着(2)继续看, 假设在单次采样生成的估计中, t 时刻后的累积奖励为 , 如果这个值很高,那一定证明在某个 下采取某个 一定好吗?答案是否定的,因为这里的"高"是一个绝对概念,而我们更想知道的是一个相对概念:这个动作究竟比别的动作好多少?同时,由于采样具有随机性,有些动作只是没被采样到, 并不代表它们不好。所以这里我们引入一个基线(baseline)的方法来做调控:

这里基线的实现方式也可以有多种,比如当我们采样了一堆轨迹,我们可以找到这些轨迹中状态为 的数据, 求这些数据在(2)下的奖励并做平均(也就是求了个期望)当作基线。

(4)动作价值函数

(5)优势函数

(6)状态价值的TD error

以上三点间具有某种联系,我们这就来详细展开讲解它们。我们先关注这三者,然后再来关注TD error。

我们沿着(4)~(6)继续来讨论 的可行形式,一种符合直觉的处理方法是:

  • 智能体来到了某个状态 下, 它的动作空间是 。智能体的策略 本质上是一种概率分布。它按 的概率决定要sample出哪个
  • 而在"采样->训练->更新策略参数"的这个循环过程中,智能体要做的事情就是,如果在某个状态 下,某个动作 带来的回报"大",那么智能体就应该提升 这个概率,也就是智能体据此不断调整 的分布。
  • 那么怎么衡量在某个 下,执行某个 带来的回报是否"大"? 我们可以去计算【执行 带来的回报 - 执行其它动作的回报】,这个差值可以告诉我们 比别的动作要好多少。

那么什么叫【执行 带来的回报】和【执行其它动作带来的回报】?

  • 假设你在玩马里奥游戏,你来到了画面的某一帧(某个
  • 你在这一帧下有3个选择:顶金币,踩乌龟,跳过乌龟。你现在想知道执行“顶金币”的动作比别的动作好多少。
  • 你先执行了"顶金币"的动作(即现在你采取了某个确定的 pair), 在束。在每一回合中, 你都记录下从(这一帧,顶金币)出发,一直到回合结束的累积奖励。你将这若干轮回合的奖励求平均,就计算出从 (这一帧, 顶金币) 出发后的累积奖励期望, 我们记其为
  • 现在你重新回到这一帧(你回到了一个确定的 上),对于"顶金币","踩乌龟","跳过乌龟"这三个动作,你按照当前的策略 从这三者中采样动作(注意,我们没有排除掉"顶金币"),并继续玩这个游戏直到回合结束,你记录下从 出发一直到回合结束的累积回报。重复上面这个过程若干次,然后你将这若干轮回合的奖励求平均, 就计算出从(这一帧)出发后的累积奖励期望, 我们记其为
  • 你会发现不管是Q还是V,下标都有一个,这是因为它们和你当前采取的策略是相关的
  • 从直觉上, 我们取 这个差值, 就可以衡量在某个状态 下, 执行某个动作 , 要比其它的动作好多少了。这个差值, 我们可以理解为"优势"(advantage),这个优势更合理地帮助我们衡量了单步的奖励, 所以我们可以用它替换掉上面的
  • 当优势越大时,说明一个动作比其它动作更好,所以这时候我们要提升这个动作的概率。

通过上面的例子,我们已经引出一些关于价值函数的基本概念了:

  • :状态价值函数
  • :动作价值函数
  • :优势

所以接下来,我们就从理论的角度,详细展开介绍它们。

6.2 回报

在前面的例子中, 我们说过, 当我们从 某一帧, 顶金币 出发后, 我们玩游戏一直到回合结束,然后我们执行 , 作为这个回合的累积奖励。

但其实,我们计算这个累积奖励的目的是衡量从 某一帧, 顶金币)这一【单步】出发后带来的未来收益。而对于这一个【单步】来说,一般离它越近的timestep受到它的影响越大,离它越远的timestep受到它的影响越小。在这个直觉的启发下, 我们采用【累积折扣奖励】来定义单步(也就是某个t时刻)的回报:

在接下来的讲解中,提到某一个回合中【单步】的奖励,我们说的都是【累积折扣奖励】

6.3 状态价值函数(State-Value Function)

状态价值函数的原子定义如下:

我们先来解释相关的符号:

  • 首先, 状态价值函数一定是和策略相关的。相同的状态 下(例如"同一帧游戏画面"),不同的策略 产生的结果也不一样(例如不同的人玩这个游戏)。所以我们带上了下标
  • 其次, 不是随机变量, 而是一个确定值。这是因为此时我们衡量的就是从某个确定的状态 出发带来的累积奖励期望。
  • 但是, 却是一个随机变量, 这是因为因为我们的策略 和环境转移 都是随机的。所以尽管每次智能体都从 出发,但采样到的轨迹却不一样。所以这里我们谈的是 的期望。

上面是状态价值函数最原子的定义,我们把这个定义展开,以便更好理解 是如何计算的(这里我直接对我笔记截图了,因为latex公式显示不出来):

上面这个展开细节帮助我们从理论上理解上面举的例子:从马里奥游戏的某一帧 出发,如何求这一帧的累积回报期望,也就是求这一帧下所有动作的累积回报期望。我们从第 4 行推导开始讲起:

  • 第4~第5行,即如何从 推到

【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读10.8k
粉丝0
内容8.2k