正如你所说的,Attention的最终输出可以看成是一个“在关注部分权重更大的全连接层”。但是它与全连接层的区别在于,注意力机制可以利用输入的特征信息来确定哪些部分更重要。
举个例子:
输入层有A,B,C三个特征向量,我们需要构造一层网络来确定三者的权重,然后加权求和得到输出O。也就是得到三个权重 ,然后得到
。
这个式子形式上看上去确实是全连接层没错。然而如果用全连接层有什么问题呢?
问题就在于在全连接层里, 是根据位置确定的。我第一次给你三个数据ABC,然后你得出了B最重要,也就是让 最大。然而我下次给你的顺序可能是BAC,这次A在刚才B的位置,如果你用全连接层来实现的话,得出的结果就会变成 。这就变成了A最重要了,这显然不是我们想要的结果。
那么如何解决这个问题呢?我们就要根据实体自身的特征,而不是它们的位置来确定它们的重要程度。也就是说, 不该是固定的,而是要与A,B,C的值相关。简单考虑,也就是要定义一个函数f,令
。
于是我们就给每个实体分配了一个与它们的位置无关的权重。这里的函数f就是我们所说的注意力机制。注意力机制f的定义方式有很多种,但是不属于这个问题的范围,这里我就不讨论了。
我们最终得出的输出为
可以看出,最终整合信息时加权求和的形式没有变,所以可能是这样才让题主产生了注意力机制与全连接层没有区别的疑惑。然而事实上注意力机制的意义是引入了权重函数f,使得权重与输入相关,从而避免了全连接层中权重固定的问题。
2019年4月21日更新:
经评论区一位朋友的提醒,想到可以从另外一个角度解释这个问题:
全连接的作用的是对一个实体进行从一个特征空间到另一个特征空间的映射,而注意力机制是要对来自同一个特征空间的多个实体进行整合。
全连接的权重对应的是一个实体上的每个特征的重要性,而注意力机制的输出结果是各个实体的重要性。
比如说,一个单词“love”在从200维的特征空间转换到100维的特征空间时,使用的是全连接,不需要注意力机制,因为特征空间每一维的意义是固定的。而如果我们面对的是词组“I love you”,需要对三个200维的实体特征进行整合,整合为一个200维的实体,此时就要考虑到实体间的位置可能发生变化,我们下次收到的句子可能是“love you I”,从而需要一个与位置无关的方案。
这是个非常有意思的问题,要回答这个问题,我们必须重新定义一下Attention。
Transformer Paper里重新用QKV定义了Attention。所谓的QKV就是Query,Key,Value。如果我们用这个机制来研究传统的RNN attention,就会发现这个过程其实是这样的:
RNN最后一步的output是Q,这个Q query了每一个中间步骤的K。Q和K共同产生了Attention Score,最后Attention Score乘以V加权求和得到context。
那如果我们不用Attention,单纯用全连接层呢?很简单,全链接层可没有什么Query和Key的概念,只有一个Value,也就是说给每个V加一个权重再加到一起(如果是Self Attention,加权这个过程都免了,因为V就直接是从raw input加权得到的。)
可见Attention和全连接最大的区别就是Query和Key,而这两者也恰好产生了Attention Score这个Attention中最核心的机制。而在Query和Key中,我认为Query又相对更重要,因为Query是一个锚点,Attention Score便是从过计算与这个锚点的距离算出来的。任何Attention based algorithm里都会有Query这个概念,但全连接显然没有。
最后来一个比较形象的比喻吧。如果一个神经网络的任务是从一堆白色小球中找到一个略微发灰的,那么全连接就是在里面随便乱抓然后凭记忆和感觉找,而attention则是左手拿一个白色小球,右手从袋子里一个一个抓出来,两两对比颜色,你左手抓的那个白色小球就是Query。