追溯ChatGPT( 二 )


一个用于代码,另一个用于文本
它们表现出了力与初代 GPT-3 不同的能力:
响应人类指令:以前,GPT-3 的输出主要训练集中常见的句子 。现在的模型会针对指令 / 提示词生成更合理的答案(而不是相关但无用的句子) 。
泛化到没有见过的任务:当用于调整模型的指令数量超过一定的规模时,模型就可以自动在从没见过的新指令上也能生成有效的回答 。这种能力对于上线部署至关重要,因为用户总会提新的问题,模型得答得出来才行 。
代码生成和代码理解:这个能力很显然,因为模型用代码训练过 。
利用思维链 (chain-of-) 进行复杂推理:初代 GPT3 的模型思维链推理的能力很弱甚至没有 。code--002 和 text--002 是两个拥有足够强的思维链推理能力的模型 。思维链推理之所以重要,是因为思维链可能是解锁突现能力和超越缩放法则 ( laws) 的关键 。
这些能力从何而来?
与之前的模型相比,两个主要区别是指令微调和代码训练 。具体来说
能够响应人类指令的能力是指令微调的直接产物 。
对没有见过的指令做出反馈的泛化能力是在指令数量超过一定程度之后自动出现的,T0、Flan 和论文进一步证明了这一点
使用思维链进行复杂推理的能力很可能是代码训练的一个神奇的副产物 。
对此,我们有以下的事实作为一些支持:
最初的 GPT-3 没有接受过代码训练,它不能做思维链 。
text--001 模型,虽然经过了指令微调
但第一版思维链论文报告说,它的它思维链推理的能力非常弱 —— 所以指令微调可能不是思维链存在的原因
代码训练才是模型能做思维链推理的最可能原因 。
PaLM 有 5% 的代码训练数据,可以做思维链 。
Codex论文中的代码数据量为 159G,大约是初代 GPT-3 5700 亿训练数据的28%
code--002 及其后续变体可以做思维链推理 。
在 HELM 测试中,Liang et al. (2022) 对不同模型进行了大规模评估
他们发现了针对代码训练的模型具有很强的语言推理能力,包括 120亿参数的code--001. 。
我们在 AI2 的工作也表明,当配备复杂的思维链时,code--002 在 GSM8K 等重要数学基准上是目前表现最好的模型
直觉来说,面向过程的编程 (- ) 跟人类逐步解决任务的过程很类似,面向对象编程 (- ) 跟人类将复杂任务分解为多个简单任务的过程很类似 。

追溯ChatGPT

文章插图
以上所有观察结果都是代码与推理能力 / 思维链之间的相关性 。
代码和推理能力 / 思维链之间的这种相关性对研究社区来说是一个非常有趣的问题,但目前仍未得到很好的理解 。
然而,仍然没有确凿的证据表明代码训练就是CoT和复杂推理的原因 。思维链的来源仍然是一个开放性的研究问题 。
此外,代码训练另一个可能的副产品是长距离依赖
正如Peter Liu所指出:“语言中的下个词语预测通常是非常局部的,而代码通常需要更长的依赖关系来做一些事情,比如前后括号的匹配或引用远处的函数定义”
这里我想进一步补充的是:由于面向对象编程中的类继承,代码也可能有助于模型建立编码层次结构的能力
我们将对这一假设的检验留给未来的工作
另外还要注意一些细节差异:
text--002 与 code--002
Code--002 是基础模型,text--002 是指令微调 code--002 的产物(见的文档) 。它在以下数据上作了微调:
(a)人工标注的指令和期待的输出;
(b)由人工标注者选择的模型输出 。
当有上下文示例 (in- ) 的时候,Code--002 更擅长上下文学习;当没有上下文示例 / 零样本的时候,text--002 在零样本任务完成方面表现更好