©PaperWeekly 原创 · 作者 | 苏剑林
单位 | 追一科技
研究方向 | NLP、神经网络
当前,像 ChatGPT 之类的 LLM 可谓是“风靡全球”。有读者留意到,几乎所有 LLM 都还是用最初的 Multi-Head Scaled-Dot Attention,近年来大量的 Efficient 工作如线性 Attention、FLASH 等均未被采用。是它们版本效果太差,还是根本没有必要考虑效率?
其实答案笔者在《线性Transformer应该不是你要等的那个模型》已经分析过了,只有序列长度明显超过 hidden size 时,标准 Attention 才呈现出二次复杂度,在此之前它还是接近线性的,它的速度比很多 Efficient 改进都快,而像 GPT3 用到了上万的 hidden size,这意味着只要你的 LLM 不是面向数万长度的文本生成,那么用 Efficient 改进是没有必要的,很多时候速度没提上去,效果还降低了。
那么,真有数万甚至数十万长度的序列处理需求时,我们又该用什么模型呢?近日,Google 的一篇论文《Resurrecting Recurrent Neural Networks for Long Sequences》重新优化了 RNN 模型,特别指出了 RNN 在处理超长序列场景下的优势。那么,RNN 能否再次辉煌?
论文标题:
Resurrecting Recurrent Neural Networks for Long Sequences
https://arxiv.org/abs/2303.06349
▲ 在 LRA 的各个任务上,线性 RNN 反而是最好的
这是一个让人意外的好消息。“意外”是因为可能会颠覆某些读者关于模型对非线性需求的认知;当然有些读者可能也不意外,因为 MetaFormer [3] 等工作也表明过,得益于 FFN 层的强大,Self Attention 等负责混合 token 的层的非线性可以很弱,甚至 Pooling 层都行。至于“好消息”,则是因为线性 RNN 有并行的实现算法,计算速度会大大快于非线性 RNN。
于是,作者围绕线性 RNN,进行了一系列探讨。
反复迭代得到:
这里介绍 LRU 的两个相关变体。
代码化
Github:
https://github.com/bojone/rnn
如果直接按照递归公式实现串行版的 RNN,那么训练速度将会非常慢(预测都是串行的自回归,所以预测没问题)。前面说了,线性 RNN 的一个重要特性是它本身有并行算法,可以大大加快训练速度。
事实上,我们可以将(7)改写为:
效果化
这一节我们将演示原论文在 LRA 上的实验结果,以及笔者在语言模型(LM)任务上的实验结果。
原论文中,作者主要是通过理论和实验相结合的方式,演示了如何一步步地优化普通的 RNN,直到在 LRA 上取得接近 SOTA 的效果,这个分析和改进的过程可谓是引人入胜,值得反复品味。但由于原论文的实验都是在 LRA 上反复进行的,所以实验本身并无过多精彩之处,这里只演示论文中的 Table 8:
从实验结果上我们可以得出:
但不可否认,同尺度的 RNN 系列模型在推理效率上更优(每步递归的计算量和 cache 大小都一致),而训练效率上也不输于 Attention 系列,因此模型放大之后,应该还是有机会跟 Attention 系列一较高低的。
特别要指出的是,RWKV 虽然整体表现不错,但它是笔者实验的唯一一个会出现 spike 现象的模型(如图的 Loss 曲线突然飙升,试过重跑也有出现,不是偶然),所以公平比较之下,RWKV 也没有传说中那么完美无暇,它也需要很多 trick。
事实上,RWKV 作者自己的实现中,就包含了一系列据说有助于训练 LM 但相当晦涩的 trick(按照作者的意思,他这些 trick 才是“精华”),这些 trick 需要读作者给的源代码才能发现,它们没有考虑进笔者的实验中。不排除这些 trick 有助于更好训练一个 LM 的可能性,但笔者更多的是想做一个公平的对照实验而非实际训练一个 LM 模型,一旦引入这些 trick,变量就太多了,笔者算力有限,无法一一对照。
当然,以上结论都只是在 1 亿级别的“小模型”中得出的,更大尺度的模型笔者还在尝试中,暂时没法给大家结论。
参考文献
[1] https://arxiv.org/abs/2111.00396
[2] https://github.com/BlinkDL/RWKV-LM
[3] https://arxiv.org/abs/2111.11418
[4] https://kexue.fm/archives/7180
[5] https://arxiv.org/abs/2209.07484
[6] https://en.wikipedia.org/wiki/Prefix_sum
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