Transformer升级之路:一种全局长度外推的新思路

news2024/11/26 2:55:01

3e92c3cb576ac5c41976039c798e7ed9.gif

©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 追一科技

研究方向 | NLP、神经网络

说到 Transformer 无法处理超长序列的原因,大家的第一反应通常都是 Self Attention 的二次复杂度。但事实上,即便忽略算力限制,常规的 Transformer 也无法处理超长序列,因为它们的长度外推性(Length Extrapolation)并不好,具体表现为当输入序列明显超过训练长度时,模型的效果通常会严重下降。

尽管已有一些相关工作,但长度外推问题离实际解决还比较远。本文介绍笔者构思的一种参考方案,它可能是目前唯一一种可以用在生成模型上、具备全局依赖能力的长度外推方法。

ad22ad5ccf4e427f0d734f23941eab55.png

方法回顾

长度外推,也称为长度泛化(Length Generalization),此前我们在《Transformer升级之路:长度外推性与局部注意力》、《Transformer升级之路:长度外推性与位置鲁棒性》已经介绍过部分工作。然而,它们各有各的问题。

第一篇文章介绍的各种方案都是将注意力局部化的思路,虽然指标上能够体现出改进,但实质也就只是指标好看了一点,无法做到全局依赖的外推,所以对于真正需要长程依赖的场景(如 In Context Learning)并无实质帮助;后者通过随机位置扰动增强对位置信号的鲁棒性,理论上有可能保留全局依赖,但该方法只适用于 Encoder 模型,不适合于 GPT 之类的自回归生成模型。

所以,长度外推问题依然是目前 Transformer 亟待解决但还没解决的一个问题。事实上这个问题不仅存在于 Transformer 中,像我们之前在《Google新作试图“复活”RNN:RNN能否再次辉煌?》中介绍的线性 RNN 模型(包括很火的RWKV),其长度外推能力也并不好。在如今 LLM 时代,长度外推能力显得尤为重要,因为我们总希望模型能够处理任意长的文本,但又不可能把训练样本的长度拉到任意长。

0a5ef238d32c12522e7b264608152fd7.png

平移不变

接下来我们将针对自回归式 Transformer 进行介绍,但方法对双向注意力的 Encoder 也是有效的。本质上来说,局部化注意力就是通过限制注意力的感知范围,来赋予整个模型“平移不变性”。平移不变性的一个简单基准是 Window Attention,如下图所示:

882ed352d6f8acd495e72f6ffa22483b.png

▲ Window Attention

e728a3d34a6f822f7865bf904c831cfc.png

▲ 堆叠感受野示意图

假设模型包含 层堆叠的 Window Attention,Window 大小为 w,那么最后一层的每个 token,最大的感受野是 。所以,假设训练长度为 ,那么在 的约束之下,模型就能够获得一定的平移不变性,因为此时模型的最大感受野都不超过 ,所以模型的总感受野得到了较为充分的训练。 越小,平移不变性通常越好。

然而,尽管这样能确保平移不变性的出现,但是会带来另外的问题,最严重的就是由于每层的感受野被限制在 内,注意力机制的能力大大削弱,导致训练效果不如常规注意力(下面称为 Full Attention)。此外,我们对长度外推的期望其实不仅仅是“平移不变性”,而是“平移更好性”,也就是说越往后效果应该越好才对(比如 In Context Learning 场景,给的 examples 越多,效果应该越好),所以模型还应该要能捕捉全局依赖的能力。

f86f3a5821151e8b85c9d4b4fe51343b.png

全局依赖

为此,笔者想到:Window Attention 得到的结果本质上就是某种 -gram 特征,只不过在多层堆叠之下这个 会变得比较大;而单层的 Full Attention 可以看作是某种“检索”(从 query、key、value 这些称呼就可以看出)和“融合”,它的规律相对来说比较容易分析,之前我们便在《从熵不变性看Attention的Scale操作》得到了单层(全)注意力可以通过增加 缩放因子来增强长度外推性的结论。

所以,笔者萌生了一个想法:

如果前面 层通过 Window Attention 获得了 -gram 特征,最后一层可否替换为带 因子的 Full Attention 来检索和整合这些特征,以弥补效果上的差距和获得全局依赖的能力呢?

