前馈神经网络(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):

  1. 计算加权输入:
    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层的加权输入
  2. 应用激活函数:
    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个神经元):

前向传播示例:

  1. 输入:a¹ = [x₁, x₂]ᵀ
  2. 隐藏层:z² = W²a¹ + b², a² = σ(z²)
  3. 输出层:z³ = W³a² + b³, a³ = σ(z³)

反向传播示例:

  1. 输出层误差:δ³ = (a³ - y) ⊙ σ'(z³)
  2. 隐藏层误差:δ² = [(W³)ᵀ δ³] ⊙ σ'(z²)
  3. 梯度计算:
    ∂J/∂W³ = δ³ (a²)ᵀ
    ∂J/∂b³ = δ³
    ∂J/∂W² = δ² (a¹)ᵀ
    ∂J/∂b² = δ²

关键理解要点

  1. 链式法则:反向传播本质上是微积分中链式法则的递归应用
  2. 计算图:将神经网络视为计算图,便于理解梯度流动
  3. 矩阵维度:注意各矩阵和向量的维度匹配
  4. 激活函数导数:不同激活函数的导数计算方式不同

这个过程通过迭代执行,使得神经网络能够从数据中学习到有效的特征表示,实现复杂的非线性映射。

前馈神经网络(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² = δ² 关键理解要点 链式法则 :反向传播本质上是微积分中链式法则的递归应用 计算图 :将神经网络视为计算图,便于理解梯度流动 矩阵维度 :注意各矩阵和向量的维度匹配 激活函数导数 :不同激活函数的导数计算方式不同 这个过程通过迭代执行,使得神经网络能够从数据中学习到有效的特征表示,实现复杂的非线性映射。