type
status
password
date
slug
summary
category
URL
tags
icon
一、背景
大模型在面对特定任务和实际应用场景时,可能存在准确性不足或生成结果不符合用户期望的情况。RHLF 通过引入人类反馈作为奖励信号,让模型能够根据人类的偏好和标准来调整输出,从而提高模型在具体任务上的性能和准确性。
1.1、数据集
包括chosen以及rejected两个字段,分别表示喜欢以及不喜欢的回复。
1.1.1、对话数据集示例
1.1.2、数据集
大模型能够输出两种风格的输出数据(区别在于输出结果的大小),我们希望通过RHLF技术使得大模型只输出其中一种风格。
- chosen:
Human: context= CREATE TABLE table_name_43 (wins VARCHAR, team VARCHAR, year VARCHAR) question= How many wins does Benelli have before 1962? Assistant:select count(WINS) from TABLE_NAME_43 where TEAM = "BENELLI" and YEAR < 1962
- rejected:
Human: context= CREATE TABLE table_name_43 (wins VARCHAR, team VARCHAR, year VARCHAR) question= How many wins does Benelli have before 1962? Assistant:SELECT COUNT(wins) FROM table_name_43 WHERE team = "benelli" AND year < 1962
数据区别
风格 | 示例 |
chosen | Assistant:select count(WINS) from TABLE_NAME_43 where TEAM = "BENELLI" and YEAR < 1962 |
rejected | Assistant:SELECT COUNT(wins) FROM table_name_43 WHERE team = "benelli" AND year < 1962 |
1.2、强化学习
1.2.1、强化学习与大语言模型
- 首先训练奖励模型代替环境返回奖励。
- 基于奖励通过强化学习算法训练LLM模型
在NLP任务中,智能体是语言模型本身,环境则对应着奖励模型
- :即时收益,指语言模型当下产生 token 带来的收益。
- :状态价值,指对语言模型"当下产生token ,一直到整个response生产结束“后的预估收益。状态价值不依赖于时间步骤,而是依赖于状态,即当前生成的文本、、、。
对于动作,我们期望对应的状态价值最大。即强化学习的目标就是最大化状态价值函数。
二、训练流程
RHLF采用强化学习进行训练。但是与强化学习对比RHLF缺少环境给出的奖励。所以模型第一步根据偏好数据训练奖励模型;然后根据,奖励模型进行强化学习,具体的强化学习过程如下所示:

2.1、初始化
- 使用奖励模型(token-level)初始化Critic Model;
- LLM初始化Actor Model以及Ref Model
2.2、数据集
2.2.1、文本数据
使用prompt通过Actor模型生成response,将prompt、response作为样本为ppo提供数据支持。
2.2.2、数据预处理
基于prompt+response生成prob_old、prob_ref、value_old、reward数据。
其中ref Moddel进行参数冻结 ;reward Model进行参数冻结
inputs—>Actor Model—>inputs+reponse(generate)、 generate_mask(pad为0,非pad为1)
generate(inputs+response)—>Actor Model—>prob_old
generate(inputs+response)—>ref Model—>prob_ref
generate(inputs+response)—>critic Model—>value_old
generate(inputs+response)—>reward Model—>reward
2.3、奖励
采用奖励模型以及KL散度加权得到。其中Reword来自于奖励模型的最后一个token;KL散度为prob_old与prob_ref两个概率。奖励值用于更新Critic模型,奖励值=-(KL散度)+奖励(reward模型输出)
KL散度越大,差异性越大。
prompt+response | 天空 | 为什么 | 是 | 蓝色 | ? | 因为 | 光 | 的 | 散射 | 。 |
Reward | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3.8 |
-KL | 1.2 | 0.5 | 2.3 | 3.6 | 4.8 | 1.5 | 4.5 | 1 | 5.3 | 0.3 |
score=-KL+Reward | 1.2 | 0.5 | 2.3 | 3.6 | 4.8 | 1.5 | 4.5 | 1 | 5.3 | 4.1 |
2.4、优势函数
2.5、更新Actor
generate—>actor—>prob_new
因为有时候无法获得,此时我们可以使用进行近似。
2.6、更新Critic
generate—>critic—>value_new
三、奖励
3.1、奖励模型
奖励模型,它的作用是计算即时收益。取response最后一个token对应的reward作为该response的reward。
3.1.1、网络架构
取response最后一个token对应的reward作为该response的reward。在llm之后添加一个线性层,将其转化为一个分数。

