当前位置: 首页 > news >正文

【AI大模型技术】深度解析DPO和RLHF,你还分不清吗?

前言

很多同学都把 DPO 和 RLHF 傻傻分不清楚,认为 DPO 是 RLHF 的替代方案。

先说结论,DPO 是介于 SFT 和 RLHF 之间的,并不是完全的 RLHF 的替代。DPO 相当于 RLHF 的轻量版(模型数量少了一倍)

RLHF 存在模型训练占用资源多、训练不稳定、超参数敏感等问题。这也是 DPO 要解决的问题,资源占比相对低,训练稳定,但是 DPO 的缺点是没有 RLHF 对大模型提升的上限高。

1、回顾RLHF的PPO

RLHF 中的 PPO 中需要四个网络,分别是:

  • Actor model:SFT 后的 LLM,需要训练的 LLM,参数可变;

  • Ref model:SFT 后的 LLM,用于限制 actor model 的 KL 散度,参数冻结;

  • RM model:奖励模型,用于强化学习的奖励提供,参数冻结;

  • Critic model:用于期望奖励生成,参数可变;

而且除了 Actor model(LLM_SFT)需要预训练外,还需要训练一个 RM model,除此之外,PPO 算法是需要做采样处理的,我们知道大模型的生成是比较消耗资源的,在训练过程中再做采样,是非常消耗资源的。

如果采样不充分,很可能会导致大模型沿着不好的方向优化。DPO 主要是去掉了 Reward model,通过优化损失函数实现直接偏好策略控制。

2、RLHF的loss

RLHF 的 loss 分为两部分:第一部分是得到的奖励损失;第二部分是模型未了防止训飞,增加了一个 KL 散度来控制 LLM_rlhf 不要偏离 RLHF_sft 太多。

上面损失函数可以通过数学证明和因式分解以及替换得到 DPO 损失函数(如何做本人也不太懂,可以看朱小霖:DPO 是如何简化 RLHF 的):

3、DPO算法的原理和代码

DPO 算法主要通过优化 RLHF 的算是函数来提升 LLM 的效果,下面说一下整个 DPO 的几大组成部分:

模型:模型由两个大模型组成,一是 SFT 后的 LLM 需要学习的模型;第二个和 RLHF 中一样需要一个 ref 模型,防止模型跑偏,结构也是 SFT 后的 LLM,参数冻结。

Loss:

从 loss 公式上看,DPO 算法的原理很简单,就是让模型在好结果上生成的概率尽量大于 ref 模型,在坏结果上生成的概率尽量低于 ref 模型,优点像对比学习(尽量靠近正例,远离负例)。

从这个角度看 DPO 就是通过一种贪心的算法来优化 LLM,缺少探索更优的路线(RLHF 做的)。

代码如下:

importtorchimporttorch.nn.functionalasFfromtransformersimportLlamaForCausalLM,LlamaConfigfromcopyimportdeepcopy torch.manual_seed(0)if__name__=="__main__":# 超参数beta=0.1# 加载模型policy_model=LlamaForCausalLM(config=LlamaConfig(vocab_size=1000,num_hidden_layers=1,hidden_size=128))reference_model=deepcopy(policy_model)# dataprompt_ids=[1,2,3,4,5,6]good_response_ids=[7,8,9,10]# 对loss稍加修改可以应对一个good和多个bad的情况bad_response_ids_list=[[1,2,3,0],[4,5,6,0]]# 转换成模型输入input_ids=torch.LongTensor([prompt_ids+good_response_ids,*[prompt_ids+bad_response_idsforbad_response_idsinbad_response_ids_list]])# labels 提前做个shiftlabels=torch.LongTensor([[-100]*len(prompt_ids)+good_response_ids,*[[-100]*len(prompt_ids)+bad_response_idsforbad_response_idsinbad_response_ids_list]])[:,1:]loss_mask=(labels!=-100)labels[labels==-100]=0# 计算 policy model的log problogits=policy_model(input_ids)["logits"][:,:-1,:]per_token_logps=torch.gather(logits.log_softmax(-1),dim=2,index=labels.unsqueeze(2)).squeeze(2)all_logps=(per_token_logps*loss_mask).sum(-1)# 暂时写死第一个是good response的概率policy_good_logps,policy_bad_logps=all_logps[:1],all_logps[1:]# 计算 reference model的log probwithtorch.no_grad():logits=reference_model(input_ids)["logits"][:,:-1,:]per_token_logps=torch.gather(logits.log_softmax(-1),dim=2,index=labels.unsqueeze(2)).squeeze(2)all_logps=(per_token_logps*loss_mask).sum(-1)# 暂时写死第一个是good response的概率reference_good_logps,reference_bad_logps=all_logps[:1],all_logps[1:]# 计算loss,会自动进行广播logits=(policy_good_logps-reference_good_logps)-(policy_bad_logps-reference_bad_logps)loss=-F.logsigmoid(beta*logits).mean()print(loss)

