Step-DPO 论文——数学大语言模型理解

news2024/9/21 14:41:14

论文题目:STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS

翻译为中文就是:“LLMs长链推理的逐步偏好优化”

论文由港中文贾佳亚团队推出,基于推理步骤的大模型优化策略,能够像老师教学生一样优化大模型。

Qwen2-72B-Instruct模型作为基础模型进行微调优化后,其数学成绩超越了GPT-4、Gemini1.5-Pro、Claude3-Opus等闭源模型。

论文链接:https://arxiv.org/pdf/2406.18629

 代码仓库:https://github.com/dvlab-research/Step-DPO

1. 介绍

大语言模型(LLMs)在数学推理上具有重大挑战,这是由于数学需要精确的推理链。然而,直接偏好优化(DPO)对长链数学推理的益处有限,因为采用DPO的模型难以识别错误答案中的详细错误。

所以作者提出了Step-DPO方法,它将整个答案划分多个步骤作答(Step1, Step2, Step3, ...),大大提高的模型的精度。

在MATH数据集上,在Qwen2-7B-Instruct上准确率从53.0% 提升到58.6%,GSM8K数据集,准确率从85.5%提升到87.9% 。使用 Qwen2-72B-Instruct模型,在MATH和GSM8K上分别取得 70.8%94.0%的准确率。

1.1 像教育学生一样训练大模型

数学推理被认为是大语言模型(LLMs)中一种关键的长链推理能力。由于需要广泛的思维链(CoT),这项任务尤其具有挑战性,其中可能包括许多推理步骤,这些步骤中的任何错误都可能导致最终得不到正确答案。 

(1)首先,最常用的方法就是监督微调(SFT),使用各种数据增强对齐来微调模型。然而,当SFT数据达到一定数量时,模型经常出现幻觉,性能也随之趋于饱和。一个潜在的原因是,随着首选输出的概率增加,不理想输出的概率也会增加。这种现象使得模型在长链推理中更容易出错。

(2)最近,直接偏好优化(DPO)(Rafailov et al., 2024)被提出用于使用偏好对数据进行对齐(每个偏好对都包含一个输入提示、偏好输出及非偏好输出),因其简单性而广受欢迎。尽管DPO在Chat聊天任务中很有效,但它对长链(long-chain)数学任务效果不明显。如下图2所示。

(3)于是作者提出了Step-DPO,基于推理步骤的直接偏好优化。Step-DPO 逐步检查每个步骤的答案是否正确,这使得模型能够轻松定位错误Step,以进行有效的优化,显著增强了长链推理

2.  STEP-DPO 公式

2.1 DPO

我们先看到DPO的优化目标函数:

\begin{aligned} L_{DPO}(\theta)=-E_{(x,y_{win},y_{lose})\backsim D}[log \sigma (\beta log \frac {\pi_{\theta} (y_{win} \mid x)}{\pi_{ref}(y_{win \mid x})} - \beta log \frac{\pi_{\theta}(y_{lose} \mid x)}{\pi_{ref}(y_{lose} \mid x)})] \end{aligned}

其中,\ x 是输入提示 ,\ y_{win}, y_{lose} 分别表示正确的回答、错误的回答, \ D 是偏好对数据集。 \sigma 表示 sigmoid 函数, \pi_{\theta}\pi_{ref} 分别表示当前要优化的微调模型 以及训练过程中保存不变的参照模型, \beta 是一个超参数用来控制距离。

2.2 Step-DPO

我们再看到Step-DPO,它不再像DPO从整体对比答案,而是将每个推理步骤视为一个基本单元,对比单个推理步骤,更精细地提升模型的推理能力。目标优化公式:

\begin{aligned} L(\theta)=-E_{(x,s_{1 \backsim k-1},s_{win}, s_{lose})\backsim D}[log \sigma (\beta log \frac {\pi_{\theta} (s_{win} \mid x; s_{1 \backsim k-1})}{\pi_{ref}(s_{win} \mid x; s_{1 \backsim k-1})} - \beta log \frac{\pi_{\theta}(s_{lose} \mid x; s_{1 \backsim k-1})}{\pi_{ref}(s_{lose} \mid x; s_{1 \backsim k-1})})] \end{aligned}

回答 \ y 可以分解为多个步骤 \ y=s_{1}, ..., s_n\ x 表示输入提示。Step-DPO 优化目标就是最大化正确的下一个推理步骤 \ s_{win} 的概率,最小化错误步骤 \ s_{lose} 的概率,如图3所示。

3. 分布式数据构建

Step-DPO 的训练数据集是怎样的呢?每个数据样本中应该包含下面4项:

1)prompt \ x

2)初始推理步骤 \ s_{1 \backsim k-1}

3)首选推理步骤  \ s_{win}

