在bert模型中的attention构造中
Q:[batch, 12, seq, dk]
K:[batch, 12, seq, dk]
softmax中的梯度消失
x
=
(
a
,
a
,
2
a
,
4
a
)
x=(a, a, 2a, 4a)
x=(a,a,2a,4a),
a
>
0
a>0
a>0,softmax(x)更多的将权重分配到大数上面,
s
o
f
t
m
a
x
(
4
a
)
softmax(4a)
softmax(4a)远远大于
s
o
f
t
m
a
x
(
a
)
softmax(a)
softmax(a)。基于这个原因,很大的输入数据,会使反传时梯度消失。
y
=
s
o
f
t
m
a
x
(
x
)
∈
R
d
y=softmax(x)\in R^{d}
y=softmax(x)∈Rd
y
=
(
y
1
,
y
2
,
.
.
.
,
y
d
)
y=(y_1,y_2,...,y_d)
y=(y1,y2,...,yd)
计算导数,由于有softmax函数,y关于x的导数的一般计算结果如下
∂
y
i
∂
x
j
=
−
y
i
y
j
(
i
!
=
j
)
∂
y
i
∂
x
j
=
y
i
(
1
−
y
i
)
(
i
=
=
j
)
\frac{\partial y_i}{\partial x_j}=-y_iy_j (i!=j)\\ \frac{\partial y_i}{\partial x_j}=y_i(1-y_i) (i==j)
∂xj∂yi=−yiyj(i!=j)∂xj∂yi=yi(1−yi)(i==j)
可以将上式写成矩阵形式,如下
∂
y
∂
x
=
d
i
a
g
(
y
)
−
y
y
T
\frac{\partial y}{\partial x}=diag(y)-yy^T
∂x∂y=diag(y)−yyT
=
{
y
1
0
0
⋯
0
0
y
2
0
⋯
0
⋮
⋮
⋮
⋯
⋮
0
0
0
⋯
y
d
}
−
{
y
1
2
y
1
y
2
y
1
y
3
⋯
y
1
y
d
y
2
y
1
y
2
2
y
2
y
3
⋯
y
2
y
d
⋮
⋮
⋮
⋯
⋮
y
d
y
1
y
d
y
2
y
d
y
3
.
.
.
y
d
2
}
=\left\{ \begin{matrix} y_1 & 0 & 0 & \cdots &0 \\ 0 & y_2 & 0 & \cdots&0 \\ \vdots& \vdots & \vdots& \cdots&\vdots\\ 0 & 0 & 0&\cdots&y_{d} \end{matrix} \right\}-\left\{ \begin{matrix} y_1^2 & y_1y_2 & y_1y_3 & \cdots &y_1y_d \\ y_2y_1 & y_2^2 & y_2y_3 & \cdots&y_2y_d \\ \vdots & \vdots & \vdots& \cdots&\vdots \\ y_dy_1 & y_dy_2 & y_dy_3&...&y_{d}^2 \end{matrix} \right\}
=⎩⎪⎪⎪⎨⎪⎪⎪⎧y10⋮00y2⋮000⋮0⋯⋯⋯⋯00⋮yd⎭⎪⎪⎪⎬⎪⎪⎪⎫−⎩⎪⎪⎪⎨⎪⎪⎪⎧y12y2y1⋮ydy1y1y2y22⋮ydy2y1y3y2y3⋮ydy3⋯⋯⋯...y1ydy2yd⋮yd2⎭⎪⎪⎪⎬⎪⎪⎪⎫
当x中某个值非常大时,softmax会把权重更多放到该标签上,生成更接近1的数。y更接近于one-hot变量。举个例子,a非常大时,
x
=
(
a
,
a
,
2
a
,
4
a
)
x=(a, a, 2a, 4a)
x=(a,a,2a,4a),经softmax后,
y
=
(
0
,
0
,
0
,
1
)
T
y=(0,0,0,1)^T
y=(0,0,0,1)T,即a所处位置的数会非常小,趋于0。此时
∂
y
∂
x
=
{
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
}
−
{
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
}
=
0
\frac{\partial y}{\partial x}=\left\{ \begin{matrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0& 1 \end{matrix} \right\}-\left\{ \begin{matrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0& 1 \end{matrix} \right\}=0
∂x∂y=⎩⎪⎪⎨⎪⎪⎧0000000000000001⎭⎪⎪⎬⎪⎪⎫−⎩⎪⎪⎨⎪⎪⎧0000000000000001⎭⎪⎪⎬⎪⎪⎫=0
增加scaled的原因
Q
=
(
q
1
,
q
2
,
.
.
.
,
q
d
k
)
Q=(q_1,q_2,...,q_{d_k})
Q=(q1,q2,...,qdk),
q
i
∈
R
[
s
e
q
,
1
]
q_i\in R^{[seq,1]}
qi∈R[seq,1],
K
K
K类似。可以将
q
i
q_i
qi看做随机变量。假设
q
i
q_i
qi与
k
i
k_i
ki都服从标准正态分布
N
(
0
,
σ
2
)
N(0,\sigma^2)
N(0,σ2)且独立,下面求期望与方差。
E
(
q
i
k
i
)
=
E
q
i
E
k
i
=
0
E(q_ik_i)=Eq_iEk_i=0
E(qiki)=EqiEki=0
D
(
q
i
k
i
)
=
E
(
q
i
2
k
i
2
)
−
(
E
(
q
i
k
i
)
)
2
=
E
q
i
2
E
k
i
2
=
(
D
(
q
i
)
+
(
E
q
i
)
2
)
(
D
(
k
i
)
+
(
E
k
i
)
2
)
=
σ
4
=
1
\begin{aligned}D(q_ik_i)&=E(q_i^2k_i^2)-(E(q_ik_i))^2\\ &=Eq_i^2Ek_i^2\\ &=(D(q_i)+(Eq_i)^2)(D(k_i)+(Ek_i)^2)\\ &=\sigma^4=1 \end{aligned}
D(qiki)=E(qi2ki2)−(E(qiki))2=Eqi2Eki2=(D(qi)+(Eqi)2)(D(ki)+(Eki)2)=σ4=1
那么有
E
(
Q
K
T
)
=
∑
i
=
1
d
k
E
(
q
i
k
i
)
=
0
E(QK^T)=\sum_{i=1}^{d_k}E(q_ik_i)=0
E(QKT)=i=1∑dkE(qiki)=0
D
(
Q
K
T
)
=
∑
i
=
1
d
k
D
(
q
i
k
i
)
=
d
k
σ
2
=
d
k
D(QK^T)=\sum_{i=1}^{d_k}D(q_ik_i)=d_k\sigma^2=d_k
D(QKT)=i=1∑dkD(qiki)=dkσ2=dk
为保证softmax后的方差不变,所以对方差进行缩放。
矩阵的期望与方差
矩阵本没有期望与方差的定义,查看上面步骤, Q K T QK^T QKT的维度为[batch, 32, seq, seq],只考虑后两个维度, Q K T QK^T QKT为方阵, Q Q Q维度为[seq,dk]。计算期望与方差时 ,可以按照行,也可以按照列计算,看最后的实际用处。