反向传播是神经网络的一个重要概念。我们的任务是尽可能准确地分类数据。为此,我们需要更新参数的权重和偏差值,但在深度神经网络中,我们如何做到这一点?在线性回归模型中,我们使用梯度下降来优化参数。类似地,在这里我们也使用梯度下降算法,结合反向传播。

对于单个训练样本,反向传播算法计算误差函数的梯度。反向传播可以写成神经网络的一个函数。反向传播算法是一组方法,用于有效地训练人工神经网络,遵循梯度下降方法,利用链式法则。

反向传播的主要特点是迭代、递归和高效的方法,通过这种方法计算更新的权重,以改进网络,直到它能够执行其正在训练的任务。网络设计时需要知道激活函数的导数,这是反向传播所需的。

那么,误差函数在反向传播中是如何使用的,反向传播是如何工作的呢?让我们从一个例子开始,通过数学方式来理解反向传播如何准确地更新权重。

1.png

输入值

X1=0.05 X2=0.10

初始权重

W1=0.15 W2=0.20 W3=0.25 W4=0.30 w5=0.40 w6=0.45 w7=0.50 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的最终结果,我们执行了Sigmoid函数:

2.png

我们将以与H1相同的方式计算H2的值:

H2=x1×w3+x2×w4+b1 H2=0.05×0.25+0.10×0.30+0.35 H2=0.3925

为了计算H2的最终结果,我们执行了Sigmoid函数:

3.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的最终结果,我们执行了Sigmoid函数:

4.png

我们将以与y1相同的方式计算y2的值:

y2=H1×w7+H2×w8+b2 y2=0.593269992×0.50+0.596884378×0.55+0.60 y2=1.2249214

为了计算y2的最终结果,我们执行了Sigmoid函数:

5.png

我们的目标值是0.01和0.99。我们的y1和y2值与我们的目标值T1和T2不匹配。

现在,我们将找到总误差,即输出与目标输出之间的差异。总误差计算如下:

6.png

因此,总误差是:

7.png

现在,我们将通过反向传播来更新权重。

输出层的反向传播

为了更新权重,我们计算每个权重对应的误差,以帮助总误差。权重w的误差是通过对总误差求w的偏导数来计算的。

8.png

我们执行反向过程,首先考虑最后一个权重w5:

9.png

从方程二可以清楚地看到,我们不能对w5进行偏导数计算,因为没有w5。我们将方程一分成多个项,以便我们可以轻松地对w5求导:

10.png

现在,我们一项一项地计算,以对w5求导:

11.png

将e-y的值放入方程式(5)中:

12.png

因此,我们将

13.png

的值放入方程式3中,找到最终结果。

14.png

现在,我们将使用以下公式计算更新后的权重w5new:

15.png

同样的方式,我们计算w6new、w7new和w8new,得到以下值:

w5new=0.35891648 w6new=408666186 w7new=0.511301270 w8new=0.561370121

隐藏层的反向传播

现在,我们将进行反向传播到我们的隐藏层,并更新权重w1、w2、w3和w4,就像我们对w5、w6、w7和w8权重所做的那样。

我们将计算w1处的误差为

16.png

从方程(2)可以看出,我们无法对w1进行偏导数分解,因为没有w1。我们将方程(1)拆分为多个项,以便我们可以轻松地对w1进行偏导数分解,如下所示

17.png

现在,我们逐一计算每个项,对w1进行偏导数分解

18.png

我们再次拆分,因为在Etoatal中没有H1final项,拆分如下

19.png

20.png

再次拆分,因为在E1和E2中没有H1项。 拆分如下

21.png

我们再次拆分

22.png

因为在E1和E2中没有y1和y2项。 拆分如下

23.png

现在,通过将值放入方程(18)和(19)中,我们找到了

24.png

的值

从方程(18)得到

25.png

从方程(8)得到

26.png

从方程(19)得到

27.png

将e-y2的值放入方程(23)中

28.png

从方程(21)得到

29.png

现在从方程(16)和(17)得到

30.png

31.png

的值放入方程(15)中

32.png

我们有

33.png

我们需要找出

34.png

35.png

将e-H1的值放入方程(30)中

36.png

我们计算总输入到H1的偏导数,与我们对输出神经元所做的方式相同:

37.png

因此,我们将

38.png

的值放入方程(13)中找到最终结果。

39.png

现在,我们将使用以下公式计算更新后的权重w1new

40.png

以相同的方式,我们计算w2new,w3new和w4new,得到以下值

w1new=0.149780716 w2new=0.19956143 w3new=0.24975114 w4new=0.29950229

我们已经更新了所有的权重。当我们向网络输入0.05和0.1时,我们发现了0.298371109的误差。在第一轮反向传播中,总误差降至0.291027924。经过10000次重复此过程后,总误差降至0.0000351085。此时,当我们向前馈送0.05和0.1时,输出神经元生成0.159121960和0.984065734,即接近我们的目标值。

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库