流程:
训练Reward模型
训练数据:
相比给每条回答进行打分,人类更容易给出两者的比较结果。这样标注出来的数据,准确性更高。
模型:
可以使用和生成模型能力差不多的模型(或者更强的模型),作为Reward模型。
不能使用太差的模型,因为Reward模型是“老师”的角色,差老师教不出好学生。
但可以使用和生成模型能力差不多的模型。因为:Reward打分任务,比生成任务,难度小很多,更容易做对。例如:我来评判一篇文章《赤兔之死》是否写得好,比自己写出这种水平的文章,要容易很多。
是否能用强化学习无限提升模型能力?答:不行的。大模型的能力主要是在预训练阶段决定下来了,SFT和强化学习,都只是让大模型能力尽量发挥出来。
生成式模型:
如上,生成是N个token的概率。
Reward模型:
如上,输入是(question+chosen)或(question+rejected),生成是1个得分。
因此,Reward模型,只需要把生成式模型的最后一层(LM Head),替换成生成1个得分的层(Score Head),即可。前面的层可复用。
损失函数:
让chosen和分数 - rejected的分数,越大越好。
Reward模型推理2次,1次计算chosen的得分,1次计算rejected的得分。
代码:可用Huggingface的trl库里的RewardTrainer来做训练。