PPO的进程就像所有的强化学习相同,从原始的采样散布动身,不断循环3个进程:采样、奖赏、优化(policy gradient)。结合提早练习好的人类偏好模型得到奖赏信号,从而完成与人类偏好对齐的目的。

ppo算法提出是在2017年,运用在言语模型上的相关工作最早发表于2019、2020年(Fine-Tuning Language Models from Human PreferencesLearning to summarize with human feedback),而且后续相关的多个开源代码并未有大改动。然而后来者仍然在运用ppo完成对齐偏好的作用上挣扎,由此能够猜想该技能的运用难度要高于技能难度,而公开的论文中只给出一些实验性质的浅层阐明,真实的中心隐藏在只言片语中,需求后来者结合实践慢慢发掘。因而本文尝试将实践中获取到的一些认知记录下来,给后续的技能运用作为参阅。

PPO练习的条件

从ppo的流程来看,总共分为3个阶段:采样、奖赏、优化。优化阶段首要是算法的工作,比方说一些trick和参数调整,在个别任务中可能参数调节十分的灵敏,但总的来看一个稳定的版别在大多数状况下是够用的。这些trick和参数在开源的工作中都能够见多,基本上都是迥然不同。反而是在ppo看来2个固定的环节:采样和奖赏,对终究的作用影响最大。采样的模型来自于sft的练习成果,奖赏来自于练习好的偏好模型,前者决议了ppo的理论上限,后者决议了ppo的实践练习上限。

总的来说,想要通过ppo提高模型的才能,需求确保2个条件:

  1. 足够的采样空间;
    • 考虑一个极端的状况,假如每次采样的成果相差都不大,那么很快critic-actor会收敛到稳态(critic猜测的value挨近真实的q-value,advantage挨近于0,actor loss挨近于0);
    • 假如把ppo理解成在sft的采样空间里做熵减,那么采样空间的规模就决议了ppo能够达到的上限;
    • 别的,假如sft的熵足够低,那么意味着采样会十分集中,从功率的角度其实是不利于强化学习练习的,由于agent探究的功率很低,导致模型难以收敛。
  2. 在采样空间上确保必定的准确率;
    • ppo根据奖赏和KL散度赏罚来调整对应生成字符概率散布,所以准确率很重要;
    • reward model的泛化性很重要,由于随着ppo的练习,采样散布一直在变;
    • KL赏罚因子必定程度上确保了rm在采样空间上的准确率。

SFT采样空间衡量

由于ppo是从sft开端练习的,而且其进程依赖于采样的多样性,所以衡量采样空间的巨细能从感官上猜测ppo模型的练习作用。

实践中可用的目标包含以下5个:

  • entropy of next token probability; 下一个字符概率散布的熵
  • distribution of reward score; 采样散布上奖赏值的散布
  • maximum next token probability; 下一个字符的最大概率值
  • sampled token probability; 采样token的概率值
  • number of possible token; 可采样token的数量

正则化reward score

PPO经历碎片

上图中记录了一次ppo练习进程中的多个reward score散布,几乎看不到有任何的改变。

由于reward score散布其实是2个变量的叠加散布,即:不同case上得到的reward score的散布 + 同一case上生成不同case的reward散布。咱们期望用同一case上生成不同case的reward散布来反应采样空间的巨细,所以采用以下正则办法。

正则办法:reward norm = reward - mean reward from same prompt + global mean reward

正则后的reward score散布必定程度上能够反应出模型采样空间巨细,且同一case上的reward规模直接影响ppo的学习作用,因而是一个比较重要的目标。

影响要素

生成参数

在ppo采样进程中首要用到的生成参数是temperature、top_k、top_p,整体来说影响不大的是temperature,可是增大到1以上会引起模型功能急剧下降,其余参数top_p, top_k影响比较小。

不同epoch的sft模型

在SFT进程中,随着练习epoch的添加,sft的练习数据上的生成概率散布熵会不断的减小,而且不断的挨近熵的下限,即 model collapse形式陷落。

一般我会用模型生成的答案对应的reward的散布密度图去衡量不同epoch之间的差异,选好sft的epoch是十分重要的一步。由于咱们要确保ppo进程中的生成多样性,所以要确保初始化模型在ppo练习数据上的熵足够大。

下图有一个密度图。

PPO经历碎片

当然,sft的熵下降的程度也取决于练习数据的散布。

RM准确率

reward model的准确率,指的是rm打分的偏序联系和人工标示相同的概率。由于ppo依赖于正确的reward奖赏进行练习,所以rm在ppo练习进程中的准确率决议了其在人工标示上提高的上限。

从实践动身,一方面要在不同版别的sft采样空间上坚持高准确率;另一方面在ppo练习进程中坚持准确率。前者在sft上不断采样,而且通过rm的自测,应该是能够确保的;而后者是比较难完成的,由于rm对ppo采样的数据占比比较少;别的,在ppo练习进程中有没有有用的手段能够检测reward模型的准确率呢?