3.1.2、损失函数
在具体实践中,loss由两种实现方式token-level、sentence-level。
- token-level:选取response中的每一个token进行对比,并将其平均值作为loss
loss代码
- sentence-level:训练时应该取最后一个token的reward和最后一个token的reward来计算对比损失。
我们实验对比了两种损失函数的表现,结果表明sentence-level损失训练RM可获得更高的测试精度。但是RM不仅用于打reward分,还用于强化训练阶段critic model的初始化。我们发现使用sentence-level损失训练的RM初始化critic model后,强化训练会变得不稳定,难以收敛。因此我们仍使用token-level损失来进行RM训练,虽然精度会有小幅下降,但强化训练的稳定性会有较大提高。
3.1.3、模型选择
在RM训练阶段,训练多个epoch,并在每个epoch结束后存储当前RM,之后选择合适的RM进行后续强化训练。在选择RM时,我们主要看以下几点:
- 测试精度,因为测试精度客观反映了RM打分合理性
- RM输出的reward值,如果reward值过小或过大,在后续强化训练时会产生数值问题,导致训练无法正常进行;
- 接受和拒绝response奖励值之间的差距:具体做法是计算测试集中的接受reward的均值和拒绝reward均值,观察两个均值之间是否存在一定的差距。如存在一定的差距,则说明RM有较强的鲁棒性。
3.1.4、推理
取response最后一个token的reward作为该response的reward。
prompt+response | 天空 | 为什么 | 是 | 蓝色 | ? | 因为 | 光 | 的 | 散射 | 。 |
Reward | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3.8 |
3.2、KL散度
与PPO不同使用KL散度+reward作为奖励。reward只有结束之后才有,KL散度之前就有。
3.2.1、Actor与Ref模型
- Actor Model:就是我们想要训练的目标语言模型。一般用SFT阶段产出的SFT模型来对它做初始化。
目的是让Actor模型能产生符合人类喜好的response。
- Reference Model:主要作用是防止Actor模型训练歪。一般也用SFT阶段得到的SFT模型做初始化,在训练过程中,它的参数是冻结的。
希望训练出来的Actor模型既能达到符合人类喜好的目的,又尽量让它和原始模型不要差异太大。希望两个模型的输出尽量相似。KL散度能用来衡量输出分布的相似度。
3.2.2、计算流程
- 使用LLM参数初始化Actor Model与Ref Model两个模型。
- 给定Prompt,使用Actor模型生成Response。
- 计算两个模型生成Prompt+Response的概率,并计算其KL散度。注意应用的简化版KL散度,最好只使用Response对应的生成概率。
3.2.3、KL散度
- 减法:
3.3、奖励:KL散度+reward
我们使用KL散度+reward作为score
prompt+response | 天空 | 为什么 | 是 | 蓝色 | ? | 因为 | 光 | 的 | 散射 | 。 |
Reward | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3.8 |
KL | 1.2 | 0.5 | 2.3 | 3.6 | 4.8 | 1.5 | 4.5 | 1 | 5.3 | 0.3 |
score=KL+Reward | 1.2 | 0.5 | 2.3 | 3.6 | 4.8 | 1.5 | 4.5 | 1 | 5.3 | 4.1 |
CriticModel
四、优势函数
优势函数中包括了奖励,r=KL散度+reward。
4.1、原理
4.1.1、优势函数
- one-step advantage:
- two-step advantage:
- k-step advantage:
- -step advantage:
随着步数的增加,的比重逐渐减少,所以不准确的影响也在逐渐减少。
4.2、GAE
4.2、应用
五、Actor模型
5.1、网络架构
待微调的LLM大模型
5.2、损失函数
5.2.1、数据
generate—>actor—>prob_new
5.2.2、损失函数
因为有时候无法获得,此时我们可以使用进行近似。
5.2.3、实现
六、critic_loss
6.1、网络架构
损失函数为token-level的reward模型
6.2、损失函数
6.2.1、数据
generate—>critic—>value_new