解密prompt系列47. O1 Long Thought的一些特征分析
之前我们花很多章讨论过思维链,包括思维链的
- 组织结构,例如Self-Consistency,TOT,TOMT, GOT,AOT,POT
- 编排方式,例如Plan-and-Slove,Least-to-most, Verify-and-Edit,Iteration-of-Thought
- fewshot选择:AutoCOT,最优化fewshot,fewshot多样性,fewshot复杂化
- Distillation:思考能力蒸馏到小模型
- Bootstrap:让模型自我优化提升思考链路
但O1之后,思维链的一个简单但之前都没进入视野的特征引起了大家的注意,那就是思考的长度对推理效果的影响,更准确来说是通过哪些思考步骤来有效延长思维长度对推理的影响。这一章我们着重讨论思考长度,慢思考的一些特点,下一章再讨论一些实现方案。哈哈注意这里的很多观点都是各方推测,请审慎辨别~
COT长度的影响分析
- The Impact of Reasoning Step Length on Large Language Models
先上一篇分析COT长度的论文打前阵,论文得到了个很有趣的观点:COT长度比质量更重要,思考的对不对没有思考的长不长来的重要,即便思考的不对,也不太影响思考的越长,准确略越高。对思维链的长度要求也和任务有关,任务越复杂需要的思考长度越长。但其实读完论文后我个人理解的其实是,在思考过程中通过加入问题复述、思考回顾、反思、知识回忆、公式化等思考节点可以有效提升推理效果
但思维链长度的实验论证,最难的点其实在于如何改变模型思维长度,又不引入其他Confounder来影响实验归因。我们来看下论文是如何实现的
zero-shot COT — Add steps
纯指令COT引导的实现更简单些,论文单纯把“Let's think step by step”替换成了
"Let's think step by step, you must think more steps"Few-shot COT - Add steps
而Few-shot COT更复杂些,因为如果单纯改变few-shot样本,增加few-shot的思考长度,其实是变相引入了任务相关的补充信息。那就无保证最终模型推理效果的提升是否来自这部分补充信息,因此需要有能改变(变长,变短)思维链长度,但又和任务不直接相关的指令引入。
论文选择从人类思考模式入手,引入了5个和任务无关,只和思考模式相关,通过在思考步骤中引入特定的步骤,改变思考长度的方式,包括
- Think about the world:让模型思考问题中的相关知识
- Read the question again:Rephrase Prompting早就证明可以有效的提升模型推理效果。
- Repeat State:每推理一段之后会进行局部总结,简化上文的推理过程。人类也会不断回顾并自己的推理过程
- Self-Verification: 增加模型对自我答案的反思。人类在给出答案前也会校验自己的推理过程。
- Make Equation:让模型尝试把问题公式化。公式化对于人类可以辅助记忆
这里可能就Think about the world不太好理解,这里我们看下论文的prompt,其实类似于定位问题中的知识(实体),在回答中复述(类比人类一边回答一边在脑海中思考对应信息)。
这里会先使用zero-shot COT,让模型基于以上5种COT增长指令生成新的Demo,再使用增长之后的Demo作为Few-shot样本。
- Few Shot COT - Compression
前面两个都是COT增加推理步骤的方案,这里论文也对比了压缩,同样为剔除任何和任务有关的信息变化,这里论文使用指令让大模型,对few shot Demo进行句子和句子的压缩合并。指令如下
Please compress the following two sentences without losing any information, and make them as concise as possible
实验结果有2个和长度相关的重要结论
- 通过指令、few-shot增加推理步骤会显著带来效果提升,以下论文分别对比了和Manual-COT,AUTOCOT的效果增益。同时在复杂任务上效果会随步数增长而持续提升。
- 单纯对few-shot demo进行文字压缩就会影响推理效果
但最后我们回头再看下论文的实现,其实不能直接把效果提升和思考的长度进行等同。比如我在COT里随机加一段“略略略略略略”,那八成是不能提升推理效果的。所以要审慎理解这里的思考长度。个人感觉其实更类似于模仿人类的思考过程,在推理链路中加入有效的思考模块,可以提升推理效果。那咱直接和人类类比的话,除了上面论文提到的思考模块,还有一些常见的模块其实也值得尝试
- 系统推理:把复杂问题进行并行或串行分解
- 类比推理:该问题是否和其他问题相关,是否可以迁移知识
- 溯因推理(假设检验):问题是否包含多个可能的假设,可以逐步排除或验证
- 辩证推理:从问题的多个视角进行思考,通过观点碰撞得到最终正确的结论
- 经验反思:引导模型反思回答该问题是否有其他可以借鉴的经验
- 启发式思考:引导模型使用直觉进行思考,先进行一轮答案的尝试,再进行修正。
- 场景模拟:给出一端推理后,可以针对给出的推理给个例子,如果在例子上跑不通,则需要调整思考方向
- 纠错行为:如果反思发现推理存在错误,如何得到新的修正方向,或者从指出的错误中进行学习
涉及到的模型行为其实包括:分解,类比,假设,辩证,反思,纠错,直觉,模拟,归纳,演绎,评估,总结
O1的思考有哪些特征?
- O1 Replication Journey: A Strategic Progress Report – Part 1
论文1在复现O1之前,先让数学博士们对O1的推理路径进行了结构分析, 示例如下
作者发现,O1的思考过程中存在一些高频出现的关键词,这些关键词指引了模型下一个思考模块,例如“if”,“consider”,“possible”显示模型存在多个思考角度或假设检验路径,再例如“wait”,“Alternatively”显示模型再进行反思,纠错等行为。他们对思考过程中的不同思考模块进行不完全分类后得到了如下的几个特点
- 多步问题分解(Divide and conqure):模型会先定义问题,分解问题,再逐步解决各个问题,整个思考链路呈现结构化
- 关键思考节点:当出现上述的一些关键词后模型会进入一些特定的思考节点。除了上面的假设路径,反思,还有“Let me Compute”会进入公式计算,“Therefore”会进入局部结果总结
- 循环和反思节点(self-refine and consistency):模型会频繁评估,验证中间结果,并通过多次循环尝试校验一致性
- 探索假设:模型会尝试多个假设,并根据不同路径收集的信息,调整思考路径,整个思考过程非常灵活。
- 总结和验证:在得到最终结论前,模型会对结论进行校验。(个人感觉从逻辑上其实这也属于反思节点)
论文1认为O1长思考是通过模拟人类的思考过程,通过过程监督学习,让模型掌握不同的推理模式,和思考过程。
O1的思考包括哪些模式?
- A Comparative Study on Reasoning Patterns of OpenAI's o1 Model
论文2也做了类型的事情,不过更多在把思考模式进行模块化的分类,包含以下几种思考模式
- Systematic Analysis: 一上来o1会先分析问题,剖析输入输出,限制条件,再选择解决方案。其实是repeat the problem的进一步延申,先复述问题,再从系统角度分析问题。
- Method Reuse:对于可以被转化成经典问题的,模型会迅速联想相关的经典问题解法,类似经验类比。
- Divide and Conquer:多步问题分解
- Self-Refinement:和前面提到的反思评估和循环论证类似
- Context Identification:类似前面提到的Think about the world,在知识密集的QA问题上,模型会先回忆问题相关的核心知识
- Emphasizing Constraints:模型会在推理过程中复述重要的条件。
论文在不同数据集上统计分析了不同思考模式的出现频率,发现
- CommonSense问题:最常见问题分解、反思、知识回顾、和条件复述
- Code问题(USACO):更常见系统分析、经验类比、问题分解、反思
- Math问题(AIME):更常见系统分析、经验类比、问题分解
更长更更长?
文末聊个有意思的话题,就是O3亮相后,大家都被推理成本震惊到,感觉整个慢思考推理链路在变得越来越长,那后面还会继续变长么?这里聊聊我的感受(纯猜测向)~
之前从O1开始的边长,更像是在摸索让模型如何从结果学习到过程学习的一种中间产物,让模型在训练过程中降低各种shortcut,跳步,一步步扎实的学习如何推演正确结果,也就是把整个思维链显式化。而大家对思维链的剖析也更多是从常规的逻辑推理,辩证思考模式的角度去把O1的思维链按照常规人类的思考方式,进行分隔,分类,再串联起来。大家就会说那一般人解决复杂问题时本来就要经过很长的思考过程,那模型自然也是一样的呀。
但其实个人感觉,模型擅长模仿,但也擅长压缩,当我们近乎完全激发出模型显式长思维链推理效果后,下一步就该向回看,让模型学会跳步,在思维链路中寻找所谓shortest path了,那个时候才是模型推理该变短的时候。
想看更全的大模型论文·微调预训练数据·开源框架·AIGC应用 >> DecryPrompt
解密prompt系列47. O1 Long Thought的一些特征分析的更多相关文章
- 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~
上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...
- 解密prompt系列5. APE+SELF=自动化指令集构建代码实现
上一章我们介绍了不同的指令微调方案, 这一章我们介绍如何降低指令数据集的人工标注成本!这样每个人都可以构建自己的专属指令集, 哈哈当然我也在造数据集进行时~ 介绍两种方案SELF Instruct和A ...
- 解密Prompt系列2. 冻结Prompt微调LM: T5 & PET & LM-BFF
这一章我们介绍固定prompt微调LM的相关模型,他们的特点都是针对不同的下游任务设计不同的prompt模板,在微调过程中固定模板对预训练模型进行微调.以下按时间顺序介绍,支持任意NLP任务的T5,针 ...
- 解密Prompt系列3. 冻结LM微调Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning
这一章我们介绍在下游任务微调中固定LM参数,只微调Prompt的相关模型.这类模型的优势很直观就是微调的参数量小,能大幅降低LLM的微调参数量,是轻量级的微调替代品.和前两章微调LM和全部冻结的pro ...
- 解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct
这一章我们聊聊指令微调,指令微调和前3章介绍的prompt有什么关系呢?哈哈只要你细品,你就会发现大家对prompt和instruction的定义存在些出入,部分认为instruction是promp ...
- .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- Java 加解密技术系列文章
Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...
- 定时任务管理中心(dubbo+spring)-我们到底能走多远系列47
我们到底能走多远系列47 扯淡: 又是一年新年时,不知道上一年你付出了多少,收获了多少呢?也许你正想着老板会发多少奖金,也许你正想着明年去哪家公司投靠. 这个时间点好好整理一下,思考总结一下,的确是个 ...
- 11.Java 加解密技术系列之 总结
Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...
- 10.Java 加解密技术系列之 DH
Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...
随机推荐
- JAVA 两个时间 相差的 小时,天数,分钟
long nd = 1000 * 24 * 60 * 60; //每天毫秒数 long nh = 1000 * 60 * 60; //每小时毫秒数 long nm = 1000 * 60; //每分钟 ...
- 鸿蒙开发Hvigor插件动态生成代码
Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享.Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件.基于typescript项目开发.下面 ...
- .NET9 - 新功能体验(二)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化. 01.新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref ...
- Educational Codeforces Round 155 (Rated for Div
B. Chips on the Board 题解:贪心 显然我们可以把题意转化为:对于任意一个\((i,j)\),我们可以花费\(a_{i,j}\)的代价占据第\(i\)行和第\(j\)列,求占据所有 ...
- uni-app 主题切换
1.前言 功能介绍:提供个性化的展示方案给用户,用户可以选择喜欢的主题色,让App使用该主题色进行渲染 功能实现:主要分为2个模块,一,选择主题色并存储,二,读取选择的主题色,使用该颜色对部分内容进行 ...
- 修改data数据后页面未更新渲染
只需添加 this.$forceUpdate() 在修改数据后执行即可 this.$forceUpdate()
- Vue实现记住账号密码功能
实现思路: 用户登录时若勾选"记住我"功能选项,则将登录名和密码(加密后)存入本地缓存,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中. 说到存入本地缓 ...
- 《JavaScript 模式》读书笔记(7)— 设计模式2
这一篇我们主要来学习装饰者模式.策略模式以及外观模式.其中装饰者模式稍微复杂一点,大家认真阅读,要自己动手去实现一下哦. 四.装饰者模式 在装饰者模式中,可以在运行时动态添加附加功能到对象中.当处理静 ...
- 编写bash脚本快速kill或启动tomcat
假设tomcat安装路径为 /home/tomcat,示例如下: 1. kill tomcat进程 vim kill-tomcat-force.sh set fileformat=unix path ...
- 开启生态新姿势 | 使用 WordPress 远程附件存储到 COS
在看到这篇文章前,你大概已经听说过 WordPress 了,它是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站,也可以把 WordPres ...