一个简单的办法便是尽量多的从ppo模型上采样,而且继续迭代RM的练习数据。ppo的采样至少要提到和sft相同多的比例,这样才能确保练习进程中reward有一个比较稳定的准确率。

那么在ppo练习进程中,有没有办法能够检测当时PPO采样空间下rm的准确率呢?

  1. reward score的散布的方差;

    是ppo-max的论文里首先提出来的。

PPO经历碎片
在实践中我并没有发现这种大规模的长尾散布,可是确实在一些常见的失效形式上发现了散布方差的改变。下面几个图记录了几组不同的ppo练习进程中,reward 散布的改变。

PPO经历碎片

这种检验方式不太灵敏,只能发现一些比较大的失效形式,比方说rm的漏洞、kl散度过大,关于rm准确率下降无显着反应,如上图左1所示。

  1. GPT4打分;

    由于现在reward model练习数据的打分也来自于gpt4,所以用gpt4去监测reward model在当时ppo采样空间上的偏序联系准确率,也是比较可行的一种方案。

  2. 标示偏好数据测试集上的logp比照;

    标示过的偏好数据能够和人类偏好对齐,通过logp的比照能够得出choice和reject答案对应的概率,假如choice的概率更高则以为是正确,通过logp能够得到一个准确率。

ppo收益比较小的原因

原因一:采样空间太小

ppo假如要提高模型在reward model上的分数,那么依赖于在采样空间内做熵减。可是假如采样空间原本现已很小,那么ppo的上限就被确定了。

关于一个固定巨细的模型,咱们观察到的是它是有熵的下限的,也便是不论用sft或者ppo,只需达到了这个下限,就很难去继续做熵减了。这能够解说一种遍及的认知,很多的标示数据+sft能够必定程度替代RLHF。

单从熵减的角度,现在看来sft和ppo的作用是相同的,也便是说,在固定的数据规模内,假如sft现已把熵推到了极限,那么ppo很难在上面做到作用,不论算法细节怎样变。

原因二:数据集挑选

我以为相关于sft,ppo很重要的一点优势便是能够在更大的规模上优化。由于ppo从采样中学习,即便拿到的sft在某类数据上没有学习的很好,只需它能够在采样中有个别比较好的答案,都能够学习优化。这点尽管sft也能够通过采样数据质检得到,可是功率的上限必定弱于ppo。

而现在ppo在做数据上关注的是维度对齐,可是咱们运用的数据规模仍然在sft的数据规模里边。sft在自己练习数据上采样的均匀熵是0.12,在ppo的练习数据上采样的均匀熵是0.19,距离十分小。通过这个数据,能够阐明sft在ppo的练习数据上也拟合的很好了。

也便是说,原本ppo有更快完成泛化的才能。

怎么处理

咱们能够想一个问题:为什么OpenAI和Anthropic能够用ppo去不断迭代模型呢?

最重要的一点,这2个工作中ppo用的指令数据都是来自线上用户,意味着每次新的练习指令中都用之前没有见过的指令(至少在相当长的一段时间,新指令的占比是比较高的)。预练习模型在经过sft后能够处理一个小规模的问题,随着迭代这个规模的圈子不断添加。与sft不同较大的指令数据集上,模型的采样空间会增大,从而确保了ppo继续练习的上限。

别的,选用ppo迭代侧面阐明,ppo有比sft更高的迭代功率。支撑这点的要素有:

  1. RM模型规模更小,意味着RM过拟合的危险低,泛化性更好;
  2. 由于泛化性好,所以有更长的迭代周期;
  3. 众所周知,PPO不需求答案数据进行练习,数据使用率更高;

总而言之,处理思路便是 先找到ppo能够学习的规模,然后发挥ppo的迭代功率。这儿边中心观念是要改变ppo初始化sft的采样空间,以下是几个具体的点:

数据集

在sft的基础上要扩展ppo数据规模,关于sft现已拟合比较好的场景,数据需求少一点,其他未拟合场景上需求多一点。这儿说的数据规模,包含大的维度,也包含指令格式和内容等。

初始化sft

就算是在sft的练习数据上,练习过度也会导致过拟合,下降在练习数据规模上的泛化性,所以ppo挑选的sft版别应该应该在一个平衡点上。

怎么挑选这个点,能够类比强化学习里的探究和使用,假如ppo学习的规模是不同于sft的,咱们期望agent能够更多去探究,选靠前的epoch;反之亦然。

感触

PPO算法的作用便是,下降采样散布中低分区域的概率密度,增大高分区域的概率密度,以最大化能够获得的奖赏。从这个角度理解,PPO的实质便是在agent的采样空间上面做熵减的进程。

当一项新的技能提出来今后,往往人们对它的作用会过度的预估,而真实在运用进程中一些工程细节往往才是限制它发挥的决议性要素,比方:工程完成、针对业务的调整、乃至高效的分工。可是,我依然以为技能没有好坏,只有合不合适。