为此,我们提出如下注意力的组合方式(Hybird Window-Full Attention,简称HWFA):

1. 前面 层使用 Window 为 w 的“Window Attention+RoPE”,满足约束 ,这里 是训练长度,为了兼顾训练效果和外推效果,建议在 的前提下选择尽量大的 ;

2. 第 层使用带 因子的 Full Attention,但是不使用 RoPE。

之所以前面要使用 RoPE,是因为诸多实验结果已经表明 RoPE 有助于增强模型效果(至少 base、large 级别的模型如此),而最后一层不用 RoPE,是因为超出训练长度的 RoPE 没有被训练过,会影响长度外推效果。事实上,前面 层的 RoPE 已经足够为模型补充位置信息,最后一层不加 RoPE,基本不会影响模型训练效果。

e91869a4ebe451cf99f8b7fbab359303.png

实验结果

很明显,HWFA 是一种注意力的组合方式,它可以用于标准的多头注意力中,也可以用于 GAU 等注意力变体中。笔者在 GAU_alpha 的基础上进行了实验:训练长度 512,24 层 GAU,前 23 层用 Window Attention,Window大小 ,测试的是逐 token 准确率,对比的 Baseline 是全部层都是 Full Attention+RoPE (即常规的默认用法)。

结果让人很鼓舞:

ddd741ab99c3b7d4f7ce258dc8d39613.png

512 代表训练准确率(也可以叫内插准确率),4096 代表外推准确率。为什么训练准确率才 40 多,而外推能到 80 多这么夸张?这是因为笔者在构造测试样本的时候,包含了部分重复拼接样本,即同一段不超过 4096 长度的文本,通过重复拼接达到 4096 长度,由于这些样本的后面部分是前面部分的重复,因此这部分准确率很高(即前面已经给出了标准答案),这说明跟我们想象的一样,这样的设计下的长度外推是不牺牲全局依赖能力的。

如果把重复样本剔掉,只保留正常的自然文本样本,那么结果也还能看:

9d7645e963a70a45b10624321e943cfc.png

为了进一步验证全局依赖能力,笔者还做了《Transformer升级之路:长度外推性与位置鲁棒性》中的 even pairs 任务(判断首尾字符是否相同),本文的方法能做到 100% 的外推准确率,这也说明模型能够学到全局依赖(注意力需要跨越整个序列,才能准确判断是否相同)。

笔者也做了一些消融实验,结果如下:

1. Window Attention 不加 RoPE,内插和外推效果都会下降;

2. Full Attention 加上 RoPE,外推效果会下降;

3. Full Attention 不加 因子,外推效果会下降;

4. 全用 Window Attention,内插和外推效果都会下降;

5. 改为 层 Window Attention + 2 层 Full Attention,外推效果会下降;

6. (此时 ),外推效果会下降。

b8e81e1dd457094ba34b10ac1ca53fbd.png

对比分析

可能有读者想问:怎么不见跟其他方法的对比?原因可能大家都想不到——因为当笔者在 GAU 上实验《Transformer升级之路:长度外推性与局部注意力》的部分方法时,发现它们全都失效了(外推能力都很差)!

为什么会这样呢?笔者第一反应是这些相关工作实验的都是标准的多头注意力,而我实验的是 GAU,作为注意力机制来看,GAU 最大的特点是单头的(跟原版的 GAU 不同,笔者实验的 GAU,同样是 softmax 归一化的),所以笔者感觉是多头和单头的差异,像 ALIBI、Sandwich、XPOS 等方案,它们的参数设计确实也都是为多头设计的,单头上的有效性确实有待验证。

然而,经过进一步验证,笔者发现单头和多头的差异对长度外推能力的影响并没有想象中大,说明必然还存在别的原因在里边。直到前几天,笔者才意识到另外一个重要区别:笔者一直都是用 Post Norm 架构,而主流的工作都用 Pre Norm 了。

在《为什么Pre Norm的效果不如Post Norm?》我们分析过,Pre Norm 的深度其实略有“水分”,所以当给每一层 Attention 都施加局部化限制时,Pre Norm 最后输出的特征其实更加局部化一些,从而外推效果也更好一些。

