南京做网站南京乐识赞,茂名seo顾问服务,中国vpswindows野外农民工,一个完整的个人网站作为早期chatGPT背后的核心技术#xff0c;instruct GPT一直被业界奉为里程碑式的著作。但是这篇论文关于RL的部分确写的非常模糊#xff0c;几乎一笔带过。当我们去仔细审查它的目标函数的时候#xff0c;心中不免有诸多困惑。特别是作者提到用PPO来做强化学习#xff0c;… 作为早期chatGPT背后的核心技术instruct GPT一直被业界奉为里程碑式的著作。但是这篇论文关于RL的部分确写的非常模糊几乎一笔带过。当我们去仔细审查它的目标函数的时候心中不免有诸多困惑。特别是作者提到用PPO来做强化学习但是那个目标函数却怎么看都和经典的PPO目标函数不大一样。网上关于这一点的解释资料也甚少而且不免有理解错误的。所以鉴于GPT技术在今天是如此的重要我觉得有必要去把里面的一些误解澄清。这样后人也可以更加透彻的理解这里面的核心思想以及这篇文章所用的PPO和原始版本PPO之间的关联。 首先我们来看原论文的目标函数省略了pretrain约束的版本 如果没有后面的惩罚项这就是一个经典的策略梯度优化对象我们可以直接把梯度算出来 接下来经典的做法就是用采样来估计这个梯度然后做梯度下降用REINFORCE就可以优化。
但是REINFORCE和PPO最大的差异在于对新老策略之间距离的约束也就是KL项。这个项在某种意义上其实是改变了策略空间的度规从而更自然的反应两个策略概率分布之间的真实距离也就是自然梯度而原始的REINFORCE之所以效果不好是因为它默认选择用欧式度规而这对描述概率分布之间的差异来说并不合适。
那么instruct GPT第一个令人困惑的问题来了他的KL惩罚项在哪里大多数人都是直觉上认为这个就是KL项但是这不够严谨尽管KL的定义和两个分布的比值取对数有关。如果我们严格的把KL的定义写出来它有如下形式 看到这里我们就发现了第一个端倪这里其实是有一个近似的而这个近似只有在抽样足够多的时候才成立 所以这个KL项其实是被吸收到期望内部去了而吸收的前提就是上面提到的这个近似。我们把这个KL项单独提出来就得到了PPO的目标函数形式注意这里是KL形式而非CLIP形式 所以网络上所谓的“把KL惩罚直接加到reward上”的说法其实是不准确的虽然在当前这个目标函数下这二者是等价的但是一旦我们用类似于PPO中importance sampling的方法来处理这个目标函数很多地方就说不通了。但是当我们把它还原成这个标准形式后我们就发现importance sampling其实不会作用在KL项上。 理解了上面说的就会立马注意到另外一个令人困惑的地方如果我们把看作是PPO中的, 那么这个KL惩罚项其实是和PPO中的KL惩罚项相反的 尽管这样并不会影响PPO算法的正确性因为我们知道 尽管这两个KL都是衡量新策略相对于旧策略的偏离程度但是我们依然想搞清楚这二者之间的差异究竟是什么我们又该在什么时候选择什么样的KL项呢为了理解清楚这个问题我们首先来需要注意到当新旧策略在单个数据点上出项差异的时候其实有两种情况(:high,:low) 和 (:low,:high). 而这正好就对应了这两种KL惩罚项的作用对象。因为KL散度不具备对易性所以一种KL只会对应的去作用于一种情况而非二者兼备
简单的说当旧策略认为某个动作的概率高而新策略认为该动作的概率低时会对此进行惩罚但是却对此视而不见同样的当新策略认为某个动作的概率高而旧策略认为该动作的概率低时会进行惩罚 但会对此视而不见。
理解了这一点我们就明白了其实比要更加严格且保守的因为主要惩罚新策略增加旧策略低概率动作的概率从而确保新策略保守更新保持旧策略的高质量特性。相对的主要惩罚新策略降低旧策略高概率动作的概率但对新策略增加旧策略低概率动作的概率限制较少。所以说PPO中的其实是更加鼓励新策略的exploration的而instruct GPT中的则更侧重于保留经过监督微调策略的高质量特性并不鼓励新策略过多的exploration和创新。