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

【LLM】Openai-o1及o1类复现方法

note

  • 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。

文章目录

  • note
  • 一、Imitate, Explore, and Self-Improve: A Reproduction Report on Slow-thinking Reasoning Systems
  • 二、QwQ-32B-Preview模型
  • 三、综述:Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective
    • 1. 策略初始化
    • 2. 奖励设计
    • 3. 搜索
    • 4. 学习
  • 四、o1类相关项目
  • 相关数据和模型资源
  • Reference

一、Imitate, Explore, and Self-Improve: A Reproduction Report on Slow-thinking Reasoning Systems

开源了在技术报告Imitate, Explore, and Self-Improve: A Reproduction Report on Slow-thinking Reasoning Systems中使用的训练数据和模型。

  • 训练数据包括3.9K数学领域和1K混合领域(代码、科学和自然语言谜题)的长程思维链。其中3.9K数学领域数据有2.3K来自DeepSeek-R1,1.6K来自于QwQ(经过我们的模型改写成与R1同样的格式,详情参考论文);1K混合领域数据均来自于R1。
  • 模型在选取的基准测试集达到了与o1-preview整体接近的效果。

通过使用模仿,探索,再自我改进的方式,我们发现:

  • 通过使用少量高质量的示范数据进行训练,可以有效引导长时间思考的能力。一旦建立,这种能力似乎能够自然地跨领域泛化。
  • 数学领域的示范数据特别适合提升大语言模型的长时间思考能力,而包含较长思考过程的数据在提升模型解决复杂问题的能力方面显得尤为有效。
  • 与大语言模型在快速思考模式下生成的正式回应不同,思考过程通常以灵活、非正式的方式表达,旨在引导模型走向正确的解决路径。
  • 通过探索和自我改进,可以有效增强慢思考能力,而离线学习方法的改进似乎主要发生在初始迭代中,尤其是在处理复杂任务时。
MATH-OAIAIME2024GPQA
o1-preview85.544.672.3
SKILL-2 (3.9K imitate)90.246.755.1
SKILL-2 (1.1K imitate + 1.8K explore)89.84056.1

二、QwQ-32B-Preview模型

试用链接:https://huggingface.co/spaces/Qwen/QwQ-32B-preview
模型链接:https://huggingface.co/Qwen/QwQ-32B-Preview
官方博客:https://qwenlm.github.io/zh/blog/qwq-32b-preview/

在这里插入图片描述

GPQA: 测试模型在常识问答和通用知识理解上的能力。
AIME: 检验模型对高难度数学竞赛题目的解题能力。
MATH-500: 测评模型在广泛数学领域中解决复杂问题的表现。
LiveCodeBench: 测试模型生成、调试和实现代码的编程能力。

可以看到,QwQ-32B-preview综合表现优异,并且各项能力比较均衡,没有“偏科”情况。在MATH-500测评中甚至超过了OpenAI的2个o1模型。作为一个推理模型,QwQ-32B-preview的综合表现已全面超越常规模型,如GPT-4o和Claude 3.5 Sonnet。

三、综述:Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective

《Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective》(https://arxiv.org/abs/2412.14135)
在这里插入图片描述
一个是采用强化学习这条路,所包括的四个关键组件,策略初始化、奖励设计、搜索和学习。

1. 策略初始化

一个是策略初始化,策略初始化使模型具备基本推理行为,能够有效探索复杂问题的解空间。预训练和指令微调是策略初始化的两个主要阶段。预训练通过大规模文本语料库学习基本的语言理解和推理能力;指令微调则将预训练的语言模型转化为面向任务的代理。
在这里插入图片描述

2. 奖励设计

一个是奖励设计,奖励设计为搜索和学习提供指导信号。过程奖励模型(PRM)比结果奖励模型(ORM)更适合复杂的推理任务,因为它不仅奖励最终结果,还奖励中间步骤。也可以将稀疏的结果奖励转化为密集的过程奖励。
在这里插入图片描述

3. 搜索

一个是搜索,搜索在训练和测试阶段都起着重要作用。训练时搜索生成高质量的训练数据,测试时搜索通过迭代改进模型的策略。树搜索算法如蒙特卡罗树搜索(MCTS)和束搜索(Beam Search)在生成高质量解决方案方面表现出色。
在这里插入图片描述

4. 学习

一个是学习,学习利用搜索生成的数据进行策略改进。策略梯度方法和行为克隆是两种主要的学习方法。策略梯度方法如近端策略优化(PPO)和直接策略优化(DPO)通过梯度上升更新策略,行为克隆则通过监督学习逼近专家策略。
在这里插入图片描述

四、o1类相关项目

如k0-math、skywork-o1、Deepseek-R1、QwQ和InternThinker,但这些模型尚未开源
在这里插入图片描述

  • g1可能是最早尝试重新实现o1的项目,采用的方法是提示工程。提示大型语言模型自我反思并提出多种解决方案来克隆o1的行为。
  • Thinking Claude的工作方式与g1类似,它通过更复杂和细粒度的动作提示大型语言模型,如问题分析和进度跟踪。g1和思考克洛德都能重塑大型语言模型的行为,使其类似于o1,但尚未在推理基准测试中验证的提示。
  • Open-o1提供了一个安全函数训练(SFT)数据集,其中每个回应都包含长长的上下文。但目前尚不清楚这些数据来自何处,可能来自人类专家或一个强大的大型语言模型。开放-o1发现,在的数据集上训练 llama-3-8b 和 qwen-7b 不仅能够塑造模型回应的风格以模仿o1,还能提高模型在推理基准测试上的表现。
  • o1 Journey在第一部分通过束搜索生成的树状数据被遍历,特定节点由GPT-4进行精炼,然后用于监督式微调。论文中呈现的例子突出了模型的自我反思能力,这来自于GPT-4的精炼。第1部分采用的方法可以描述为专家迭代,其中SFT应用于通过搜索生成的数据。第1部分还将o1-mini注释的PRM与数学牧羊人进行了比较。在一篇2024年的研究中,发现o1-mini的性能优于Math-Shepherd。在第二部分引入了一种截然不同的方法。第一部分侧重于强化学习,而第二部分则尝试蒸馏o1-mini。尽管o1-mini隐藏了思维链(CoT)并且只输出CoT的摘要,第二部分则尝试通过提示o1-mini来增强摘要,从而恢复隐藏的CoT。通过蒸馏,发现在AIME上Qwen-72B的性能优于o1-preview。然而,这并不意味着蒸馏使得学生模型能够超越教师模型,因为o1-mini在AIME上也超越了o1-preview。
  • Open-Reasoner的框架类似于AlphaGo,利用强化学习来提升模型性能。在测试阶段,采用蒙特卡洛树搜索(MCTS)来确定最优解。这个搜索算法仅在测试期间应用,而训练数据则是通过当前策略进行采样得到的。此外,采用了与Math-Shepherd类似的方法来训练奖励模型。
  • Slow Thinking with LLMs与o1 Journey类似,第一部分与Open-Reasoner类似,结合了强化学习和测试时搜索。但与开放式推理器不同的是,它在训练期间采用了DPO算法而不是PPO算法。在测试阶段,它还采用MCTS算法进行搜索。第2部分从QwQ和Deepseek-R1蒸馏出知识,并尝试了两种强化学习方法:DPO和SFT,使用来自拒绝采样的数据进行训练。发现,通过从QwQ和Deepseek-R1中蒸馏成千上万个例子,可以在具有挑战性的推理任务上显著提高性能,而基于蒸馏的强化学习可以带来进一步的改进。Marco-o1整合了Open-o1的数据和模型自身生成的数据,通过MCTS算法进行SFT训练。
  • Marco-o1展示了在每一步MCTS过程后提示模型进行自我反思,增强了搜索的有效性。
  • o1-coder尝试在代码生成上重新实现o1。训练一个生成器来生成测试用例以提供结果奖励。有了结果奖励,使用MCTS算法生成代码解决方案,然后用于通过SFT改进策略模型。按照Wang等人(2024c)的方法训练了一个PRM,该方法随着策略的改进而更新。

相关数据和模型资源

STILL-1: https://arxiv.org/abs/2411.11694
STILL-2: https://arxiv.org/abs/2412.09413
Github仓库(内含数据模型等相关资源): https://github.com/RUCAIBox/Slow_Thinking_with_LLMs

Reference

[1] OpenAI o1复现——清华大学提出 ReST-MCTS*
[2] OpenAI o1复现(数据蒸馏)的一点点心得
[3] 类O1复现项目数据和模型开源啦
[4] 两个值得一读的技术总结:OpenAI o1模型复现复现思想及多模态大模型用于数学推理
[5] 《A Survey of Mathematical Reasoning in the Era of Multimodal Large Language Model: Benchmark, Method & Challenges》多模态LLM在数学推理上应用:https://arxiv.org/abs/2412.11936

相关文章:

【LLM】Openai-o1及o1类复现方法

note 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...

jlatexmath-android如何实现自定义渲染字符

使用jlatexmath-android的过程,如果出现个别字符渲染不了,会导致无法显示 常用的做法是新增自定义字体切换系统默认字体渲染,下面我们介绍第2种方法。 修改流程: 1、到jlatexmath-android的官网下载源码到本地,导入…...

dockerhub上一些镜像

K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…...

Python 爬虫学习指南与资料分享

Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在数字化浪潮中,Python 爬虫作为强大的数据获取工具,为众多领域提供关键支持。想要系统掌握这门技术,以下的学习指南与资料分享将为你照亮前行道路。 一、学习指南 入门奠基 …...

TypeScript特有运算符和操作符

文章目录 TypeScript 特有运算符1. keyof2. typeof3. in4. extends5. is6. as 和 <Type>7. never8. readonly9. ?10. []11. | 和 &12. !13. ?? 和 ?. 总结 TypeScript 特有运算符 1. keyof 作用&#xff1a;用于获取对象类型的所有键&#xff08;属性名&#x…...

介绍下常用的前端框架及时优缺点

以下是一些常用的前端框架及其优缺点介绍&#xff1a; React • 优点 • 组件化架构&#xff1a;可构建可复用的UI组件&#xff0c;提高开发效率和组件可维护性。 • 虚拟DOM&#xff1a;高效更新页面&#xff0c;减少直接操作DOM的性能开销。 • 灵活性和可扩展性&#xf…...

MATLAB算法实战应用案例精讲-【数模应用】图形变换和复杂图形组合(附python和MATLAB代码实现)

目录 前言 算法原理 变换 1二维变换 1.1缩放 1.2 翻转 1.3剪切 1.4 旋转 2齐次坐标 2.1引入齐次坐标的原因 2.2 二维齐次坐标 2.3二维仿射变换 2.4逆变换 4组合变换 5三维变换(由二维变换推理而来) 5.1三维齐次坐标 5.2 三维仿射变换 5.3 缩放和平移 5.4…...

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…...

doris: Flink导入数据

使用 Flink Doris Connector 可以实时的将 Flink 产生的数据&#xff08;如&#xff1a;Flink 读取 Kafka&#xff0c;MySQL 中的数据&#xff09;导入到 Doris 中。 使用限制​ 需要依赖用户部署的 Flink 集群。 使用 Flink 导入数据​ 使用 Flink 导入数据&#xff0c;详…...

Nginx在Linux中的最小化安装方式

1. 安装依赖 需要安装的东西&#xff1a; wget​&#xff0c;方便我们下载Nginx的包。如果是在Windows下载&#xff0c;然后使用SFTP上传到服务器中&#xff0c;那么可以不安装这个软件包。gcc g​&#xff0c;Nginx是使用C/C开发的服务器&#xff0c;等一下安装会用到其中的…...

CSS布局新视角:BFC(块级格式化上下文)的作用与优势

在CSS布局的世界中&#xff0c;BFC&#xff08;Block Formatting Context&#xff0c;块级格式化上下文&#xff09;是一个既重要又神秘的概念。它不仅是解决复杂布局问题的关键工具&#xff0c;也是提升页面性能和用户体验的重要手段。本文将从新视角出发&#xff0c;深入探讨…...

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…...

02IO篇(D2_深入IO模型)

目录 本章目标 一、用户空间和内核空间 二、PIO与DMA 三、缓存IO和直接IO 1. 缓存IO 2. 直接IO 三、IO访问方式 1. 磁盘IO 2. 网络IO 3. 磁盘IO和网络IO对比 四、Socket网络编程 1. 客户端 2. 服务端 示例一 示例二 示例三 五、同步IO和异步IO 六、阻塞IO和非…...

记录一次微信小程序使用云能力开发的过程

对于开发微信小程序云开发不知从何起的同学们&#xff0c;可以当作一次参考。虽说官方有文档&#xff0c;有模板示例&#xff0c;但是这些都是片段或者完整的结果展示。对于初学或者开发经验较少的同学们&#xff0c;可能不知先从那里入手进行第一步的开发。下面解析下构建微信…...

Learning Prompt

说明&#xff1a;这是我的学习笔记&#xff0c;很多内容转自网络&#xff0c;请查阅文章末尾的参考资料。 目录 基本要求(C.R.E.A.T.E)总结文章(Summarise)改写文章(Rewrite)根据参考资料回答问题(Question & Answer)参考资料 基本要求(C.R.E.A.T.E) Character This is th…...

事务处理系统 (Transaction Processing System, TPS)

事务处理系统 (Transaction Processing System, TPS) 是一种专门用于自动化日常业务事务处理的计算机系统。这类系统通常处理大量的结构化数据,如订单处理、支付结算、库存管理等,以支持企业日常的运营和管理。TPS 的核心任务是确保高效、准确地记录和管理大量重复性的事务,…...

【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】

文章目录 OverviewPCIe 枚举与PCIe PHY固件的区别与联系1. PCIe 枚举2. PCIe PHY固件3. 区别4. 联系 举例说明实例场景 1&#xff1a;服务器启动 PCIe 网卡的过程实例场景 2&#xff1a;PCIe 热插拔设备的调试 Overview 本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与…...

职场的三个阶段及其应对规划:以前端开发工程师为例

作为职场人士&#xff0c;特别是 IT 开发工程师&#xff0c;职业生涯的发展路径往往伴随着不同的挑战与机遇。一般而言&#xff0c;职场生涯可以划分为三个阶段&#xff1a;找工作阶段、有工作阶段以及职业转型阶段。每个阶段都有其特定的特征和应对策略&#xff0c;下面我将从…...

某讯一面,感觉问Redis的难度不是很大

前不久&#xff0c;有位朋友去某讯面试&#xff0c;他说被问到了很多关于 Redis 的问题&#xff0c;比如为什么用 Redis 作为 MySQL 的缓存&#xff1f;Redis 中大量 key 集中过期怎么办&#xff1f;如何保证缓存和数据库数据的一致性&#xff1f;我将它们整理出来&#xff0c;…...

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...