所以,从目前的结果看来,如果笔者坚持 GAU+Post Norm 的组合,那么本文的方法似乎是能实现长度外推的唯一方案。当然,笔者也已经尝试在标准的多头注意力下对比 HWFA 和其他工作的优异,有进一步的结果再跟大家同步。

f0e813919a84c229db844fd58d3dce2c.png

延伸思考

从笔者的实验结果可以看到,HWFA 的组合相比 Baseline,在训练效果上是略差一点的。所以一个很自然的担心是这个差异是否会随着模型尺度增大而进一步放大?又或者说,要是参数量增加到百亿甚至千亿,这样的设计是否跟标准设计一样具备涌现能力?这确实是 LLM 时代很多人对各种架构修改的担忧,即 Scaling Law 问题。诚然,在真正把 HWFA 的参数量放大到百亿规模之前,这个问题没有确定答案,但初步猜测应该会有能力瓶颈。

当然,HWFA 目前还只能算是长度外推的一个 Baseline,它的主要目的是做到长度外推的同时,保留全局依赖能力,初步来看它是有潜力做到的。接下来的工作是在保留全局依赖能力的同时,把 HWFA 的训练效果赶上 Baseline。另外,HFWA 只能在最后一层全 Full Attention 捕捉全局依赖,这估计也会有性能瓶颈,但如果是更多层,那么又会带来长度外推能力的下降,这也是一个亟待优化的问题。

值得一提的,由于前面 层的 Window Attention 仅仅是有限的感受野,所以理论上换成 CNN 等模型也是有可能的,只要总的感受野不超过训练长度 就行。所以,尝试将 HWFA 的思考跟其他基础架构结合,也是一个值得思考的方向。

d28de93bd3334d6c5f44fd73d977fd55.png

文章小结

本文介绍笔者构思的一种长度外推方案,它通过 Window Attention 与 Full Attention 的结合,在形成长度外推能力的同时,保留了全局依赖能力,应该是目前唯一一种可以用在生成模型上、具备全局依赖能力的长度外推方法。

更多阅读

07c6251a797ebc20321307e1f8de1c2f.png

1c5b9a2481d76c5fef7d7f4b2bcb2bf0.png

0e5b6366a1ecd934ae2411e674d8ebed.png

6eb2e0b1dc8398b87695861820953527.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

64ae1bfd2ff9b16c85b8f322540857c9.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

14d450ec409f2bbc35d0ce9e9dd99461.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NetApp ONTAP Select 混合云存储解决方案

NetApp ONTAP Select 集敏捷性与经验证的数据管理功能于一体。 为什么选择 ONTAP Select 来实施混合云? -强大而敏捷的存储 既具备 ONTAP 软件的强大功能,也能够灵活地部署在远程办公室/后台位置以及数据中心外部的专用边缘环境中的商用硬件上。ONTAP …

python---逻辑运算符

and 并且 一假则假 or 或者 一真则真 not 逻辑取反 下面举例介绍上面代码的运行情况 运行结果如下: EG: 针对上述情况可以简化代码成如下: 短路操作 左侧为false右侧不在求值

如何使用 Megatron-LM 训练语言模型

在 PyTorch 中训练大语言模型不仅仅是写一个训练循环这么简单。我们通常需要将模型分布在多个设备上,并使用许多优化技术以实现稳定高效的训练。Hugging Face 🤗 Accelerate 的创建是为了支持跨 GPU 和 TPU 的分布式训练,并使其能够非常容易的…

WPS 借助 ML Kit 无缝翻译 43 种语言,每年净省 6,500 万美元

△ 动画说明: 在笔记本电脑屏幕中,汉字 "文" 将变为字母 "A",代表文本的横线将逐一出现,就像有人在输入内容一样。 WPS 是一款办公套件软件,可让用户轻松查看和编辑其所有文档、演示文稿、电子表格等。作为一…

JetBrains的Go语言集成开发环境GoLand 2023版本在Win10系统的下载与安装配置教程

目录 前言一、GoLand 安装二、使用配置总结 前言 GoLand是一款专为Go语言开发人员设计的集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、调试和部署Go应用程序。 GoLand的主要特点: ——代码编辑…

Learning C++ No.25【开散列封装unordered_set和unordered_map】

