Attention中softmax的梯度消失及scaled原因

    在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) xjyi=yiyj(i!=j)xjyi=yi(1yi)(i==j)
可以将上式写成矩阵形式,如下
∂ y ∂ x = d i a g ( y ) − y y T \frac{\partial y}{\partial x}=diag(y)-yy^T xy=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\} =y1000y2000000ydy12y2y1ydy1y1y2y22ydy2y1y3y2y3ydy3...y1ydy2ydyd2
当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 xy=00000000000000010000000000000001=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]} qiR[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=1dkE(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=1dkD(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]。计算期望与方差时 ,可以按照行,也可以按照列计算,看最后的实际用处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值