从偏微分角度理解神经网络的反向传播

神经网络结构

这里我们以3层神经网络为例,来分析反向传播的过程,结构图如下:

在这里插入图片描述
3层神经网络结构图

这里的每一个神经元的计算都可以理解为一次逻辑回归的计算过程,其中:
h θ ( x ) = g ( θ T ∗ x ) h_{\theta}(x) = g({\theta}^T * x) hθ(x)=g(θTx)
g ( z ) = 1 ( 1 + e − z ) g(z) = \frac{1} {(1 + e^{-z})} g(z)=(1+ez)1
g ′ ( z ) = g ( z ) ∗ ( 1 − g ( z ) ) g'(z)=g(z)*(1-g(z)) g(z)=g(z)(1g(z))
所以:
h θ ( x ) = 1 ( 1 + e − θ T ∗ x ) h_{\theta}(x) = \frac{1} {(1 + e^{-{\theta}^T * x})} hθ(x)=(1+eθTx)1
神经网络的代价函数如下:
J ( θ ) = 1 / m ∗ ∑ i = 1 m ∑ k = 1 K [ − y k ( i ) l o g ( ( h θ ( x ( i ) ) ) k ) − ( 1 − y k ( i ) ) l o g ( 1 − ( h θ ( x ( i ) ) ) k ] J(\theta) = 1/m * \sum_{i=1}^m \sum_{k=1}^K [-y_k^{(i)} log((h_{\theta}(x^{(i)}))_k) - (1-y_k^{(i)})log(1 - (h_{\theta}(x^{(i)}))_k] J(θ)=1/mi=1mk=1K[yk(i)log((hθ(x(i)))k)(1yk(i))log(1(hθ(x(i)))k]

这里是不带正则化的代价函数 C o s t ( i ) Cost(i) Cost(i),它与逻辑回归的代价函数很相似。
这里的k表示第k个输出类别,因为神经网络输出层有 K K K个神经元 。

理解反向传播(Back Propagation)

我们这里以1个样本(i)的3层神经网络来分析, 1个输入层,1个隐藏层,1个输出层。
其实反向传播就是计算代价函数对每一层的 θ i j \theta_{ij} θij参数的偏微分,和之前的逻辑回归算法类似,用这些偏微分进行梯度下降求代价函数的最小值。
那么代价函数可以简化为:
J ( θ ) = − y l o g ( a ( 3 ) ) − ( 1 − y ) l o g ( 1 − a ( 3 ) ) J(\theta) = -ylog(a^{(3)}) - (1-y)log(1-a^{(3)}) J(θ)=ylog(a(3))(1y)log(1a(3))
J ( θ ) = − y l o g ( g ( z ( 3 ) ) ) − ( 1 − y ) l o g ( 1 − g ( z ( 3 ) ) ) J(\theta) = -ylog(g(z^{(3)})) - (1-y)log(1-g(z^{(3)})) J(θ)=ylog(g(z(3)))(1y)log(1g(z(3)))

其中 y y y a ( 3 ) a^{(3)} a(3)都是向量,维度为K,表示K个输出神经元

在这里插入图片描述
反向传播推导过程

从后往前推导,首先计算代价函数对第2层 θ \theta θ的偏微分,可以表示为:
∂ J ( θ ) ∂ θ i j ( 2 ) = ∂ J ( θ ) ∂ z j ( 3 ) ∗ ∂ z j ( 3 ) ∂ θ i j ( 2 ) \frac{\partial J(\theta)}{\partial \theta_{ij}^{(2)}} = \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} * \frac{\partial z_j^{(3)}}{\partial \theta_{ij}^{(2)}} θij(2)J(θ)=zj(3)J(θ)θij(2)zj(3)
∵ ∂ J ( θ ) ∂ z j ( 3 ) = ∂ J ( θ ) ∂ a j ( 3 ) ∗ ∂ a j ( 3 ) ∂ z j ( 3 ) = g ( z j ( 3 ) ) − y j = a j ( 3 ) − y j \because \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} = \frac{\partial J(\theta)}{\partial a_{j}^{(3)}}*\frac{\partial a_{j}^{(3)}}{\partial z_{j}^{(3)}}=g(z_j^{(3)})-y_j=a_{j}^{(3)}-y_j zj(3)J(θ)=aj(3)J(θ)zj(3)aj(3)=g(zj(3))yj=aj(3)yj

∵ ∂ z j ( 3 ) ∂ θ i j ( 2 ) = ( a j ( 2 ) ) T \because \frac{\partial z_j^{(3)}}{\partial \theta_{ij}^{(2)}}=(a_j^{(2)})^T θij(2)zj(3)=(aj(2))T

所以,代价函数对第2层 θ \theta θ的偏微分:
∂ J ( θ ) ∂ θ i j ( 2 ) = ( a j ( 3 ) − y j ) ∗ ( a j ( 2 ) ) T \frac{\partial J(\theta)}{\partial \theta_{ij}^{(2)}} = (a_j^{(3)}-y_j)*(a_j^{(2)})^T θij(2)J(θ)=(aj(3)yj)(aj(2))T

这里我们引入一个 δ ( l ) \delta^{(l)} δ(l)项,它表示代价函数对每一层上的 z ( l ) z^{(l)} z(l)的偏导数,所以前面我们推导的:
δ j ( 3 ) = ∂ J ( θ ) ∂ z j ( 3 ) = a j ( 3 ) − y j \delta_j^{(3)}= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}}=a_{j}^{(3)}-y_j δj(3)=zj(3)J(θ)=aj(3)yj

