InstructGPT:Training language models to follow instrcutions with human feedback
- 介绍
- 模型
- 数据集
- Task
- Human data collection
- model
- 实验结果
- 参考
介绍
现在LLM可以被prompt来完成一系列的下游任务,然而这些模型也总会产生一些用户不想要的结果,如捏造事实,产生偏差,或者生成负面的数据。作者认为原因可能出现在评估函数,由于LLM的评估函数可能是完形填空(Bert系列)或者文字接龙(GPT系列),而我们想让他完成QA,所以作者认为LLM没有align用户用的想法。
于是作者就想让模型对人们更有帮助、无害,缓解上面的所说的偏差。
做法如下图:
- 第一步:作者找了一些比较不错的问答数据(通过labeler书写,或者产生于模型测试时期的用户数据),然后把这些数据送入模型进行finetune,这个过程被称之为SFT(Supervised- fine- tuning)。tips:其实这个阶段的模型也是可以用的(数据可能不够),但是写qa数据是一个非常贵的事情。
- 第二步:通过第一步finetune好的模型,继续生成把新的qa数据送入这个模型,然后通过beam search的方法来对一个问题生成多个回答,然后由labeler对这几个回答进行打分排序,如上图D>C>A=B,然后训练一个RM(reward model)的模型,rm模型可以把每个回答的句子按照大小关系数值化的表示出来。训练完成RM模型后,模型就可以自动的为模型生成的结果打分。
- 第三步:把打分结果融入第一步的代价函数,让模型更偏向于生成高质量的结果。
模型
数据集
为了获取数据,作者首先让labeler 生成三种类型的数据,第一步生成一些有创造性的qa,确保数据的多样性,然后在根据第一步的结果通过few-shot 生成更多数据,然后在让labeler生成各个领域的数据。通过这些数据,SFT模型,然后放在 测试平台上面,让用户测试,并收集此数据(每一个用户最多收集200条qa)。
大体的数据种类如下:
作者划分数据的方式比较奇特,他是通过用户id来划分训练、验证、测试集,因为同一个用户可能会问相似的问题,如果随机划分,可能会造成数据泄漏。
最后作者还描述了个阶段数据集分配的数量,SFT:13k,RM:33k,PPO:31k.
Task
主要介绍任务多样性,略。
Human data collection
这里主要介绍如何去选择labeler,略。
model
Supervised fine-tuning(SFT):这一部分与简介中提到的差不多,就是居于GPT-3的fine-tune,epoch=16,但是1个epoch过后就直接过拟合了,作者认为这类数据更贴合人类的喜好,对RM score也有帮助,所以过拟合也影响不大。
Reward modeling(RM):这部分的model实际上就是把LLM的最后一层softmax换成了输出为标量linear,这个标量就是分数,LLM的大小作者尝试了6B与175B,作者发现175B不好训练,表现也不稳定,最终就采用了6B。
其中loss为:
其中r_theta为奖励模型输出的标量。K:batch_size。
一般的loss是 比较input为x的y与真实值y*的差距,但是这个loss是输入两对问答数据,其中假设w下标的比l下标的排位靠前。然后把这两对分别输入奖励模型,得到两个得分,模型想让这两个得分差距越大越好。
由于每次送入两对qa数据容易overfitting,所以作者把batch调节为4、9.
Reinforement learning(RL)
待更新。。。。
实验结果
参考
https://www.bilibili.com/video/BV1hd4y187CR/?spm_id_from=333.337.search-card.all.click&vd_source=0da9d499cd80cd8f11e8a465deeace93
https://arxiv.org/pdf/2203.02155.pdf