Masked Multi-Head Attention

  在decoder中,相较于encoder,decoder具有三个子层,其中多出来的一层是Masked Multi-Head Attention。为什么会有这一层呢?因为在decoder进行某个时间步t的预测输出时,此时是不能知道后面时间步的输出的,否则既然知道了要输出这个为什么还要预测呢?
  okay,那么问题来了,为什么decoder可以知道要输出的序列呢?原因是此处采取强制教学,即和原理图中一样,decoder将ground truth作为输入教给decoder,所以为了避免后面时间步的数据的泄露,所以需要加入MASK。而t时间步之前的输出本质上也是对时间步t的输出的一种启示信息。
  对应文章的

Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to −∞) all values in the input of the softmax which correspond to illegal connections.

Multi-head attention

  此处是关于multi-head attention的一些思考,参考了知乎上的回答。
  之所以会考虑这个,是因为论文中提到multi-head attention可以解决single-head导致的注意力均分的问题,然后我没有明白single-head为什么会导致注意力均分,然后查资料的过程中存在一些对multi-head的思考。
  知乎上有个回答是关于Multi-head真的是关注不同子空间特征的吗?(https://www.zhihu.com/question/341222779/answer/814111138)
  回答指出,既然是同一层,那么transformer应该会关注同一层。但是原论文中指出Multi-head的提出是用于关注句子的不同方面。从第一反应来看,这两个说法确实是矛盾的。接着回答给出一些实验的例子,即存在一些层,所有的head的趋势相同,而某些曾的head则会与同层的其他head不同。那么为什么呢?真的是这些head关注到了不同方面吗?
  注意到参数需要初始化,那么有可能是初始化的不同会导致head学习到不同的结果。如果每个head的初始化参数不同,在进行梯度反向传播的时候是否就会往同一个方向进行收敛呢?回答指出,模型可能认为全部一样的投不会导致模型收敛,那么将头解释为模型的试探或者说transformer的self-attention对初始值的选取较为敏感
 结合我之前看jalammar的博客,8个head对句子的关注点确实不同,有的head关注到了正确的部分,而有的head关注到了错误的部分。

我认为此处的multi-head策略可能更倾向于提供一个可选集,然后将每个head的输出进行拼接之后会经过一个投影得到这个self-attention层的真正输出。在这里,这个投影其实就是对可选集中attention的选取,此处的参数用于正确选取N(默认为8)个中正确的attention。这样也可以解决我之前对于将N个head的输出进行联结之后,因为只是想解决fc层输入维度的问题而简单地将结果联结然后进行一个投影的疑惑。如果这样想的话,就可以解释这个投影的作用了(这个想法真的太棒了)。
  所以为什么single-head会导致average抑制呢?????


0 条评论

发表评论