多层感知机(MLP)的前向传播与反向传播过程
字数 3081 2025-10-28 01:12:58

多层感知机(MLP)的前向传播与反向传播过程

题目描述
多层感知机(MLP)是一种经典的前馈神经网络,包含输入层、至少一个隐藏层和输出层。每个层由多个神经元(节点)组成,层间通过权重和偏置连接,神经元使用非线性激活函数(如Sigmoid、ReLU)增强表达能力。题目要求详细解释MLP的前向传播(数据从输入层到输出层的计算过程)和反向传播(根据预测误差调整网络参数的梯度下降过程),包括每一步的数学推导和实际计算示例。


解题过程

1. 前向传播:逐层计算输出

前向传播的目标是根据输入数据计算网络的预测值。以如下简单MLP为例:

  • 输入层:2个节点(特征 \(x_1, x_2\)
  • 隐藏层:2个节点(激活函数用Sigmoid:\(\sigma(z) = \frac{1}{1+e^{-z}}\)
  • 输出层:1个节点(激活函数用Sigmoid)

步骤说明

  1. 输入层到隐藏层
    • 计算隐藏层节点的净输入 \(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}) \]

  1. 隐藏层到输出层
    • 计算输出层节点的净输入 \(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\) 是真实标签。

步骤说明

  1. 计算输出层梯度
    • 损失对输出层净输入 \(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} \]

  1. 计算隐藏层梯度
    • 损失对隐藏层净输入 \(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}} \]

  1. 参数更新(梯度下降法):

\[ 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\)

  1. 输出层梯度:

    • \(\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\)
  2. 隐藏层梯度(以 \(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\)

关键点总结

  • 前向传播:数据逐层加权求和并激活,得到预测值。
  • 反向传播:从输出层开始,利用链式法则将误差梯度反向传递,计算每个参数的梯度。
  • 参数更新:通过梯度下降微调权重和偏置,逐步降低损失函数值。
多层感知机(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 \) 关键点总结 前向传播:数据逐层加权求和并激活,得到预测值。 反向传播:从输出层开始,利用链式法则将误差梯度反向传递,计算每个参数的梯度。 参数更新:通过梯度下降微调权重和偏置,逐步降低损失函数值。