孔某人的低维认知 01月06日
对o1 pro思考过程的技术分析(1)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了o1 pro模型在推理阶段的运作机制,着重分析了其与o1模型在输出方式上的显著差异。o1 pro并非采用流式输出,而是在思考后一次性放出答案,这背后可能蕴含着更复杂的处理逻辑。文章推测o1 pro可能引入了反思阶段,对生成答案进行检查和优化,并提出了基于step的单路推理和消息结构的agent模式的猜想。同时,文章还分析了o1 pro思考阶段的分段进度展示,并探讨了多路推理和canvas等其他可能性的方案,为我们理解大型语言模型的推理过程提供了新的视角。

⏱️o1 pro最显著的特点是较长的思考时间,且最终答案并非流式输出,而是在思考完成后一次性给出,这与o1的流式输出方式形成鲜明对比。

🤔文章推测o1 pro在生成答案后,会增加一个反思阶段,对答案进行语义检查,如有必要则会继续思考并改进,直至答案符合要求,这是一种基于step的单路推理模式。

💬文章分析了o1 pro的思考阶段,认为其内部可能存在更小的step划分,这些step由模型自行生成,并可能与message的结构化设计相结合,使得推理过程更精细,更像是一种基于message的agent。

📝文章还探讨了其他可能性,如类似canvas的机制,在思考过程中维护一个候选答案,并不断扩展和调整,但作者认为这种方案较为复杂,并非首选。

🧐作者最终总结,o1 pro的非流式输出是其核心特征,这可能意味着其推理过程更为复杂,并为未来的模型分析提供了新的方向。

原创 孔某人 2025-01-05 20:40 北京

前言

本文关注的是o1 pro在推理阶段的过程探索,而并非如何训练出o1 pro模型。

本质上除了pretraining之外,所有的训练过程都是为了模型使用阶段的方式而设计和优化的。使用方式才是分析的主要目标,而post-training阶段的设计是为了优化使用阶段的表现而设计的。

关于降智:

ChatGPT Pro账号仍然是可以被降智的,在测试o1 pro之前,请确认自己的账号没有被降智。没有被降智的o1 pro具有以下特征:

1、o1 Pro的外部表现

o1 pro的最主要特征是它较长的思考时间,明显比o1要长。

而o1 pro的一个容易被忽视的重要特征是:o1 pro并非流式地生成最终回答,而是在某个时间突然放出整个回答

如果进一步观察其思考过程,能发现在最后一个思考阶段结束后,会有一个较长时间的等待,然后就突然放出了最终回答。最终回答应该就是在这个阶段中生成的。

实际上可以根据这个最后阶段的等待时间和最终输出答案的token数量来进行线性分析。我写本文之前也想具体做一下这件事情,但由于没有好的SSE请求dump工具,尝试自己做一个Chrome插件,在3h内也没有搞定,所以还是放弃了。虽然在Chrome DevTools中可以看到EventStream的时间信息,但它没有提供导出功能。有兴趣的读者可以自行尝试。对于前端技术较为熟悉的读者可以考虑做一个记录SSE请求每个event到达时间的浏览器插件,这对于未来对于ChatGPT模型的行为分析会很有用。特别是在API放出之前的这段时间里。

等到o1 pro API放出的时候,会更容易的来做这方面的分析,不过目前还没有。

2、实现方式的分析

2.1、目的分析

o1 pro的表现中,“不是流式地生成回答,而是先在思考阶段生成回答,然后在一次性放出”,这点是值得分析的。

首先,相对于o1的流式给出回答,这种方式的用户体验是更差的,因为等待的时间明显加长了,所以这肯定是为了实现某种目的。

这是为了更好的对输出结果进行风控审核么?虽然确实可以实现更好的审核,但目前ChatGPT是采用另一种更平衡的方式进行的:流式输出结果,同时并行地对流式结果进行审核,当发现问题时终止回答。在有这种方式作为基础的情况下,o1 pro没有特别的理由非要采用这种方式做更好的审核。

虽然不是风控审核,但我们有理由相信在产生了回答之后,它又进行了某个过程,然后才放出最终结果。

一种最简单的可能性是:增加了一个反思阶段,让模型重新对回答进行分析,确认是否有错误或可优化的地方。如果没有问题则放行。如果有问题呢?如果不做任何处理就失去了执行这一步的意义。一个最简单的处理方式是继续思考,然后更新回答,直到回答符合要求。

2.2、思考过程的终结条件

如果是上一节猜测的这种情况,那么o1 pro就与o1和其他已有的推理模型有了一些不同:


虽然我目前还没有直接看到它可能是在继续改进的case,但这种情况大概率是存在的,需要我们后续继续观察更多样本。

在这种情况下,整个过程是类似下面的:

[思考1]->[回答1]->[检查1]->[思考2]->[回答2]->[检查2]->...

虽然说它仍然是一个单路推理,但这跟o1这种我们认为的在token级的单路推理还是有区别的:它是一种基于Step的单路推理,还附带了语义判定是否结束的功能。虽然这个粒度叫做Thought不太合适,但它更类似一种巨大Thought的单路的ToT。

