反向传播是神经网络的重要概念之一。我们的任务是最好地对数据进行分类。为此, 我们必须更新参数和偏差的权重, 但是如何在深度神经网络中做到这一点呢?在线性回归模型中, 我们使用梯度下降来优化参数。同样, 在这里, 我们也使用使用反向传播的梯度下降算法。
对于单个训练示例, 反向传播算法将计算误差函数的梯度。反向传播可以写为神经网络的函数。反向传播算法是一组用于利用梯度下降方法有效训练人工神经网络的方法, 该方法利用了链规则。
反向传播的主要特征是一种迭代, 递归和有效的方法, 通过该方法, 它可以计算更新的权重以改善网络, 直到无法执行要对其进行训练的任务为止。反向传播需要在网络设计时已知的激活函数的衍生物。
现在, 误差函数如何在反向传播中使用, 以及反向传播如何工作?让我们从一个示例开始, 然后以数学方式进行操作, 以了解如何使用反向传播精确更新权重。
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network.png)
文章图片
输入值
X1 = 0.05
X2 = 0.10
初始重量
W1 = 0.15 w5 = 0.40
W2 = 0.20 w6 = 0.45
W3 = 0.25 w7 = 0.50
W4 = 0.30 w8 = 0.55
偏差值
b1 = 0.35 b2 = 0.60
目标值
T1 = 0.01
T2 = 0.99
现在, 我们首先通过前向通过计算H1和H2的值。
前进通行证
为了找到H1的值, 我们首先将权重的输入值乘以
H1 = x1×w1 + x2×w2 + b1
H1 = 0.05×0.15 + 0.10×0.20 + 0.35
H1 = 0.3775
为了计算H1的最终结果, 我们执行了S型函数
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network2.png)
文章图片
我们将以与H1相同的方式计算H2的值
H2 = x1×w3 + x2×w4 + b1
H2 = 0.05×0.25 + 0.10×0.30 + 0.35
H2 = 0.3925
为了计算H1的最终结果, 我们执行了S型函数
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network3.png)
文章图片
现在, 我们以与计算H1和H2相同的方式计算y1和y2的值。
为了找到y1的值, 我们首先将输入值即H1和H2的权重乘以
y1 = H1×w5 + H2×w6 + b2
y1 = 0.593269992×0.40 + 0.596884378×0.45 + 0.60
y1 = 1.10590597
为了计算y1的最终结果, 我们执行了S型函数
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network4.png)
文章图片
我们将以与y1相同的方式计算y2的值
y2 = H1 x w7 + H2 x w8 + b2
y2 = 0.593269992 x 0.50 + 0.596884378 x 0.55 + 0.60
y2 = 1.2249214
为了计算H1的最终结果, 我们执行了S型函数
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network5.png)
文章图片
我们的目标值为0.01和0.99。 y1和y2的值与目标值T1和T2不匹配。
现在, 我们将找到总误差, 这仅仅是目标输出与输出之间的差异。总误差计算为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network6.png)
文章图片
因此, 总误差为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network7.png)
文章图片
现在, 我们将向后传播该错误, 以使用向后传递来更新权重。
在输出层向后传递
为了更新权重, 我们借助总误差来计算与每个权重相对应的误差。重量w的误差是通过将总误差相对于w进行微分来计算的。
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network8.png)
文章图片
我们执行向后处理, 因此首先考虑最后权重w5为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network9.png)
文章图片
从等式二, 很明显我们不能相对于w5部分区分它, 因为没有w5。我们将方程式1分解为多个项, 以便我们可以轻松地将w5区分为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network10.png)
文章图片
现在, 我们逐项计算每个项, 以将关于w5的Etotal区分为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network11.png)
文章图片
将e-y的值代入公式(5)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network12.png)
文章图片
所以, 我们把
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network13.png)
文章图片
在等式(3)中找到最终结果。
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network14.png)
文章图片
现在, 我们将借助以下公式计算更新的重量w5new
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network15.png)
文章图片
以同样的方式, 我们计算w6new, w7new和w8new, 这将为我们提供以下值
w5new = 0.35891648
w6new = 408666186
w7new = 0.511301270
w8new = 0.561370121
隐藏层向后传递
现在, 我们将向后传播到隐藏层, 并像对w5, w6, w7和w8权重所做的那样更新权重w1, w2, w3和w4。
我们将计算在w1处的误差为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network16.png)
文章图片
从等式(2), 很明显我们不能相对于w1进行部分微分, 因为没有w1。我们将等式(1)分成多个项, 以便我们可以轻松地将w1区分为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network17.png)
文章图片
现在, 我们逐项计算每个项, 以将关于w1的Etotal区分为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network18.png)
文章图片
我们再次将其拆分, 因为在Etoatal中没有任何H1final术语, 因为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network19.png)
文章图片
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network20.png)
文章图片
将再次分裂, 因为在E1和E2中没有H1项。拆分完成
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network21.png)
文章图片
我们再次拆分
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network22.png)
文章图片
因为在E1和E2中没有任何y1和y2项。我们将其拆分为
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network23.png)
文章图片
现在, 我们发现
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network24.png)
文章图片
通过将等式(18)和(19)中的值放在
从等式(18)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network25.png)
文章图片
从等式(8)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network26.png)
文章图片
从等式(19)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network27.png)
文章图片
将e-y2的值代入公式(23)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network28.png)
文章图片
从等式(21)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network29.png)
文章图片
现在从等式(16)和(17)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network30.png)
文章图片
把价值
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network31.png)
文章图片
在等式(15)中
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network32.png)
文章图片
我们有
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network33.png)
文章图片
我们需要弄清楚
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network34.png)
文章图片
as
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network35.png)
文章图片
将e-H1的值代入公式(30)
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network36.png)
文章图片
我们计算相对于w1的H1的总净输入的偏导数, 与我们对输出神经元所做的计算相同:
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network37.png)
文章图片
所以, 我们把
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network38.png)
文章图片
在等式(13)中找到最终结果。
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network39.png)
文章图片
现在, 我们将借助以下公式计算更新后的重量w1new
![PyTorch进阶(深度神经网络中的反向传播过程(图解))](http://www.srcmini.com/wp-content/uploads/2020/03/pytorch-backpropagation-process-in-deep-neural-network40.png)
文章图片
以同样的方式, 我们计算w2new, w3new和w4, 这将为我们提供以下值
【PyTorch进阶(深度神经网络中的反向传播过程(图解))】w1new = 0.149780716
w2new = 0.19956143
w3new = 0.24975114
w4new = 0.29950229
我们已经更新了所有权重。前馈0.05和0.1输入时, 我们在网络上发现错误0.298371109。在第一轮反向传播中, 总误差降至0.291027924。重复此过程10, 000后, 总误差降至0.0000351085。在这一点上, 当我们前馈0.05和0.1时, 输出神经元生成0.159121960和0.984065734, 即接近我们的目标值。
推荐阅读
- PyTorch神经网络和深度学习基本介绍
- PyTorch数据扩充流程实例图解
- PyTorch使用自定义模块创建数据模型
- Python绘图|【Python绘图】绘制Mascot
- 美团数据采集app爬虫
- WinXP系统文件夹选项在啥地方里?WinXP文件夹选项的详细介绍
- WinXP系统压缩文件打开不了如何处理?
- WinXP系统IE提示“是否停止运行此脚本”的处理方案
- WinXP声卡驱动怎样安装?安装声卡驱动的办法