1. self attention
通过输入a1 a2 a3 a4到self attention中,会计算互相之间的相似度。
b1为a1考虑了a2,a3,a4所有的信息之后的输出的a1…
1.1 怎么产生b1?
根据a1找出与a1相关的所有其他向量,用阿尔法表示相关度。
计算相关度的方法:
- Dot-product(主要)
- Additive
有两个权重矩阵Wq,Wk分别用于生成q(qury),k(key)。
qi = Wq·ai
ki=Wk·ai
αi,j=qi · kj
计算出相关性后,做softmax(),也可以用其他激活函数:relu()…
获得a’1,1,a’1,2,a’1,3,a’1,4后我们就知道哪些向量和a1最相关。
vi=Wv · ai
把vi和上一步得到的α’i,j相乘
1.2 矩阵操作
Q=Wq · I
K=Wk · I
V=Wv · I
黄色的k表示k的转置transpose
综合一下得到:
α1=K· q1
α2=K· q2
α3=K· q3
α4=K· q4
再组合一下:
α=KT · Q
(T为转置)
self attention的输出为O
O=V · A'
1.3 结论
只有三个矩阵参数需要学习
2.Multi-head Self-attention
在实际中,求相关性方法有许多种。
多个head之间独立运算,最后把两个head的输出接起来
3.Positional Encoding
在self attention中没有位置信息:
a之间没有位置信息,不知到a出现的顺序
可以为a添加一个人工的位置信息:ei
e的可视化:
每一列表示一个e
4.Self-attention for Image
4.1 Self-attention V.S. CNN
CNN: 只是考虑感受野内的像素相关性
Self attention:考虑整个图片像素的相关性
CNN是Self attention的一部分,只要Self Attention设定合适,可以完全取代CNN
CNN和self attention的对比实验发现:
数据量少时:CNN效果好
数据量大时:Self-attention 效果更好