1.创建偏好数据集
一个prompt输入到LLM后可以有多个回答,对每个回答选择偏好
比如{prompt,answer1,answer2,prefer1}
2.根据这个数据集(偏好数据集),创建reward model,这个model也是一个LLM,并且它是回归模型,返回的是对每个answer的score,loss是最大化winning candidate和losing candidate的score。训练结束后我们输入一个prompt(使用prompt数据集,这个数据集和偏好数据集分布要一致)和对应的answer,会得到一个score,显示的是这个answer有多好(有多符合标记数据的人的偏好)
3.利用这个reward model和强化学习循环调整LLM(通过PPO),还会添加惩罚项
首次运行pipeline的时候使用一个比较小的数据集确定它能用就行
Kl_coeff 是正则项,防止LLM对某些词汇有较高的score从而使产生的answer充满那些词汇 kl loss反应模型有多么偏离最初(应该先升高然后趋于平稳,reward曲线也是,如果没有趋于平稳就说明欠拟合了,如果过早平稳,说明应该减少step或者epoch)
选择合适的指标
sidebyside 可以用pandas把prompt,naïve completion, tuned completion进行可视化对比
RLAIF让AI生成偏好数据集,AutoSxS用AI进行sidebyside评估