反向传播是一种用于训练神经网络的方法,它让模型能够从自身的错误中学习。它的工作原理是衡量输出结果的错误程度,然后逐步调整权重,以便在下次做出更好的预测。在本文中,我们将深入了解反向传播在数据挖掘中是如何运作的。
反向传播的工作原理
神经网络接收输入向量并生成输出向量。它会将生成的输出与期望的输出进行比较,如果结果不匹配生成的输出向量,就会生成错误报告。然后,它会相应地调整权重以获得期望的输出。这一过程基于梯度下降,并通过最小化预测输出与实际输出之间的误差来更新权重。反向传播的训练包含三个阶段:
- 输入数据的前向传播。
- 误差的反向传播。
- 更新权重以减少误差。
让我们通过一个机器学习中反向传播的实例来深入理解。假设神经元在前向和反向传递中都使用 Sigmoid 激活函数。目标输出为 0.5,学习率为 1。
!example-1反向传播求和示例 (1)
1. 前向传播
1. 初始计算
每个节点的加权和计算公式如下:
a j =∑(w i ,j∗x i )
其中,
- a_j 是每个节点上所有输入和权重的加权和
- w_{i,j} 代表第 i 个输入与第 j 个神经元之间的权重
- x_i 代表第 i 个输入的值
INLINECODEcfcbc85b (输出): 对 INLINECODE71b1c240 应用激活函数后,我们得到神经元的输出:
oj = activation function(aj )
2. Sigmoid 函数
Sigmoid 函数返回一个介于 0 和 1 之间的值,从而为模型引入非线性。
yj = \frac{1}{1+e^{-aj}}
!example-2计算 y3, y4 和 y5 的输出值
3. 计算输出值
在 h1 节点:
\begin {aligned}a1 &= (w{1,1} x1) + (w{2,1} x_2) \\& = (0.2 0.35) + (0.2 0.7)\\&= 0.21\end {aligned}
一旦我们计算出了 a1 的值,就可以继续求出 y3 的值:
yj= F(aj) = \frac 1 {1+e^{-a_1}}
y_3 = F(0.21) = \frac 1 {1+e^{-0.21}}
y_3 = 0.56
同理,我们可以求出 h2 节点的 y4 值和 O3 节点的 y5 值:
a2 = (w{1,2} x1) + (w{2,2} x_2) = (0.30.35)+(0.30.7)=0.315
y_4 = F(0.315) = \frac 1{1+e^{-0.315}}
a3 = (w{1,3}y3)+(w{2,3}y4) =(0.30.57)+(0.90.59) =0.702
y_5 = F(0.702) = \frac 1 {1+e^{-0.702} } = 0.67
!example-3y3, y4 和 y5 的计算值
4. 误差计算
我们的实际输出是 0.5,但我们得到了 0.67。 要计算误差,我们可以使用下面的公式:
Errorj= y{target} – y_5
Error = 0.5 – 0.67 = -0.17
我们将利用这个误差值进行反向传播。
2. 反向传播
1. 计算梯度
每个权重的变化量计算如下:
\Delta w{ij} = \eta \times \deltaj \times O_j
其中:
- \delta_j 是每个单元的误差项,
- \eta 是学习率。
2. 输出单元误差
对于 O3:
\delta5 = y5(1-y5) (y{target} – y_5)
= 0.67(1-0.67)(-0.17) = -0.0376
3. 隐藏单元误差
对于 h1:
\delta3 = y3 (1-y3)(w{1,3} \times \delta_5)
= 0.56(1-0.56)(0.3 \times -0.0376) = -0.0027
对于 h2:
\delta4 = y4(1-y4)(w{2,3} \times \delta_5)
=0.59 (1-0.59)(0.9 \times -0.0376) = -0.0819
3. 权重更新
对于从隐藏层到输出层的权重:
\Delta w_{2,3} = 1 \times (-0.0376) \times 0.59 = -0.022184
新权重:
w_{2,3}(\text{new}) = -0.022184 + 0.9 = 0.877816
对于从输入层到隐藏层的权重:
\Delta w_{1,1} = 1 \times (-0.0027) \times 0.35 = 0.000945
新权重:
w_{1,1}(\text{new}) = 0.000945 + 0.2 = 0.200945
同理,其他权重更新如下:
- w_{1,2}(\text{new}) = 0.273225
- w_{1,3}(\text{new}) = 0.278568
- w_{2,1}(\text{new}) = 0.269445
- w_{2,2}(\text{new}) = 0.18534
更新后的权重如下图所示
!change通过反向传播更新权重
更新权重后,我们再次重复前向传播,得到:
- y_3 = 0.57
- y_4 = 0.56
- y_5 = 0.6571
由于 y_5 = 0.6571 仍然不是目标输出,计算误差和反向传播的过程将继续进行,直到达到期望的输出。
这个过程展示了反向传播如何通过最小化误差来迭代地更新权重,直到网络能够准确预测输出。
Error = y{target} – y5
= 0.5 − 0.6571=−0.1571
据说这个过程会一直持续,直到实际输出等于目标值为止。