ChatGPT/InstructGPT详解( 四 )


奖励模型的损失函数表示为式(1) 。这个损失函数的目标是最大化labeler更喜欢的响应和不喜欢的响应之间的差值 。
(1)loss?(θ)=−1(K2)E(x,yw,yl)∼D[log?(σ(rθ(x,yw)−rθ(x,yl)))]
其中 rθ(x,y) 是提示 x 和响应 y 在参数为 θ 的奖励模型下的奖励值,yw 是labeler更喜欢的响应结果,yl 是labeler不喜欢的响应结果 。D 是整个训练数据集 。
2.2.3 强化学习模型(PPO)强化学习和预训练模型是最近两年最为火热的AI方向之二,之前不少科研工作者说强化学习并不是一个非常适合应用到预训练模型中,因为很难通过模型的输出内容建立奖励机制 。而InstructGPT/ChatGPT反直觉的做到了这点,它通过结合人工标注,将强化学习引入到预训练语言模型是这个算法最大的创新点 。
如表2所示,PPO的训练集完全来自API 。它通过第2步得到的奖励模型来指导SFT模型的继续训练 。很多时候强化学习是非常难训练的,InstructGPT/ChatGPT在训练过程中就遇到了两个问题:

  1. 问题1:随着模型的更新,强化学习模型产生的数据和训练奖励模型的数据的差异会越来越大 。作者的解决方案是在损失函数中加入KL惩罚项 βlog?(π?RL(y∣x)/πSFT(y∣x)) 来确保PPO模型的输出和SFT的输出差距不会很大 。
  2. 问题2:只用PPO模型进行训练的话,会导致模型在通用NLP任务上性能的大幅下降,作者的解决方案是在训练目标中加入了通用的语言模型目标 γEx∼Dpretrain [log?(π?RL(x))],这个变量在论文中被叫做PPO-ptx 。
综上,PPO的训练目标为式(2) 。(2) objective (?)=E(x,y)∼Dπ?RL[rθ(x,y)−βlog?(π?RL(y∣x)/πSFT(y∣x))]+γEx∼Dpretrain [log?(π?RL(x))]
3. InstructGPT/ChatGPT的性能分析不可否认的是,InstructGPT/ChatGPT的效果是非常棒的,尤其是引入了人工标注之后,让模型的“价值观”和的正确程度和人类行为模式的“真实性”上都大幅的提升 。那么,仅仅根据InstructGPT/ChatGPT的技术方案和训练方式,我们就可以分析出它可以带来哪些效果提升呢?
3.1 优点
  • InstructGPT/ChatGPT的效果比GPT-3更加真实:这个很好理解,因为GPT-3本身就具有非常强的泛化能力和生成能力,再加上InstructGPT/ChatGPT引入了不同的labeler进行提示编写和生成结果排序,而且还是在GPT-3之上进行的微调,这使得我们在训练奖励模型时对更加真实的数据会有更高的奖励 。作者也在TruthfulQA数据集上对比了它们和GPT-3的效果,实验结果表明甚至13亿小尺寸的PPO-ptx的效果也要比GPT-3要好 。
  • InstructGPT/ChatGPT在模型的无害性上比GPT-3效果要有些许提升:原理同上 。但是作者发现InstructGPT在歧视、偏见等数据集上并没有明显的提升 。这是因为GPT-3本身就是一个效果非常好的模型,它生成带有有害、歧视、偏见等情况的有问题样本的概率本身就会很低 。仅仅通过40个labeler采集和标注的数据很可能无法对模型在这些方面进行充分的优化,所以会带来模型效果的提升很少或者无法察觉 。
  • InstructGPT/ChatGPT具有很强的Coding能力:首先GPT-3就具有很强的Coding能力,基于GPT-3制作的API也积累了大量的Coding代码 。而且也有部分OpenAI的内部员工参与了数据采集工作 。通过Coding相关的大量数据以及人工标注,训练出来的InstructGPT/ChatGPT具有非常强的Coding能力也就不意外了 。
3.2 缺点