目录
二、Self-attention怎么考虑一整个input sequence的资讯
一、Self-attention能解决什么问题
直接回答:模型的输入有很多个向量,Self-attention机制可以关注到整个input sequence的信息,即,输出的每个label都是考虑了整个input sequence得到的
模型的输入是一组向量,向量的长度会改变,比如
(1)句子是一组向量,每个单词是一个向量
(2)一段声音是一组向量,把一小段声音讯号看做一个向量
(3)图也是一组向量,图的每一个点看做一个向量
模型的输出有3种可能性:
(1)每个向量都有一个label,如词性标注(一段话每个词的词性)(只讲这种)
(2)整个向量组只有一个label,如情感分析(一段评价是正面的还是负面的)
(3)机器自己决定输出多少个label,如翻译
二、Self-attention怎么考虑一整个input sequence的资讯
Self-attention会自动确定两个向量之间的相关性α
方法一:向量点积
方法二:向量相加---经过一个激活函数---经过一个transform---得到α
计算每个向量和所有向量之间的相关性α_(1,i),然后经过softmax的处理,得到α'(相当于权重,和a1相关性高的向量的权重就会大一些),这样我们就知道了哪些向量和a1是最有关系的。接下来根据α'抽取出sequence里面的重要资讯。
a1-a4分别乘以,得到v1-v4,每一个v乘以α' 再求和 得到b1。
这样,如果a1和a2相关性比较大,则b1的值会更接近a2
以下是self-attention的矩阵计算过程
三、多头注意力机制
四、问题&总结
1.Self-attention和全连接的区别是什么?
输入层有A B C 3个特征向量,现在要构造一个网络求3者的权重,然后加权求和得到输出O,即O=w_a*A + w_b*B + w_c*C,如果采用全连接层,w_a,w_b,w_c是根据位置确定的,
我第一次给你三个数据ABC,然后你得出了B最重要,也就是让 w_B 最大。然而我下次给你的顺序可能是BAC,这次A在刚才B的位置,如果你用全连接层来实现的话,得出的结果就会变成 O=w_A*B + w_B*A + w_C*C 。这就变成了A最重要了,这显然不是我们想要的结果。
而采用注意力机制的话,权重与位置无关,而是和输入的向量本身有关
参考链接:https://www.zhihu.com/question/320174043/answer/651998472