数据挖掘中的反向传播算法详解

反向传播是一种用于训练神经网络的方法,它让模型能够从自身的错误中学习。它的工作原理是衡量输出结果的错误程度,然后逐步调整权重,以便在下次做出更好的预测。在本文中,我们将深入了解反向传播在数据挖掘中是如何运作的。

反向传播的工作原理

神经网络接收输入向量并生成输出向量。它会将生成的输出与期望的输出进行比较,如果结果不匹配生成的输出向量,就会生成错误报告。然后,它会相应地调整权重以获得期望的输出。这一过程基于梯度下降,并通过最小化预测输出与实际输出之间的误差来更新权重。反向传播的训练包含三个阶段:

  • 输入数据的前向传播。
  • 误差的反向传播。
  • 更新权重以减少误差。

让我们通过一个机器学习中反向传播的实例来深入理解。假设神经元在前向和反向传递中都使用 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

据说这个过程会一直持续,直到实际输出等于目标值为止。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43501.html
点赞
0.00 平均评分 (0% 分数) - 0