阿里面试竟被“DPO微调”吊打...

最近已有不少大厂都在秋招宣讲,也有一些已在 Offer 发放阶段了。

节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。

总结链接如下:

《大模型面试宝典》(2024版) 发布!

喜欢本文记得收藏、关注、点赞。


最近又认真读了一遍大佬的文章:朱小霖:DPO 是如何简化 RLHF 的 。不由感叹,数学不愧是 AI 技术的第一生产力,但凡我当初对这个证明过程多深入思考一会儿,也不至于踩那么多坑。

01 理论证明

在这里插入图片描述

针对 ppo 的 loss 函数,我们做以下变换:

图片

图片

至此,艺术已成!致敬大佬朱小霖。

02 dpo 的局限性

经过上面的证明,一切都清晰了,dpo 对标的从来都是不是 ppo,而是 reward_model。

二者不仅训练数据一样,loss 函数本质上也一致。那么即使不去做实验验证, dpo 的局限性也已经跃然纸上了。

03 dpo 的大前提未被验证

dpo 从头到尾都在以 reward_model 的方式让模型学习 evaluate 能力,但是却并没有证明一个重要假设:“模型的 evaluate 能力和 generate 能力到底是不是相互促进的?”

dpo 后的模型具有了更强的 evaluate 能力,但我们的目标是提升模型的 generate 能力啊。如果这个基本假设不成立,那 dpo 的学习过程就没有什么价值。

不要认为这个假设是显而易见的,美食家并不一定做得一手好饭。这个大前提的成立与否,还关系到 SPIN、self-reward 等左脚踩右脚的训练方式是否有存在的意义。

也正是因为 dpo 是在让模型具有 reward_model 的能力,所以它并不在乎模型能不能说出一个好的句子,只在乎 loss margin 是否在变大。

大家训练 dpo 的时候,基本都遇到过 good_sentence 和 bad_sentence 的 loss 都上升的尴尬现象,往往需要我们加系数和调参数才能解决。

reward_model 的训练方式根本不在乎模型的 generate 能力,因此稳定训练的 dpo 需要魔改 loss 函数。

04 dpo 缺乏在线采样数据

我们再从另外一个角度来思考 dpo 的不足,已知:

  • dpo 和 reward_model 完全等价;

  • rlhf = reward_model + ppo。

可得:ppo 所做的一切操作,便是 dpo 效果不如 rlhf 的原因。

那我们思考一下,ppo 到底做了什么?ppo 没有使用任何训练数据,它唯一做的事情便是 generate,通过对模型 generate 的文本进行打分,把 reward_model 的 evaluate 能力转换成 generate 能力喂给模型。

因此,缺乏的这个 generate 的过程就是 dpo 效果不行的原因。那这个 generate 的过程又带来了什么呢?online 和 explore。

老生常谈的一个知识点了:rlhf 是 online 学习方式,dpo 是 offline 学习方式。

rlhf 是修复模型当前已有的知识,属于因材施教,并且由于 do_sample 的随机性,它可以进行 explore;但 dpo 则是强制模型学习训练者认为正确的知识(偏好数据对中的 good sentence),沿着一条被设定的正确的路线使劲走,这种 offline 的学习方式也导致它不具备 explore 的空间。

**我们在 dpo 训练中常用的一个技巧:**让模型先对“偏好数据对的 good sentence”做一次 sft,再进行 dpo 训练。

不就是强行让 dpo 变成 online 的学习方式吗?毕竟训过的知识大概率也是可以 generate 出来的。

我们在 dpo 数据中常用的一个技巧:把模型自己生成的 path@N 结果,拿来构造成偏好 pair 对,不就是同时在模拟 ppo 的 online 和 sample 能力吗?

因为欠缺,所以需要弥补。所有的 dpo 数据处理技巧,大多都能从 ppo 身上找到一些痕迹。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457328.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个可以调节笔记本亮度的程序

在我这台笔记本上,当我把显示模式调为读显时发现右下角的亮度不能调了,就像这样 听说时nvidia显卡不适配的问题 咱也不知道呀 于是我就用java写了程序来调节,用了俩个多月,没啥问题的 打开就是这样拉动直接就可以调节 源码 im…

unity中的组件(Component)

在 Unity 中,组件(Component)是构成 GameObject 功能和行为的基础单元,每个 GameObject都可以附加一个或多个组件,以实现不同的功能 1. Transform 组件 描述:所有 GameObject 默认都有一个 Transform 组件…

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的(Replicated)、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比,KafKa能够很好…

C++基础:三个字符串也能搞大小?

上一篇说了三个整数比较大小,按照顺序输入的,这次我们看看字符串的,顺便把那个简化以下: 题目:这次输入三个字符串。如果用户输入“Stenbeck", “Hemingway”,“Fitzgerald”,输出将是“Fitzgerald,Hemingway&…