引言: 北京时间:2023/5/29/7:05,上星期更文一篇,且该篇博客在周三就写完了,所以充分体现,咱这个星期摆烂充分,哈哈哈!现在的内心情感没有以前那么从容了,这次摆的时间是…

MySQL高级篇复盘笔记(二)【日志、主从复制、分库分表、读写分离】

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

【Redis25】Redis进阶:分布式锁实现

Redis进阶:分布式锁实现 锁这个概念,不知道大家掌握的怎么样。我是先通过 Java ,知道在编程语言中是如何使用锁的。一般 Java 的例子会是操作一个相同的文件,但其实我们知道,不管是文件,还是数据库中的一条…

Dapper存取Blob类型数据

🌮 Dapper存取Blob类型数据 前言: blob类型是数据库用于保存二进制文件的一种类型,可以将文件存储到数据库的表中。(使用到的情况比较少,毕竟文件可以直接在服务器上保存并且访问为什么要放到数据库里。但如果你服务器…

1.MySQL安装与配置

1.MySQL安装与配置 📤1 数据库介绍📤🚪1.1关于MySQL主要要学啥🚪 ✉️2 MySQL服务器安装✉️📄2.1 Windows绿色安装📄📑2.2 Windows中重装MySQL📑 📨3 Mac中常见的安装问…

多云环境中的微服务应用安全挑战

随着越来越多的组织将云策略扩展到私有云、公共云、本地数据中心和边缘站点,将多云作为数字转型倡议的一部分,新的安全挑战不断涌现,必须在安全倡议的每个阶段加以考虑。 在云中操作具有多个优势,任何组织,无论是公共…

在线答题小程序制作,这些坑你一定要避免

在线答题小程序制作,你需要知道以下几个关键点,才能避免一些常见的坑。这里,我会为你详细介绍如何制作一个高质量的在线答题小程序。 关键点一:确定目标用户群体 在制作在线答题小程序之前,你需要确定你的目标用户群…

行云创新受邀参加阿里云开发者技术沙龙,分享云原生技术实践案例

云原生IDE,定义开发新常态 2023年5月28日,由阿里举办的云原生技术实践营-阿里云开发者技术沙龙在深圳市南山区成功举办。本次沙龙活动主要围绕云原生话题开展实践案例经验分享,行云创新CEO马洪喜作为受邀嘉宾之一,参加了本次活动…

UITableView学习笔记

看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些最近学习的TableView的知识。下面进入正题,UITableView堪称UIKit里面最复杂的一个控件了,使用起来不算难&a…

本地Linux搭建web服务并发布公网访问 - 无需公网IP

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章:在Ubunt…

代码随想录 栈与队列 Java

文章目录 (简单)232. 用栈实现队列(简单)225. 用队列实现栈(简单)20. 有效的括号(简单)1047. 删除字符串中的所有相邻重复项(中等)150. 逆波兰表达式求值&…

【红黑树 -- 理论与实现】

目录: 前言红黑树的概念红黑树的性质 插入过程遇到的情况情况1 -- 根节点情况2 -- parent为黑色情况3 -- parent为红色uncle为红色uncle为黑色uncle不存在 插入过程代码实现分析红黑树是否构建成功总结 前言 打怪升级:第88天 红黑树,可以说是…

Xubuntu16.04 系统偶发出现自动登出的问题

继上次发现的这个问题 xubuntu系统偶发自动登出,这次问题又浮现了,我第一时间拷贝了系统日志。 为了减少搜索量,可以先清除之前的系统日志,待问题出现 echo > /var/log/syslog echo > /var/log/kern.logMar 21 15:07:58 au…

面试:解决数字精度丢失

理论上用有限的空间来存储无限的小数是不可能保证精确的,但我们可以处理一下得到我们期望的结果 当你拿到 1.4000000000000001 这样的数据要展示时,建议使用 toPrecision 凑整并 parseFloat 转成数字后再显示,如下: parseFloat(…

为什么新产品没热度,流量分析

很多人反馈新产品上线之后却没有多少热度,这究竟是什么样原因呢?今天来为大家分享下为什么新产品没热度,流量分析。 新产品没有热度其实可以从两个主要方面进行探讨: 一、主观原因 1.缺乏吸引消费者的独特卖点 这个原因可能是新产品太过于普…