模型的「深度思考」是怎么回事?
用打草稿的类比理解 Thinking,分清推理过程与展示摘要,判断什么时候值得使用深度思考。
使用 AI 聊天产品时,你可能见过产品界面里有个叫「深度思考」的按钮,或者是在产品里输入问题后,模型没有马上回答,而是先显示「Thinking」或「正在思考」等提示。
在前面的章节中,我们不是说,模型在根据输入预测下一个 Token 吗?怎么现在又开始「思考」了?
这一讲,我们先用「打草稿」理解它,再看看深度思考与普通回答的区别。
一、先打草稿,再给出答案
假设你要安排一场活动,但有个问题需要你先解决:
活动总预算是 1000 元,场地费 450 元,物料费 230 元,每人的餐费是 25 元。最多能安排多少人?
要是让你心算报出答案,很容易出错(因为很多数字并不能整除)。更稳妥的办法是在草稿纸上分步算:
- 先扣固定开销:1000 − 450 − 230 = 320 元
- 再算能请几人:320 ÷ 25 = 12.8,人不能被劈成 0.8 个,所以最多是 12 人。
- 最后验算一下:450 + 230 + 12 × 25 = 980 元,没超支!
而模型的「深度思考」,和 Thinking 也是类似的过程。
早在 2022 年,在 OpenAI o1、DeepSeek-R1 这些专门的推理模型出来之前(比如 GPT-3.5 / GPT-4 时代),就有研究发现,对当时的一些大语言模型,在提示中加入:
"Let's think step by step"(让我们一步步思考)
模型就能顺着指令把步骤写出来,最后得出的答案准确率也会提高。
二、难道这个深度思考模式,就是加一个 Prompt 那么简单吗?
早期的这个 prompt engineering 研究 虽然提高了一定准确率,但并不能从根本上解决模型推理能力的问题。
它并不能保证模型每次都能选对方法、发现错误,再换一种方法重算。模型可能写出了完整的步骤,却在第一步就算错了;也可能不断重复「让我检查一下」,实际并没有检查出问题。
换句话来说,我们需要让模型额外生成一些中间步骤,然后再让模型利用这些已经生成的内容,继续计算并给出最终答案。它的生成过程并没有变化,还是一个个 token 来,只是让它额外生成更多中间步骤。
既然提示词只能告诉模型,这次应该怎样回答,并不能真正改变模型的运行规则,那么研究人员就想,或许能通过训练的方式,让模型也学会「打草稿」。
三、后训练
前一章我们讲到模型经过两步训练,一个是预训练,一个是后训练。而后训练还没有讲到。
后训练,就是在预训练的基础上,继续通过训练调整模型,让它更适合完成某些任务。你可以将其类比为一个人已经读了很多书,现在开始做有针对性的练习。
并且后训练的主要训练方法,也和人的学习很类似:一种是看案例,另一种是做题。
第一种:先看别人怎样做
一种方式是准备“问题 + 示范回答”,再用这些示范训练模型。这通常叫作监督微调(SFT)。
比如,还是拿前面的预算问题作为例子。这一步训练模型的时候,就是给出预算问题,同时提供一份回答范本:
问题:活动总预算是 1000 元,场地费 450 元,物料费 230 元,每人的餐费是 25 元。最多能安排多少人?
回答:先扣除固定费用,1000 − 450 − 230 = 320 元。再计算人数,320 ÷ 25 = 12.8,人不能被劈成 0.8 个,所以最多是 12 人。最后将 12 代回公式,450 + 230 + 12 × 25 = 980 元,确认没有超预算。
训练时,仍然会让模型预测范本中的下一个 Token,再对照范本调整参数。通过大量示例,让模型更容易采用合适的回答方式。你可以把它理解为老师先示范:“这类题可以这样处理。”
第二种:自己尝试,再根据结果改善
另一种方式,是让模型先尝试完成任务,再根据表现给出评分,利用评分调整参数。
这种方法我们称之为强化学习(Reinforcement Learning,RL)。它与“看范本”的区别在于:模型需要先生成自己的回答,再接受评价。
我们继续用预算题案例来解释一下强化学习(RL)是怎么回事。
四、强化学习(RL)
第一步:先让模型自己尝试
在训练时,可以让模型对同一道题生成多个回答。由于生成过程有随机性,它可能给出不同的结果。
在这个简化的训练例子里,我们先让模型按照“草稿+最终答案”的形式作答:前一部分可以用于计算、检查,后一部分给出答案。这种将推理内容和答案分开的训练结构,在 DeepSeek-R1-Zero 的公开研究中就有使用。
| 尝试 | 中间草稿(示意) | 最终答案 |
|---|---|---|
| A | 剩余 320 元。320 ÷ 25=12.8,四舍五入得到 13。 | 最多 13 人。 |
| B | 安排 1 个人肯定不会超预算,就选 1 人。 | 最多 1 人。 |
| C | 剩余 320 元。320 ÷ 25=12.8,不能超预算,所以取 12。检查:12 人共 980 元;13 人共 1005 元,超支。 | 最多 12 人。 |
| D | 剩余餐费 320 元,够 12 人。 | 最多 12 人。 |
第二步:给出评分
因为这道题有一个能够通过计算检查的答案:最多安排 12 人,所以我们可以设计一个很简单的评分规则:最终正确回答“最多 12 人”,得 1 分;回答其他人数,得 0 分。
| 尝试 | 得分 | 原因 |
|---|---|---|
| A | 0 | 13 人需要 1005 元,超出预算 |
| B | 0 | 1 人虽然没有超预算,但不是最多人数 |
| C | 1 | 最终答案正确 |
| D | 1 | 最终答案正确 |
C 和 D 得分相同。因为我们奖励的是“做对题”,不是“草稿写得长”。即使某次完全不展开草稿就答对了,按照这条规则,也应该得到 1 分(这属于根据结果正确性提供奖励的简化例子。真实训练还可能结合格式等其他奖励,但这些不是本例的重点。各位了解下即可,如果想要深入了解,可以阅读本论文)
另外,也有根据过程评分的,OpenAI 在 2023 年就发表过过程监督研究:通过对中间步骤提供反馈来训练奖励模型,再用它筛选数学题的候选解答。
如果给过程评分,那就是看过程的质量如何,就可以有更细的分数,还是上面的那个例子,C 的分数会更高一些。DeepSeek-R1 当年没用,不是因为中间过程不值得检查,而是 DeepSeek 认为给过程评分,往往更困难、更昂贵。这是它的训练取舍,并不意味着过程评分不可行。
第三步:根据评分调整参数
最后经过多轮学习,模型逐步调整参数。
这里其实有个关键,强化学习的时候,学习的不是 1 个问题,而是大量的问题。所以即使前面第二步使用结果评分,某些题会出现分数相同的情况,但只要题目够多,就会有不同分数的结果。只要在这些题目中,某些拆解、检查、修正的方法,能够帮助模型更稳定地得到正确答案,那么相关的生成方式就可能逐渐得到强化。换句话来说,是让模型逐渐改善解题方式。
五、深度思考与普通回答的区别
深度思考固然不错,但如果是简单的问题,比如「 1 + 1 等于多少?」,是不是有种杀鸡用牛刀的感觉?等待更久(因为要打草稿)的同时,还会消耗更多 Token。是的,还记得在什么是 Token?里我们讲到模型是按照输入输出 Token 计费的吗?开启了深度思考(因为要打草稿),就会消耗更多 Token。
所以大多数产品都会提供一个开关,让用户决定是否开启深度思考。比如 DeepSeek 就会提供一个「深度思考」功能开关。
但也不是所有产品都会提供,比如 ChatGPT 就只会提供一个强度(effort)选项,让用户选择深度思考的强度。比如轻度(Light)、中度(Medium)等。
这里有两点我想展开说下。
另外,effort 调整的是推理投入,通常会影响推理 Token 的用量,但不等于指定固定的思考长度,更不等于要求最终答案写得更长。调整成高(High),就是让模型可以投入更多计算,进行更充分的分析。拿人举例,effort 像允许人更认真地打草稿,而不是要求写 1000 字的草稿。
拿个数学题举个例子。提问 37 × 48 等于多少?如果是 low 可能的回答是:
如果是 high 可能的回答是:
重点不是答案更长—— 两次最终回答都可以只有“1776”,差别在于得出答案之前,是否进行了更多计算。 推理模型可以使用额外的推理 Token 来拆解问题、考虑不同方法,而这些 Token 不等同于最终答案。
一般说来调整成低(Low),就是让模型可以投入较少计算,进行较简单的分析。所消耗的 Token 会少一些,运行的速度也会快一些。反之调整成 High 则会消耗更多 Token,运行速度也会变慢。不过这也不绝对。部分模型(比如 ChatGPT)也会根据任务难度动态调整推理,即使选择较高 effort,简单题也可能只用较少 Token。
六、搞懂这个概念有什么用?
当你知道什么是深度思考以及它的强度后,你可以根据自己的使用场景,选择是否开启深度思考以及强度。
特别是现在模型价格越来越贵,你更应该合理使用深度思考和强度,避免浪费。