小模型思维链(CoT)能力微调与优化实践
前两章我们分别介绍了 COT 的多种使用方法以及 COT 的影响因素。这一章更多面向应用,在现实场景中考虑成本和推理延时,大家还是希望能用 6B 的模型就不用 100B 的大模型。但是在文中反复提到,不论是 few-shot 还是 zero-shot 的思维链能力似乎都是 100B 左右的大模型才有的涌现能力,而在小模型上使用 COT 甚至会带来准确率的下降。
至于为啥小模型无法进行 COT,论文通过把小模型回答错误但大模型可以回答正确的问题进行归纳总结,认为小模型的 COT 能力受到有限的语义理解和数学计算能力的限制。不过我们在实际尝试中发现小模型的 few-shot 理解能力似乎是更大的短板,表现在小模型无法很好理解抽象 few-shot 中的推理模板和样本间的共性。
不过以上的观点都是针对模型的先天能力,那我们是否可以把 COT 推理作为一种生成风格,或者 NLP 任务类型,通过微调让模型获得 COT 能力呢?
想要让小模型拥有 COT 能力,多数方案是通过 COT 样本微调来实现的,以下参考论文的核心差异就在 COT 样本构造和微调方式。我们将几篇论文合在一起来说,下图展示了不同方法的对比:

COT 样本构造
以下参考论文都是使用大模型来生成 COT 样本,不过在数据集、COT 样本构建和过滤机制上存在差异。
论文 [1] 使用了 GSM8k 的数据集,用 Code-Davinci-002 随机生成 40 个的思维链推理,选择答案正确的一条作为训练样本。样本生成这块写的相对比较模糊。
论文 [2] 优化了 COT 样本准确率。使用 Palm 540B 和 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 |




