写在前面
机器学习算法工程师的面试中常会问到一个很基础的问题,那就是反向传播公式的推导,今天看了下吴恩达老师的公开课《神经网络和深度学习》,将一些推导过程记录下来。
逻辑回归反向传播的推导
逻辑回归是最简单的神经网络,先从逻辑回归入手,有助于后面的理解。
上图是一个逻辑回归正向传播的示意图。具体细节不再描述。
损失函数
L(a,y)=−yloga−(1−y)log(1−a)
,反向传播的目的是为了求
dw
和
db
,从而采用梯度下降法进行迭代优化。反向传播就是从后向前一步步求微分,从而得到
dw
和
db
。具体过程如下:
(1)
da=dL(a,y)da=−ya+1−y1−a
(2)
dz=da⋅g′(z)
(3)
dw=dz⋅x
(4)
db=dz
这样就完成了逻辑回归的反向传播。
单隐层神经网络的反向传播推导
神经网络计算中,与逻辑回归十分相似,但中间会有多层计算。下图是一个双层神经网络,有一个输入层,一个隐藏层和一个输出层。
前向传播过程如图所示。其中
L(a[2],y)
为交叉熵损失函数。假设有两个输出则
L(a[2],y)=−yloga[2]−(1−y)log(1−a[2])
反向传播公式如下:
首先
da[2]=dL(a[2],y)da[2]=−ya[2]+1−y1−a[2]
(1)
dz[2]=da[2]⋅g′(z[2])
其中sigmoid函数导数计算公式:
g′(z)=g(z)(1−g(z))
,所以
dz[2]=da[2]⋅(a[2]⋅(1−a[2]))=a[2]−y
即:
dz[2]=a[2]−y
(2)
dw[2]=dz[2]⋅a[1]T
(3)
db[2]=dz[2]
(4)
dz[1]=w[2]Tdz[2]⋅g[1]′(z[1])
(5)
dw[1]=dz[1]⋅xT
(6)
db[1]=dz[1]
以上6个关键方程,即完成了单隐层神经网络的反向传播。
深层神经网络的前向传播与反向传播
下图是一个四层神经网络。
前向传播过程如下:
(1)
z[l]=w[l]a[l−1]+b[l]
(2)
a[l]=g[l](z[l])
与单隐层神经网络反向传播类似,我们可以直接写出深层神经网络的反向传播递推公式:
(1)
dz[l]=da[l]⋅g[l]′(z[l])
(2)
dw[l]=dz[l]⋅a[l−1]
(3)
db[l]=dz[l]
(4)
da[l−1]=w[l]T⋅dz[l]
以上四个式子既可以实现深层网络的反向传播。
以上就是我记录的神经网络的反向传播公式推导,想看更详细的过程,请参看吴恩达老师在网易云课堂上的公开课《神经网络和深度学习》。