Self-attention
- 用Wq、Wk、Wv分别乘输入向量得到q、k、v向量
- 用每个q向量乘所有的k向量得到对应项的attention,即用每项的query向量去匹配所有的key向量,得到该项对所有项的注意力打分。可以用矩阵优化运算。激活函数softmax可以用relu等替换。
- 用q、v的相乘的结果乘v得到self-attention的输出b
- 综上,如下图
Multi-head self-attention
- 通过多组q、k、v来表示不同的相关性
- 将多头的输出融合到一起
- 位置编码,将位置信息编码为向量(每个位置一个专属向量),加到输入中即可
用self-attention解决其他问题
- 语音解析:输入维度过大,使用truncated self-attention
- 图像处理:每个像素(三个通道)可以看作一个三维向量,如下图可以将50个三维向量作为输入
- self-attention vs cnn:cnn相当于简化版的self-attention,卷积核的运算相当于对卷积核区域内的像素点求k、v,self-attention的感受野是自己学习的,而cnn的卷积核是手动设置的
cnn就是self-attention的特例。self-attention更灵活,但是如果训练集小可能更容易过拟。
4. self-attention vs RNN
5. self-attention for Graph:用attention来表示nodes之间的关联