论文链接:https://arxiv.org/pdf/1607.06450.pdf 在图像处理领域,卷积神经网络(CNNs)中通常会使用Batch Normalization,根据mini-batch的均值和标准差对深度神经网络的隐藏层输入进行标准化,可以有效地提升训练速度。但是Batch Normalization的效果受制于batch的大小,小batch未必能取得预期效果。其次,对于前向神经网络可以直接应用Batch Normalization,因为其每一层具有固定的神经元数量,可直接计算和存储每层网络中各神经元的均值、方差统计信息以应用于模型预测,但在循环神经网络(RNNs)中,不同的mini-batch可能具有不同的输入序列长度,计算统计信息比较困难,而且测试序列长度不能大于最大训练序列长度。因此循环神经网络(RNNs)使用Layer Normalization对不同时间步进行标准化,从而可以处理单一样本、变长序列,而且训练和测试处理方式一致。Vision Transformer将NLP领域中的模型应用在CV领域,但是作者仍然使用Layer Normalization对数据进行标准化。 以ViT-B/16为例,假设输入序列的数据格式为(batch_size, seq_len, seq_dim), 即(1, 197, 768),Layer Normalization是对输入序列的最后一个维度,即在每个token的特征通道(seq_dim)上计算均值
E
(
x
)
E(x)
E(x)和方差
V
a
r
(
x
)
Var(x)
Var(x),然后根据如下公式,对输入数据进行标准化。
y
=
x
−
E
(
x
)
V
a
r
(
x
)
+
ϵ
∗
γ
+
β
y=\frac{x-E(x)}{\sqrt{Var(x)+\epsilon}}*\gamma+\beta
y=Var(x)+ϵx−E(x)∗γ+β其中
ϵ
\epsilon
ϵ表示一个极小的数,防止分母为零,
γ
\gamma
γ表示缩放因子,
β
\beta
β表示偏移因子。
新的序列中的每一个token通过
3
3
3个全连接层分别映射到三个矩阵
Q
Q
Q,
K
K
K,
V
V
V,其中
Q
Q
Q指query,表示查询到与该token相关的属性,
K
K
K指key,表示该token自身的属性,
V
V
V指value,表示该token自身所包含的信息;
对向量
Q
Q
Q与向量
K
K
K的转置矩阵进行点积运算,并且根据公式
α
=
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
\alpha=softmax(\frac{QK^T}{\sqrt{d_k}})
α=softmax(dkQKT),计算不同token之间的相关性。Softmax矩阵包含了不同token之间的相关性系数,例如第1行表示第一个token与自身以及其他token之间的相关性系数;
根据不同token之间的相关性系数,对不同token进行加权求和,即
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
α
×
V
Attention(Q,K,V)=\alpha×V
Attention(Q,K,V)=α×V,从而使模型有重点地关注输入特征;
Transformer中计算attention的时候为何选择点乘而不是加法?两者计算复杂度和效果上有什么区别? 答:两者的效果与序列长度
d
k
d_k
dk相关,
d
k
d_k
dk越大,加法的效果越显著。虽然这两种方法的复杂度在理论上是相似的,但是在实践中借助高度优化的矩阵乘法代码实现的点积注意力更快,且更节省空间。
为什么在进行softmax之前需要对attention进行scaled(为什么除以
d
k
d_k
dk的平方根)? 答:当
d
k
d_k
dk较大时,Q和K向量内积的值也会容易变得很大,
Q
K
T
QK^T
QKT的方差较大,这时softmax函数的梯度会非常的小。为了让
Q
K
T
QK^T
QKT矩阵的值满足期望为0,方差为1的分布,相当于归一化,因此乘以一个缩放因子
1
d
k
\frac{1}{\sqrt{d_k}}
dk1。