前馈神经网络(Feedforward Neural Network)的前向传播与误差反向传播过程
字数 1634 2025-11-12 07:41:45
前馈神经网络(Feedforward Neural Network)的前向传播与误差反向传播过程
我将为您详细讲解前馈神经网络的前向传播与误差反向传播过程。
问题概述
前馈神经网络是最基础的神经网络结构,由输入层、隐藏层和输出层组成。我们需要理解数据如何从输入层流向输出层(前向传播),以及误差如何从输出层反向传播来更新网络参数(反向传播)。
网络结构定义
考虑一个具有L层的全连接前馈神经网络:
- 输入层:第1层
- 隐藏层:第2层到第L-1层
- 输出层:第L层
每层l的神经元数量为n_l,其中l=1,2,...,L
前向传播过程
步骤1:输入层处理
输入样本x作为第一层的激活值:
a¹ = x
其中a¹ ∈ ℝ^{n₁},表示第一层所有神经元的激活值
步骤2:隐藏层前向计算
对于第l层(l=2,3,...,L):
-
计算加权输入:
z^l = W^l a^{l-1} + b^l
其中:- W^l ∈ ℝ^{n_l × n_{l-1}} 是权重矩阵
- b^l ∈ ℝ^{n_l} 是偏置向量
- z^l ∈ ℝ^{n_l} 是第l层的加权输入
-
应用激活函数:
a^l = σ(z^l)
常用的激活函数包括:- Sigmoid: σ(z) = 1/(1+e^{-z})
- ReLU: σ(z) = max(0,z)
- Tanh: σ(z) = (e^z - e^{-z})/(e^z + e^{-z})
步骤3:输出层计算
最后一层(输出层):
a^L = σ(z^L)
对于不同任务,输出层激活函数可能不同:
- 二分类:Sigmoid
- 多分类:Softmax
- 回归:线性函数
误差反向传播过程
步骤1:定义损失函数
常用的损失函数包括:
- 均方误差:J = ½‖y - a^L‖²
- 交叉熵:J = -Σ[y_i log(a_i^L) + (1-y_i)log(1-a_i^L)]
步骤2:计算输出层误差
输出层的误差项:
δ^L = ∇_{a^L}J ⊙ σ'(z^L)
其中⊙表示逐元素乘法
具体计算:
- 对于均方误差 + Sigmoid输出:
δ^L = (a^L - y) ⊙ a^L ⊙ (1 - a^L) - 对于交叉熵 + Softmax输出:
δ^L = a^L - y
步骤3:反向传播隐藏层误差
对于l = L-1, L-2, ..., 2:
δ^l = [(W^{l+1})ᵀ δ^{l+1}] ⊙ σ'(z^l)
这个公式的含义是:
- 将后一层的误差δ^{l+1}通过权重矩阵的转置传播到当前层
- 与当前层激活函数的导数逐元素相乘
步骤4:计算梯度
权重梯度:
∂J/∂W^l = δ^l (a^{l-1})ᵀ
偏置梯度:
∂J/∂b^l = δ^l
步骤5:参数更新
使用梯度下降更新参数:
W^l = W^l - η ∂J/∂W^l
b^l = b^l - η ∂J/∂b^l
其中η是学习率
详细计算示例
考虑一个简单的3层网络(输入层2个神经元,隐藏层3个神经元,输出层1个神经元):
前向传播示例:
- 输入:a¹ = [x₁, x₂]ᵀ
- 隐藏层:z² = W²a¹ + b², a² = σ(z²)
- 输出层:z³ = W³a² + b³, a³ = σ(z³)
反向传播示例:
- 输出层误差:δ³ = (a³ - y) ⊙ σ'(z³)
- 隐藏层误差:δ² = [(W³)ᵀ δ³] ⊙ σ'(z²)
- 梯度计算:
∂J/∂W³ = δ³ (a²)ᵀ
∂J/∂b³ = δ³
∂J/∂W² = δ² (a¹)ᵀ
∂J/∂b² = δ²
关键理解要点
- 链式法则:反向传播本质上是微积分中链式法则的递归应用
- 计算图:将神经网络视为计算图,便于理解梯度流动
- 矩阵维度:注意各矩阵和向量的维度匹配
- 激活函数导数:不同激活函数的导数计算方式不同
这个过程通过迭代执行,使得神经网络能够从数据中学习到有效的特征表示,实现复杂的非线性映射。