Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions.
如何解释这个不同的注意力表示子空间?
以及表示子空间信息的差异性是如何来的?
对于这两个小问题,我从这个回答中找到了思路:为什么Transformer 需要进行 Multi-head Attention?https://www.zhihu.com/question/341222779/answer/814111138首先,有大量的paper表明,Transformer或Bert的特定层是有独特的功能的,底层更偏向于关注语法,顶层更偏向于关注语义,其实这也符合我们的直觉(语法与token位置相关性较大,语义则是更高层的抽象表示)。这反应了结构中不同层所学习的表示空间不同,从某种程度上,又可以理解为在同一层Transformer关注的方面是相同的,那么对该方面而言,不同的头关注点应该也是一样的,而对于这里的“一样”,一种解释是关注的pattern相同,但内容不同,这也就是解释了第一个小问题,不同的头大体上的pattern是一样的,而差异性来源与分离的不同内容,为了更好的说明这一点,从论文:A Multiscale Visualization of Attention in the Transformer Model中截取的一张可视化的图可以形象的说明:https://arxiv.org/pdf/1906.05714.pdf可以看到,相同层的不同头所关注的pattern大致相同,不过细心的小伙伴应该会注意到,同一层中总是有那么一两个头和其他头的pattern不相同,这也是所要解释的第二个小问题。我们首先来看看这个过程是怎样的。首先,所有的参数随机初始化,然后用相同的方法前传,在输出端得到相同的损失,用相同的方法后传,更新参数。在这一条逻辑线中,唯一不同的地方在于初始值的不同。设想一下,如果我们把同一层的所有参数(这里的参数都是指的 )初始化成一样的(不同层可以不同),那么在收敛的时候,同一层的所有参数仍然是一样的,自然它们的关注模式也一样。也就是说,相同层中出现的“异类”,从某种解释上说,可以理解为是由于初始化的不一样引起的。我还看到了另外一种从实用原因解释的思路,来自苏剑林大神的回答https://www.zhihu.com/question/446385446/answer/1752279087总体上表述的意思是,每个token通常只是注意到有限的若干个token,这说明Attention矩阵通常来说是很“稀疏”的,所以只用一个头的话,当特征维度较大时,计算量就大,这个时候用某种方式对 进行分割,然后计算之后在以某种方式整合,虽然这种方式计算量和不分割差不多,但是从某种程度上引入了enhance或noise,类似模型融合,效果表现上也应该更好。最后总结陈词就是,Multi-Head其实不是必须的,去掉一些头效果依然有不错的效果(而且效果下降可能是因为参数量下降),这是因为在头足够的情况下,这些头已经能够有关注位置信息、关注语法信息、关注罕见词的能力了,再多一些头,无非是一种enhance或noise而已。
Transformer中的Attention为什么scaled?https://www.zhihu.com/question/339723385在上一个问题中,我们有提到计算Attention分数时,是通过Softmax进行归一化的,而Softmax有可以当作argmax的一种平滑近似,与argmax操作中暴力地选出一个最大值(产生一个one-hot向量)不同,softmax将这种输出作了一定的平滑,即将one-hot输出中最大值对应的1按输入元素值的大小分配给其他位置。而当喂入的数组内部数量级相差较大时,“1分出去的部分”就会越来越少,当数量级相差到一定程度,softmax将几乎全部的概率分布都分配给了最大值对应的标签,其效果也就被削减了。不仅如此,在输入的数量级很大时,还会导致softmax的梯度消失为0,造成参数更新困难,这也是为什么需要对输入先进行缩放的原因。其次,为什么原文中的计算公式对输入缩放的大小是 ?原论文中是这样解释的:To illustrate why the dot products get large, assume that the components of q and k are independent random variables with mean 0 and variance 1. Then their dot product, , has mean 0 and variance dk.假设向量 和 的各个分量是互相独立的随机变量,均值是0,方差是1,那么点积 的均值是0,方差是 。而方差越大也就说明,点积的数量级越大(以越大的概率取大值)。那么一个自然的做法就是将点积除以 ,将方差控制为1,也就有效地控制了前面提到的梯度消失的问题。