文章目录
self-attention
三种seq输入输出类型
Each vector has a label
-
Sequence labeling
-
如果但考虑一个vector 那机器没办法给同样的vector两个不同的label
-
比如说 “saw”动词是看 名词是锯子
-
所以需要将前后向量一起输进去 那么FC就可以考虑neighbor
-
但是这个方法只能考虑一个window内 不能考虑整个seq
-
Self-attention
得到一个seq输出过程
-
考虑整个seq
-
输入不一定是input 可以使hidden layer的输出
-
上图如何产生b1
- 计算a1 a2 …之间的连续 用α表示 α的生成可以由以下两种Dot-product或者Additive生成
-
产生attention score α
- a1的q1称为 query (查询) 其余a 的k 称为 key
* 实战中也会a1也会跟自己做关联性得到K1 得到的α放进softmax层
-
抽取每个seq的重要资讯加权得到b1:
-
a 乘上 Wv 抽取每个seq的重要信息V
-
V * α(关联度)加起来得到b
-
上述矩阵化
- 总过程:输入I 输出O
Multi-head Seft-attention
- 每个head之间做处理 忽略其他head
position encoding
-
上述的结构网络缺少seq之间的位置信息
-
每个位置有一个独特的向量表示
-
人为的设定位置可能没有很好的复用性 由于每个seq的长度都不一样 可能溢出
-
故需要网络自己去学习这个seq的位置
Application
-
Self-attention for Speech
-
语音序列过长 ;Attention Matrix过大
-
故可以通过人为设定range Attention in a range 考虑语音的小范围 (Truncated Self-attention)
-
-
Self-attention for Image
-
img可以看做是 vector set
-
example:下面的img可以看成是一个 5*10的vector
-
-
Self-attention vs CNN
-
CNN是简化版的self-attention
-
CNN人为设定receptive field
-
self-attention更像网络自己学习这个receptive field的大小 找到跟这个pixel有关的其他pixel
-
-
-
Self-attention vs RNN
- RNN的长距离关联较弱 需要一直记在memory里面
- RNN处理seq不是采用同时进行需要等待上一个seq输出的vector
- 而self-attention可以平行处理所有seq
- self-attention for Graph(GNN)
- 关联性跟edge有关 可以不由网络学习得到