多层感知机(MLP)的前向传播与反向传播过程
题目描述
多层感知机(MLP)是一种经典的前馈神经网络,包含输入层、至少一个隐藏层和输出层。每个层由多个神经元(节点)组成,层间通过权重和偏置连接,神经元使用非线性激活函数(如Sigmoid、ReLU)增强表达能力。题目要求详细解释MLP的前向传播(数据从输入层到输出层的计算过程)和反向传播(根据预测误差调整网络参数的梯度下降过程),包括每一步的数学推导和实际计算示例。
解题过程
1. 前向传播:逐层计算输出
前向传播的目标是根据输入数据计算网络的预测值。以如下简单MLP为例:
- 输入层:2个节点(特征 \(x_1, x_2\))
- 隐藏层:2个节点(激活函数用Sigmoid:\(\sigma(z) = \frac{1}{1+e^{-z}}\))
- 输出层:1个节点(激活函数用Sigmoid)
步骤说明:
- 输入层到隐藏层:
- 计算隐藏层节点的净输入 \(z_h\)(加权和加偏置):
\[ z_{h1} = w_{11}x_1 + w_{12}x_2 + b_1, \quad z_{h2} = w_{21}x_1 + w_{22}x_2 + b_2 \]
- 应用激活函数得到隐藏层输出 \(a_h\):
\[ a_{h1} = \sigma(z_{h1}), \quad a_{h2} = \sigma(z_{h2}) \]
- 隐藏层到输出层:
- 计算输出层节点的净输入 \(z_o\):
\[ z_o = w_{31}a_{h1} + w_{32}a_{h2} + b_3 \]
- 应用激活函数得到最终输出 \(\hat{y}\):
\[ \hat{y} = \sigma(z_o) \]
示例:
设输入 \(x_1=0.5, x_2=0.3\),权重和偏置初始值:
\(w_{11}=0.1, w_{12}=0.2, b_1=0.05\)
\(w_{21}=0.3, w_{22}=0.4, b_2=0.1\)
\(w_{31}=0.5, w_{32}=0.6, b_3=0.15\)
计算:
- \(z_{h1} = 0.1\times0.5 + 0.2\times0.3 + 0.05 = 0.16\),\(a_{h1} = \sigma(0.16) \approx 0.54\)
- \(z_{h2} = 0.3\times0.5 + 0.4\times0.3 + 0.1 = 0.37\),\(a_{h2} = \sigma(0.37) \approx 0.59\)
- \(z_o = 0.5\times0.54 + 0.6\times0.59 + 0.15 \approx 0.85\),\(\hat{y} = \sigma(0.85) \approx 0.70\)
2. 反向传播:计算梯度并更新参数
反向传播通过链式法则计算损失函数对每个参数的梯度,从输出层向输入层逐层传播误差。以均方误差损失为例:
\[L = \frac{1}{2} (y - \hat{y})^2 \]
其中 \(y\) 是真实标签。
步骤说明:
- 计算输出层梯度:
- 损失对输出层净输入 \(z_o\) 的梯度:
\[ \frac{\partial L}{\partial z_o} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z_o} = (\hat{y} - y) \cdot \sigma'(z_o) \]
其中Sigmoid导数 $ \sigma'(z_o) = \hat{y}(1-\hat{y}) $。
- 更新输出层权重和偏置:
\[ \frac{\partial L}{\partial w_{3j}} = \frac{\partial L}{\partial z_o} \cdot a_{hj}, \quad \frac{\partial L}{\partial b_3} = \frac{\partial L}{\partial z_o} \]
- 计算隐藏层梯度:
- 损失对隐藏层净输入 \(z_h\) 的梯度(链式法则扩展到隐藏层):
\[ \frac{\partial L}{\partial z_{hj}} = \frac{\partial L}{\partial z_o} \cdot w_{3j} \cdot \sigma'(z_{hj}) \]
- 更新隐藏层权重和偏置:
\[ \frac{\partial L}{\partial w_{ij}} = \frac{\partial L}{\partial z_{hj}} \cdot x_i, \quad \frac{\partial L}{\partial b_j} = \frac{\partial L}{\partial z_{hj}} \]
- 参数更新(梯度下降法):
\[ w \leftarrow w - \alpha \frac{\partial L}{\partial w}, \quad b \leftarrow b - \alpha \frac{\partial L}{\partial b} \]
其中 \(\alpha\) 是学习率。
示例接续:
假设真实标签 \(y=1\),学习率 \(\alpha=0.5\):
-
输出层梯度:
- \(\frac{\partial L}{\partial z_o} = (0.70-1) \times 0.70 \times (1-0.70) \approx -0.063\)
- \(\frac{\partial L}{\partial w_{31}} = -0.063 \times 0.54 \approx -0.034\),\(w_{31} \leftarrow 0.5 - 0.5 \times (-0.034) \approx 0.517\)
- \(\frac{\partial L}{\partial b_3} = -0.063\),\(b_3 \leftarrow 0.15 - 0.5 \times (-0.063) \approx 0.182\)
-
隐藏层梯度(以 \(a_{h1}\) 对应参数为例):
- \(\frac{\partial L}{\partial z_{h1}} = -0.063 \times 0.5 \times 0.54 \times (1-0.54) \approx -0.0078\)
- \(\frac{\partial L}{\partial w_{11}} = -0.0078 \times 0.5 \approx -0.0039\),\(w_{11} \leftarrow 0.1 - 0.5 \times (-0.0039) \approx 0.102\)
关键点总结
- 前向传播:数据逐层加权求和并激活,得到预测值。
- 反向传播:从输出层开始,利用链式法则将误差梯度反向传递,计算每个参数的梯度。
- 参数更新:通过梯度下降微调权重和偏置,逐步降低损失函数值。