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

论文题目: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.rhkb.cn/news/381582.html

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

相关文章

Vulnhub靶场DC-7练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后,⽤户进程就进⼊到了内核态,通过执⾏⼀系列的内核协议层函数,然后到 socket 对象的接收队列中查看是否有数据,没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令

配置FTP服务 一.前言 博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且…

巧用Vue3 composition api的计算属性实现扁平化tree连线

本示例节选自vue3最新开源组件实战教程大纲(持续更新中)的tree组件开发部分。将进一步把基于Vue3 composition api的computed计算属性特性应用到组件开发实战中,继续以最佳实践的方式呈现给大家。 下面我们要实现的是扁平化的dom结构所呈现的…

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

最新缺失msvcp140.dll的多种解决方法,有效解决电脑dll问题

msvcp140.dll 是一个关键的动态链接库(DLL)文件,属于 Microsoft Visual C 2015 Redistributable 的一部分。它为使用 Microsoft Visual C 编译的应用程序提供了运行时支持,确保这些应用程序能够正常运行。以下是对 msvcp140.dll 的…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错,调用的目标发生了异常,Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象,鼠标没有移动痕迹&#xff0c…

Docker无法拉取镜像!如何解决?

问题现象 继去年Docker Hub被xxx后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又…

Flink源码学习资料

Flink系列文档脑图 由于源码分析系列文档较多,本人绘制了Flink文档脑图。和下面的文档目录对应。各位读者可以选择自己感兴趣的模块阅读并参与讨论。 此脑图不定期更新中…… 文章目录 以下是本人Flink 源码分析系列文档目录,欢迎大家查阅和参与讨论。…

爬取百度图片,想爬谁就爬谁

前言 既然是做爬虫,那么肯定就会有一些小心思,比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站,点击搜索xxx,打开后,滚动滚动条,发现滚动条越来越小,说明图片加载…

springboot 配置 spring data redis

1、在pom.xml引入父依赖spring-boot-starter-parent&#xff0c;其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构&#xff0c;它是由 n(n>0)个有限节点组成的一个具有层次关系的集合&#xff0c;它的外观形似一颗倒挂着的树&#xff0c;根朝上&#xff0c;叶朝下&#xff0c;所以称呼为树。每颗子树的根节点有且只…

泛型新理解

1.创建三个类&#xff0c;并写好对应关系 package com.jmj.gulimall.study;public class People { }package com.jmj.gulimall.study;public class Student extends People{ }package com.jmj.gulimall.study;public class Teacher extends People{ }2.解释一下这三个方法 pub…

浅谈芯片验证中的仿真运行之 timescale (五)提防陷阱

一 仿真单位 timeunit 我们知道,当我们的代码中写清楚延时语句时,若不指定时间单位,则使用此单位; 例如: `timescale 1ns/1ps 则 #15 语句表示delay15ns; 例:如下代码,module a 的timescale是1ns/1ps, module b 是1ps/1ps; module b中的clk,频率是由输入参…

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法

首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api 1 2 3 4 5 6 7 8 9 uni.request({ url: , method: GET, data: {}, header: {}, success: res > {}, fail: () > {}, complete: () > {} }); 可以看到我们每次请求数据的时候都需…

一文掌握Prometheus实现页面登录认证并集成grafana

一、接入方式 以保护Web站点的访问控制&#xff0c;如HTTP 服务器配置中实现安全的加密通信和身份验证&#xff0c;保护 Web 应用程序和用户数据的安全性。 1.1 加密密码 通过httpd-tools工具包来进行Web站点加密 yum install -y httpd-tools方式一&#xff1a;通过htpasswd生…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断 目录 分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断分类效果基本介绍程序设计参考资料 分类效果 基本介绍 Matlab实现BES-LSSVM秃鹰算法优化最…

自动化测试中如何应对网页弹窗的挑战!

在自动化测试中&#xff0c;网页弹窗的出现常常成为测试流程中的一个难点。无论是警告框、确认框、提示框&#xff0c;还是更复杂的模态对话框&#xff0c;都可能中断测试脚本的正常执行&#xff0c;导致测试结果的不确定性。本文将探讨几种有效的方法来应对网页弹窗的挑战&…

Mysql sql技巧与优化

1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话&#xff0c;使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…