Transformer 中的多头注意力机制和前馈神经网络的需求

数据挖掘 机器学习 神经网络 深度学习 机器翻译
2021-09-25 09:36:07

阅读论文后,Attention is all you need,我有两个问题:

1. 多头注意力机制需要什么?

论文说:

“多头注意力允许模型共同关注来自不同位置的不同表示子空间的信息”

我的理解是它有助于回指解析。例如:-“这只动物没有过马路,因为它太……(累/宽)”。这里的“它”可以根据最后一个词来指代动物或街道。我的疑问是为什么一个注意力头不能在一段时间内学习这个链接?

2.我也不明白transformer的encoder模块需要前馈神经网络。

谢谢你的帮助。

2个回答
  1. 我认为,基本的推理只是增加容量。虽然理论上单头是可能的,但使用多头会更容易。更具体地说,该论文说(第 4 页):

    多头注意力允许模型共同关注来自不同位置的不同表示子空间的信息。对于单个注意力头,平均化会抑制这一点。

    换句话说,对于只有一个注意力头的给定层,该机制执行的加权平均会阻止您从该单层内的多个输入区域访问(不同转换的)信息。我认为这可以通过使用多层来缓解,但添加此功能只会增加单层的容量,因此您可以用更少的层执行更有用的计算。这通常是好的,因为堆叠层(函数组合)可能会导致比并行层(如多头)更多的问题,尤其是在梯度计算方面。(这就是残差/跳过连接如此有用的部分原因)。

    一般来说,使用多头是增加基于注意力的模型中表示能力的常用方法,例如参见Velickovic 等人的Graph Attention Networks基本思想是,虽然注意力可以让你“关注”更多相关信息并忽略无用的噪音,但它也可以消除有用的信息,因为通常可以通过注意力机制获得的信息量非常有限。使用多个头为您提供更多空间。

  2. 大概你在问“位置前馈网络”。同样,我认为这仅仅是模型容量的问题:模型可以在没有这些层的情况下运行,但可能不会那么好。这些层很有趣,因为它们本质上是一维卷积,通常出现在计算机视觉架构中的网络或块的末端附近(我更熟悉)。换句话说,它们是在输入(空间)上操作相同的局部变换。原因通常是之前的层(这里是注意力层;在视觉中,具有较大内核大小的卷积层)对于在空间上跨输入传递或混合信息是合理的。例如,在注意力层之后,每个位置的潜在表示包含来自其他位置的信息。在这之后,但是,我们希望为每个位置合并一个“唯一”表示(当然,它已被告知其他位置)。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。我们希望为每个职位合并一个“独特的”表示(当然,它已被告知其他职位)。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。我们希望为每个职位合并一个“独特的”表示(当然,它已被告知其他职位)。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。每个职位的代表(当然,已被告知其他职位)。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。每个职位的代表(当然,已被告知其他职位)。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。我们通过本地化层的处理来做到这一点,该层不考虑邻居或其他位置,并简单地自行转换本地表示。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。要记住的一件事是,虽然我们希望信息在“空间”中混合(例如,跨图像或句子),但对于许多任务,我们通常仍然需要每个位置保持与其原始身份的相似/连接(而不是而不是说只是平均所有位置的所有信息)。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。所以并不是每一层都需要空间感知。在视觉模型中,一维卷积(即内核宽度为 1)通常用于执行降维;在这种情况下,维度似乎并没有改变。

(根据我自己的理解,只回答问题的第一部分。)

多头注意力是一个随机初始化的多维索引系统,其中不同的头关注索引标记实例的不同变体(标记=最初,例如单词或单词的一部分)相对于其包含序列/上下文。这样的编码标记实例包含有关输入序列的所有其他标记的信息 = 也称为自我注意,并且这些标记根据给定的“注意头”如何(随机)初始化而变化。

因此,我们将(希望)最终(至少)具有(索引/身份的)两种变体:

  1. 指“街道”的“它”
  2. 指“动物”的“它”

因此,当模型在真实数据上进行训练时,对于以“疲倦”(指动物)结尾的相似句子/上下文,在构建输出序列。