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

Direct Preference Optimization (DPO): 一种无需强化学习的语言模型偏好优化方法

论文地址:https://arxiv.org/pdf/2305.18290

1. 背景与挑战

近年来,大规模无监督语言模型(LM)在知识获取和推理能力方面取得了显著进展,但如何精确控制其行为仍是一个难题。 现有的方法通常通过**强化学习从人类反馈(RLHF)**来引导模型行为,但RLHF存在以下问题:

  • 复杂性高:RLHF需要先训练一个奖励模型来反映人类偏好,然后使用强化学习来微调语言模型,使其在最大化奖励的同时不偏离原始模型太远。
  • 不稳定性:RLHF训练过程复杂且容易不稳定,需要大量超参数调优和采样。
  • 计算成本高:RLHF涉及训练多个模型和在训练循环中采样,消耗大量计算资源。

2. DPO:一种更简单、更高效的方法

为了解决上述问题,本文提出了一种名为 Direct Preference Optimization (DPO) 的新算法,直接从人类偏好数据中优化语言模型,而无需显式的奖励建模或强化学习。

2.1 DPO 的核心思想

DPO 的核心思想是:

  • 将偏好学习问题转化为一个简单的二元分类问题:DPO 通过最大化人类偏好的对数概率,同时最小化不偏好的对数概率,来直接优化语言模型。
  • 引入动态重要性权重:为了防止模型退化,DPO 引入了基于隐式奖励模型的动态重要性权重,该权重根据模型对偏好的排序错误程度进行调整。

2.2 DPO 的工作原理

  1. 构建偏好数据集:从参考模型(通常是经过监督微调的语言模型)中采样生成多个候选响应,并使用人类偏好数据对它们进行标注,生成偏好对 ( y w , y l ) (y_w, y_l) (yw,yl),其中 y w y_w yw 表示更受偏好的响应, y l y_l yl 表示较不受偏好的响应。

  2. 定义 DPO 损失函数

    L D P O ( π θ ; π r e f ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β log ⁡ π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β log ⁡ π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] \mathcal{L}_{\mathrm{DPO}}(\pi_{\theta};\pi_{\mathrm{ref}}) = -\mathbb{E}_{(x,y_{w},y_{l})\sim\mathcal{D}}\left[\log\sigma\left(\beta\log\frac{\pi_{\theta}(y_{w}\mid x)}{\pi_{\mathrm{ref}}(y_{w}\mid x)}-\beta\log\frac{\pi_{\theta}(y_{l}\mid x)}{\pi_{\mathrm{ref}}(y_{l}\mid x)}\right)\right] LDPO(πθ;πref)=E(x,yw,yl)D[logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]

    • π θ \pi_{\theta} πθ:待优化的语言模型。
    • π r e f \pi_{\mathrm{ref}} πref:参考模型,通常是初始的监督微调模型。
    • β \beta β:控制 KL 散度的超参数,用于平衡奖励最大化与模型偏离程度。
    • σ \sigma σ: sigmoid 函数,将输入映射到 (0,1) 之间。

    该损失函数鼓励模型生成更受偏好的响应,同时惩罚生成不受偏好的响应。

  3. 优化模型

    DPO 通过梯度下降法优化上述损失函数,更新模型参数 θ \theta θ。 梯度计算如下:

    ∇ θ L D P O ( π θ ; π r e f ) = − β E ( x , y w , y l ) ∼ D [ σ ( r ^ θ ( x , y l ) − r ^ θ ( x , y w ) ) ( ∇ θ log ⁡ π ( y w ∣ x ) − ∇ θ log ⁡ π ( y l ∣ x ) ) ] \nabla_{\theta}\mathcal{L}_{\mathrm{DPO}}(\pi_{\theta};\pi_{\mathrm{ref}}) = -\beta\mathbb{E}_{(x,y_{w},y_{l})\sim\mathcal{D}}\left[\sigma\big(\hat{r}_{\theta}(x,y_{l})-\hat{r}_{\theta}(x,y_{w})\big)\left(\nabla_{\theta}\log\pi(y_{w}\mid x)-\nabla_{\theta}\log\pi(y_{l}\mid x)\right)\right] θLDPO(πθ;πref)=βE(x,yw,yl)D[σ(r^θ(x,yl)r^θ(x,yw))(θlogπ(ywx)θlogπ(ylx))]

    其中, r ^ θ ( x , y ) = β log ⁡ π θ ( y ∣ x ) π r e f ( y ∣ x ) \hat{r}_{\theta}(x,y) = \beta\log\frac{\pi_{\theta}(y|x)}{\pi_{\mathrm{ref}}(y|x)} r^θ(x,y)=βlogπref(yx)πθ(yx) 表示隐式奖励模型。

    • 当隐式奖励模型对偏好排序错误时,权重 σ ( r ^ θ ( x , y l ) − r ^ θ ( x , y w ) ) \sigma\big(\hat{r}_{\theta}(x,y_{l})-\hat{r}_{\theta}(x,y_{w})\big) σ(r^θ(x,yl)r^θ(x,yw)) 更大,这意味着模型会更多地关注那些排序错误的样本,从而更有效地纠正错误。
    • 梯度更新方向:增加偏好响应的对数概率,同时减少不偏好响应的对数概率。