OPPO携手比亚迪共同探索手机与汽车互融新时代

10月23日,OPPO与比亚迪宣布签订战略合作协议,双方将共同推进手机与汽车的互融合作,这一合作也标志着两大行业巨头在技术创新和产业融合上迈出了重要一步,为手机与汽车的深度融合探索新的可能。 OPPO创始人兼首席执行官陈明永、OP…

LCD手机屏幕高精度贴合

LCD手机屏幕贴合,作为智能手机生产线上至关重要的一环,其质量直接关乎用户体验与产品竞争力。这一工艺不仅要求屏幕组件间的无缝对接,达到极致的视觉与触觉效果,还需确保在整个生产过程中,从材料准备到最终成品&#x…

<Project-11 Calculator> 计算器 0.3 年龄计算器 age Calculator HTML JS

灵感 给工人发工资是按小时计算的,每次都要上网,我比较喜欢用 Hours Calculator ,也喜欢它的其它的功能, 做个类似的。 我以为是 Python,结果在学 javascript 看 HTML,页面的基础还停留在 Frontpage 2000…

MongoDB简单学习

MongoDB 一、基本使用 1.1业务应用场景 传统的关系型数据库(如Mysql),在数据库操作的“三高”需求以及对应web2.0的网站需求面前,显得力不从心 三高: High performance - 对数据库高并发读写的要求Huge Storage -…

1U服务器和Hyper-V虚拟机使用记录

记录最近接触服务器和虚拟机的一些使用操作知识 背景:1U服务器上架使用,备份其他服务器vm虚拟机,Hyper-V管理虚拟机使用测试 设备:IBM3550服务器交换机, 移动硬盘:附加存储盘, u盘1&#xff1…

解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)

文章目录 引言I 解决方案方案1:使用JsonAutoDetect注解方案2:手动编写get方法,JsonProperty注解加到方法上。方案3:首字母改成小写的II 知识扩展:对象默认是怎样被序列化?引言 需求: JSON序列化时,使用@JsonProperty注解,将字段名序列化为首字母大写,兼容前端和第三方…

【C++】进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后,现在我们进行对类相关特性的深入探讨! 🔥🔥🔥【C】类的默认成员函数:深入剖析与应用(上) 【C】类的默认成员函数:深入剖…

【从零开始的LeetCode-算法】910. 最小差值 II

给你一个整数数组 nums&#xff0c;和一个整数 k 。 对于每个下标 i&#xff08;0 < i < nums.length&#xff09;&#xff0c;将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后&#xf…

论文略读:Not all Layers of LLMs are Necessary during Inference

202404 LLMs的推理阶段非常昂贵 目前实现LLM高效推理的流行方法包括模型剪枝和稀疏模型 但这些方法可能会改变LLM参数&#xff0c;从而冒险损害其泛化能力。这篇论文动态减少激活神经元的数量以加速LLM推理 根据输入实例动态决定推理终止时刻

openjdk17在java方法中创建对象 类加载在C++源码实现步骤

java的testYYM方法中OtherClass类是如何被加载的 ##有请志愿者java实验类 ByteCodeTest、OtherClass import java.lang.reflect.Method;public class ByteCodeTest {private int insert678;public static void main(String[] args) throws Exception {ByteCodeTest byteCodeT…

leetcode动态规划(十三)-目标和

题目 494.目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题

1. TCP数据传输粘包简介 在本系列的第6篇文章《鸿蒙网络编程系列6-TCP数据粘包表现及原因分析》中&#xff0c;我们演示了TCP数据粘包的表现&#xff0c;如图所示&#xff1a; 随后解释了粘包背后的可能原因&#xff0c;并给出了解决TCP传输粘包问题的两种思路&#xff0c;第一…

网络通信与并发编程(六)线程、进程池与线程池

线程、进程池与线程池 文章目录 线程、进程池与线程池一、线程二、线程的相关操作2.1创建线程的两种方式2.2线程的其他操作2.3死锁现象和递归锁2.4条件2.5定时器2.6 队列与堆栈 三、进程池与线程池 一、线程 线程是指cpu上实际执行计算的单位&#xff0c;而进程是将计算所需资…

潮畔汽车文化营地开营啦!全民测试场启动典礼圆满成功

在这个充满活力与创新的时代&#xff0c;汽车已不仅仅是代步工具&#xff0c;它承载着人们对速度、自由、科技与梦想的追求&#xff0c;成为了一种生活方式的象征。随着汽车文化的日益丰富和多元化&#xff0c;如何更好地连接汽车制造商、消费者以及广大汽车爱好者&#xff0c;…