反向传播法(backpropagation)的基本原理

本文通过整理李宏毅老师的机器学习教程的内容,介绍神经网络中用于更新参数的反向传播法(backpropagation)的基本原理。

反向传播 backpropagation, 李宏毅


神经网络的结构:
神经网络的结构

loss(损失)的计算:
loss 计算
L ( θ ) = ∑ n = 1 N C n ( θ ) L(\theta) = \sum_{n=1}^{N} C^{n}(\theta) L(θ)=n=1NCn(θ)

其中,上标 n n n 表示第 n n n 条数据。

易知:网络参数的更新取决于数据的 loss 值,而更新方式即为梯度下降法(gradient descent)。

以单个神经元为例:
神经元

loss 对参数 w w w 的偏微分:
∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ C n ( θ ) ∂ w \frac {\partial L(\theta)} {\partial w} = \sum_{n=1}^{N} \frac {\partial C^{n}(\theta)} {\partial w} wL(θ)=n=1NwCn(θ)

对参数 b b b 的偏微分类似。

简单地,考虑其中一条数据的 loss 值,并将 C n ( θ ) C^{n}(\theta) Cn(θ) 简记为 C C C,则:
∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \frac {\partial C} {\partial w} = \frac {\partial z} {\partial w} \frac {\partial C} {\partial z} wC=wzzC

其中,对第一项偏微分 ∂ z ∂ w \frac {\partial z} {\partial w} wz 的计算称为 forward pass,对第二项偏微分 ∂ C ∂ z \frac {\partial C} {\partial z} zC 的计算称为 backward pass,继续看下去会理解其原因。

易知:第一项偏微分其实就等于数据输入 x x x,即:
∂ z ∂ w 1 = x 1 ∂ z ∂ w 2 = x 2 \frac {\partial z} {\partial w_1} = x_1 \quad \frac {\partial z} {\partial w_2} = x_2 w1z=x1w2z=x2

而计算第二项偏微分则不太容易,因为在 z z z 后面的非线性模块之后,可能还有多个网络层:
对 z 的偏微分

于是对第二项偏微分 ∂ C ∂ z \frac {\partial C} {\partial z} zC 继续展开,得到:
∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a \frac {\partial C} {\partial z} = \frac {\partial a} {\partial z} \frac {\partial C} {\partial a} zC=zaaC

而由于非线性模块的输出 a = σ ( z ) a = \sigma(z) a=σ(z),故第一项: ∂ a ∂ z = σ ′ ( z ) \frac {\partial a} {\partial z} = \sigma^{\prime}(z) za=σ(z)
而第二项可进一步展开为:
∂ C ∂ a = ∂ z ′ ∂ a ∂ C ∂ z ′ + ∂ z ′ ′ ∂ a ∂ C ∂ z ′ ′ \frac {\partial C} {\partial a} = \frac {\partial z^{\prime}} {\partial a} \frac {\partial C} {\partial z^{\prime}} + \frac {\partial z^{\prime \prime}} {\partial a} \frac {\partial C} {\partial z^{\prime \prime}} aC=azzC+az′′z′′C

与前面类似地,有:
∂ z ′ ∂ a = w 3 ∂ z ′ ′ ∂ a = w 4 \frac {\partial z^{\prime}} {\partial a} = w_3 \quad \frac {\partial z^{\prime \prime}} {\partial a} = w_4 az=w3az′′=w4

而计算 ∂ C ∂ z ′ \frac {\partial C} {\partial z^{\prime}} zC ∂ C ∂ z ′ ′ \frac {\partial C} {\partial z^{\prime \prime}} z′′C 需要下一次迭代,以此类推。

因此,如果网络的层级特别多,正向计算会非常繁琐。

但如果反过来看,从输出层开始,先得到 ∂ C ∂ z ′ \frac {\partial C} {\partial z^{\prime}} zC ∂ C ∂ z ′ ′ \frac {\partial C} {\partial z^{\prime \prime}} z′′C,再反向计算前面各层的 ∂ C ∂ z \frac {\partial C} {\partial z} zC 就会比较容易:
反向计算

其中,由于正向计算时已计算过各层的输出,因此 σ ′ ( z ) \sigma^{\prime}(z) σ(z) 为常数。

最后,总结整体过程入下:
整体过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
误差反向传播(Error Backpropagation)是一种用于训练神经网络的优化算,常用于解决监督学习问题。它通过计算预测值与真实值之间的误差,并将误差反向传播回网络中的每个权重,从而调整网络参数以最小化误差。 下面是基本的误差反向传播的步骤: 1. 步骤一:前向传播 - 输入一个训练样本,并通过网络前向传播计算得到预测值。 - 预测值与真实值之间的误差可以使用不同的损失函数来衡量,如均方误差(mean squared error)或交叉熵损失(cross-entropy loss)。 2. 步骤二:反向传播 - 计算输出层的误差梯度,即预测值与真实值之间的差异。 - 将误差梯度反向传播回每一层隐藏层,其中每个权重的贡献度根据其权重在网络中的路径来计算。 - 对于每个权重,通过链式则计算损失函数对该权重的偏导数。 3. 步骤三:参数更新 - 使用梯度下降或其他优化算,根据计算得到的梯度,更新网络中的参数(权重和偏置)。 - 更新参数的步长(学习率)可以进行调整,以控制更新的速度和稳定性。 4. 步骤四:重复迭代 - 重复执行步骤一至步骤三,通过多次迭代来逐渐减小误差,提高网络的性能。 - 在每次迭代中,可以随机选择不同的训练样本,或者使用小批量(mini-batch)的样本来进行更新。 通过误差反向传播,神经网络可以逐步优化自身的参数,以更好地拟合训练数据,并在新的输入上做出准确的预测。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值