2.3、结构化的Step?

我们有理由相信,直到o1正式版,LLM推理阶段的思考中大概并没有结构化的Step或Thought。因为它更难做,不能scale到各种场景,而且也是不必要的。o1的思考阶段和回答阶段可以仅靠一些类似message边界token的特殊token来进行区分,虽然它已经具有了某种粗略的结构化,但仍然很弱,只有两个阶段,也没有复杂转换。我仍然把它当作没有结构化的方案,技术分析与token级的方案没有差别。但如果是2.2节提到的方式,仅仅看成是非结构化的token级方案就有点不太合适了。

这个方式在推理阶段具体是怎么做的呢?训练模型在生成回答之后自动触发一个检查阶段么?实际上,想要在各种场景下都稳定地执行原有检查prompt并不容易。

实际上我们不必把视角锁定在纯模型token输出的层面,实际上可以以一个逻辑上workflow的方式来实现这个过程。内部模型还是先生成思考阶段和回答阶段,然后引入另一个LLM请求,用另外的prompt检查这个回答是否足够好,如果不好,则再继续生成第二步的思考过程和回答,直到满足要求。

当然这只是逻辑上这样,即使上并非要弄一个workflow或者2-Agent来进行,可以是在整个message流中增加检查阶段message来进行,例如下面的模式:

<user message><thinking message><answer message><review prompt>  # decode过程在answer message结束后自动插入<review message># 如果需要继续改进,则生成第二轮thinking message<thinking message> ...

这种方式会让review阶段可以访问thinking阶段的内容。如果不想要这样,也可以像是workflow那样重新组织一个message history进行检查。

到这个状态,虽然说它仍然很像是一个单路的推理token流输出,但在逻辑上它实际上已经算是基于message的agent了。

另外,这种message的方式可以直接兼容o1模式。考虑到o1和o1 pro大概率是同一个模型的不同使用方式,这种通用性很重要。

2.4、思考阶段的划分

o1和o1 pro的另一个可见特征是,会产生一个语义的分段进度展示。

我之前在 o1模型的技术分析(2):内部实现的更多信息 中就对这个“思考进度”的实现方式有一些猜测,目前我有点倾向于它可能内部是产生了某种比message粒度更小的step,在thinking阶段可能会有多个step,这个step是完全靠模型自行划分的。(当然这由模型训练阶段的数据构造方式决定)

一方面这种step的方式其实与上面message的结构化很接近,如果采用了这种message的设计,那么再细化到step很容易。另一方面,在我的观察中,即使是对于同样的任务,不同输入的情况下,这个思考过程概要上的step的划分也经常不同。有时可能分为较多step,有时可能一个step都没有,step的多少也跟o1(不是o1 pro)的思考时间长短有关。这让我感觉更像是由模型自己生成的,而不是由外部旁路的思考概要模型进行的语义划分的。

我相信这种显式的step能够帮助模型做更长的思考。

我目前对这个的倾向也不是特别大,大致是60%左右的可能性。

2.5、关于多路推理

我在 理解 o3 及其技术分析  [2024.12] 中提到,我认为o3大概率是某种多路推理的方案。考虑到o3的可能性,和上述的分析,我认为o1 pro应该不是多路推理。

2.6、其他可能性,canvas?

除了上述方案外,是否还有其他可能性?确实仍然不能否定其他的可能性,其中一种就是类似artifacts/canvas的方式,即:在思考过程中维护一个候选的回答文稿,并在思考的过程中可以对其进行不断的扩展和调整。在直观上这就会很类似于Claude artifacts和ChatGPT canvas的方式。

这种方式也可以看成与上述message的方式有些类似,Claude artifacts也是这么实现的,即每次都是重新生成一个新的完整回答。这时候answer message本身就相当于是结构化的,其他部分结构化多点或少点都可以。

但其实也可以像是canvas或Cursor UI中的那样,先生成修订方案,然后可以由独立的过程合并到候选答案中。这时候LLM更像是通过修订tool来操作一个文档。

我目前并不倾向于这种可能性,因为它比较复杂,更难实现的完善,也没有特别的必要性。

A、结语

本文整体都是基于“为什么o1 pro不是流式输出答案”这点来做的技术分析。未来说不定可能还会有其他发现和思考,所以本文才标记为(1)。我目前已经没有其他猜测了。

o1 pro的这个表现其实刚发布时就是如此了,而我拖到了现在才注意到。我搜了下目前也没有其他人在对o1 pro进行这样的技术分析。

到目前为止,我对o1、o1 pro、o3的实现方式都已经有了一个大概的猜测,终于填完了这个系列的坑。

我不知道何时能验证这些想法,也许我永远都不会知道OpenAI到底是怎么实现的。

B、相关阅读

给读者的o1 pro试用机会


交流与合作

如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请私信联系,获取联系方式请点击 -> 联系方式

本文于2025.1.5首发于微信公众号和知乎,知乎链接:

https://zhuanlan.zhihu.com/p/16521908592

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

o1 pro 推理过程 单路推理 模型分析 AI机制
相关文章