SFT、DPO、RLHF对比

DPO(Direct Preference Optimization,直接偏好优化)和SFT(Supervised Fine-Tuning,有监督微调)是两种用于优化大语言模型(LLMs)的方法,它们在目标、训练流程和适用场景上存在显著区别。以下是两者的详细对比:

1. 概念与目标

  • SFT(有监督微调):
    • 定义:SFT是一种基于标注数据的微调方法,通过最小化模型输出与标注数据之间的差异来优化模型
    • 目标:使模型在特定任务上表现更好,通常用于有明确标注数据的场景
  • DPO(直接偏好优化):
    • 定义:DPO是一种基于人类偏好数据的优化方法,通过对比偏好回答和非偏好回答来调整模型
    • 目标:使模型的输出更符合人类偏好,避免了强化学习的复杂性

2. 训练流程

  • SFT:
    • 流程:直接使用标注数据进行监督学习,通过交叉熵损失函数优化模型参数
    • 复杂度:训练过程简单,计算成本主要取决于数据规模和模型大小
  • DPO:
    • 流程:在SFT的基础上,引入偏好数据和参考模型,通过优化偏好回答的概率来调整模型
    • 复杂度:虽然避免了强化学习的复杂性,但依赖于偏好数据的质量,且需要设计对比学习的损失函数

3. 数据需求

  • SFT:
    • 数据类型:需要高质量的标注数据,通常为输入-输出对
    • 数据量:对数据量要求较高,且数据需要覆盖任务的所有场景
  • DPO:
    • 数据类型:需要偏好数据,即对同一输入的多个回答进行偏好标注
    • 数据量:偏好数据的规模和质量直接影响模型性能

4. 优势与劣势

  • SFT:
    • 优势:简单直接,易于实现和理解,适用范围广
    • 劣势:对未见过的输入可能表现不佳,泛化能力有限
  • DPO:
    • 优势:训练过程简单,避免了强化学习的复杂性,模型输出更符合人类偏好
    • 劣势:依赖偏好数据的质量,可能在复杂任务上不如强化学习方法有效

5. 适用场景

  • SFT:
    • 适用于有大量标注数据的任务,如文本分类、机器翻译等
  • DPO:
    • 适用于需要对齐人类偏好的任务,如对话生成、内容推荐等

总结

SFT和DPO都是优化大语言模型的有效方法,但各有优缺点。SFT适合有大量标注数据的任务,而DPO则在需要对齐人类偏好的场景中表现更好。选择哪种方法取决于具体任务需求、数据资源和计算成本
 
 

ybq:sft 的局限性

以下是读完上述文章后的个人理解,关于Loss、模型向后看的能力以及负反馈

不确定自己的理解是否准确,(o-_-o)

Loss

首先从Loss来看:

SFT的 Loss:

𝐿𝑆𝐹𝑇=−1𝑛∑𝑖=1𝑛𝑙𝑜𝑔𝑃(𝑦𝑖|𝑥<𝑖)

典型的基于概率的损失函数,计算的是模型输出与Label之间的交叉熵损失。

RLHF的 Loss:

𝐿𝑅𝐿𝐻𝐹=−𝐸𝑥∼πθ[𝑅(𝑥)]

其中R是一个预训练好的Reward Model(输入是一个句子, 输出是一个评分),这里为了简化,去掉了KL散度和pretrain模型的部分。

这里可以简单展开一下梯度的公式:

∇θ​𝐿𝑅𝐿𝐻𝐹=−𝐸𝑥∼πθ[𝑅(𝑥)∇θ𝑙𝑜𝑔πθ(𝑥)]

SFT的Loss是基于token级别的平均损失,而RLHF的Loss则是根据奖励模型评分加权后的损失。

尽管在 RLHF 中,奖励模型 R(x) 对整个序列的评分是相同的,但在实际的 RLHF 训练过程中,引入了 Critic 模型。Advantage 函数对生成序列中的每个 token 进行加权,这意味着每个 token 获得的奖励是不同的,从而起到了加权的作用。

假设在句子“这个房间很大,面积大约是 20 平方米”中:

  • 大约这个房间很大,面积𝑃(“大约”∣“这个房间很大,面积”)的优势函数值 A(s, a) 为 0.6;
  • 这个房间很大,面积大约是𝑃(“20”∣“这个房间很大,面积大约是”) 的优势函数值 A(s, a) 为 0.8。

那么,在梯度更新时, 这个房间很大,面积大约是𝑃(“20”∣“这个房间很大,面积大约是”) 的概率增幅将大于 大约这个房间很大,面积𝑃(“大约”∣“这个房间很大,面积”)

向后看的能力

SFT不具备向后看的能力, 𝑃(𝑦𝑖|𝑥<𝑖) 可以看出SFT只能看到当Token前面的句子, 而RLHF由于critic model和reward model都是能看到当前位置后面的句子的,所以RLHF能看到整个句子

这里有一点DPO具备不具备呢? 原文章里写的有,但是我感觉不具备,可以从DPO的Loss函数中看出来:

也没有Reward model对整个序列打分,还是只能看到之前的token。

负反馈问题

SFT给的都是正例,没有负反馈。而RLHF会通过给序列一个低分,来给模型一些负反馈,减少生成某个token的概率。那么DPO有没有负反馈呢?DPO会增大正例序列生成的概率,减少负例序列生成的概率(可以看到下面DPO的目标函数) :

Again 不确定自己的理解是否正确,(o-_-o)

参考

ybq:sft 的局限性

大模型的拒绝采样和RLHF,以及DPO越来越像SFT了,感觉SimPO就是SFT_rlhf 拒绝采样-CSDN博客

posted on 2025-03-01 00:42  ExplorerMan  阅读(589)  评论(0)    收藏  举报

导航