attetion 入门
attetion函数的本质可以描叙为一个查询(query)与键(key)值(value)一起的一个输出。
a
t
t
a
t
e
t
i
o
n
(
Q
,
K
,
V
)
=
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
V
attatetion(Q,K,V)=softmax(\frac{QK^T}{\sqrt d_k}) V
attatetion(Q,K,V)=softmax(dkQKT)V
那么这里的Q,K,V到底是什么呢?
在传统的LSTM encoder-decoder中
Q 解码器出来的隐藏状态
s
j
s_j
sj
K 对应编码器的输出
h
j
h_j
hj,编码器的隐层状态
V 也是对应编码器的输出
h
j
h_j
hj
在Transformer的self-attention中。
Q ,K,V均是输入经过不同embedding层后得到的映射。
Transformer使用了Self-Attention机制,它在编码每一词的时候都能够注意(attend to)整个句子,从而可以解决长距离依赖的问题,同时计算Self-Attention可以用矩阵乘法一次计算所有的时刻,因此可以充分利用计算资源(CPU/GPU上的矩阵运算都是充分优化和高度并行的)。
至于多头的attetion,就是用多个矩阵生成多个head。每个head可以关注输入中不同的部分,比如有些head关注较远的部分,有的head关注附近的部分
Transformer总体结构:
特别注意在transformer中使用的是layer-normalization
直观的理解,batch vs layer normalization。
batch是“竖”着来的,各个维度做归一化,所以与batch size有关系。
layer是“横”着来的,对一个样本,不同的神经元neuron间做归一化。