反向传播笔录


反向传播概述

在这里插入图片描述
为了有效的计算梯度,我们使用反向传播。

链式法则:
在这里插入图片描述

给定一组neural network参数 θ \theta θ, 我们把一个training data x n x^n xn带到neural network输出一个 y n y^n yn,同时我们希望neural network输出 y ^ n \hat{y}^n y^n(target)。我们定义 y n y^n yn y ^ n \hat{y}^n y^n距离的Function写作 C n C^n Cn C n C^n Cn大,loss大,这组参数不好。
在这里插入图片描述
把它所有training data根据这组参数得到的output和target之间的距离求和就得到了total loss( L ( θ ) L(\theta) L(θ))。把 L ( θ ) L(\theta) L(θ)对摸一个参数 w w w做偏微分就得到了 ∂ L ( θ ) ∂ w = Σ n = 1 N ∂ C n ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w} = \Sigma_{n=1}^N \frac{\partial C^n(\theta)}{\partial w} wL(θ)=Σn=1NwCn(θ)。下面我们只要考虑某一笔training data 的loss对参数的偏微分(后面求和):

我们先考虑下面某一个neural:
在这里插入图片描述

这个neural是第一个layer的neural,所以她的输入是外界给他的 x 1 , x 2 x_1,x_2 x1,x2
以weight为例,看如何计算 ∂ C ∂ w \frac{\partial C}{\partial w} wC:
在这里插入图片描述

根据链式法则,可以拆成两项: ∂ z ∂ w ∂ C ∂ z \frac{\partial z}{\partial w}\frac{\partial C}{\partial z} wzzC

  • Forward pass(前向过程):计算对于所有参数的 ∂ z ∂ w \frac{\partial z}{\partial w} wz
  • Backward pass(反向过程):计算对于所有激活函数输入z的 ∂ C ∂ z \frac{\partial C}{\partial z} zC

在这里插入图片描述

反向传播-前向过程

计算对于所有参数的 ∂ z ∂ w \frac{\partial z}{\partial w} wz

在这里插入图片描述
由权重所连接的输入值。

反向传播-反向过程

计算对于所有激活函数输入z的 ∂ C ∂ z \frac{\partial C}{\partial z} zC
在这里插入图片描述
对于 ∂ a ∂ z \frac{\partial a}{\partial z} za,我们有 a = σ a=\sigma a=σ
σ ′ ( z ) \sigma'(z) σ(z):
在这里插入图片描述

接下来,对于 ∂ C ∂ a \frac{\partial C}{\partial a} aC,怎么算?
a与C的关系:a会影响 z ′ z' z z ′ ′ z'' z′′, z ′ z' z z ′ ′ z'' z′′会影响C,所以:
∂ C ∂ z = ∂ z ′ ∂ a ∂ C ∂ z ′ + ∂ z ′ ′ ∂ a ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z} = \frac{\partial z'}{\partial a}\frac{\partial C}{\partial z'} + \frac{\partial z''}{\partial a}\frac{\partial C}{\partial z''} zC=azzC+az′′z′′C
由于 z ′ = a w 3 + . . . z' = aw_3+... z=aw3+..., z ′ ′ = a w 4 + . . . z'' = aw_4+... z′′=aw4+...
∂ C ∂ z = w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z} = w_3\frac{\partial C}{\partial z'} + w_4\frac{\partial C}{\partial z''} zC=w3zC+w4z′′C
在这里插入图片描述

假设(*)我们通过某种方法把 ∂ C ∂ z ′ , ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z'}, \frac{\partial C}{\partial z''} zC,z′′C算出来。那么
∂ C ∂ z = σ ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac{\partial C}{\partial z} = \sigma'(z)[w_3\frac{\partial C}{\partial z'} + w_4\frac{\partial C}{\partial z''}] zC=σ(z)[w3zC+w4z′′C]

在这里插入图片描述
我们假设有另一个神经元,输入是 ∂ C ∂ z ′ , ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z'}, \frac{\partial C}{\partial z''} zC,z′′C,activate Function σ ′ ( z ) \sigma'(z) σ(z),那么输出为:
∂ C ∂ z = σ ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac{\partial C}{\partial z} = \sigma'(z)[w_3\frac{\partial C}{\partial z'} + w_4\frac{\partial C}{\partial z''}] zC=σ(z)[w3zC+w4z′′C]
给定z, σ ′ ( z ) \sigma'(z) σ(z)是常数,因为z在向前传递中已经确定。

最后,我们如果能算 ∂ C ∂ z ′ , ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z'}, \frac{\partial C}{\partial z''} zC,z′′C,那么问题就都解决了。

  • 第一种情况红色的neural的output就是整个network的output:
    在这里插入图片描述

∂ C ∂ y 1 \frac{\partial C}{\partial y_1} y1C可以根据定义的Loss Function C算出来。 ∂ y 1 ∂ z ′ \frac{\partial y_1}{\partial z'} zy1根据激活函数算出。

  • 第二种情况,不是最后一层:
    在这里插入图片描述
    那么,我们就重复上面假设(*),递归计算 ∂ C ∂ z \frac{\partial C}{\partial z} zC,直到我们达到最后一层。

这种方法算反向过程很可怕,我们可以建立一个反向的network:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔下万码生谋略

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值