红极一时的思维链技术,可能要被推翻了!
还在惊讶于大模型居然能够利用思维链分步骤思考?
还在苦于不会写思维链提示词?
来自纽约大学的研究人员表示:「没关系的,都一样」,
推理步骤不重要,不想写提示词也可以不写,用省略号代替就行了。
论文地址: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个。
相比之下,使用思维链提示,模型会一步步比较大小,最终得到正确答案:「25,15,25,that's 3 digits」。
但更逆天的是本文使用的「玄学」方法:步骤不用写了,只需要输出同样数量的「点」(dot),居然也不影响最后的结果。
——这并不是巧合,大量实验证明了,后面两种方法的性能接近。
也就是说,我们以为的模型性能提升是来自于「think step by step」,但实际上可能只是因为LLM拿到了更多个token的算力!
你以为模型是在思考,但其实是在烧烤。
——愚蠢的人类啊,居然妄图用幼稚的例子教我如何推理,你可知我要的从来都只是计算。
「思维链从来就没有存在过,将来也不会存在」(狗头)。
文章的作者Jacob Pfau表示,这篇工作证明了,模型并不是受益于思维链带来的语言推理,使用重复的「...」填充token可以达到跟CoT同样的效果。
当然,这也引发了对齐问题:因为这个事实表明,模型可以进行CoT中不可见的隐藏推理,在一定程度上脱离了人类的控制。
文章的结论可以说是颠覆了我们长久以来的认知,有网友表示:学到了mask的精髓。
「这究竟意味着什么:模型可以在我们不知情的情况下使用这些token独立思考。」
有网友表示,怪不得我打字总是喜欢用「...」
还有网友直接开始实战测试:
虽然咱也不知道他的理解对不对~
不过也有网友认为LLM在思维链中进行隐藏推理是没有根据的,毕竟大模型的输出从原理上来说是基于概率的,而不是通过有意识的思考。
CoT提示只是将统计模式的一个子集显式化,模型通过生成与模式一致的文本来模拟推理,但它们不具备验证或反思其输出的能力。
面对复杂问题,我们人类在潜意识里会进行分步骤的推理。
由此启发,谷歌的研究人员在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是需要特定训练过程的,比如文中采用密集监督才能使模型最终收敛。
不过,一些问题可能已经浮出水面,比如隐藏的安全问题,比如提示词工程会不会突然有一天就不存在了?
以上是思维链不存在了?纽约大学最新研究:推理步骤可省略的详细内容。更多信息请关注PHP中文网其他相关文章!