前两章咱们分别介绍了COT的多种运用方法以及COT的影响因素。这一章更多面向运用,既现实场景中考虑本钱和推理延时,咱们仍是期望能用6B的模型就不用100B的大模型。但是在思想链基础和进阶玩法中重复提到不论是few-shot仍是zero-shot的思想链才能似乎都是100B左右的大模型才有的涌现才能,而在小模型上运用COT甚至会带来准确率的下降。
至于为啥小模型无法进行COT,论文[6]通过把小模型答复错误但大模型能够答复正确的问题进行归纳总结,认为小模型的COT才能遭到有限的语义了解和数学核算才能的约束。不过咱们在实践测验中发现小模型的few-shot了解才能似乎是更大的短板,体现在小模型无法很好了解笼统few-shot中的推理模板和样本间的共性。
不过以上的观念都是针对模型的先天才能,那咱们是否能够把COT推理作为一种生成风格,或许NLP使命类型,通过微调让模型取得COT才能呢(`∇)
想要让小模型具有COT才能,大都计划是通过COT样本微调来实现的,以下Reference[1]-[4]中的4篇论文的核心差异就在COT样本结构和微调方式。以下咱们把几篇论文合在一起来说,下图来自[3]
COT样本
以下Reference中的论文都是运用大模型来生成COT样本不过在数据集,COT样本构建和过滤机制上存在差异。
论文[1]运用了GSM8k的数据集,用Code-Davinci-002随机生成40个的思想链推理,挑选答案正确的一条作为训练样本。样本生成这块写的相比照较模糊。
论文[2]优化了COT样本准确率。运用Palm540B和GPT3 175B模型,用8个few-shot样原本引导模型生成COT,这儿为了提高大模型COT的准确率,作者修改了指令,在few-shot+question之后会直接给出正确答案作为Hint,来引导模型倒推出正确的COT,同样是只过滤答案正确的样本
论文[3]优化了思想链的多样性。考虑同一个问题其实有很多种解法,以及不同的解法间往往存在逻辑共性,与其让模型拟合单一的推理成果,不如让模型从多个推理路径中去笼统重要信息。因而论文提出了diverse reasoning,每个样本用text-davinci-002生成多个思想链,保存一切答案正确且推理逻辑不同的样本。而且在论文中验证了一个样本生成更多思想链会带来显着的作用提高
论文[4]优化了COT数据集的多样性,整了个COT Collection数据集包含1.88M的COT样本散布如下。具体的数据筛选和构建逻辑详见论文。运用了Codex来生成思想链,计划交融了[2]和[3]
模型训练
不同论文挑选了不同的student模型,指令样本构建和指令微调方式,简单比照如下
论文 | 微调模型 | 微调样本 | 微调方式 |
---|---|---|---|
[1] | FlanT5 250M~11B | Few-shot-COT+Zero-shot-COT+Few-shot-Answer Only | 蒸馏:Top5 Token的KL间隔 |
[2] | T5 60M~11B | Zero-shot-COT | 指令微调SFT |
[3] | GPT-3 0.3B~6.7B | prompt模板Zero-shot-COT | 指令微调SFT |
[4] | FlanT5 T0 | Few-Shot-COT + Zero-shot-COT | 两步指令微调 |
以上不同的指令样本Looklike如下,差异包括是否有few-shot上文,是否有COT推理
在指令样本构建上大都是直接输入问题,输出COT思想链的,但个人其实更偏好few-shot的COT计划。由于在实践运用中,其实需求分析和推理的很多场景都是非标准化的,远远不是解个数学题或许QA这类标准化问题能够掩盖。这种情况下需求定制场景所需的推理逻辑,这时zero-shot肯定就不行了,需求few-shot来给出不同场景所需的不同推理链路。例如问诊的流程要先问当前症状,病程,病史,用药,再基于用户不同的答复,挑选是化验,拍片,仍是听诊开药等等。因而大模型和小模型的才能差异除了小模型自身的推理才能有限,还有小模型的In-Context了解才能有限,而few-shot样本微调被证明能够提高模型In-context了解才能。
再说下微调的部分,除了惯例的指令微调计划之外,[1]采用了蒸馏计划,不熟悉蒸馏的能够先看下Bert推理太慢?模型蒸馏。简单来说便是让Student模型拟合Teacher模型的散布,散布能够是对齐输出层也能够进一步对齐模型中间层,丢失函数一般是两个散布的KL散度或许MSE。这儿作者运用的蒸馏计划是对齐输出层散布,考虑OpenAI的接口每次只回来Top5 Token对应的概率,因而只对Student模型每步解码的Top5 Token核算KL散度作为loss。蒸馏过程还有一些例如tokenizer对齐的细节,详见论文[1]
论文[4]采用了两步微调,第一步在指令微调模型的基础上,运用范围更广的COT Collection样本集对模型进行COT微调,再在该模型的基础上,运用单一范畴/使命的COT样本进一步微调,作用会有进一步提高。这一点其实或许说明COT推理自身除了是一种生成风格,也是一种模型才能,所以不同的推理数据集之间存在可迁移性,咱们在单使命推理中混入数学COT也发现有作用提高。
Insights
作用其实不用太多说,小模型在通过以上COT训练后,在对应数据集上都有很显着的才能提高。考虑不同论文运用的模型checkpoint不同,Benchmark数据集的区分也不同,所以可比性不高,以及现在的很多random split的计划真的说不清楚是否有信息走漏问题。主张咱们在自己的业务运用中去寻觅更适宜的计划。这儿想更多说下论文中提到的一些insight
- COT才能提高以其他使命才能下降为价值
论文[1]发现在数学COT才能提高的一起,模型在BigBench(BBH)上的打分会出现显着的下降,而且这个过程是随微调逐渐发生的。论文指出的或许原因是小模型能承载的才能有限,因而不像大模型能够许广泛使命上有很好的体现,小模型单一才能的提高,或许会以通用才能丢失为价值。虽然这儿我有些存疑,感觉BBH的作用下降也或许是由于COT的生成风格和很多通用使命的生成风格存在差异,如果在COT微调时在中加入额外的指令,把直接生成推理转化成基于指令推理的条件生成使命,或许会降低对其他使命的影响。
- 小模型COT也存在规划效应
论文几乎都提到了这一点,简单说便是越大的模型越好,所以在ROI允许的范围内挑选最大的小模型哈哈~
- 运用Few-shot-COT微调,会一起提高zero-shot和few-shot才能,反之不成立
以上发现也是[1]运用混合样本(fewshot+zeroshot+无cot)样本进行微调的原因。其实比较好了解,由于COT推理的生成风格和其他指令使命是存在差异的(哈哈zero-shot-cot在我看来就像是平白无故,别人问你问题,你原本能够直接给个答案,成果你突然开启柯南形式开端叭叭的推理)。因而如果用zero-shot-cot微调,会直接影响模型的解码散布,而运用few-shot-cot微调,充沛的上文让模型更多拟合COT条件解码概率,只会有部分才能迁移到无条件解码概率,且对其他指令使命的影响也会更小。
- 多步推理使命上COT微调或许比惯例指令微调作用更佳,模型规划效应更显着
论文[3]比照了在同一个使命上运用COT样本微调和运用只要答案的惯例样本微调,整体上在需求多步推理的使命上,COT微调有更显着的模型规划效应,随模型变大COT微调的作用会显着超过惯例微调。
- COT数据集的质量和数量都重要
论文[2]证明了COT数据集存在规划效应,样本越多,微调作用越好,这儿的规划效应或许更多来自思想链的多样性掩盖。而论文[3]证明了相同数量的COT样本,人工筛选的正确推理样本比照从模型猜测答案正确的COT中采样相同量级的样本,作用会有显着提高。毕竟1个错误的样本或许需求10个正确的样原本纠偏,因而在保证数据集多样性和规划的一起,更有效的样本过滤逻辑也很重要。
想看更全的大模型相关论文整理微调及预训练数据和框架AIGC运用,移步Github >>DecryptPropmt
reference
[1] Specializing Smaller Language Models towards Multi-Step Reasoning
[2] Teaching Small Language Models to Reason
[3] Large Language Models are Reasoning Teachers
[4] The CoT Collection: Improving Zero-shot and Few-shot Learning of Language Models via Chain-of-Thought Fine-Tuning
[5] github.com/kaist-lklab…
[6]Chain-of-Thought Prompting Elicits Reasoning in Large Language Models