4)不需要(错误)的推理步骤 \ s_{lose}

如下图所示:

(1)错误收集

首先,我们收集数学问题问答的数据集 \ D_0 = \{ (x, \hat{y}) \} ,x 是数学问题,\ \hat{y} 是真实答案。

然后,使用初始(参照)模型 \ \pi_{ref} 来得到每个数学问题 x 的答案。

在进行模型推理之前,添加思维链(CoT)前缀作为提示,比如:“Let‘s think step by step. Step 1:”,以确保模型的推理结果被结构化为多个推理步骤。

模型推理完成之后可得到每个数学问题x的推理结果y,然后选择与真实答案 \ \hat{y} 不一致的那些结果,汇总得到数据集 \ D_1

\begin{aligned} D_1 = \{ (x, \hat{y}, y) \mid x \in D_0 \} \end{aligned}

(2)错误步骤定位

假设每个错误的推理结果都被明确地表示为 推理步骤序列 \ y = s_1, s_2, ..., s_n ,随后需要人工或利用GPT-4验证每个推理步骤的正确性,直到找到第一个错误步骤 \ s_k ,选择 \ s_k 作为错误的推理步骤 \ s_{loss} 。这样得到一个包含错误步骤的数据集 \ D_2

D_2 = \{ (x, \hat{y}, s_{1 \backsim k-1}, s_{loss}) \mid x \in D_1 \}

(3)步骤修正

为了获得 \ D_2 中每个样本的相应正确推理步骤,需要通过用 提示x 和前面的正确推理步骤 \ s_{1 \backsim k-1} 通过模型 \pi_{ref} 来采样多个输出 \ y_{cont} ,该过程被表述为:

y_{cont} \backsim \pi_{ref} (y \mid x; s_{1 \backsim k-1})

随后,保留那些最终答案与实际情况相匹配的输出。我们选择 \ y_{cont} 中的第一个推理步骤作为 \ s_{win} ,从而得到最终的数据集D:

D = \{ (x, s_{1 \backsim k-1}, s_{lose}, s_{win} \mid x \in D_2 ) \}

数据样本示例如 Figure 5 所示。

4. 实验结果

Step-DPO 可以在SFT模型或现有的开源 Instruct 模型上进行微调,仅通过 10K 数据以及数百个训练步数,即可去得大幅度数学能力提升。

其中 Qwen2-72B-Instruct + Step-DPO 取得了 70.8%94.0% 准确率在 MATH 和 GSM8K 数据集上。

在难度较高的包含数学竞赛题 Odyssey-MATH 榜单上也有显著提升。

突出了 Step-DPO 强大泛化能力,模型更加鲁棒,减少幻觉的产生。

如下三个例子:

1. 假设h(x)=f-1(x),如果h(2)=10,h(10)=1,h(1)=2,求f(f(10))

2. t的平方根大于2且小于3.5,满足这一条件的整数t有多少个?

下面比较难的数学竞赛题也能做对

3. 在所有非增函数f:{1,2,…,10}→{1,2,…,10}中,有些函数有固定点,另一些没有,这两种函数的数量相差多少?


参考:

https://github.com/dvlab-research/Step-DPO

贾佳亚团队新作:10k数据让大模型数学能力超GPT-4

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool

已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 目录 已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 【常见模块错误】 原因分析 解决方案 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&am…

OCC 创建方管(拉伸操作)

目录 一、OCC 拉伸操作 二、例子 1、使BRepBuilderAPI_MakeFace 2、使用BRepPrimAPI_MakeRevol 3、垂直路径扫掠 一、OCC 拉伸操作 BRepPrimAPI_MakeSweep Class Reference - Open CASCADE Technology Documentation OCC提供几种图形的构建是由基本图形的旋转,…

使用Python快速比较和替换键值对

问题背景 您需要在多个文件中替换所有特定字符串的实例。例如,您有一个包含 60728 个键值对的映射词典,需要处理多达 50 个文件,每个文件大约有 250000 行,并且需要在每行中替换多个键。 解决方案 方法一:使用正则表…

【区块链 + 智慧政务】山东荣成:区块链政务诚信管理系统 | FISCO BCOS应用案例

2018 年 9 月,荣成市政府与山东观海数据技术有限公司合作,基于 FISCO BCOS 区块链技术推动智慧城市建设, 其中,信用管理是智慧城市核心之一。 荣成市区块链政务诚信管理系统,建设信用信息征集、评价、披露和应用于一体…

CloudCampus的三种部署模式

CloudCampus的三种部署模式 本地部署 客户购买控制器 自己运营 软件永久license sns ,将软件补丁、软件升级(含升级版本的新特性)、远程支持等打包在一起组成SnS年费 msp自建云部署 msp 购买控制器 msp运营 …

