前馈神经网络(Feedforward Neural Network)的前向传播与误差反向传播过程
题目描述:
前馈神经网络(FNN)是一种基础的人工神经网络结构,其核心包括前向传播和误差反向传播两个过程。前向传播负责将输入数据逐层传递至输出层,计算预测值;反向传播则根据预测误差,利用链式法则从输出层反向计算各层参数的梯度,用于更新权重和偏置。要求详细解释这两个过程的数学原理与计算步骤。
解题过程:
1. 前向传播过程
前向传播的目标是从输入层开始,逐层计算每一层的激活值,直至得到输出层的预测结果。假设神经网络共有 \(L\) 层(输入层为第 \(0\) 层,输出层为第 \(L\) 层),定义以下符号:
- \(\mathbf{a}^{(l)}\):第 \(l\) 层的激活值(输入层 \(\mathbf{a}^{(0)} = \mathbf{x}\))。
- \(\mathbf{z}^{(l)}\):第 \(l\) 层的加权输入(未激活值)。
- \(W^{(l)}\) 和 \(\mathbf{b}^{(l)}\):第 \(l\) 层的权重矩阵和偏置向量。
- \(f(\cdot)\):激活函数(如 Sigmoid、ReLU)。
步骤:
-
输入层:
\(\mathbf{a}^{(0)} = \mathbf{x}\)(输入数据)。 -
隐藏层与输出层计算(逐层进行):
对于 \(l = 1\) 到 \(L\):- 计算加权输入:
\[ \mathbf{z}^{(l)} = W^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)} \]
- 计算激活值:
\[ \mathbf{a}^{(l)} = f(\mathbf{z}^{(l)}) \]
输出层激活值 \(\mathbf{a}^{(L)}\) 即为最终预测 \(\hat{\mathbf{y}}\)。
- 损失函数计算:
使用均方误差(MSE)或交叉熵损失等函数,计算预测值 \(\hat{\mathbf{y}}\) 与真实标签 \(\mathbf{y}\) 的误差。例如 MSE 损失:
\[ J = \frac{1}{2} \|\hat{\mathbf{y}} - \mathbf{y}\|^2 \]
2. 反向传播过程
反向传播通过链式法则计算损失函数对每一层参数(权重和偏置)的梯度,核心是计算以下关键量:
- \(\delta^{(l)}\):第 \(l\) 层的误差项,定义为 \(\frac{\partial J}{\partial \mathbf{z}^{(l)}}\)。
步骤:
- 输出层误差项:
\[ \delta^{(L)} = \frac{\partial J}{\partial \mathbf{a}^{(L)}} \odot f'(\mathbf{z}^{(L)}) \]
其中:
- \(\frac{\partial J}{\partial \mathbf{a}^{(L)}}\) 取决于损失函数(例如 MSE 损失中为 \(\hat{\mathbf{y}} - \mathbf{y}\))。
- \(\odot\) 表示逐元素乘法(Hadamard 积)。
- \(f'(\cdot)\) 是激活函数的导数。
- 隐藏层误差反向传递:
对于 \(l = L-1\) 到 \(1\):
\[ \delta^{(l)} = \left( (W^{(l+1)})^\top \delta^{(l+1)} \right) \odot f'(\mathbf{z}^{(l)}) \]
这里通过权重矩阵的转置 \((W^{(l+1)})^\top\) 将后一层的误差传递到当前层。
- 参数梯度计算:
根据误差项 \(\delta^{(l)}\),计算损失函数对权重和偏置的梯度:- 权重梯度:
\[ \frac{\partial J}{\partial W^{(l)}} = \delta^{(l)} (\mathbf{a}^{(l-1)})^\top \]
- 偏置梯度:
\[ \frac{\partial J}{\partial \mathbf{b}^{(l)}} = \delta^{(l)} \]
- 参数更新:
使用梯度下降法更新参数(学习率为 \(\eta\)):
\[ W^{(l)} \leftarrow W^{(l)} - \eta \frac{\partial J}{\partial W^{(l)}}, \quad \mathbf{b}^{(l)} \leftarrow \mathbf{b}^{(l)} - \eta \frac{\partial J}{\partial \mathbf{b}^{(l)}} \]
关键点说明:
- 链式法则的作用:反向传播通过链式法则将损失函数的梯度逐层分解,避免直接计算复杂的高维导数。
- 激活函数导数:例如 Sigmoid 函数 \(f(z) = \frac{1}{1+e^{-z}}\) 的导数为 \(f'(z) = f(z)(1-f(z))\),ReLU 的导数为 \(f'(z) = \mathbb{I}(z > 0)\)。
- 数值稳定性:实践中需注意梯度消失/爆炸问题,可通过归一化、梯度裁剪或改进激活函数(如 ReLU)缓解。
通过以上步骤,前馈神经网络能够通过迭代训练逐步优化参数,提升预测精度。