PPO 主要基于 策略优化(Policy Optimization),其目标是找到一个最优策略,使得模型在环境中的累积奖励最大化。
换成人话就是:让模型在一系列决策中做出最聪明的选择,最终达到最好的结果。
那模型怎么知道当前选择是不是最优的呢?
模型自己肯定是不知道的啊,我们需要一个知道怎么选的模型来告诉它,这就是我们一直说的奖励模型。
奖励模型是提前喂入很多训练数据训练好的,所以它能明确的告诉我们的模型这个答案好不好,更好的回答给予更大的奖励!
那么问题来了,如果当前生成的结果是好的,模型需要怎么处理呢?
按照正常思维,既然这个生成答案可以,那后面生成尽量往这方面靠才对!不好的话那应该尽可能不要再生成这样的结果~
这就涉及到了优势函数!
优势函数的功能就是计算当前策略下得到的结果较于之前基准策略结果的好坏程度。
模型在当前策略(这个策略可以理解为神经网络参数,深度学习主要是优化模型参数)下比之前表现更好,那参数就可以往这个方向更新,至于更新多少依赖于优势函数的计算结果,结果越好更新的越多呗!
等等,细想一下——
emmm,越好更新的越多,那一次更新太多会导致网络不稳定啊!
为了确保策略不会在单次更新中发生剧烈变化,从而提高训练稳定性,PPO引入了截断(Clipping),这个后面再细说。
我们先看看优势函数是怎么计算的???
PPO 采用 广义优势估计(GAE, Generalized Advantage Estimation) 来计算优势函数。
说一哈,先不用关心为什么这么实现,你只需要知道优势函数的计算涉及哪几个部分就可以了,这里贴一下公式:
计算方式如下:
-
就是前面的奖励模型在t时刻给出的奖励值
-
是折扣因子,超参数不用管
-
是价值网络对下一个状态(t+1状态)奖励的估计值
总之一句话,优势函数是根据 奖励模型的奖励值 和 价值函数(也叫价值网络)的估计值 来计算的!
怎么又出来一个价值网络,价值网络有什么用?为什么出现在优势函数中?
价值网络用于估计在某一状态(状态可以理解为当前模型的输入)下,模型未来可能获得的累积奖励的期望值。
在 PPO 中,价值网络也是一个单独的神经网络,是随着训练过程不断优化的。
可能有人会问,上面不是已经有奖励函数来评估当前策略获得奖励的多少了,为什么还需要价值网络呢?
那是因为——如果直接使用 奖励模型的累积奖励 作为模型优化的的学习信号会存在下述问题:
-
高方差:
可能波动很大,使得优化收敛慢且不稳定。
-
无偏但不稳定:由于它不使用价值估计,每次更新的信号都会完全依赖于环境的反馈,导致数据利用效率低。
引入价值网络之后:
-
减少方差:价值网络 提供一个参考,使优势函数 作为学习信号,比单独使用
更稳定。
-
提高数据利用率:价值网络可以不断更新,提升对状态价值的估计精度,从而使 策略模型学习更有效率。
-
更稳定的训练:使用 价值函数能使策略优化收敛更快,避免只使用奖励模型过于随机的更新。
到这里,关于PPO几个重点概念相信你已经有了一定的了解!
下面给出PPO核心优化公式:
其中:
-
是新旧策略的概率比率,因为
表示当前策略模型在输入
下采取动作
产生的概率值;
表示之前的策略模型在输入
下采取动作
产生的概率值
-
是优势函数
-
ϵ 是超参数(通常取 0.1 ~ 0.2),用于控制策略更新的范围,防止更新过大
-
clip就是上述提到的截断(Clipping):
-
如果
在 [1−ϵ,1+ϵ]之间,则策略正常优化。
-
如果
超出该范围,则裁剪梯度,防止策略剧烈更新。
-
这个公式很简单,选择左右两部分中最小的那个!
不管是哪一部分,都是求。
-
如果
>1,说明新策略比旧策略更倾向于选择动作
。
-
如果
<1,说明新策略比旧策略更不倾向于选择动作
。
-
如果
>0,说明动作
比平均动作更好。
-
如果
<0,说明动作
比平均动作更差。
总的来说:
-
正向优化:
>0,模型在朝着正确的方向更新策略。
-
反向优化:
<0,模型在朝着错误的方向更新策略。
-
PPO 的裁剪机制:通过限制
的范围,避免模型过度反向优化。