一、self-attention
流程
self-attention会传入以这个序列的信息输入几个
vector就会输出几个vector(输出的vector是考虑一整个序列才得到的 )再把输出的向量 输入给
full connected network
这样一来得到的结果就不是只考虑了一个小范围而是全局
self-attention(处理一整个sequence)和fc(处理某个位置)可以交替使用

运作
1. 特点
-
bjb^jbj是考虑了所有的 aia^iai 才得出来的
-
输入可以是 整个网络的输入 也可以是 一个隐藏层的输出

例:如何产生 b1b^1b1 这个向量
2. 步骤
- 根据 a1a^1a1找出这个
sequence里面和a1a^1a1相关的其它向量, α\alphaα是关联程度

- (1)计算 α\alphaα
Dot-product(最常用):将输入的两个向量分别乘以一个矩阵,再将结果点积

- 例:a1和a2的关联性计算
query:q1=wqa1q^1 = w^qa^1q1=wqa1
key:k2=wka2k^2 = w^ka^2k2=wka2
attention score:α1,2=q1⋅k2\alpha_{1,2} = q^1·k^2α1,2=q1⋅k2
a1和其它向量的关联性计算类似

实操的时候会算上a1和a1的关联性 - (2)
normalization:比如soft-max

- (3)根据
attention score求 bib^ibi
vi=Wvaiv^i = W^va^ivi=Wvai
b1=∑iα1,i′vib^1 = \sum_i\alpha^ {'}_{1,i} v^ib1=∑iα1,i′vi

3. 从矩阵的角度
-
q,k,vq, k, vq,k,v 的计算

-
attention score的计算

-
bbb 的计算

从 I-O 的过程
只有 wq,wk,wvw^q, w^k, w^vwq,wk,wv 是通过训练集得出来的

二、Multi-head Self-attention
qqq 是用来找相关的kkk,但是相关有很多种形式,可以有不同的 qqq 负责不同的相关性
- 例:两个Head计算
- qi=wqaiq^i = w^qa^iqi=wqai
- qiq^iqi再乘以两个不同的矩阵得到 qi,1q^{i,1}qi,1和 qi,2q^{i,2}qi,2
- 对 k,vk, vk,v 同理

attention score计算
1类一起计算,2类一起计算,得到bi,1,bi,2b^{i,1},b^{i,2}bi,1,bi,2

- bbb 计算

三、Positional Encoding(位置编码)
问题:实际上a1a^1a1和a4a^4a4的距离并不远,在self-attention中并没有下标信息
解决:给每个位置一个unique位置向量 eie^iei

Positional Encoding是个尚待研究的问题
四、与其它神经网络对比
Self-attention v.s.CNN
CNN是简化版的Self-attention/CNN是Self-attention的一个特例CNN考虑的是respective fieldSelf-attention考虑的是整张图片


Self-attention v.s. RNN
RNN不能平行处理,对于最左边的输入需要一直记住才能被最后的输入被考虑
Self-attention并行处理,效率高

Self-attention for Graph
只计算相连Node之间的attention score

1548

被折叠的 条评论
为什么被折叠?