美业SaaS门店收银系统怎么管理订单?博弈美业系统App实操|美业系统Java源码

- 打开博弈美业 - 首页点击订单管理 - 选择想查询的相应订单即可 美业门店管理系统Java源码、美业店务系统演示视频请私信

HTTP协议详解:从零开始的Web通信之旅

文章目录 一、引言:Web通信的基石 - HTTP协议二、HTTP请求方法2.1 OPTIONS2.2 HEAD2.3 GET2.4 POST2.5 PUT2.6 DELETE2.7 TRACE2.8 CONNECT2.9 注意 三、HTTP工作原理四、HTTP 请求/响应流程4.1、客户端连接到web服务器4.2、发送HTTP请求4.3、服务器接受请求并返回H…

【C++】学习笔记——红黑树

文章目录 十七、红黑树1.红黑树的概念红黑树的性质 2.红黑树节点的定义3.红黑树的插入4.红黑树的验证5.完整代码结果演示6.红黑树与AVL树的比较 未完待续 十七、红黑树 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的…

XXL-JOB 定时任务在AI大模型中的应用

目录 1. 应用场景 2. 部署 XXL-JOB 3. SpringBoot 集成 XXL-JOB 定时任务代码示例 3.1 添加依赖 3.2 添加配置 3.3 添加执行器到Ioc容器 3.4 添加定时任务 3.5 控制台新增执行器 3.6 控制台添加任务 3.7 控制台开启任务 1. 应用场景 AI 大模型的调用往往是一个高资源…

在 Linux 系统上安装 GCC 编译器(不同发行版)

GCC(GNU Compiler Collection)是一个功能强大的开源编译器,支持多种编程语言,如 C、C、Fortran 等。在这篇博客中,我们将介绍如何在不同的 Linux 发行版上安装 GCC 编译器。 一、在 Ubuntu 上安装 GCC 1. 更新软件包…

numpy(史上最全)

目录 numpy简介 性能对比 ndarray属性 numpy中的数组: 几个创建的函数: 1) np.ones(shape, dtypeNone, orderC) shape: 形状,使用元组表示 2) np.zeros(shape, dtypefloat, orderC) 3) np.full(shape, fill_value, dtypeNone, orderC)…

阿里国际站运营工具 :一键提升你的全球竞争力!

在当今全球化的商业环境中,阿里巴巴国际站作为全球知名的B2B电子商务平台,为无数企业提供了一个展示产品、拓展国际市场的重要渠道。随着越来越多的企业加入到这个平台,如何在激烈的竞争中脱颖而出,成为了每个外贸人员必须面对的挑…

【BUG】已解决:ModuleNotFoundError: No module named ‘requests‘

ModuleNotFoundError: No module named ‘requests‘ 目录 ModuleNotFoundError: No module named ‘requests‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身&a…

java-selenium 截取界面验证码图片并对图片文本进行识别

参考链接 1、需要下载Tesseract工具并配置环境变量&#xff0c;步骤如下 Tesseract-OCR 下载安装和使用_tesseract-ocr下载-CSDN博客 2、需要在IDEA中导入tess4j 包&#xff1b;在pom.xml文件中输入如下内容 <!--导入Tesseract 用于识别验证码--><dependency>&l…

SpringSecurity通用权限管理系统

1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分&#xff0c;而权限管理的核心流程是相似的&#xff0c;如果每个后台单独开发一套权限管理系统&#xff0c;就是重复造轮子&#xff0c;是人力的极大浪费&#xff0c;本项目就是针对这个问题&#xff0c;提供了一套通…

堆的相关特点

一.建堆的两种方法 给定一个数组&#xff0c;其中数组里面的元素个数是n个如何能够把这个数组建立成为一个堆&#xff0c;今天探讨两种方法&#xff0c;分别是向上调整法和向下调整法&#xff0c;分别探讨他们的时间复杂度 向上调整法&#xff08;以小堆为例&#xff09; 回…

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述&#xff1a; 找不到WindowsSDK版本&#xff0c;请安装所需版本的Windows SDK&#xff0c;或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先&#xff0c;如果你尝试了以下两种方法&#xff1a; &#xff08;1&#xff09;重新…

深入理解Java 8的流式API:简化代码,提升效率

文章目录 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率一、流 Stream二、Int | Long | Double Stream三、收集器 Collectors 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率 Java 8引入了Stream API&#xff0c;它提供了一种新的抽象&…

String 和StringBuilder字符串操作快慢的举例比较

System.currentTimeMillis(); //当前时间与1970年1月1日午夜UTC之间的毫秒差。public class HelloWorld {public static void main(String[] args) {String s1 "";StringBuilder s2 new StringBuilder("");long time System.currentTimeMillis();long s…