注意与自我注意有什么区别?对方解决了哪些对方解决不了的问题?

数据挖掘 美国有线电视新闻网 注意机制
2021-10-02 00:27:27

如上面的问题所述..注意和自我注意机制之间有区别吗?另外,任何人都可以与我分享有关如何在 CNN 中实现自我注意机制的提示和技巧吗?

3个回答

这是我所知道的关于注意力 (AT) 和自我注意力 (SA) 的差异列表。

  1. 在神经网络中,您有层之前的输入、层的激活(输出),而在 RNN 中,您有层的状态。如果在某个层使用 AT - 注意力会查看(即从其中获取输入)某个其他层的激活或状态。如果应用了 SA - 注意力会查看应用它的同一层的输入。

  2. AT 通常用于将信息从编码器传输到解码器。即解码器神经元接收来自编码器状态/激活的附加输入(通过 AT)。所以在这种情况下,AT 连接了 2 个不同的组件——编码器和解码器。如果应用 SA - 它不连接 2 个不同的组件,它会应用在一个组件中。如果您使用 SA,可能根本没有解码器,例如在 BERT 架构中。

  3. SA 可以在单个模型中独立应用多次(例如在 Transformer 中 18 次,在 BERT BASE 中 12 次),而 AT 通常在模型中应用一次并连接一些 2 个组件(例如编码器和解码器)。

  4. SA 擅长建模序列不同部分之间的依赖关系。例如 - 了解句子中单词之间的句法功能。另一方面,AT 仅对 2 个不同序列之间的依赖关系进行建模(例如,原始文本和文本的翻译)。虽然 SA 在翻译任务中可能非常出色(请参阅 Transformer)

  5. AT 可以连接 2 种不同的模式(即文本和图像)。SA 通常在单个模态中应用,但您仍然可以将 2 个模态的激活连接到单个序列中并在其上应用 SA。

  6. 一般来说,SA 机制对我来说看起来更通用,因为它可以做的比 AT 更多。您可以通过将输入序列替换/连接到您希望关注的目标序列来模拟 AT 和 SA。

还有一些笔记

  • 多头注意力一词经常与 SA 一起使用。但理论上你也可以将多头方法应用于 AT。
  • 以下术语:基于内容的注意力、加性注意力、基于位置的注意力、一般注意力、点积注意力、缩放的点积注意力——用于描述输入如何相乘/相加以获得注意力分数的不同机制。所有这些机制都可以应用于 AT 和 SA。
  • 注意力计算的 Key/Query/Value 方法通常应用于 SA。但您也可以将其用于 AT。

让我试着让它更直观,更少数学

在 2014 年之前,如果序列超过一定大小,RNN 过去常常表现不佳。在所有 RNN 对序列中的所有步骤进行编码之后,并给出一个最终输出,该输出被“假定”为某种序列嵌入。这适用于短序列,但超过一定长度,它开始“忘记”事情。

为了解决这个问题,Bahdanau 等人在 2014 年提出了一篇具有里程碑意义的论文。他们在解码器端的模型中使用了编码器的所有隐藏状态(而不仅仅是最后一个状态)。但最好的部分是——他们让模型在解码每个单词时特别“注意”某些隐藏状态。他们让模型本身“学习”在解码器的每个单词的翻译过程中要注意哪些单词以及忽略哪些单词。

这种方法效果很好,4 年来,提出了各种形式的关注。RNN 与 Attention 相结合似乎解决了 NLP 中一个长期悬而未决的问题。

现在场景转移到 2018 年,当时谷歌的一个团队展示了 NLP 的游戏规则改变者。论文的名称是“Attention is all you need”,他们声称 Attention 是编码序列所需的全部。不再有 RNN 和串行处理。剔除 LSTM 和 GRU,只使用注意力进行编码。当然,为此他们对注意力的应用方式做了一些改变。他们使用了自我注意模型,该模型很大程度上受到 Cheng 等人的论文https://arxiv.org/pdf/1601.06733.pdf的启发. 在 self-attention 中,attention 的概念用于编码序列而不是 RNN。所以编码器和解码器现在都没有 RNN,而是使用注意力机制。本身最简单的形式 - 序列中的每个单词都关注同一序列中的每个其他单词,并且以这种方式捕获序列中单词之间的关系。

所以总结一下差异 - 传统的注意力与 RNN 结合使用以提高它们的性能。使用自我注意代替 RNN,它们做得更好,速度也更快。所以从这个意义上说,它们是完全不同的。

在注意力机制中,您期望数据 V 相对于某个概率质量函数的表示,从而计算上下文向量,它本质上是数据的汇总统计量(加权平均值):

c=Ep[V]
最大的问题是你如何确定元素 p,概率向量。在经典注意力中,您有一个域S,这是一组位置。假设我们在一个语言环境中,在这种情况下我们有一个序列X={x1,,xn} 词的向量表示,我们有域 S={1,,n}. 权重pp(t|X). 例如,假设我们有句子“他吃了所有的馅饼”。我们调查t=3. 注意力权重为t=3 本质上是问位置有多重要 3 是,给定整个序列。

自我关注反而有领域 S包括位置/位置观察值信息,而不是以整个序列为条件,而是询问一个单词(及其位置)的重要性,以其他单词及其位置(两者的向量表示)为条件,一个查询。这是p(Xķ|Xq). 所以不要问,‘位置有多重要3 给定顺序?',它会询问“所有”在位置上的重要性 3 鉴于我们在位置上有“馅饼” 6'?本质上,您正在用成对比较替换整个序列的条件。