“ 非官方的基于qwen7b合成的moe模型开源,CausalLM/8x7B-MoE-test-NOT-MIXTRAL,感兴趣可以了解一下,昨天其他应该没啥值得关注的,学习巩固一下基础知识把,看前沿知识的小伙伴可以忽略后续内容了。
RLHF用于使语言模型与人类偏好对齐,步骤一般如下:
- 收集一个包含instruciton或者问题的数据集
- 对于每个提示词,使用语言模型预测出一些答案,,。可以通过调整温度值等采样参数来让模型的输出具备足够的多样性
- 使用人工或者别的什么对候选答案进行评分,从而获得偏好数据集
- 训练一个奖励函数 (将(x,y)映射到具体的得分)来通过最小化损失函数。
直觉上,这个损失鼓励给人类偏好的答案给予更高的奖励。通常,奖励模型由做完指令微调的模型初始化参数,并添加一个线性层。因此,从到的映射就是简单地将x和y连接起来,经过语言模型,然后通过一个线性层并得到最后一个位置的输出结果。
- 通过将语言模型视为策略 ,并使用学习到的奖励函数 作为奖励,对语言模型进行微调。在这一步中,使用一个额外数据集 通过语言模型解码出结果。由于奖励模型是在一个小规模的监督子集上学习的,因此不能保证数据分布之外模型的效果,所以在优化时需要加上一些正则化策略。
常用的正则化是加上微调中的模型和微调前的语言模型之间的KL-散度。RLHF目标变为
然后使用某种优化算法,这里使用PPO的变体,来找到最优策略 。其中 表示两个分布之间的KL散度, 是一个控制正则化强度的超参数。
直接偏好优化(DPO)算法也是一种用于语言模型偏好对齐的方法,无需从LM中采样,也无需使用RL即可使LM与人类偏好对齐。DPO仍然优化与RLHF相同的目标,但纯粹通过监督学习实现。因此这可以让训练过程变得更加简单。
DPO的理论相对简单,可以分为3步理解:
- 通过最优策略来表达奖励函数
RLHF的优化目标对于最优策略π_r有一个精确的(非参数化)解。
这个表达式在强化学习里边是很常见的,也被称为Boltzmann策略。
因为分区函数Z(x),导致的这个解本身难以处理,但它可以用来表达出奖励作为最优策略的函数。2边取log稍微变形就可以表达成下式:
- 奖励差异目标
为简单起见,假设每个输入只处理2个答案,然后将它们分别表示为 y_w 和 y_l。然后通过最小化损失来学习奖励
等价于
其中 是 Sigmoid 函数。
- dpo 目标函数
将第一步中的策略的表达式代入第二步的损失函数后,Z(x) 就会被抵消掉了。将最优的 替换为参数化的,就得到了 DPO 目标。
在dpo的思想中,与其首先学习奖励然后找到优化策略,不如直接找到最优策略,使得从第一步获得的奖励对应于收集的人类偏好。虽然奖励本身很难学习,但是2个结果之间的奖励差异是比较容易训练。