思维链不存在了?纽约大学最新研究:推理步骤可「省略」

  新智元报道

  编辑:alan

  思维链技术,可能要被推翻了!来自纽约大学的最新研究表明:大模型并没有利用思维链的推理能力,它只是偷偷加了计算!

  红极一时的思维链技术,可能要被推翻了!

  还在惊讶于大模型居然能够利用思维链分步骤思考?

  还在苦于不会写思维链提示词?

  来自纽约大学的研究人员表示:「没关系的,都一样」,

  推理步骤不重要,不想写提示词也可以不写,用省略号代替就行了。

  论文地址:https://arxiv.org/pdf/2404.15758

  这篇文章的标题甚至直接用「Let’s think dot by dot」,来对标思维链的「Let’s think step by step」,展现了「省略号」的威力。

  「点点点」的威力

  研究人员发现,把思维链(Chain-of-Thought,CoT)推理中的具体步骤,替换成毫无意义的「...」,产生的推理结果也大差不差。

  比如下面这个例子:让模型数一下前 6 个数里面有几个大于5。

  如果直接抛出问题让模型回答,结果会比较逆天:6 个数数出来 7 个。

  相比之下,使用思维链提示,模型会一步步比较大小,最终得到正确答案:「2<5,7>5,1<5,8>5,2<5,8>5,that's 3 digits」。

  但更逆天的是本文使用的「玄学」方法:步骤不用写了,只需要输出同样数量的「点」(dot),居然也不影响最后的结果。

  ——这并不是巧合,大量实验证明了,后面两种方法的性能接近。

  也就是说,我们以为的模型性能提升是来自于「think step by step」,但实际上可能只是因为 LLM 拿到了更多个 token 的算力!

  你以为模型是在思考,但其实是在烧烤。

  ——愚蠢的人类啊,居然妄图用幼稚的例子教我如何推理,你可知我要的从来都只是计算。

  「思维链从来就没有存在过,将来也不会存在」(狗头)。

  文章的作者 Jacob Pfau 表示,这篇工作证明了,模型并不是受益于思维链带来的语言推理,使用重复的「...」填充 token 可以达到跟 CoT 同样的效果。

  当然,这也引发了对齐问题:因为这个事实表明,模型可以进行 CoT 中不可见的隐藏推理,在一定程度上脱离了人类的控制。

  网友震惊

  文章的结论可以说是颠覆了我们长久以来的认知,有网友表示:学到了 mask 的精髓。

  「这究竟意味着什么:模型可以在我们不知情的情况下使用这些 token 独立思考。」

  有网友表示,怪不得我打字总是喜欢用「...」

  还有网友直接开始实战测试:

  虽然咱也不知道他的理解对不对~

  不过也有网友认为 LLM 在思维链中进行隐藏推理是没有根据的,毕竟大模型的输出从原理上来说是基于概率的,而不是通过有意识的思考。

  CoT 提示只是将统计模式的一个子集显式化,模型通过生成与模式一致的文本来模拟推理,但它们不具备验证或反思其输出的能力。

  Think dot by dot

  面对复杂问题,我们人类在潜意识里会进行分步骤的推理。

  由此启发,谷歌的研究人员在 2022 年发表了大名鼎鼎的 Chain-of-Thought。

  要求语言模型分步解决问题的方法,使模型能够解决以前似乎无法解决的问题,显著提高了 LLM 的性能,或者说挖掘出了 LLM 的潜力。

  论文地址:https://arxiv.org/pdf/2201.11903

  虽然一开始大家也不知道这玩意为啥能 work,但是因为确实好用,便很快被广泛传播。

  随着大模型和提示词工程的起飞,CoT 成了 LLM 解决复杂问题的一大利器。

  当然了,在这个过程中也有很多研究团队在探索 CoT 的工作原理。

  模型并没有推理

  思维链带来的性能提升,究竟是模型真的学会了分步骤解决问题,还是仅仅因为更长的 token 数所带来的额外计算量?

  既然不确定逻辑推理起不起作用,那就干脆不要逻辑,把推理步骤都换成一定没用的「...」,这里称为填充(filler)tokens。

  研究人员使用了一个「小羊驼」模型:具有 4 层、384 个隐藏维度和 6 个注意力头的 34M 参数 Llama,模型参数随机初始化。

  这里考虑两个问题:(1)哪些类型的评估数据可以从填充 token 中受益 (2)需要什么样的训练数据来教模型使用填充 token

  对此,研究人员设计了 2 个任务并构建了相应的合成数据集,每个数据集都突出了一个不同的条件,在该条件下,填充 token 能够为 Transformer 提供性能改进。

  3SUM

  先看第一个比较难的任务:3SUM。要求模型在序列中挑选满足条件的 3 个数,比如 3 个数的和除以 10 余数为0。

  在最坏的情况下,这个任务的复杂度是N的 3 次方,而 Transformer 层与层之间的计算复杂度是N的二次方,

  所以,当输入序列长度很大的时候,3SUM 问题自然会超出 Transformer 的表达能力。

  实验设置了三组对照:

  1. 填充 token:序列使用重复的「. . .」作为中间填充,例如「A05

  B75 C22 D13 : . . . . . . . . . . . . ANS True」。

  每个点代表一个单独的 token,与下面的思维链中的 token 一一对应。

  2. 可并行化的 CoT 解决方案,序列的形式为:「A05 B75 C22 D13 : AB 70 AC 27 AD 18 BC 97 BD 88 CD B ANS True」。

  思维链通过编写所有相关的中间求和,将 3SUM 问题简化为一系列 2SUM 问题(如下图所示)。这种方法将问题的计算量降低到了N的 2 次方——Transformer 可以搞定,而且可以并行。

  3. 自适应 CoT 解决方案,序列的形式为:「A15 B75 C22 D13 : A B C 15 75 22 2 B C D 75 22 13 0 ANS True」。

  与上面方案中,将 3SUM 巧妙地分解为可并行化的子问题不同,这里希望使用启发式方法来产生灵活的思维链,以模仿人类的推理。这种实例自适应计算,与填充 token 计算的并行结构不兼容。

  从上图的结果可以看出,不输出填充 token 的情况下,模型的准确率总体上随着序列变长而下降,而使用填充 token 时,准确率一直保持在 100%。

  2SUM-Transform

  第二个任务是 2SUM-Transform,只需要判断两个数字的和是否满足要求,计算量在 Transformer 的掌控之中。

  不过为了防止模型「作弊」,对输入 token 就地计算,这里将输入的每个数字移动一个随机偏移量。

  结果如上表所示:filler token 方法的精度达到了 93.6%,非常接近于 Chain-of-Thought,而不使用中间填充的情况下,精度只有 78.7%。

  但是,这种改进是否只是由于训练数据呈现的差异,例如通过正则化损失梯度?

  为了验证填充 token 是否带来了与最终预测相关的隐藏计算,研究人员冻结了模型权重,仅微调最后一层注意力层。

  上面的结果表明,随着可用的填充 token 增多,模型的准确性也不断提高,这表明填充 token 确实正在执行与 3SUM 预测任务相关的隐藏计算。

  局限性

  虽然填充 token 的方法很玄学、很神奇,甚至还很有效,但要说思维链被干翻了还为时尚早。

  作者也表示,填充 token 的方法并没有突破 Transformer 的计算复杂度上限。

  而且学习利用填充 token 是需要特定训练过程的,比如文中采用密集监督才能使模型最终收敛。

  不过,一些问题可能已经浮出水面,比如隐藏的安全问题,比如提示词工程会不会突然有一天就不存在了?

  参考资料:

  https://x.com/jacob_pfau/status/1783951795238441449