前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Transformer真的需要注意力吗?

Transformer真的需要注意力吗?

作者头像
McGL
发布2021-07-07 09:50:03
6660
发布2021-07-07 09:50:03
举报
文章被收录于专栏:PyVision

探索 Transformer 自注意力机制,一些改进及有前途的替代方案。

作者:Davide Coccomini 编译:McGL

近年来,基于自注意力特别是 Transformer 的方法大量涌现,首先是在自然语言处理领域,最近在计算机视觉领域。

Transformer 的成功与他们极高的效率和能力有关,相比自然语言处理中的 RNN 或计算机视觉中的卷积网络,他以一种更精妙的方式解决了重要的问题。在 Transformer 的基础上,一直有一种叫注意力的机制,被认为是“all you need”,不可或缺的和这个架构真正的核心。但并不是所有闪光的东西都是金子,事实上,自注意力需要巨大的计算量和内存开销,比如需要大量的视频内存,导致很长的训练时间。

苹果和谷歌等大公司也注意到了这一点,它们一直在努力改进 Transformer,使其不仅结果达到 SOTA,而且效率也很高。

>>> Efficient Transformers

最近,Transformer 的共同作者之一、谷歌研究员 Lukasz Kaiser 提出了一系列改进方案,在保持自注意力机制的同时,提高了 Transformer 的效率。他最关注的一点就是内存效率。

基于论文《Efficient Transformers》

Transformer使用大量的内存,因为在执行过程中会创建和维护多个中间张量,并且随着它们的累积,在没有大量资源的情况下,会迅速占满视频内存。

谷歌大脑提出的解决这个问题的方法是不保存所有张量在内存中,而是使过程的每一步都可逆。

基于论文《Efficient Transformers》

为了做到这一点,每个步骤都保存两个张量,一个是应用层的结果,另一个是前一个张量的副本。这让进程继续而不必维护整个中间张量链,而只需维护最后一步的张量链。

基于论文《Efficient Transformers》

有了这种策略,人们就能够显著地降低内存成本,同时仍然获得与普通 Transformer 相同的结果。这可能是目前已知的最聪明的方法之一,保持 Transformer 架构完全基于自注意力的传统,但成本低很多。

>>> AFT: Attention Free Transformers

但在什么情况下,自注意力的计算会变得如此复杂?有没有消除二次的(quadratic)复杂性的方法?我们真的需要像目前那样进行注意力计算吗?这些都是苹果的研究人员自问的问题,这些问题构成了无注意力(Attention Free) Transformer 的基础。

问题在于点积,它用于组合查询、键和值,并且是通过将每个单独的输入向量作为一个查询来实现的。意识到了这一点,无注意力 Transformer 的设计从不用点积,但同时保留了它的优势。

和原版的 Transformer 一样,AFT 最初通过查询、键和值的矩阵输入线性映射来创建 Q、 K 和 V。

这个方法的特点是,这里不是执行点积来创建注意力矩阵,而是为每个目标位置执行加权平均数。其结果通过元素级乘法与查询结合。

来源:论文《An Attention Free Transformer》

通过这种机制,可以得到与输出特征的数目和所考虑序列的长度有关的线性计算和空间复杂度。从概念上讲,它只是使信息在序列中流动的一种不同的方式,但是代价要低得多。

通过将原版 Transformer 论文里测试过的很多任务用来测试无注意力 Transformer,可能看到,例如在图中所示的视觉Transformer(左),和从 AFT (右)获得的特征,在这种情况下,AFT-conv 版本,即使是逼近的,但似乎仍然有意义。

来源:论文《An Attention Free Transformer》

通过这种机制,不仅可以降低计算注意力的成本,而且在考虑的所有任务中都取得了优异的结果,这表明这种解决方案能够保持点积的所有优点,但不需要那么大的计算成本。

>>> FNet: Fourier Networks

但也有一些人考虑完全放弃注意力的计算,并开始寻找一种机制,这种机制可以与注意力一样有效,但计算成本不会那么高。

似乎这项任务的一个很好的候选是傅里叶变换。傅里叶变换只不过是在一个域中获取一个函数,例如时间,然后把它带到另一个域中,例如频率。

由谷歌提出并基于这种机制的傅里叶网络(Fourier Network)与普通的 Transformer 完全相同,但是注意力计算块被一个负责傅里叶变换的层所取代。

有 N 个输入向量,由 T 个 token 组成,傅里叶变换首先应用于所谓的“隐藏域”,然后到“序列域”。所有这些都是在没有任何类型的参数的情况下完成的,这是巨大的优势,因为其他层中的参数是唯一可以训练的参数,从而减少了模型参数的数量。

因此,转换是线性的,应用于输入的逐列,然后再逐行。除了应用傅里叶变换的简单之外,它还有可逆性的优点。

与 AFT 的情况完全一样,这一系列的转换使序列的各个部分相互影响成为可能,结果是一个转换的表示,其中包含来自输入序列各个部分的信息。

显然,这似乎是一个非常有趣的方法,能够显著降低注意力计算的成本,并取得离散的(discrete)结果。但事实上,FNet 看起来并不比传统的 Transformer 好,可能还有其他更好的方法以更低的成本获得差不多的结果。但是在缺乏大量计算资源的情况下,FNet 可能是一个真正有效的选择。

>>> 未来等待我们的是什么?

现在很显然,Transformer 是一个非常强大的架构,能够解决最多样化的问题,从翻译到分割到分类,得到的效果我们从来没有见过。然而,长期以来,人们一直认为它们过度消耗资源,而计算机视觉技术的出现更加突出了这一问题,促使很多研究人员寻求解决方案。在未来,我们可能会看到基于注意力的 Transformer 被优化得更轻,或者 Transformer 被去掉了注意力机制,为更多近似的技术腾出空间,又或者是全新的网络,类似于 Transformer,但是有不同的输入转换策略,比如傅里叶变换。

有一件事是肯定的,尽管目前大多数人还不能充分利用这个架构,但发展永不停息,Transformer 巨大的潜力和可用性将使它比现在更加普及和重要。

References and Insights: [1] “Lukasz Kaiser”. “Efficient Transformers” [2] “Shuangfei Zhai et al”. “An Attention Free Transformer” [3] “James Lee-Thorp et al”. “FNet: Mixing Tokens with Fourier Transforms” [4] “Yannic Kilcher”. “FNet: Mixing Tokens with Fourier Transforms (Machine Learning Research Paper Explained)” [5] “Davide Coccomini”. “On Transformers, Timesformers and Attention” [6] “Davide Coccomini”. “On DINO, Self-Distillation with no labels”

原文: https://towardsdatascience.com/is-attention-what-you-really-need-in-transformers-6c161c2fca83

“觉得有帮助请分享,点赞,在看;没帮助请点在看并评论大力批判。”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyVision 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • >>> Efficient Transformers
  • >>> AFT: Attention Free Transformers
  • >>> FNet: Fourier Networks
  • >>> 未来等待我们的是什么?
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档