全连接层(FC)
FC的输入为
x⃗
,且
x⃗ ∈Rn×1
.
权重矩阵为
W
,且W∈Rn×m,其中
Wij
表示第
j
个神经元的第i个参数.
偏置为b⃗ ,且
b⃗ ∈Rm×1
.
输出为
y⃗
,且
y⃗ ∈Rm×1
.
那么,前向传播(forward)的计算公式是:
y⃗ =WTx⃗ +b⃗
把向量和矩阵都具体化为标量,则有:
yi=∑jxjWji+bi
设损失函数为
L
,已知∂L∂y⃗ ,求
∂L∂x⃗
,
∂L∂W
,
∂L∂b⃗
.
1.
∂L∂b⃗
∂L∂bi===∑j∂L∂yj∗∂yj∂bi∂L∂yi∗∂yi∂bi∂L∂yi
因此:
∂L∂b⃗ =∂L∂y⃗
2.
∂L∂W
∂L∂Wij===∑k∂L∂yk∗∂yk∂Wij∂L∂yj∗∂yj∂Wij∂L∂yj∗xi
因此:
∂L∂W=x⃗ (∂L∂y⃗ )T
3.
∂L∂x⃗
∂L∂xi===∑j∂L∂yj∗∂yj∂xi∑j∂L∂yj∗WijWi→∗∂L∂y⃗
因此:
∂L∂x⃗ =W∂L∂y⃗
Batch normalization(BN)
BN的输入为
x⃗
,且
x⃗ ∈Rn×1
,表示一个batch_size为
n
,特征长度为1.
输出为
y⃗
,且
y⃗ ∈Rn×1
.
平均值
μB
和方差
σ2B
均为实数.
x⃗ ^∈Rn×1
.
γ
和
β
均为实数.
前向传播(forward)的计算公式是:
μBσ2Bxi^yi====1m∑ixi1m∑i(xi−μB)2xi−μBσ2B+ϵ−−−−−√γxi^+β
设损失函数为
L
,已知∂L∂y⃗ ,求
∂L∂x⃗
,
∂L∂γ
,
∂L∂β
.
1.
∂μB∂xi
和
∂σ2B∂xi
∂μB∂xi∂σ2B∂xi========∂1m∑jxj∂xi1m∂1m∑j(xj−μB)2∂xi2m∑j(xj−μB)∂(xj−μB)∂xi2m(∑j(xj−μB)∂xj∂xi+∑j(xj−μB)∂μB∂xi)2m((xi−μB)+1m∑j(xj−μB))2m((xi−μB)+1m∑jxj−μB)2m(xi−μB)
2.
∂xj^∂xi
∂xj^∂xi==∂(xj−μB)σ2B+ϵ−−−−−√+∂σ2B+ϵ−−−−−√(xj−μB)(σ2B+ϵ)∂xi1m(m∂xj∂xi−1σ2B+ϵ−−−−−√−xj−μB(σ2B+ϵ)32)
3.
∂L∂β
∂L∂β==∑i∂L∂yi∂yi∂β∑i∂L∂yi
4.
∂L∂γ
∂L∂γ==∑i∂L∂yi∂yi∂γ∑i∂L∂yixi^
因此:
∂L∂γ=xi→^T∂L∂y⃗
5.
∂L∂x⃗
∂L∂xi===∑j∂L∂yj∂yj∂xi∑j∂L∂yi∂yj∂xj^∂xj^∂xiγ∑j∂L∂yi∂xj^∂xi
卷积(conv)
设conv的输入是
X
,X∈Rn×m×c1,
n
,m,
c1
分别为输入的高,宽,通道数.
conv的核kernel是
3×3
,步长strides是
1×1
.
conv的权重是
W
,W∈R3×3×c1×c2.
conv的偏置是
b⃗
,
b⃗ ∈Rc2×1
conv的输出是
Y
,Y∈Rn×m×c2,
c2
为输出的通道数(这里卷积采用same的padding模式).
那么,卷积的计算公式是:
Yi,j,k=(∑k1=1c1∑i1=13∑j1=13Wi1,j1,k1,kXi2,j2,k1)+bk
其中
i2=i+i1−1,j2=j+j1−1
设损失函数为
L
,已知∂L∂Y,求
∂L∂X
,
∂L∂W
,
∂L∂b⃗
.
1.
∂L∂b⃗
∂L∂bk1===∑kc2∑i,j∂L∂Yi,j,k∂Yi,j,k∂bk1∑i,j∂L∂Yi,j,k1∂Yi,j,k1∂bk1∑i,j∂L∂Yi,j,k1
即:
∂L∂bk=∑i,j∂L∂Yi,j,k
2.
∂L∂W
∂L∂Wi1,j1,k1,k2===∑kc2∑i,j∂L∂Yi,j,k∂Yi,j,k∂Wi1,j1,k1,k2∑i,j∂L∂Yi,j,k2∂Yi,j,k2∂Wi1,j1,k1,k2∑i,j∂L∂Yi,j,k2Xi2,j2,k1
即:
∂L∂Wi1,j1,k1,k=∑i,j∂L∂Yi,j,kXi2,j2,k1
其中,
i2=i+i1−1,j2=j+j1−1
3.
∂L∂X
∂L∂Xi2,j2,k1==∑kc2∑i,j∂L∂Yi,j,k∂Yi,j,k∂Xi2,j2,k1∑kc2∑i,j∂L∂Yi,j,kWi1,j1,k1,k
其中,
i2=i+i1−1,j2=j+j1−1
激活函数
relu
relu(x)relu′(x)=={x0x>0x≤0{10x>0x<0
于是:
∂L∂xi==∂L∂yi∂yi∂xi{∂L∂yi0xi>0xi<0
sigmoid
sigmoid(x)sigmoid′(x)==11+e−xe−x(1+e−x)2
于是:
∂L∂xi==∂L∂yi∂yi∂xi∂L∂yie−xi(1+e−xi)2
tanh
tanh(x)tanh′(x)==ex−e−xex+e−x4(ex+e−x)2
于是:
∂L∂xi==∂L∂yi∂yi∂xi∂L∂yi4(ex+e−x)2
softmax
softmax(xi)∂softmax(xi)∂xi∂softmax(xj)∂xi======exi∑jexj∂exi∑jexj∂xiexi∑jexj−exiexi(∑jexj)2exi(∑jexj−1)(∑jexj)2∂exj∑kexk∂xi−exj(∑kexk)2
于是:
∂L∂xi===∑j∂L∂yj∂yj∂xi−∑j≠i∂L∂yjexj(∑kexk)2+∂L∂yiexi(∑kexk−1)(∑kexk)2∂L∂yiexi∑kexk−∑j∂L∂yjexj(∑kexk)2
selu
selu(x)selu′(x)λα====λ{xα(ex−1)x>0x≤0λ{1αexx>0x<01.05070098735548049341933498529461.6732632423543772848170429916717
于是:
∂L∂xi==∂L∂yi∂yi∂xiλ∂L∂yi{1αexxi>0xi<0
最大池化(max-pooling)
设Max-pooling的输入是
X
,X∈Rn×m(
n
,m均为偶数).
Max-pooling的核kernel和步长strides是
2×2
.
Max-pooling的输出是
Y
,Y∈Rn2×m2.
那么,最大池化的计算公式是:
Yi,j=max(X2i,2j,X2i,2j+1,X2i,2j+1,X2i+1,2j+1)
其偏导数为:
∂Yi,j∂Xa,b={10Xa,b=max(X2i,2j,X2i,2j+1,X2i,2j+1,X2i+1,2j+1)else
设损失函数为
L
,已知∂L∂Yi,j,求
∂L∂Xa,b
,其中
a∈[2i,2i+1],b∈[2j,2j+1]
.
∂L∂Xa,b===∑i,j∂L∂Yi,j∂Yi,j∂Xa,b∂L∂Yi,j∂Yi,j∂Xa,b{∂L∂Yi,j0Xa,b=max(X2i,2j,X2i,2j+1,X2i,2j+1,X2i+1,2j+1)else
平均池化(avg-pooling)
设Avg-pooling的输入是
X
,X∈Rn×m(
n
,m均为偶数).
Avg-pooling的核kernel和步长strides是
2×2
.
Avg-pooling的输出是
Y
,Y∈Rn2×m2.
那么,平均池化的计算公式是:
Yi,j=14(X2i,2j+X2i,2j+1+X2i,2j+1+X2i+1,2j+1)
其偏导数为:
∂Yi,j∂Xa,b=14
设损失函数为
L
,已知∂L∂Yi,j,求
∂L∂Xa,b
,其中
a∈[2i,2i+1],b∈[2j,2j+1]
.
∂L∂Xa,b===∑i,j∂L∂Yi,j∂Yi,j∂Xa,b∂L∂Yi,j∂Yi,j∂Xa,b14∂L∂Yi,j
dropout
dropout(x)dropout′(x)=={xkp0keepdrop{1kp0keepdrop
其中,
kp
是保留的比例.
于是:
∂L∂xi==∂L∂yi∂yi∂xi{1kp∂L∂yi0keepdrop
clip
clip(x;a,b)clip′(x;a,b)==⎧⎩⎨axbx<aa≤x≤bx>b⎧⎩⎨010x<aa≤x≤bx>b
于是:
∂L∂xi==∂L∂yi∂yi∂xi⎧⎩⎨⎪⎪0∂L∂yi0x<aa≤x≤bx>b
损失函数
softmax+交叉熵
设softmax的输入为
x⃗
,
x⃗ ∈Rn×1
.
设softmax的输出为
y⃗
,
y⃗ ∈Rn×1
.
设onehot后的标签为
l⃗
,
l⃗ ∈Rn×1
.
设标签为
k
.
设交叉熵为E,则:
E==−l⃗ log(y⃗ )−log(yk)
则:
∂E∂yk∂E∂yi==−1yk0i≠k
因此:
∂E∂xi∂E∂xk=======∑j∂E∂yj∂yj∂xi∂E∂yk∂yk∂xi1ykexk(∑lexl)2∑j∂E∂yj∂yj∂xk∂E∂yk∂yk∂xk−1ykexk(∑lexl−1)(∑lexl)2−1ykexk∑lexl+1ykexk(∑lexl)2