l l l表示层数;
δ j ( 3 ) \delta_j^{(3)} δj(3)表示代价函数 J ( θ ) J(\theta) J(θ) z j ( 3 ) z_{j}^{(3)} zj(3)的偏导数;
以此类推, δ j ( 2 ) \delta_j^{(2)} δj(2)就表示代价函数 J ( θ ) J(\theta) J(θ) z j ( 2 ) z_{j}^{(2)} zj(2)的偏导数。

接下来我们计算代价函数对第1层 θ \theta θ的偏微分,可以表示为:
∂ J ( θ ) ∂ θ i j ( 1 ) = ∂ J ( θ ) ∂ z j ( 2 ) ∗ ∂ z j ( 2 ) ∂ θ i j ( 1 ) \frac{\partial J(\theta)}{\partial \theta_{ij}^{(1)}} = \frac{\partial J(\theta)}{\partial z_{j}^{(2)}} * \frac{\partial z_j^{(2)}}{\partial \theta_{ij}^{(1)}} θij(1)J(θ)=zj(2)J(θ)θij(1)zj(2)

∵ ∂ J ( θ ) ∂ z j ( 2 ) = ∂ J ( θ ) ∂ a j ( 2 ) ∗ ∂ a j ( 2 ) ∂ z j ( 2 ) = ∂ J ( θ ) ∂ a j ( 2 ) ∗ g ′ ( z j ( 2 ) ) = ∂ J ( θ ) ∂ z j ( 3 ) ∗ ∂ z j ( 3 ) ∂ a j ( 2 ) ∗ g ′ ( z j ( 2 ) ) \because \frac{\partial J(\theta)}{\partial z_{j}^{(2)}} = \frac{\partial J(\theta)}{\partial a_{j}^{(2)}}*\frac{\partial a_{j}^{(2)}}{\partial z_{j}^{(2)}}=\frac{\partial J(\theta)}{\partial a_{j}^{(2)}}*g'(z_{j}^{(2)})= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}}* \frac{\partial z_{j}^{(3)}}{\partial a_{j}^{(2)}}*g'(z_{j}^{(2)}) zj(2)J(θ)=aj(2)J(θ)zj(2)aj(2)=aj(2)J(θ)g(zj(2))=zj(3)J(θ)aj(2)zj(3)g(zj(2))

∵ δ j ( 3 ) = ∂ J ( θ ) ∂ z j ( 3 ) \because \delta_j^{(3)}= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} δj(3)=zj(3)J(θ)

∵ z j ( 3 ) = Θ j ( 2 ) ∗ a j ( 2 ) \because z_j^{(3)}=\Theta_j^{(2)}*a_{j}^{(2)} zj(3)=Θj(2)aj(2)

∴ ∂ z j ( 3 ) ∂ a j ( 2 ) = ( Θ j ( 2 ) ) T \therefore \frac{\partial z_{j}^{(3)}}{\partial a_{j}^{(2)}}= (\Theta_j^{(2)})^T aj(2)zj(3)=(Θj(2))T

∴ δ j ( 2 ) = ∂ J ( θ ) ∂ z j ( 2 ) = ( Θ j ( 2 ) ) T ∗ δ j ( 3 ) ∗ g ′ ( z j ( 2 ) ) \therefore \delta_j^{(2)}=\frac{\partial J(\theta)}{\partial z_{j}^{(2)}} =(\Theta_j^{(2)})^T*\delta_j^{(3)}*g'(z_{j}^{(2)}) δj(2)=zj(2)J(θ)=(Θj(2))Tδj(3)g(zj(2))

∵ ∂ z j ( 2 ) ∂ θ i j ( 1 ) = ( a j ( 1 ) ) T \because \frac{\partial z_j^{(2)}}{\partial \theta_{ij}^{(1)}}=(a_j^{(1)})^T θij(1)zj(2)=(aj(1))T

所以代价函数对第1层 θ \theta θ的偏微分:
∂ J ( θ ) ∂ θ i j ( 1 ) = ( Θ j ( 2 ) ) T ∗ δ j ( 3 ) ∗ g ′ ( z j ( 2 ) ) ∗ ( a j ( 1 ) ) T \frac{\partial J(\theta)}{\partial \theta_{ij}^{(1)}} = (\Theta_j^{(2)})^T*\delta_j^{(3)}*g'(z_{j}^{(2)})*(a_j^{(1)})^T θij(1)J(θ)=(Θj(2))Tδj(3)g(zj(2))(aj(1))T

最后累加每个样本在每一层的偏微分:
Δ ( i j ) ( l ) = Δ ( i j ) ( l ) + a j ( l ) ∗ δ i ( l + 1 ) \Delta_{(ij)}^{(l)}=\Delta_{(ij)}^{(l)}+a_j^{(l)}* \delta_i^{(l+1)} Δ(ij)(l)=Δ(ij)(l)+aj(l)δi(l+1)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值