最后唠两句

为什么AI大模型成为越来越多程序员转行就业、升职加薪的首选

很简单,这些岗位缺人且高薪

智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

那0基础普通人如何学习大模型 ?

深耕科技一线十二载,亲历技术浪潮变迁。我见证那些率先拥抱AI的同行,如何建立起效率与薪资的代际优势。如今,我将积累的大模型面试真题、独家资料、技术报告与实战路线系统整理,分享于此,为你扫清学习困惑,共赴AI时代新程。

我整理出这套 AI 大模型突围资料包【允许白嫖】:

  • ✅从入门到精通的全套视频教程

  • ✅AI大模型学习路线图(0基础到项目实战仅需90天)

  • ✅大模型书籍与技术文档PDF

  • ✅各大厂大模型面试题目详解

  • ✅640套AI大模型报告合集

  • ✅大模型入门实战训练

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

①从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点

② AI大模型学习路线图(0基础到项目实战仅需90天)

全过程AI大模型学习路线

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

④各大厂大模型面试题目详解

⑤640套AI大模型报告合集

⑥大模型入门实战训练

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

http://www.jsqmd.com/news/385295/

相关文章:

  • 排序算法衍生问题
  • google-glog编译
  • SVG 在线编辑器:设计自由,创意无限
  • Vue3 条件语句
  • JavaScript 错误处理指南
  • 8、SequenceInputStream的源码和Vector.class的一些函数说明(windows操作系统,JDK8)
  • 2025年主流项目管理工具对比:10款 Jira 替代方案清单
  • Spring AI学习
  • 2026最新口碑协商律所贷款/信用卡分期协商机构榜单(负债人实测版) - 代码非世界
  • 大模型技术:深入理解预训练与微调,为什么需要预训练,什么是微调?
  • 2026年口碑优选:哪些保健品品牌值得信赖?保健饮品/养胃颗粒/保健品,保健品品牌哪个好 - 品牌推荐师
  • AI Agent智能体解析-7种Agent框架对比!
  • Vue.js 起步指南
  • 使用 TypeScript 的指数退避机制包装异步请求
  • 深入研究大数据领域 Hadoop 的 HBase 数据库
  • Games202(一):实时阴影(Real-time Shadows)
  • 苹果充值卡回收常见问题解答 - 京顺回收
  • Go基础:Go的函数和方法详解
  • 负债逾期别乱投医!2026最新贷款+信用卡分期协商机构口碑榜单,实测靠谱助你上岸 - 代码非世界
  • 2025金融AI智能体投资决策的落地趋势:架构师的判断与建议
  • SVG 文本:图形与文本的完美融合
  • MongoDB 更新文档
  • SQL RIGHT JOIN
  • AI原生应用领域微服务集成的服务发现机制
  • Java 发送邮件
  • JavaScript Navigator
  • C 标准库 - `<errno.h>`
  • AI辅助编程工具(八) - Cursor配合通义干问
  • 从获客到流失:完整用户生命周期价值建模方法
  • jQuery UI 如何使用部件库