3. DPO 的优势

  • 无需显式奖励建模:DPO 直接从偏好数据中学习,无需训练单独的奖励模型,简化了训练流程。
  • 无需强化学习:DPO 使用简单的二元交叉熵损失进行优化,避免了强化学习带来的复杂性和不稳定性。
  • 计算效率高:DPO 训练过程更高效,消耗的计算资源更少。
  • 性能优越:实验表明,DPO 在控制生成文本的情感、摘要生成和对话生成等任务上,性能优于或至少与现有的 RLHF 方法相当。

4. 实验结果

4.1 情感生成任务

在控制情感生成任务中,DPO 在奖励-KL 散度边界上表现优异,能够在保持低 KL 散度的同时,实现更高的奖励,优于 PPO 等方法。

4.2 摘要生成任务

在 TL;DR 摘要生成任务中,DPO 的胜率(与参考摘要相比)达到 61%,高于 PPO 的 57%。 此外,DPO 对采样温度的鲁棒性更强,而 PPO 的性能在高温下会下降。

4.3 对话生成任务

在 Anthropic HH 对话数据集上,DPO 是唯一一种在计算效率高的前提下,能够超越首选完成度的方法,并且其性能与计算成本更高的 Best of 128 基线相当。

4.4 泛化能力

在将 PPO 和 DPO 策略应用于不同分布(CNN/DailyMail 新闻文章)时,DPO 仍然优于 PPO,表明 DPO 策略具有较好的泛化能力。

4.5 GPT-4 评估与人类评估的一致性

为了验证 GPT-4 评估的可靠性,本文进行了人类研究,发现 GPT-4 的判断与人类判断的一致性较高,表明 GPT-4 是人类评估的合理代理。

5. 讨论与未来方向

  • DPO 策略的泛化能力:DPO 策略在不同分布上的表现如何?与从显式奖励函数中学习相比如何?
  • 奖励过度优化问题:DPO 中是否存在奖励过度优化问题?图 3 中性能的轻微下降是否是其表现?
  • DPO 的可扩展性:DPO 能否扩展到更大规模的模型?
  • GPT-4 评估的改进:如何更好地从自动化系统中获取高质量的判断?
  • DPO 的其他应用:DPO 的应用范围可以扩展到其他模态的生成模型训练。

6. 总结

DPO 是一种无需强化学习的语言模型偏好优化方法,具有以下优势:

  • 简化训练流程:无需显式奖励建模和强化学习。
  • 计算效率高:训练过程更高效,消耗资源更少。
  • 性能优越:在多个任务上表现优于或至少与现有的 RLHF 方法相当。

DPO 为训练更强大的、对齐的语言模型提供了一种更简单、更高效的方法。

相关文章:

Direct Preference Optimization (DPO): 一种无需强化学习的语言模型偏好优化方法

论文地址:https://arxiv.org/pdf/2305.18290 1. 背景与挑战 近年来,大规模无监督语言模型(LM)在知识获取和推理能力方面取得了显著进展,但如何精确控制其行为仍是一个难题。 现有的方法通常通过**强化学习从人类反馈&…...

跟我学C++中级篇——容器的连接

一、数据的整合 在实际的开发场景中,经常可以遇到以下的情况:有几个地方的数据需要整合在一起。解决办法也有很多,在不同的层面有不同的解决方式。比如经过清洗可以把非关系型数据转为关系型数据。但在底层编程的情况中会发现有几情况&#…...

java求职学习day15

多线程 1 基本概念 1.1 程序和进程的概念 (1)程序 - 数据结构 算法,主要指存放在硬盘上的可执行文件。 (2)进程 - 主要指运行在内存中的可执行文件。 (3)目前主流的操作系统都支持多进程&a…...

【脚本】如何禁用谷歌浏览器自动更新

这里写自定义目录标题 问题描述解决方法代码 问题描述 最近更新系统以后,发现chrome老是自己更新,导致我的代码也得跟着他更新,就跟一个拜托不掉的狗皮膏药一样。 解决方法 于是我写了一个脚本,以下代码都是bash代码&#xff0…...

