🚉RLHF:大模型对齐操作
2024-8-4
| 2025-5-8
字数 2750阅读时长 7 分钟
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、强化学习与大语言模型

  1. 首先训练奖励模型代替环境返回奖励。
  1. 基于奖励通过强化学习算法训练LLM模型
notion image

1.2.2、目标函数

大模型的RHLF
大模型的RHLF
在NLP任务中,智能体是语言模型本身,环境则对应着奖励模型
  • :即时收益,指语言模型当下产生 token 带来的收益。
  • :状态价值,指对语言模型"当下产生token ,一直到整个response生产结束“后的预估收益。状态价值不依赖于时间步骤,而是依赖于状态,即当前生成的文本
💡
对于动作,我们期望对应的状态价值最大。即强化学习的目标就是最大化状态价值函数。
notion image

二、训练流程

RHLF采用强化学习进行训练。但是与强化学习对比RHLF缺少环境给出的奖励。所以模型第一步根据偏好数据训练奖励模型;然后根据,奖励模型进行强化学习,具体的强化学习过程如下所示:
notion image

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
notion image

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
notion image

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之后添加一个线性层,将其转化为一个分数。
notion image

3.1.2、损失函数

在具体实践中,loss由两种实现方式token-level、sentence-level。
  • token-level:选取response中的每一个token进行对比,并将其平均值作为loss
    • notion image
      loss代码
  • sentence-level:训练时应该取最后一个token的reward和最后一个token的reward来计算对比损失。
    • notion image
💡
我们实验对比了两种损失函数的表现,结果表明sentence-level损失训练RM可获得更高的测试精度。但是RM不仅用于打reward分,还用于强化训练阶段critic model的初始化。我们发现使用sentence-level损失训练的RM初始化critic model后,强化训练会变得不稳定,难以收敛。因此我们仍使用token-level损失来进行RM训练,虽然精度会有小幅下降,但强化训练的稳定性会有较大提高。

3.1.3、模型选择

在RM训练阶段,训练多个epoch,并在每个epoch结束后存储当前RM,之后选择合适的RM进行后续强化训练。在选择RM时,我们主要看以下几点:
  1. 测试精度,因为测试精度客观反映了RM打分合理性
  1. RM输出的reward值,如果reward值过小或过大,在后续强化训练时会产生数值问题,导致训练无法正常进行;
  1. 接受和拒绝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、计算流程

在计算KL散度时候,使用对应token的生成概率,而不是整个词汇表的分布概率。例如第一个token只使用了我对应的概率。
在计算KL散度时候,使用对应token的生成概率,而不是整个词汇表的分布概率。例如第一个token只使用了我对应的概率。
  1. 使用LLM参数初始化Actor Model与Ref Model两个模型。
  1. 给定Prompt,使用Actor模型生成Response。
  1. 计算两个模型生成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

        6.2.2、损失函数

        6.2.3、应用

      • 强化学习
      • LLM
      • NLP
      • DeepNet: Scaling Transformers to 1,000 Layers【论文精读】GPT1: Improving language understanding by generative pre-training
        Loading...