本文推导了斯坦福课程cs231n(2017)assignment1 Q4的反向传播梯度
网络结构为
输入–全连接层–ReLU–全连接层–softmax
X−H=XW1+b1−R=max(0,H)−F=RW2+b2−softmax X − H = X W 1 + b 1 − R = max ( 0 , H ) − F = R W 2 + b 2 − softmax
其中, X X 为输入,每一行表示一个样本, W1,W2 W 1 , W 2 分别为第一和第二连接层的权重, b1,b2 b 1 , b 2 分别为第一和第二连接层的偏置。 F F 为第二连接层的输出(score)。
首先定义损失函数,对于每个训练样本,损失函数定义如下
Li=−log(eFi,yi∑jeFi,j). L i = − log ( e F i , y i ∑ j e F i , j ) .
总的损失函数为所有样本损失函数的均值加上正则项
L=1N∑iLi+λ(∑k∑lW21kl+∑k∑lW22kl). L = 1 N ∑ i L i + λ ( ∑ k ∑ l W 1 k l 2 + ∑ k ∑ l W 2 k l 2 ) .
记
pi,k=eFi,k∑jeFi,j. p i , k = e F i , k ∑ j e F i , j .
则
Li=−log(pi,yi). L i = − log ( p i , y i ) .
对
Li L i 求导,得
∂Li∂Fj,k={pj,k−1⋅[yi==k],0,j=i,j≠i.(138) (138) ∂ L i ∂ F j , k = { p j , k − 1 ⋅ [ y i == k ] , j = i , 0 , j ≠ i .
写成矩阵形式,我们得到
∂L∂F=1N(P−M). ∂ L ∂ F = 1 N ( P − M ) .
其中
P(i,j)=pi,j,M P ( i , j ) = p i , j , M 为mask矩阵,即第
i i 行的
yi y i 个元素为1,其余为0。Python代码如下
dscores = probs
dscores[range(num_examples),y] -= 1
dscores /= num_examples
接下来要算 ∂F∂W2 ∂ F ∂ W 2 。因为 F,W2 F , W 2 均为矩阵,该偏导应该是一个四维向量,但包含大量0,展开计算后可得
∂Fa,b∂W2i,j={Ra,i,0,j=b,j≠b.(134) (134) ∂ F a , b ∂ W 2 i , j = { R a , i , j = b , 0 , j ≠ b .
(这一步如果不清楚的话把
Fa,b F a , b 展开来写就好,参见 Vector, Matrix, and Tensor Derivatives)
我们通过计算分量来探究
∂L∂W2 ∂ L ∂ W 2 的矩阵计算表达式。
∂L∂W2m,n=∑i,j∂L∂Fi,j∂Fi,j∂W2m,n+2λW2m,n=∑i∂L∂Fi,n∂Fi,n∂W2m,n+2λW2m,n=∑i∂L∂Fi,nRi,m+2λW2m,n. ∂ L ∂ W 2 m , n = ∑ i , j ∂ L ∂ F i , j ∂ F i , j ∂ W 2 m , n + 2 λ W 2 m , n = ∑ i ∂ L ∂ F i , n ∂ F i , n ∂ W 2 m , n + 2 λ W 2 m , n = ∑ i ∂ L ∂ F i , n R i , m + 2 λ W 2 m , n .
上式中的
Σ Σ 求和项可看作矩阵
RT R T 的第
m m 行乘矩阵
∂L∂F ∂ L ∂ F 的第
n n 列,故矩阵
∂L∂W2 ∂ L ∂ W 2 可表示为
∂L∂W2=RT∂L∂F+2λW2 ∂ L ∂ W 2 = R T ∂ L ∂ F + 2 λ W 2
类似地,我们可以求得
b2 b 2 的导数,注意这里
b2 b 2 应该是一个矩阵而非向量(因为要和矩阵
RW2 R W 2 相加)。
∂L∂b2m,n=∑i,j∂L∂Fi,j∂Fi,j∂b2m,n=∂L∂Fm,n. ∂ L ∂ b 2 m , n = ∑ i , j ∂ L ∂ F i , j ∂ F i , j ∂ b 2 m , n = ∂ L ∂ F m , n .
这里得到的结果和 cs231n官方笔记中得到的不同,我没有想明白这一步。笔记中的结果如下代码所示
db = np.sum(dscores, axis=0, keepdims=True)
完全类似于 ∂L∂W2 ∂ L ∂ W 2 的推导过程,我们可以得到矩阵 R R 的梯度
∂L∂R=∂L∂FWT2. ∂ L ∂ R = ∂ L ∂ F W 2 T .
注意到
H=XW1+b1 H = X W 1 + b 1 和
R=max(0,H) R = max ( 0 , H ) ,我们可以进一步得到
W1 W 1 的梯度
∂L∂H=max(0,∂L∂R),∂L∂W1=XT∂L∂H+2λW1. ∂ L ∂ H = max ( 0 , ∂ L ∂ R ) , ∂ L ∂ W 1 = X T ∂ L ∂ H + 2 λ W 1 .
参考资料:
cs231n官方笔记
cs231n - assignment1 - softmax 梯度推导
Vector, Matrix, and Tensor Derivatives