【Linux】华为服务器使用U盘安装统信操作系统

目录 一、准备工作 1.1 下载UOS官方系统 1.2制作启动U盘 1.3 服务器智能管理系统iBMC 二、iBMC设置U盘启动 一、准备工作 1.1 下载UOS官方系统 服务器CPU的架构是x86-64还是aarch64),地址:统信UOS生态社区 - 打造操作系统创…...

WPF3-在xaml中引用其他程序集的名称空间

1. 如何在XAML里引用类库中的名称空间和类2. 小结 1. 如何在XAML里引用类库中的名称空间和类 首先需要记住一点:把类库引用到项目中是引用其中名称空间的物理基础,无论是C#还是XAML都是这样。 一旦将一个类库引用进程序,就可以引用其中的名…...

Python 在Word中添加、或删除超链接

在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接,用户可以轻松地导航到相关信息,从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超…...

基于 WPF 平台使用纯 C# 实现动态处理 json 字符串

一、引言 在当今的软件开发领域,数据的交换与存储变得愈发频繁,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易读、便于解析和生成的特点,被广泛应用于各种应用程序中。在 W…...

「全网最细 + 实战源码案例」设计模式——单例设计模式

核心思想: 属于创建型设计模式,核心目的是确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。 控制共享资源的访问(如数据库链接、配置管理、日志处理器等) 真实世界类比:政府…...

第01章 19 通过点数据逐级构建球体体数据的综合性小例子

用VTK库来创建一个三维图像数据(vtkImageData),并填充标量数据以表示一个球体的体数据。球的半径为50,体数据的空间间隔为1.0/1000。 首先,我需要包含VTK的头文件,并且创建一个vtkImageData对象。然后&…...

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…...

前端react后端java实现提交antd form表单成功即导出压缩包

前端&#xff08;React Ant Design&#xff09; 1. 创建表单&#xff1a;使用<Form>组件来创建你的表单。 2. 处理表单提交&#xff1a;在onFinish回调中发起请求到后端API&#xff0c;并处理响应。 import React from react; import { Form, Input, Button } from ant…...

基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础

摘要 本文分为两部分&#xff1a;Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置&#xff0c;可以实现用VSCode操作虚拟机。为了后续工作&#xff0c;搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础&#xff0c;包…...

接口(完)

大家好&#xff0c;今天我们着重来总结一下接口的知识&#xff0c;并且将接口和抽象类的区别罗列一下&#xff0c;帮助我们更好的认识抽象类和接口。 2.7 抽象类和接口的区别. 抽类和接口都是Java中多态的常见使用方式,都需要重点掌握,同时又要认清两者的区别(重要!!&#xf…...

数据结构——实验七·排序

欢迎各位大佬们来到Tubishu的博客&#x1f31f; Tubishu是一名计算机本科生&#xff0c;不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐&#x1f525; 求各位大佬们垂怜&#x1f525;点赞评论一下呗&#x1f525;&#x1f525; 本文专栏 ➡️ 数据结构 …...

JVM堆空间

JVM&#xff08;Java虚拟机&#xff09;堆空间是Java内存管理的核心区域之一&#xff0c;用于存储Java对象实例。以下是关于JVM堆空间的详细介绍&#xff1a; 1. 堆空间的作用 • 存储对象实例&#xff1a;几乎所有的Java对象实例&#xff08;通过new关键字创建的对象&#xf…...

【详细】SSH公私钥认证与渗透测试攻击场景

SSH&#xff08;Secure Shell&#xff09;是一个用于远程登录和执行命令的网络协议&#xff0c;其认证方式通常有两种&#xff1a;基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制&#xff0c;并探讨在渗透测试场景中&#xff0c;如何利用对靶机具有读取和…...

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)

1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架&#xff0c;它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架&#xff01; 官方网址&#xff1a;https://ffmpeg.org/ FFmpeg 的主要特点和功能&#xff1a; 编解码器支持: FFmpe…...

C++异步future

&#x1f30e; C11异步futrue 文章目录&#xff1a; C11异步futrue future介绍     应用场景     future操作       std::async函数模版       std::packaged_task类模版       std::promise类模版 &#x1f680;future介绍 std::future是C11标准库…...

Oracle 12c 中的 CDB和PDB的启动和关闭

一、简介 Oracle 12c引入了多租户架构&#xff0c;允许一个容器数据库&#xff08;Container Database, CDB&#xff09;托管多个独立的可插拔数据库&#xff08;Pluggable Database, PDB&#xff09;。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...