摘要: 自注意力机制来源与我们人类对事物的观察方式.
两篇参考贴:
1. 启示
例 1: 研表究明, 汉字的序顺并不定一能影阅响读, 比如当你看完这句话后, 才发这现里的字全都是乱的.
从这个例子表明, 人类在阅读句子的时候, 并不是逐个字地阅读, 而是扫描一遍, 抓住重点. 换言之, 做机器翻译时, RNN, LSTM 重点考虑单词的前后关系, 这并不一定是必要的.
2. 自注意力编码过程
图 1 展示了基本结构.
分为 5 个步骤:
2.1 准备输入
使用预先获得的编码方案, 利用 word2vec 将每个单词编码为一个固定长度 (如
d
v
=
520
d_v = 520
dv=520) 的词向量. 现假设有
n
n
n 个单词, 获得
x
1
,
…
,
x
n
\mathbf{x}_1, \dots, \mathbf{x}_n
x1,…,xn.
这里, word2vec 要考虑单词之间的相似性.
2.2 计算 Query, Key 和 Value
q
i
=
x
i
W
Q
;
(1)
\mathbf{q}_i = \mathbf{x}_i \mathbf{W}_Q; \tag{1}
qi=xiWQ;(1)
k
i
=
x
i
W
K
;
(2)
\mathbf{k}_i = \mathbf{x}_i \mathbf{W}_K; \tag{2}
ki=xiWK;(2)
v
i
=
x
i
W
V
;
(3)
\mathbf{v}_i = \mathbf{x}_i \mathbf{W}_V; \tag{3}
vi=xiWV;(3)
其中, 三个
W
\mathbf{W}
W 是需要学习的权重矩阵, 相当于 MLP 的全连接层的权重矩阵.
W
Q
\mathbf{W}_Q
WQ 和
W
K
\mathbf{W}_K
WK 的维度均为
d
v
×
d
k
d_v \times d_k
dv×dk,
W
V
\mathbf{W}_V
WV 的维度为
d
v
×
d
x
d_v \times d_x
dv×dx,
d
x
d_x
dx 是 Self-attention 编码后的长度.
i
i
i 取
1
1
1 到
n
n
n, 然后将向量组成行数为
n
n
n 的矩阵
Q
\mathbf{Q}
Q,
K
\mathbf{K}
K,
V
\mathbf{V}
V.
2.3 计算 score
第
i
i
i 个单词 (作为查询者) 与第
j
j
j 个单词 (由键值表示) 的相关性:
s
c
o
r
e
(
x
i
,
x
j
)
=
q
i
⋅
k
i
,
(4)
\mathrm{score}(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{q}_i \cdot \mathbf{k}_i, \tag{4}
score(xi,xj)=qi⋅ki,(4)
其中
⋅
\cdot
⋅ 表示内积. 由于是输入与输入自己计算, 所以称为 自注意力.
将
n
n
n 个单词对应的运算表示为矩阵运算:
Q
K
T
.
(5)
\mathbf{Q} \mathbf{K}^{\mathsf{T}}. \tag{5}
QKT.(5)
它是一个
n
×
n
n \times n
n×n 的单词相关性矩阵.
2.4 scale
将 score 除以一个常数 ( d k = 64 d_k = 64 dk=64 时就除以 8 8 8), 避免太大.
2.5 mask (可选)
2.6 softmax
由于每行表示一个查询单词, 这一行的第 j j j 列表示第 j j j 个单词对其影响, 因此将 (5) 式的每行通过 softmax, 归一化的同时强调最大的分数.
2.7 编码加权和, 获得自注意力编码
总体式子为:
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
V
.
(6)
\mathrm{Attention}(Q, K, V) = \mathrm{softmax\left(\frac{\mathbf{Q} \mathbf{K}^{\mathsf{T}}}{\sqrt{d_k}}\right)} \mathbf{V}.\tag{6}
Attention(Q,K,V)=softmax(dkQKT)V.(6)
最终获得一个
n
×
d
x
n \times d_x
n×dx 的矩阵, 即每个单词的编码为
1
×
d
x
1 \times d_x
1×dx 向量.
3. 为什么使用多头?
相当于 MLP 每层有多个节点 (提取不同的特征), 或者 CNN 使用多个卷积核 (获得不同的通道).
4. 小结
- 与 MLP, CNN 一样, 自注意力也是提取特征的过程.
- 没有管单词顺序, 只计算权重.
- 矩阵运算并行处理, 非常节约时间.