神经网络二分类任务详解:前向传播与反向传播的数学计算
神经网络二分类任务详解:前向传播与反向传播的数学计算
1. 引言
神经网络是深度学习的基础模型,在二分类任务中表现出色。本文将详细分析一个具体神经网络实例的前向传播、反向传播和参数更新过程,通过完整的数学计算展示神经网络的工作原理。二分类任务是神经网络最基础的应用之一,目标是让模型能够将输入数据划分为两个类别(如0和1)。我们将使用包含一个隐藏层的简单网络结构,其中隐藏层使用ReLU激活函数,输出层使用Sigmoid激活函数,损失函数采用均方误差。
本文将逐步演示如何计算神经网络的输出,然后通过反向传播算法计算梯度并更新权重参数。通过比较参数更新前后的损失值,我们可以直观地看到神经网络的学习过程。这种从理论到实践的分析方法,有助于读者深入理解神经网络的核心机制。
2. 神经网络结构与前向传播
2.1 网络架构与参数初始化
我们使用的神经网络结构如下:
- 输入层:2个神经元(对应特征值[0.8, 0.5])
- 隐藏层:3个神经元(神经元3、4、5)
- 输出层:1个神经元(神经元6)
权重和偏置参数初始值为:
- 神经元3:权重[0.5, 0.2],偏置0.2
- 神经元4:权重[0.8, 0.4],偏置0.1
- 神经元5:权重[0.5, 0.6],偏置0.2
- 神经元6:权重[0.3, 0.6, 0.5],偏置0.2
下面是初始神经网络的结构图:
2.2 前向传播计算过程
前向传播是数据从输入层流向输出层的过程,每一层都会进行加权求和和激活函数变换。
隐藏层计算(使用ReLU激活函数):
神经元3的计算:
[
\begin{aligned}
z_3 &= w_{13}x_1 + w_{23}x_2 + b_3 = 0.5 \times 0.8 + 0.2 \times 0.5 + 0.2 = 0.4 + 0.1 + 0.2 = 0.7 \
a_3 &= \text{ReLU}(z_3) = \max(0, 0.7) = 0.7
\end{aligned}
]
神经元4的计算:
[
\begin{aligned}
z_4 &= w_{14}x_1 + w_{24}x_2 + b_4 = 0.8 \times 0.8 + 0.4 \times 0.5 + 0.1 = 0.64 + 0.2 + 0.1 = 0.94 \
a_4 &= \text{ReLU}(z_4) = 0.94
\end{aligned}
]
神经元5的计算:
[
\begin{aligned}
z_5 &= w_{15}x_1 + w_{25}x_2 + b_5 = 0.5 \times 0.8 + 0.6 \times 0.5 + 0.2 = 0.4 + 0.3 + 0.2 = 0.9 \
a_5 &= \text{ReLU}(z_5) = 0.9
\end{aligned}
]
输出层计算(使用Sigmoid激活函数):
[
\begin{aligned}
z_6 &= w_{36}a_3 + w_{46}a_4 + w_{56}a_5 + b_6 = 0.3 \times 0.7 + 0.6 \times 0.94 + 0.5 \times 0.9 + 0.2 \
&= 0.21 + 0.564 + 0.45 + 0.2 = 1.424 \
a_6 &= \sigma(z_6) = \frac{1}{1 + e^{-1.424}} \approx \frac{1}{1 + 0.2407} \approx 0.806
\end{aligned}
]
损失函数计算(均方误差):
真实标签y=1,预测值a₆≈0.806
[
L = \frac{1}{2} (y - a_6)^2 = \frac{1}{2} (1 - 0.806)^2 = \frac{1}{2} \times (0.194)^2 \approx 0.018818
]
3. 反向传播与参数更新
3.1 反向传播原理
反向传播算法是神经网络训练的核心,通过链式法则计算损失函数对每个参数的梯度。基本思想是先将误差从输出层向隐藏层传播,然后根据梯度下降算法更新权重和偏置参数。学习率η控制参数更新的步长,这里设为0.1。
3.2 梯度计算过程
输出层误差计算:
[
\begin{aligned}
\frac{\partial L}{\partial a_6} &= a_6 - y = 0.806 - 1 = -0.194 \
\frac{\partial a_6}{\partial z_6} &= a_6(1 - a_6) = 0.806 \times (1 - 0.806) = 0.806 \times 0.194 \approx 0.156364 \
\delta_6 &= \frac{\partial L}{\partial z_6} = \frac{\partial L}{\partial a_6} \cdot \frac{\partial a_6}{\partial z_6} = (-0.194) \times 0.156364 \approx -0.03034
\end{aligned}
]
隐藏层误差计算(ReLU导数为分段函数):
[
\begin{aligned}
\delta_3 &= \delta_6 \cdot w_{36} \cdot \text{ReLU}‘(z_3) = (-0.03034) \times 0.3 \times 1 \approx -0.009102 \
\delta_4 &= \delta_6 \cdot w_{46} \cdot \text{ReLU}’(z_4) = (-0.03034) \times 0.6 \times 1 \approx -0.018204 \
\delta_5 &= \delta_6 \cdot w_{56} \cdot \text{ReLU}'(z_5) = (-0.03034) \times 0.5 \times 1 \approx -0.01517
\end{aligned}
]
参数梯度计算:
输出层权重和偏置梯度:
[
\begin{aligned}
\frac{\partial L}{\partial w_{36}} &= \delta_6 \cdot a_3 \approx (-0.03034) \times 0.7 = -0.021238 \
\frac{\partial L}{\partial w_{46}} &= \delta_6 \cdot a_4 \approx (-0.03034) \times 0.94 = -0.028520 \
\frac{\partial L}{\partial w_{56}} &= \delta_6 \cdot a_5 \approx (-0.03034) \times 0.9 = -0.027306 \
\frac{\partial L}{\partial b_6} &= \delta_6 \approx -0.03034
\end{aligned}
]
隐藏层权重和偏置梯度(以神经元3为例):
[
\begin{aligned}
\frac{\partial L}{\partial w_{13}} &= \delta_3 \cdot x_1 \approx (-0.009102) \times 0.8 = -0.007282 \
\frac{\partial L}{\partial w_{23}} &= \delta_3 \cdot x_2 \approx (-0.009102) \times 0.5 = -0.004551 \
\frac{\partial L}{\partial b_3} &= \delta_3 \approx -0.009102
\end{aligned}
]
3.3 参数更新
根据梯度下降算法,参数更新公式为:新参数=原参数-学习率×梯度。
输出层参数更新:
[
\begin{aligned}
w_{36}^{\text{new}} &= 0.3 - 0.1 \times (-0.021238) \approx 0.302124 \
w_{46}^{\text{new}} &= 0.6 - 0.1 \times (-0.028520) \approx 0.602852 \
w_{56}^{\text{new}} &= 0.5 - 0.1 \times (-0.027306) \approx 0.502731 \
b_6^{\text{new}} &= 0.2 - 0.1 \times (-0.03034) \approx 0.203034
\end{aligned}
]
隐藏层参数更新(神经元3):
[
\begin{aligned}
w_{13}^{\text{new}} &= 0.5 - 0.1 \times (-0.007282) \approx 0.500728 \
w_{23}^{\text{new}} &= 0.2 - 0.1 \times (-0.004551) \approx 0.200455 \
b_3^{\text{new}} &= 0.2 - 0.1 \times (-0.009102) \approx 0.200910
\end{aligned}
]
其他参数更新类似,全部更新后的参数如下表所示:
参数 | 原始值 | 更新后值 |
---|---|---|
( w_{13} ) | 0.5 | 0.500728 |
( w_{23} ) | 0.2 | 0.200455 |
( b_3 ) | 0.2 | 0.200910 |
( w_{14} ) | 0.8 | 0.801456 |
( w_{24} ) | 0.4 | 0.400910 |
( b_4 ) | 0.1 | 0.101820 |
( w_{15} ) | 0.5 | 0.501214 |
( w_{25} ) | 0.6 | 0.600759 |
( b_5 ) | 0.2 | 0.201517 |
( w_{36} ) | 0.3 | 0.302124 |
( w_{46} ) | 0.6 | 0.602852 |
( w_{56} ) | 0.5 | 0.502731 |
( b_6 ) | 0.2 | 0.203034 |
4. 更新后的网络结构与验证
4.1 更新后的网络结构
参数更新后,神经网络的结构图如下(权重四舍五入到小数点后6位):
graph TDI1[输入1: 0.8] -->|w13≈0.500728| H3[神经元3偏置≈0.200910]I1 -->|w14≈0.801456| H4[神经元4偏置≈0.101820]I1 -->|w15≈0.501214| H5[神经元5偏置≈0.201517]I2[输入2: 0.5] -->|w23≈0.200455| H3I2 -->|w24≈0.400910| H4I2 -->|w25≈0.600759| H5H3 -->|w36≈0.302124| O6[神经元6偏置≈0.203034]H4 -->|w46≈0.602852| O6H5 -->|w56≈0.502731| O6
4.2 更新后前向传播验证
使用更新后的权重重新计算输出和损失:
隐藏层输出:
[
\begin{aligned}
a_3 &= \text{ReLU}(0.500728 \times 0.8 + 0.200455 \times 0.5 + 0.200910) \approx \text{ReLU}(0.70172) = 0.70172 \
a_4 &= \text{ReLU}(0.801456 \times 0.8 + 0.400910 \times 0.5 + 0.101820) \approx \text{ReLU}(0.94344) = 0.94344 \
a_5 &= \text{ReLU}(0.501214 \times 0.8 + 0.600759 \times 0.5 + 0.201517) \approx \text{ReLU}(0.90287) = 0.90287
\end{aligned}
]
输出层输出:
[
\begin{aligned}
z_6 &\approx 0.302124 \times 0.70172 + 0.602852 \times 0.94344 + 0.502731 \times 0.90287 + 0.203034 \
&\approx 0.212 + 0.569 + 0.454 + 0.203 = 1.438 \
a_6 &\approx \frac{1}{1 + e^{-1.438}} \approx 0.8083
\end{aligned}
]
新损失值:
[
L_{\text{new}} = \frac{1}{2} (1 - 0.8083)^2 \approx \frac{1}{2} \times (0.1917)^2 \approx 0.018374
]
4.3 损失比较与分析
- 更新前损失:( L_{\text{old}} \approx 0.018818 )
- 更新后损失:( L_{\text{new}} \approx 0.018374 )
- 损失减少量:( \Delta L = 0.018818 - 0.018374 = 0.000444 )(减少约2.36%)
损失函数的减少表明通过一次反向传播,神经网络的预测准确性得到了提升。参数调整方向是正确的,网络正在学习如何更好地拟合训练数据。
5. 总结与扩展
本文通过一个具体的二分类神经网络实例,详细演示了前向传播、反向传播和参数更新的完整计算过程。关键要点如下:
- 前向传播计算网络输出,涉及加权求和和激活函数变换。
- 反向传播使用链式法则计算损失函数对每个参数的梯度。
- 参数更新根据梯度方向调整权重和偏置,使损失函数减小。
- 学习率控制参数更新步长,影响训练稳定性和收敛速度。
实际应用建议:
- 对于更复杂的数据集,可能需要增加网络层数或神经元数量。
- ReLU激活函数能有效缓解梯度消失问题,适用于隐藏层。
- Sigmoid函数适用于二分类输出层,将输出映射到概率范围。
- 损失函数的选择取决于任务类型,均方误差适用于回归问题,交叉熵损失更适用于分类问题。
神经网络通过多次迭代上述过程,不断优化参数,最终得到一个能够准确分类的模型。理解这些基础原理对于深入学习更复杂的神经网络架构至关重要。