【Lambda Networks】不需要注意! 这就是新一代的lambda网络!
三个要点
✔️ LambdaNetworks是Attention的替代方案,由ICLR2021提出并采用。
✔️ 考虑广泛的互动而不使用注意力
✔️ 在计算效率和准确性方面都优于注意和卷积模型。
LambdaNetworks: Modeling Long-Range Interactions Without Attention
written by Irwan Bello
(Submitted on 17 Feb 2021)
Comments: Accepted by the International Conference in Learning Representations 2021 (Spotlight)
Subjects: Computer Vision and Pattern Recognition (cs.CV); Machine Learning (cs.LG)
code:
本文所使用的图片要么来自论文件,要么是参照论文件制作的。
简介
对数据中的长期依赖关系进行建模已被作为机器学习的核心问题进行研究,而自我关注作为一种流行的方法最近得到了关注,但它的计算成本很高,而且没有被应用于多维数据,如长序列或图像。线性注意机制为这种高内存要求提供了一个可扩展的解决方案,但未能对内部数据结构进行建模,如像素之间的相对距离或图中节点之间的边缘关系。
因此,本研究中提出的LambdaNetworks解决了这两个问题。我们提出了一个LambdaLayer,它以较低的内存成本来模拟查询和结构化的Context元素之间的长距离交互。虽然Self-Attention在Query和Context元素之间定义了一个相似性内核,但Lambda Layer将Context信息总结为一个固定大小的线性函数(即矩阵),避免了对记忆密集型注意力地图的需求。这就避免了对耗费记忆的注意力地图的需求。
正如下面的实验结果所示,LambdaNetworks比基于卷积和注意力的模型要准确得多,同时它的计算效率高,速度快。兰姆达层可以使用einsum操作和卷积核轻松实现,并在Github上提供。研究还表明,只需用Lambda Layer替换现有的一些模型,如ResNet,就可以提高性能。
兰姆达层的解释
整体形象
捕捉长距离的互动与上图中如何考虑到全球背景的问题是一样的。问题是,通常的卷积只能考虑到小核大小的部分,而不能考虑到全局上下文。现在经常使用的 "注意力",通过引入 "注意力地图"来考虑全局背景,计算每个像素和所有其他像素的重要性。请注意,在上图中,局部上下文只显示了图像的一部分,但在Self-Attention和Lambda中,局部上下文往往被扩展到整个图像,即达到与全局上下文相同的大小。现在,注意力图可以考虑到全局背景,但同时,众所周知,它的计算成本很高,因为它需要为整个图像的每一个像素计算不同的注意力图。因此,从上图可以看出,Lambda比Attention Map更抽象地聚合了信息,然后只要求全局上下文的Lambda一次。细节将在后面描述,但我希望你对Attention和Lambda之间的区别有一个大致的了解。
注意
为了解释Lambda,我想先回顾一下Attention,因为这样最容易比较Lambda和Attention的区别。
上图简明扼要地总结了Attention,不需要进一步解释。在这里,内存被使用了两次,以key和value的形式,其中key用于遍历,value则作为值本身使用,这种机制在Lambda中的使用方式相同(内存这个词在Lambda中被称为上下文)。在自我关注中,输入和记忆是相同的内容,但在Lambda中,输入和上下文往往也是相同的内容。"关注"的意义在于取查询和键的内积,如果向量相似,值会更大。注意力的关键点在于,通过对查询和关键的内积进行计算,利用向量相似则数值变大的特性,然后通过softmax进行非线性化,得到注意力图,通过与数值的乘积得到输出。这可以表示为:。
上面的 "注意"流程可以改写为解释Lambda,如下所示。请注意,背景与记忆是一样的。
兰姆达层
在很长的前言之后,我终于要解释一下Lambda层了。首先,下图说明了与注意的情况相同。
如果你把它与Attention的数字相比较,你可以看到其中的差别。不同的是,我们不对Query和Key的内积采取softmax,而只对Key采取softmax。根据作者的说法,用softmax对Key进行非线性化,并取其与数值的乘积的意思是,我们在总结内容。回想一下前面描述的Lambda的形象,这里的信息是以一种比Attention更抽象的方式总结出来的。事实上,从Context到λ的转换将维度从m降低到k,你可以看到它的作用就像降维。你可以看到,所提出的架构是基于Attention的,但与Attention完全不同。
位置的兰姆达
上面描述的λ在本文中被称为内容λ。正如你所看到的,内容lambda实际上能够总结上下文,但它不能捕捉到图像中的位置关系。因此,位置λ与内容λ一起被引入,以考虑到相对位置。
E将是一个维度为N×M×K的索引张量。它们是一组固定的学习参数,作为位置嵌入。然而,在实践中,嵌入直接位于输入上,所以大小为M×K,而这要乘以N个输入。这个E与一个称为嵌入的矢量相关联,关键是这个N×M和K维的矢量矩阵是逐层学习的,因此计算结果不会因实例而改变。这意味着N×M×K在内存中是固定的,不随批处理量的增长而增长。
大局观
上图显示了内容λ,位置λ,最后是Query和λ的乘积。而公式如下。根据前面的解释,我认为没有问题。
实施代码
Lambda层可以在Github上找到(https://github.com/lucidrains/lambda-networksGithub上有Lambda层的PyTorch实现(见下文),论文中也有对该代码的简要描述。
从上面的代码中,你可以看到定义Lambda Layer是非常容易的。einsum是pytorch的一个内置函数,它允许你以简化的形式进行多维线性代数数组操作,基于爱因斯坦的收缩符号。然而,einsum使得执行张量乘积操作变得容易。
Lambda层被设计得非常简单,所以很容易将现有模型的一部分,如ResNet,改写成lambda层。论文中还提到了LambdaResNet的PyTorch实现,可在Github(https://github.com/leaderj1001/LambdaNetworks).
实验结果
作者将Lambda层与卷积网络和Self-Attention进行了比较。
从上图可以看出,与其他方法相比,Lambda层的参数非常少,只有15或16M。然而,在ImageNet分类任务中,它能够取得比其他方法更好的准确性。
下图还显示了内存成本和准确性,再次表明Lambda层以更少的内存实现了更高的准确性,特别是与Self-Attention相比。
下图进一步说明了准确性和训练时间之间的权衡。事实再次表明,LambdaResNet比EfficientNet在更少的训练时间内取得了更高的准确率。
最后
本文提出了一个名为LambdaNetworks的新模型,它可以在不使用Attention的情况下考虑到整个图像的信息,在解决Attention的高计算成本问题的同时实现了较高的精度。实施非常简单。实现本身非常简单,所以你可能想试一试。
与本文相关的类别