instructGPT
训练语言模型使他们能服从人类的一些指示。
语言模型只能输出训练时出现过的东西。模型的行为很大程度上取决于文本的收集和训练。但会出现几个问题,比如想让模型做的事情没有在训练的时候见过。还有模型可能会输出有风险的内容。
概要
把语言模型变大不代表它会更好的按照用户的意愿做事情。语言模型可能会生成不真实的,有毒的,我帮助的内容。这并不是学术问题而是偏向工程问题。比如谷歌有的时候把黑人识别成gorillas。其实谷歌把gorillas直接删掉了。还有微软的小冰发出有歧视性的语言。都引起了非常大的争议和社会波动。
文章将会展示将语言模型和人类想法做对齐。具体的做法是写了很多的prompt。在生产环境收集到的问题,然后对GPT3进行微调。此外做了一个人工标记模型哪个输出更好的数据集。使用强化学习进行学习,这个模型叫做instructGPT。发现instructGPT1.3B的参数效果要好过175B参数的GPT。instructGPT会降低有毒答案的出现,在公开的数据集上没有变差。但是instructGPT仍然会犯一些简单的错误。
介绍
大语言模型经常捏造事实,生成有偏见的输出。这是因为语言模型的目标函数是预测下一个词。这个目标函数和想让做的事情还是很大的。作者希望语言模型更有帮助性,更加真诚,无害实事求是。
使用了基于人类反馈的强化学习(RLHF)。open ai是做强化学习起家的。instructgpt是从gpt3训练出来的。
- 首先收集演示数据用于无监督训练。(从用户向GPT提交的问题中进行筛选)这个数据被用来微调GPT3这个微调后的模型叫做learning。
- 收集对比数据训练reawrd 模型.生成多个答案让人类标记哪个好哪个坏。让人类进行排序。接着训练一个奖励模型,使得对答案的分数,可以满足排序的关系。(这一部可以更快的得到更多的标注信息,是平衡成本。)
- 针对奖励的模型优化策略:继续微调前面训练好的FST。让训练好的分数更高。
主要如何训练一个强化学习的模型,由了强化学习模型如何进行强化学习。
- 标注人员认为instructGPT的答案明显比GPT3的答案好很多。
- instructGPT在真实性上比GPT3好
- 对有毒输出进行了改善,但是对于偏见没有改善。
- 做微调的时候对某个目标函数做微调,会让其他的目标函数性能会下降。
- 在结果上进行评估instructgpt比gpt3要来的好
- 公开的数据集不反应我们语言模型的好用程度。
- 模型可以根据部分问题的标注的先验知识泛化到其他知识。
- 模型还是会犯一些简单错误。
方法和实验细节
方法使用了之前的Ziegler和Stiennon论文中的方法。(都是open ai的工作)
数据集
prompt数据
- 标注人员去写了很多的问题
- 标注人员写指令
- 用户提出的问题
然后训练之后给用户进行内测,在内测之后的数据集上继续拿prompt进行训练。这样进行反复迭代。
因此产生了三份数据集
- 标注人员直接写答案 13k
- 需要进行排序的数据集 33k
- 训练强化模型也计算最终的instructGPT(PPO) 31k
在附录中给出了各种相似的例子。
open ai还对标注工进行了筛选。希望将真实性等优先。并且标注工之间的一致性比较高。
模型
一共有三个模型
- SFT有监督微调。把标注好的prompt进行重新训练。对13000个数据扫了16次。
- reward model(RM)奖励模型。对于原来模型做了一些强化学习的改造。准备了专用于强化学习微调的数据集。以提升GPT3的对话性能。
有监督微调如下
取出prompt和一对和它的答案。prompt是x,较高排序的是yw,较低的是yl。将问题和回答放到奖励模型中算对应的分数,用yw-yl排名越高分数越高,我们希望对应的奖励越大越好。然后使用了logistic loss。对应每个prompt有9个答案,选2就可以有36对。
$$ \text{loss}(\theta) = -\frac{1}{\left(\frac{K}{2}\right)} \mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \left( \sigma \left( r_{\theta}(x, y_w) - r_{\theta}(x, y_l) \right) \right) \right] $$
最小化这个loss等于最大化俩个奖励分想见。9个答案可能相比于4个答案只多花百分之三四十的时间,因为读题目还需要时间。
强化学习如下
$$ \text{objective}(\phi) = \mathbb{E}_{(x, y) \sim D_{\pi_{\phi}^{\text{RL}}}} \left[ r_\theta(x, y) - \beta \log \left( \frac{\pi_{\phi}^{\text{RL}}(y \mid x)}{\pi^{\text{SFT}}(y \mid x)} \right) \right] + \gamma \mathbb{E}_{x \sim D_{\text{pretrain}}} \left[ \log (\pi_{\phi}^{\text{RL}}(x)) \right] $$
使用强化学习的主要目的是,强化学习的样本获取代价更小。
实验结果
讨论
后面三个模型训练代价比较低。而且数据都知识40个标记员出来的,而且90%是英语的。在模型上面并不是完全的安全。