版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laojiaqi/article/details/78133483
假设,该样本3种特征,分别为
x1
,
x2
,
x3
,
1.1单个样本,用标量表示
那么对于向前传播的公式可以得到:
z=w1x1+w2x2+w3x3+b
,
激活函数用(
activation function
):
a=g(z)
(其中
g
可以为
relu
或者
sigmoid
函数)
损耗函数(
cost function
):
(a,y)=−ylog(a)−(1−y)log(1−a)
反向传播需要用到的导数可以为:
dz=da∗g′(z)
dw1=x1∗dz
dw3=x2∗dz
dw2=x3∗dz
db=dz
dx1=w1∗dz
dx2=w2∗dz
dx3=w3∗dz
根据以上公式就可以对
w,b
进行梯度下降的计算(
a
为学习速率)
w=w−a∗dw
b=b−a∗db
1.2 多个样本,向量表示
假设向量
W=⎡⎣⎢⎢⎢⎢⎢w11w12w13w21w22w23w31w32w33...wh1wh2wh3⎤⎦⎥⎥⎥⎥⎥
维度为
h∗3
,
h
为隐藏层节点数,下同,
并且
X=⎡⎣⎢⎢x11x21...xm1x12x22...xm2x13x23...xm3⎤⎦⎥⎥
,维度为
3∗m
损耗函数为
J=−1m∑i=0m(y(i)log(a[L](i))+(1−y(i))log(1−a[L](i)))
那么对于向前传播的公式可以得到:
Z=W∗X+B
激活函数用(
activation function
):
A=g(Z)
损耗函数(
cost function
):
(A,Y)=−Ylog(A)−(1−Y)log(1−Y)
从上面看,和之前用标量表示的方法形式上很相似,再来看下用反向传播需要用到的导数
dZ=dA∗g′(Z)
dZ=⎡⎣⎢⎢⎢⎢dz11dz21dz31...dzm1dz12dz22dz32...dzm2...dz1hdz2hdz3h...dzmh⎤⎦⎥⎥⎥⎥
Z矩阵的维度为
h∗m
下面计算
dW
,这个略有点复杂,先来看下单个
dw11
,由于有m个样本,则
dw11=1/m∗(x11∗dz11+x21∗dz21+x31∗dz31+...+xm1∗dzm1)
,那么
dW=1/m∗∑i=1mdZ∗XT
,为什么不是
X∗dZT
?是因为
W
的维度为
h∗m
,
同理可以得到
dB=1/m∗∑i=1mdZ
,
再来看下
dX
如何计算,其实和计算
dW
非常相似,只不过现在把
X
看成是自变量,来看下
dx11
的计算公式
dx11=(w11∗dz11+w21∗dz21+...+wh1∗dzh1)
所以
dX=WT∗dZ
下面推广到对于L层的公式
dW[l]=∂∂W[l]=1mdZ[l]A[l−1]T
db[l]=∂∂b[l]=1m∑i=1mdZ[l](i)
dA[l−1]=∂∂A[l−1]=W[l]TdZ[l]