这一篇文章来源于我自己的困惑而进行的探索和思考,再进行多次讨论后总觉隔靴搔痒,理解不透彻。 而在我自己整理后,发现已经有小伙伴点明了他们的区别。但是因为了解深度的不够,即使告诉了答案,我也无法理解,总有隔靴搔痒之感。
昨夜突然有恍然大悟之感,甚是欢喜。于是写下来与君分享,希望对诸位能有所帮助。此篇不一定严谨,不一定完全正确,仅作为我的个人思考,权当抛砖引玉,欢迎讨论。
过年期间DeepSeek爆火,我只觉与o1一样的产物,并未过多关注,直到我闲暇看了一下DeepSeek团队发表的《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs viaReinforcement Learning》论文,其中详细阐述了R1的训练过程,其中的一个点让我特别关注。
原文中如下阐释:
As shown in Table 5, simply distilling DeepSeek-R1'soutputs enables the efficient DeepSeek-R1-7B (i.e.,DeepSeek-R1-Distill-Qwen-7B, abbreviated similarlybelow) to outperform non-reasoning models like GPT-4o-0513 across the board.
翻译过来就是:
如表5所示,简单地提取DeepSeek-R1的输出可以使高效的DeepSeek-R1- 7b(即DeepSeek-R1- distill - qwen - 7b,缩写如下)全面优于非推理模型,如gpt - 4o -0513。
其中这一句“使高效的DeepSeek-R1- 7b全面优于非推理模型,如gpt - 4o -0513。”
多方查找后,发现早在o1推出的时候,就有了这个定义,但因为CloseAI太过藏着掖着,我一直不理解为什么o1系列叫做推理模型,而以GPT-4o为代表的模型系列却被排除在外(GPT4o的被划分为是:是具有强大推理能力的多模态模型)。
我不知道大家如何看待,但这激起了我的好奇心。因为在o1和R1出现之前,我们一直津津乐道的是“涌现”。
(LLM与以往的传统的算法不同的是LLM具有强大的“推理”能力,当模型的规模达到一定程度后,模型展现出一些在训练过程中未被直接设计或预期的复杂能力或行为的现象,这些能力或行为是模型从海量数据中学习并自我组织形成的,这种强大推理能力的产生在这个领域被称之为“涌现”)
然而,推理模型和非推理模型的定义,似乎否定了这一认知。明明GPT4o为代表的模型,也都具有不可否认的强大推理能力,但是为什么他不能称为推理模型呢?
这是一直困扰着我的问题,终于DeepSeek开源了R1的训练过程,让我们能够一窥其貌。
关于R1的训练过程,有非常多的讲解,我可以给大家推荐几篇文章。大家可以自行了解。因为CloseAI并未纰漏o1的训练细节和原理,所以我们以下仅仅用R1作为推理模型进行讨论,暂且默认o1与R1是同样的逻辑。(不排除是不同的)但是从CloseAI披露的两个视频分享中强调的内容来看,应当是一致的。
那么把以GPT-4o为代表的模型和以Deepseek-R1为代表的模型做对比,我认为最大的差异应该在于,模型的推理能力是在何时产生的?他们的推理能力有何不同。
我们先来定义一下,我们在说大语言模型的推理能力时,一般是在指什么。
(在“推理能力”有非常多的学术定义,但是如果这个基础无法达成统一,以下的讨论就没有了意义,因此我们姑且采纳,在逻辑学中对“推理”的定义)
也就是,能够使用合理的逻辑,从已知,推论出未知的结论,那么就代表他拥有推理的能力。
也就是对于LLM来说,推理能力的部分核心在于“泛化性”和“逻辑性”,他必须能够在面对自己未知的时候,利用自己的已知内容推导出未知的结论。而不能仅仅是对已知数据的匹配或重复。
举个例子来理解一下:
以传统“电子字典翻译”、简单的“机器翻译”和“大语言模型”翻译举例,
这三个对比就是从无推理能力、低推理能力、较强推理能力的过程。我们无需过度关注,只要理解其差异即可。主要的重点也是在于其“泛化性”和“逻辑性”。
我们继续探讨,那么把以GPT-4o为代表和以Deepseek-R1为代表的模型,他们的推理能力是在何时产生的?他们的推理能力有何不同。
我们来看一下GPT系列的模型(如GPT-3.5、GPT-4o、Qwen2) 训练过程。
(GPT训练流程)
大致可分为三个大阶
1、预训练阶段(Pretraining)
在这个阶段,模型通过“阅读”大量文本数据,学习预测下一个词的能力。这一阶段训练出来的模型称为预训练模型(Pretraining Model)。它的主要功能是完成“文字 接龙”,但还无法根据指令生成有意义的回答。
2、有监督微调阶段(SFT)
模型会进入有监督微调阶段。此时,训练数据从普通文本变成了人类的指令和对应的回答。通过这种方式,模型逐渐学会根据指令生成回答,而不仅仅是续写文字。例如,当提问“向 6 岁孩子解释登月”时,经过微调的模型(如 InstructGPT)会尝试解释问题,而不是简单地续写文本。这个阶段训练出来的模型叫指令模型(instruct model)或者监督模型
这一阶段的输出内容具有两个特点:
1. 能够发现模型在遵循指令,完成指令要求的事情。
2. 模型完成的结果是“无用”的,甚至“有害”的。因此,需要通过人类反 馈强化学习(RLHF)进一步优化模型,与人类的习惯和知识对齐。
3、人类反馈强化学习(RLHF)
RLHF 分为两步:
1. 构建奖励模型:先通过人工对模型生成的答案进行排序,训练一个“奖励模型”。这个模型的作用是判断待训练模型的回答是否“有用、诚实、无害”(简称 HHH 标准)。可 以把它理解为一个“老师”模型,它的质量直接影响最终模型的表现。
2. 强化学习优化:利用奖励模型对指令模型进行优化。指令模型生成答案后,奖励模型会对其打分。经过多次迭代,指令模型逐渐学会生成符合 HHH 标准的回答。
经过这个阶段后模型在完成指令的要求方面表现的更好,能够真正的提供有用的信息。这一阶段也是大部分模型厂商在出厂之前所完成的最后一道工序。
以上是得到一个以GPT-4o为代表的大语言模型的全过程,那么大语言模型的推理能力是从何而来,在哪个步骤开始拥有了推理能力,在哪个关键步骤得到了主要提升,决定了最终的推理能力呢?
在大语言模型的训练流程中,推理能力的形成与提升贯穿多个阶段,但不同阶段对其贡献存在显著差异,以下是一些总结,可以简要代表大部分模型的模式,(注意:不能完全代表全部。)
一、推理能力的产生阶段:预训练
二、推理能力大幅提升阶段:有监督微调(SFT)
三、推理能力强度决定性阶段:人类反馈强化学习(RLHF)
阶段贡献对比(以GPT-4为例)
以下数据并不保障严谨,数据来源于厂商的基准测试,由DeepSeek整合后的汇总,但是这并不是最重要的事情,我们只需要知道有这些阶段,对模型推理能力的影响,分别占了不同的比重就好。
总结来说:预训练奠定推理能力的知识基础,有监督微调实现能力的显性化和系统化,而RLHF阶段通过人类偏好对齐最终决定推理的严谨性和可靠性。三者缺一不可,但SFT阶段对推理能力的提升最为显著(贡献约50%)。
我们以R1-Zero为代表,来看看被称之为推理模型的训练过程,和产生与提高推理能力的重要节点。
(注意,这里使用的R1-zero并非R1,因为R1的训练过程经过了对齐、SFT等,容易让大家混淆,不如R1-Zero的直白易理解。并且二者的推理能力产生的主要要素和原理一致,因此下文以R1-Zero作为案例讨论)
而DeepSeek-R1-Zero的过程是这样的:
1、预训练阶段
2、强化学习(RL)
对比上文使用的以下三步:
1、预训练阶段
2、监督微调阶段 (SFT)
3、人类反馈强化学习(RLHF)
在这里,大家可能发现R1-Zero只使用了RL ,直接将RL应用于基本模型,没有预先使用任何SFT训练。
同时你也观察到了RLHF 和RL的差异,这也是降低了训练成本的一个差异点。这里是DeepSeek生成的一个对比和举例,我觉得很不错,可以做为了解参考:
RL(强化学习)例子
想象一个机器人在房间里找出口。机器人可以向前、向后、向左、向右移动,每次移动后,它会收到一个奖励信号:
机器人通过不断地尝试不同的移动方式,根据这些奖励信号来学习最佳路径。它会记住哪些动作能让它更快地找到出口,哪些动作会导致它撞墙。经过多次尝试后,机器人就能学会如何快速找到出口。
关键点:机器人直接从环境的反馈(奖励信号)中学习,环境是动态的,机器人需要通过多次尝试和探索来优化自己的行为。
假设你有一个智能写作助手,它会根据你的指令生成文章。但是,它的输出有时可能不符合你的期望。为了优化它,你采用RLHF的方法:
关键点:这里的“环境”是人类的主观评价,通过人类的打分来训练奖励模型,再用奖励模型指导写作助手优化输出。人类的反馈是核心,而不是直接从动态环境中学习。
不过相比较于降低的训练成本。R1-Zero最大的贡献在于:他探明了LLM可以通过无需任何监督微调数据即可获得强大的推理能力的道路。因为本文不讨论成本的问题,所以我们现回到他们的核心差异上:有没有使用“SFT”来决定性的提高模型的推理能力。
那么首先,我们要理解SFT和RL是什么?他们有什么差异
SFT(Supervised Fine-Tuning)的定义:是一种对预训练语言模型进行微调的方法,通过在特定任务的数据集上进行有监督训练,使模型更好地适应特定任务
更深入的具体的理解,我们来看看在训练中,SFT是在如何对模型产生影响的:
SFT的训练数据集通常包含两列:指令(输入)和答案(输出)。例如:
每一行代表一个样本,第一列是输入指令(问题),第二列是对应的输出(答案)。
在进行训练时,会经历以下步骤:
1、输入数据:模型收到了问题“2+3等于多少?”
2、模型预测:模型立即生成一个预测答案,例如“4”。(模型会根据之前的预训练基础,去预测下一个“token”,在这里小白可能需要补课,大模型的原理,但展示可以简单理解为预测一个答案,预测的可能对,也可能错)
3、计算损失:这时使用损失函数计算模型预测的答案“4”与真实答案“5”之间的差异。
4、参数更新:根据预测答案与真实答案之间的差异值,来动态调整模型中的参数。
5、持续训练:重复上述过程,直到模型的预测值与真实答案之间的差异达到最小化,此时结束这一个样本的训练(也可以理解为与真实答案完全一致。但这是一个拟合的过程,数字会要求与答案完全一样,但是语言类就不一定需要完全一样,可以允许一定的差值)。
6、循环往复:持续进行以上的步骤,使用海量的样本量持续训练。
在这个过程中,模型并不是简单地“猜测答案然后根据对错调整参数”,而是通过复杂的算法,以最小化预测值与真实值之间的差异来逐步优化参数。这种训练方式使模型能够学习到训练数据集中的一般规律,从而在面对未见过的数据时具有一定的泛化能力。
比如,即使数据集里可能并没有8-6等于多少,这样的数据集问题。但是大模型依然可以通过学习“2+3等于多少?”和“5-2等于多少?”等样本,在其内部形成一套计算方式,即使这套方式人类无法理解也无法感知,但是我们能观察到,大模型能够产生对类似的算术问题进行泛化的能力,在没有见过3+4答案的情况下,通过内部的逻辑,最终正确给出“3+4等于多少?”这样的未见过问题的答案。
但是这个训练过程,是一种拿着答案调整自身的过程,模型不断的调整参数,直到自己能够正确预测对所有的数据集的答案。
那在R1-Zero模型,在进行RL训练的时候发生了什么呢?
R1-Zero模型采用了一种名为 GRPO(Group Relative Policy Optimization)的强化学习方法,通过生成多个候选答案并根据预定义规则评估这些答案,从而优化模型的推理能力。
以下是R1-Zero模型的RL训练过程:
R1-Zero在训练时,使用了一个模版,让大模型在输出的时候遵循,可以理解为System Prompt。
模板原文是:
A conversation between User and Assistant, The user asks a question, and the Assistant solves it.The assistant first thinks about the reasoning process in the mind and then provides the userwith the answer. The reasoning process and answer are enclosed within <think> </think> and<answer> </answer> tags, respectively, i.e., <think> reasoning process here </think><answer> answer here </answer>.User: prompt. Assistant:
翻译: 用户和助手之间的对话。用户提出一个问题,助手解决它。助手首先在脑海中思考推理过程,然后为用户提供答案。推理过程和答案分别用<think></think>和<answer></answer>标签包裹,即 <think>这里的推理过程</think><answer>这里的答案<answer>。用户:提示。助手:
这里主要是强调了,助手首先在脑海中思考推理过程,然后为用户提供答案。推理过程和答案分别用<think></think>和<answer></answer>标签包裹。
同样是使用这个数据集,进行训练:
1、输入数据:模型收到了问题“2+3等于多少?”
2、模式生成多个输出:
模型接收到问题“2+3等于多少?”后,生成多个可能的答案,每个答案包含推理过程和最终答案。例如:
- 输出1:巴拉巴拉的思考过程,甚至有可能是乱码内容,4。
- 输出2:<think>巴拉巴拉的推思考过程,甚至有可能是乱码内容”</think>,<answer>5</answer>。
-输出3:<think>1+1=2,2+2=4, 2+3=6”</think>,<answer>“6”</answer>。
3、评估输出:
使用预定义的规则对每个输出进行评估,并使用奖励函数计算每个输出的奖励值:
预定义的规则只有两条:1、准确度奖励:准确度奖励模型评估响应是否正确。2、格式奖励:强制模型将其思维过程放在'< think >'和'</ think>'标记之间。把答案放在<answer>和<answer>之间。
4、相对策略优化(GRPO):
将每个输出的奖励与平均奖励进行比较,强化那些高于平均奖励的输出,惩罚那些低于平均奖励的输出。例如,输出2的奖励高于平均奖励,因此算法会调整参数以增加模式生成高奖励输出的概率。
5、持续训练:
通过使用海量的样本,进行迭代,模型会不断优化其参数和输出策略,逐渐生成更稳定的生成准确和符合格式的答案。
在RL的过程中,自始至终并没有告诉过模型正确的答案是什么,而是根据模型的输出结果来生成一个奖励和惩罚值,比如:第一个预测答案,在推理阶段获得了1分奖励、结果阶段被采取了2分扣分。第二个预测答案,在推理阶段获得了1分奖励、结果阶段获得了3分奖励。
那么模型就会根据当前的奖励情况,对自己产生高奖励的策略强化,低奖励的策略弱化。在大量的自我调整和训练中,得到一个自我进化的最佳策略。
在这个迭代过程中,实验者发现,模型在训练过程中会自然地优化其思考过程,在R1-Zero的训练中,还产生了令大家津津乐道的“顿悟”时刻。
在上图中,可以看到输出了一定的内容后,模型突然反应过来,“等等,等等,我可以在这里多停留一下,多进行一些思考。”
这是一个非常神奇的事情,在没有人告诉他也没有任何明确的指令,告知他可以在思考的时候多思考一些时间,以获得一个更有可能获得奖励的结果(正确结果)。而R1-Zero仅仅通过使用两个“简单”的强化学习规则的训练,在不断的试错和调整中,自我进化学会了为问题分配更多的思考时间以获得更好的结果的策略,并且还以人类语言的方式进行了表达。
看到这里,为何R1是推理模型的答案已经呼之欲出,不知道大家是否能够感受到他们的不同,写到这里的时候我就出门了,然而我在开车的时候突然想到,甚是欣喜。
1、GPT4类型的模型不是推理模型,因为他们并不会主动“思考”,而是直接给出答案,所谓的思维链也不过是他“答案的一部分”。
2、R1类型的模型是推理模型,因为他们会主动思考,再给出答案。他思考并不是答案的一部分,是完全不同的两个阶段。
有些抽象?
我们来回顾一下以GPT-4o为代表的非推理模型,提高推理能力的过程。
此类模型,通过不断的对比预测答案和真实答案之间的差异,不断的调整模型本身的参数,尽可能的提高正确答案的出现概率,本质上,这是一种概率匹配。通过不断的调整自己向答案靠拢,当模型训练完成时。
模型的链路只有两个环节:
1、收到问题
2、输出答案
即使当用户使用COT思考后输出答案,使用“Think step by step”的prompt进行引导,让模型输出了所谓的“思维链”,但这依然是模型为了匹配用户提出的问题,而“直接输出的答案”。
在非推理模型中,通过提示词引导模型带有思维链的输出,与不带思维链的输出,在本质上没有任何区别。 他们都是基于模型的固有的模式匹配。输出的所谓的“思维链”依然是针对你的“问题要求”进行的预测输出。
这是我使用Qwen2.5做的举例,
我们再来细细体会一下他的区别,这两个答案的推理过程,无论是有了COT的和没有COT的,都是模型分别对我的问题直接产生的预测性输出。这个所谓的“思维链”本身就是模型给出的“答案”的一部分。并没有产生思考的过程。可以
理解为“伪思考”
而我们看看以R1为代表的推理模型:
在R1的训练中,模型本身并不知道正确答案,也没有人告诉他在<think>阶段多停留就可以获得更好的结果,是模型在不断接受奖励和惩罚来强化和弱化相应的策略的时候,突然“顿悟”,他主动发现,可以在<think>阶段停留更长的时间,以得到更趋近于正确的答案。
我们通过论文可以了解到,在在RL的训练中,只使用了两个奖励规则:
准确度奖励:准确度奖励模型评估响应是否正确。
例如,对于具有确定性结果的数学问题,该模型需要以指定格式(例如,在方框内)提供最终答案,从而实现基于可靠规则的正确性验证。类似地,对于 LeetCode 问题,可以使用编译器根据预定义的测试用例生成反馈。.
格式奖励:强制模型将其思维过程放在'< think >'和'</ think>'标记之间。把答案放在<answer>和<answer>之间。
试想一下,基于以上两个规则,模型分明可以按照格式要求,在'< think >'和'</ think>'中间只输出一个字,或者随便的输出一些乱码,只要格式正确,最终的答案正确就可以获得高奖励了。
但是,模型在不断的训练中自我发现,如果在<think>中多停留,更有可能获得高奖励。于是模型开始主动的“思考”以获得一个更高奖励的答案。
在这里有感受到区别吗?在推理模型的<think>过程中,也就是产生“CoT”的过程,是一种自发的,主动的现象。他的cot过程,不是范式的预测性匹配答案,而是为了得到更好的结果而选择主动执行的部分。这个过程是模型主动认为,这是“思考”的部分,这不是他“答案”的一部分。
这个cot并不受出题人的控制,是模型自发、主动施展的一种能力。我们当前使用的R1是经过了人类对齐之后的版本,而R1-Zero版本,他的思维链输出是语言混乱的,这也许是模型在其内部形成了他固有的一套逻辑,在使用这套逻辑推演时显化出来的内容不太能让人类所理解。
但,这已经代表了。在模型回答问题前,他进行了一步“思考”。 这是模型自我进行的区分,并不是我们根据<think><answer>的标签进行的区分,甚至这个标签可以是<1><2>可以是任何。但是模型自我发现,在正式回答问题前,存在一个阶段,在这个阶段进行更长时间的停留,就可以获得一个更好的答案。
只不过,我们将这个过程定义为“思考”。
不知道我是否有讲清楚这个微妙的区别,总结一下以R1为代表的推理模型,他们的回复逻辑是:
1、收到答案
2、一个“思考”的过程
3、输出答案
再次强调一下,这个推理模型的“思维链”过程,与非推理模型的看似“思维链”的思考过程的不同:
1、非推理模型的所谓思维链,是为了响应你的指令而产生的预测性匹配,思维链本身就是组成“答案”的一部分。
2、推理模型的思维链,是为了获得更好的答案,模型自发产生的主动性“思考”。对推理模型来说,思维链并不是是答案的一部分,他们主动认识了“思考”阶段和“答案”的阶段差异。
我们再引入一个模型,在R1的论文中有提到,他们使用精选的几十万条COT样本,以SFT的方式,基于Qwen2.5进行训练,训练出了几个R1的蒸馏版本。
那么问题来了,被COT样本使用SFT训练的蒸馏模型,大家认为它属于推理模型吗?
3
.
2
.
1
因为训练的最终响应看似是拥有了R1的思维链和输出格式,但因为是SFT的方式,这本质上依然是模型在内部模式下对问题进行的预测性匹配输出,他产生的“思维链”,并不是其为了得到最终的正确答案进行的中间阶段思考。他产生的思维链,依然是答案的一部分。
好了,我也不知道自己是否有讲清楚,我的判断也不一定正确,本文仅仅是我自己的个人思考,代表我的个人观点,权当抛砖引玉,欢迎大家在评论区讨论。
文章来自微信公众号 “ Equity AI “,作者 张梦飞i
【免费】ffa.chat是一个完全免费的GPT-4o镜像站点,无需魔法付费,即可无限制使用GPT-4o等多个海外模型产品。
在线使用:https://ffa.chat/
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0