之前我们花很多章讨论过思维链,包括思维链的

  • 组织结构,例如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来影响实验归因。我们来看下论文是如何实现的

  1. zero-shot COT — Add steps

    纯指令COT引导的实现更简单些,论文单纯把“Let's think step by step”替换成了

    "Let's think step by step, you must think more steps"

  2. 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样本。

  1. 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的一些特征分析的更多相关文章

  1. 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~

    上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...

  2. 解密prompt系列5. APE+SELF=自动化指令集构建代码实现

    上一章我们介绍了不同的指令微调方案, 这一章我们介绍如何降低指令数据集的人工标注成本!这样每个人都可以构建自己的专属指令集, 哈哈当然我也在造数据集进行时~ 介绍两种方案SELF Instruct和A ...

  3. 解密Prompt系列2. 冻结Prompt微调LM: T5 & PET & LM-BFF

    这一章我们介绍固定prompt微调LM的相关模型,他们的特点都是针对不同的下游任务设计不同的prompt模板,在微调过程中固定模板对预训练模型进行微调.以下按时间顺序介绍,支持任意NLP任务的T5,针 ...

  4. 解密Prompt系列3. 冻结LM微调Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning

    这一章我们介绍在下游任务微调中固定LM参数,只微调Prompt的相关模型.这类模型的优势很直观就是微调的参数量小,能大幅降低LLM的微调参数量,是轻量级的微调替代品.和前两章微调LM和全部冻结的pro ...

  5. 解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

    这一章我们聊聊指令微调,指令微调和前3章介绍的prompt有什么关系呢?哈哈只要你细品,你就会发现大家对prompt和instruction的定义存在些出入,部分认为instruction是promp ...

  6. .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...

  7. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

  8. 定时任务管理中心(dubbo+spring)-我们到底能走多远系列47

    我们到底能走多远系列47 扯淡: 又是一年新年时,不知道上一年你付出了多少,收获了多少呢?也许你正想着老板会发多少奖金,也许你正想着明年去哪家公司投靠. 这个时间点好好整理一下,思考总结一下,的确是个 ...

  9. 11.Java 加解密技术系列之 总结

    Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...

  10. 10.Java 加解密技术系列之 DH

    Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...

随机推荐

  1. Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

    title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon ...

  2. typeScript 安装调试 (一)

    一.安装typeScript 首次使用typeScript 可以执行全局安装typeScript 命令 npm i typescript -g 接着输出 tsc -v 查看版本号即可 创建tsconf ...

  3. python 爬虫基本玩法,统计杭电oj题目正确率并排序

    python爬虫主要用两个库:Urllib和BeautifulSoup4.一个用来爬取网页,一个用来解析网页. Urllib是Python内置的HTTP请求库,它包含四个模块: 1.request,最 ...

  4. dotnet学习笔记-专题01-异步与多线程-01

    专题01 异步 多线程 1. Thread类 1.1 使用Thread创建线程 namespace ConsoleApp1; internal class Program { private stat ...

  5. (Redis基础教程之九) 如何在Redis中使用Sorted Sets

    介绍 Redis是一个开源的内存中键值数据存储.在Redis的,排序集合类似于一个数据类型集在这两者都是串的非重复的组.不同之处在于,已排序集中的每个成员都与一个分数相关联,从而可以从最小分数到最大分 ...

  6. (Python基础教程之六)Python中的关键字

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  7. Mysql分页实现及优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  8. 【实战问题】-- 并发的时候分布式锁setnx细节

    前面讲解到实战问题]-- 设计礼品领取的架构设计以及多次领取现象解决?,如果出现网络延迟的情况下,多个请求阻塞,那么恶意攻击就可以全部请求领取接口成功,而针对这种做法,我们使用setnx来解决,确保只 ...

  9. 新型大语言模型的预训练与后训练范式,苹果的AFM基础语言模型

    前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的.公开权重的大型语言模型.最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内 ...

  10. PM-数据治理-数据资产管理

      在组织中,并非所有的数据都构成数据资产,数据资产是能够为组织产生价值的数据,数据资产的形成需要对数据进行主动管理并形成有效控制.   数据资产管理是规划.控制和提供数据及信息资产的一组业务职能,包 ...