主要解决什么问题
大语言模型越来越大,效果越来越好。但是在一些具有挑战性的任务上面,比如arithmetic, commonsense, 和symbolic reasoning上面依旧不能够很好地去处理。
作者提出了chain of thought的一系列prompt方法来进行改进,在不调整模型参数的情况下,在多个任务中取得了SOTA的成绩。
采用什么方法
如上图所示,作者在给定的QA示例里面,添加了一些中间推倒步骤,导致模型最终的输出能够正确。数学化描述就是将prompt组成<input, chain of thought, output>的方式。chain of though就是中间一系列的推倒过程。
chain of thought的好处如下(拆分复杂任务,可解释性更强,处理任务能力更强):
实验分析与结果
Chain of thought的方法可以超越之前的finetune,和之前最好的效果。chain of thought在小模型上并没有提升,只有当模型大于100B的时候才会有这种效果。侧面反映了他们的instruct fine-tune不够,COT很难激发他的in-context 推理能力。
小模型产生的输出更加流畅,但是产生了不合乎逻辑的思维链,导致比standard prompt的输出结果更低。任务比较简单的话,也体现不出差异,如MAWSP,SVAMP这两个数据集上差异不明显,而GSM8K上任务比较复杂,差距就体现出来了。在100B以上模型效果很好,甚至超过了之前基于监督训练的SOTA模型 (橙色的线)。
是大模型在参数量大了之后拥有了COT的能力,还是通过instruct fine-tune给大模型注入了这个能力?值得考究。
消融实验
除此之外,作者还做了一些消融实验。
- Equation only
具体prompt如下:
对于一两步能够推倒出来的,这个Equation不Equation最终效果都差不多。
- Variable compute only
排除输入更长,消耗了更多计算量,模型思考更加仔细的影响。作者往prompt里面补充点号到prompt中,进行对比。发现效果也并不好,因此不是这个原因。
- chain of thought after answer
<input, chain of thought, output>的顺序是比较重要的,把chain of thought放到后面变成<input, output, chain of thought>的话,效果就会变差。
- 鲁棒性测试
作者还分析了不同的写作prompt的风格对chain of thought的影响。最终发现都会比standard prompt效果好。
Commonsense Reasoning
作者还在一些常识性问题上做了推理能力对比:
Symbolic Reasoning
作者在符号推理问题上做了分析对比
- Task 1: Last letter concatenation: 名字拼接,比如“Amy Brown” → “yn”
- Task 2: 硬币推理 “A coin is heads up. Phoebe flips the coin. Osvaldo does not flip the coin. Is the coin still heads up?”
作者同时做了in-domain test和out-of-domain (OOD) test。
问题与展望
- 如果继续扩大模型,效果还会变好吗?
- 还有其他更好的prompt方法吗?
- 怎么说明模型确实在做推理?
- 是否有比手动写prompt更好的方式?
- 怎么确保推理path的正确性?
- 怎么在小模型上实现类似的效果?