Notes On Chain of Thought

  1. What is Chain of Thought? 什么是思维链 ?
  2. CoT Prompting
  3. Zero-shot CoT Prompting
  4. CoT Fine-Tuning
  5. Reference

What is Chain of Thought? 什么是思维链 ?

intuitively,
1.Chain of Thought (Cot, 思维链) 的核心目标是期望 LLM 在面向一些复杂的任务 (或者一些需要创造力的过程), 生成出来 [完整的思维过程], 思维链, 说白了就是 [完整的思维过程], 具体实现方式有两类:
(i). CoT Prompting: 用 CoT Prompt 引导 LLM 实现生成 CoT completion
(ii). CoT Fine-Tuning: 基于 CoT 数据微调

CoT Prompting

1.想让 LLM 输出 CoT, 最直接方法是 prompt engeering 例如 Few-shot CoT Prompt, 然后让模型输出 CoT output;

2.在不同领域中, 都可以利用 CoT prompt 提升模型推理能力和答案准确率

总结来看 CoT prompt 有以下强力的优势

CoT 让模型学会分解问题, 将一个需要多步骤处理的问题复杂问题分为对应的中间步骤, 这样的好处是对于需要多步骤求解的复杂的问题就能够自适应地复杂地思考和处理;
CoT 给了我们一个对模型生成逻辑的观察入口, 方便我们 Debug 为什么有的回答是错的, 是在哪一步模型就回答错了
CoT 搭建我们通向更高级别的知识或者智能的桥梁, 复杂的 [数学问题], [常识推理] 和 [符号推理] 可以用人类语言区描述, 然后求解

4.CoT Prompt 到底有多强大 ?
(i). 对于采用 PaLM 540B 模型处理 GSM8K Math Word Problem (自然语言数学题), 仅仅加上 8 个 CoT 生成的 prompt, 具体采用的 CoT prompt 如下, 就能产出超过 SOTA Solve Rate 的效果

我们看到采用的 CoT prompt 只是用自然语言描述一下, 有的简单任务甚至是个复读机风格或者转述器风格, 就能显著提升效果

5.对于 CoT prompting 带来的变化如何正确认知?
实验方法是对比标准 prompt v.s. CoT prompt (v.s. sota 水平), 具体对 3 个不同的模型在 3 个问题上 scaling parameters 上的表现

(i). CoT prompting 是一种立足于模型参数规模扩大带来的涌现能力: 在小模型上 CoT 没什么显著收益, 实验看到 100B 参数以下搞 CoT prompting 没什么增益; 且发现在小模型相比标准 prompt, cot prompt 会产出流畅但是缺乏逻辑的 cot, 导致效果比 standard cot 还差
(ii). 越复杂的问题, CoT 带来的收益更大; CoT 是获得 SOTA 表现的一种有效方法

Zero-shot CoT Prompting

后来研究发现, 不仅仅是 Few-shot, Zero-shot CoT 也已经足够强大, 最简单 (也最强大的) Zero-shot CoT prompting 是在 answer 前增加一个类似 “Let’s think step by step”, 我们对比下图中的几个结果:

其中: (a). 没有 CoT 的 Few-shot. 答案很可能是错的 (b). 带有 CoT 的 Few-shot. 模型能正常输出推理过程, 依赖的是模型强力的 Few-shot 学习能力 (c). 没有 CoT 的 Zero-shot. 答案错误的率比 (a) 更大 (d). 带有 CoT 的 Zero-shot. 在 answer 增加一个类似 "Let's think step by step", LLM 自动生成推理过程和结果, 凸显体现了大模型的很强的潜力 intuitively, 1.更 natural 地利用 CoT 方式是 Zero-shot-CoT prompt, 最简单的实现方式是在一个 QA prompt 模板中, 给 A 的开头加一句 "Let's think step by step", 就能使的 LLM 变成一个很强的 zero-shot reasoner, LLM 的输出会带上推理过程, 而且也被验证出来能在很多复杂问题 (例如数学问题) 上输出更准确的答案

2.如果我们要用这种 Zero-shot-CoT 去同时抽取推理过程和最终答案, 那就需要一个”先推理, 再回答” 的两阶段 prompt process:
(i). stage1: 抽取推理过程, 仍然 prompt 模板增加一个 “Let’s think step by step”
(ii). stage2: 将 stage1 的 output 这种推理过程拼接到问题 A 里面, 然后再跟上一个提问模板 “Therefore, the answer (arabic numberals) is”

3.研究对比了不同的的 Zero-shot-CoT template 的效果, 发现有指导意义的 CoT 都比 Zero-shot 普遍显著能好很多

CoT Fine-Tuning

Prompt-based CoT 这种方法的显著问题是严重依赖大参数量模型, 在小模型上 CoT prompting 没有效果; 因此提出一种先在大模型上 Zero-shot-CoT prompting 产出 CoT 样本的方式, 然后再利用这些 CoT 样本 fine 得到支持复杂推理小模型, 这种方法称之为 CoT Fine-Tuning

CoT Fine-Tuning 做法如下:
(i). Reasoning Generation (推理数据生成): 采用一个大模型 (我们可称之为 Teacher 模型) 生成 CoT 样本, 通过 Zero-shot 的方式生成推理过程和答案, 这一步采用的模板为

Q: <q_i>.
A: Let's think step by step.
<r_i>.
Therefore, the answer is <a_i>.

在 Reasoning Generation 过程中: Diverse Reasoning (多样化推理路径) 是最关键的思路, 例如采用 [高温采样的方式生成 $D$ 个不同的 (具备了多样性) 的推理路径]

(ii). Curation (数据过滤): 过滤掉 Teacher 模型生成出来的答案有错误的这部分样本, 生成 pair, 代码逻辑如下

<prompt, concat(rationale, answer)> if answer == gound_truth_answer for prompt in prompt_pool

(iii). Fine-tune (微调): 在小模型上 Fine-tune

CoT Fine-Tuning 的基础认知
1.小模型通过 CoT Fine-Tuning 能够真正得到复杂推理能力
2.获得具备多样性的推理数据是最关键的一步, 如下图所示 $D$ 越大效果越好

3.CoT Fine-Tuning 越多数据越好, 大力出奇迹

4.更好的 Reasoner 是更好的 Teacher, 要选用更好的 Teacher 进行采样

5.student 小模型的参数量越大越好

intuitively,
1.CoT 微调的基础认知: 选最强的推理模型搞样本, 尽可能多的搞推理样本, 搞不一样的推理样本, 把小模型尽可能搞大

Reference

[1]. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. https://arxiv.org/pdf/2201.11903
[2]. Large Language Models are Zero-Shot Reasoners. https://arxiv.org/pdf/2205.11916.
[3]. Large Language Models Are Reasoning Teachers. https://arxiv.org/pdf/2212.10071.


转载请注明来源 goldandrabbit.github.io