Reasoning
2025年10月15日
16:22

llm的推理指的是,在输入和输出之间,的intermediate tokens。所以说,这里的reasoning和人类真正的推理是不同的!!

那么,为什么llm需要推理呢,或者说需要中间token呢?

一个直觉的回答是,人类进行回答时,也需要进行思考,思考的过程就是中间token。但是llm只是概率模型,不是人类。
真正的答案是:对于一个size为T的布尔电路可以解决的问题,constant-size transformers需要O(T)个token来解决(斯坦福的一项研究,从理论的角度来解释推理)。(深度不够,长度来凑)

只进行预训练的llm也是有推理能力的。
Pretrained llm are ready to reason. All we need is decoding.

从上图看出,如果是greedy decoding,那么没有reasoning的过程,而如果不用greedy decoding,进行多次采样 ,那么会生成具有reasoing的response,并且答案是正确的。而且在这些具有reasoing的response中,答案token的置信度是很高的,高于greedy decoding的答案token的置信度。(什么是greedy decoding, 即argmax(answer|problem)))
因此,我们可以不用greedy decoding,而是用chain-of-thought decoding,也就是选择答案token置信度最高的response,而不是选择下一个token概率最高的。

chain-of-thought decoding是在decoding阶段进行的,需要采样多个response。我们能不能直接改变模型的输出分布,让具有reasoning 的response排在前面呢。如果这种response排在前面,那么就可以使用greedy decoding了。
chain of thought prompting(在prompt中加入let's think step by step,或者加入few shot examples在这里也属于这个范畴)就是相当于改变了输出分布,即通过改变output=f(x)中的x,来改变输出,将具有reasoning的response的概率推到顶部。这也是为什么cot prompting有用的原因。
但是通过改变prompt(llm是一个函数f(x),改变f(x)中的x)这种方式,虽然简单,但是需要我们设计合适的task-specific examples,并不通用(只加入lets think step by step效果一般),

那么就要改变f(x)中的f,可以通过SFT,supervised finetuning

但是SFT并不能很好的泛化,并且scaling dees help too much(don’t scale blindly ,once the paradigm is wrong , no matter how you scale, it doesn't work)
SFT为什么不能泛化呢?原因在于用人类标注的数据进行训练。
所以,用model自己生成的解决方案来训练模型,而不是用人类标注的解决方案来训练模型。

例如对于数学问题,我们只知道正确答案,不知道解题过程,让模型自己生成带有reasoning的response(解题过程),然后选出具有正确答案的response,作为训练数据。
原始的SFT,是用人类标注数据,现在只是将SFT中的人类标注数据换成model自己生成的数据,其他地方和SFT没有区别。(RL是生成一个response,会对这个response输出一个reward,然而根据reward调整模型参数,是动态的过程。如果只是将SFT中的人类标注数据换成model生成的数据,是静态的。)
RL finetuning只是重复这个过程:

为什么用model自己生成的数据要好于人类标注的数据?
Directly optimize what we want!

由于我们的model是概率模型,所以我们的目标是maximize r(正确率,reward,bleu…任何指标)的期望值,为了得到期望值,我们需要采样,这也是为什么有策略梯度的原因。

并不是所有任务都是verifiable,如creative writing.
RL finetuning很好,但是还有两个技巧可以继续提升


也就是边缘化,或者说多次采样,求和(选频率最高的那个answer)

这个技巧,对答案准确率的提升很大!
2.Retrieval

Summary

已使用 OneNote 创建。