反向传播(Backpropagation)算法的原理与计算过程
字数 1194 2025-10-28 00:29:09

反向传播(Backpropagation)算法的原理与计算过程

题目描述:反向传播是训练神经网络的核心算法,用于高效计算损失函数对网络各层权重的梯度。我们将以一个包含输入层、单隐藏层和输出层的简单神经网络为例,详细推导反向传播的计算步骤。

解题过程:

  1. 网络结构与前向传播
    我们考虑一个三层网络:
  • 输入层:2个神经元(x₁, x₂)
  • 隐藏层:2个神经元(使用Sigmoid激活函数)
  • 输出层:1个神经元(使用Sigmoid激活函数)

前向传播步骤:
a) 输入层到隐藏层:
z₁ = w₁₁x₁ + w₁₂x₂ + b₁
z₂ = w₂₁x₁ + w₂₂x₂ + b₂
a₁ = σ(z₁) = 1/(1+e^{-z₁})
a₂ = σ(z₂) = 1/(1+e^{-z₂})

b) 隐藏层到输出层:
z₃ = w₃₁a₁ + w₃₂a₂ + b₃
ŷ = σ(z₃) = 1/(1+e^{-z₃})

  1. 损失函数定义
    使用均方误差损失:
    L = ½(y - ŷ)²
    其中y是真实标签,ŷ是预测值

  2. 反向传播梯度计算
    关键思想:使用链式法则从输出层向输入层反向传播误差

a) 输出层梯度:
∂L/∂ŷ = ŷ - y
∂ŷ/∂z₃ = ŷ(1-ŷ) # Sigmoid函数导数
∴ ∂L/∂z₃ = (∂L/∂ŷ)(∂ŷ/∂z₃) = (ŷ-y)ŷ(1-ŷ)

b) 隐藏层到输出层权重梯度:
∂L/∂w₃₁ = (∂L/∂z₃)(∂z₃/∂w₃₁) = ∂L/∂z₃ · a₁
∂L/∂w₃₂ = ∂L/∂z₃ · a₂
∂L/∂b₃ = ∂L/∂z₃ # 偏置项的梯度

c) 隐藏层神经元梯度:
∂L/∂a₁ = (∂L/∂z₃)(∂z₃/∂a₁) = ∂L/∂z₃ · w₃₁
∂L/∂a₂ = ∂L/∂z₃ · w₃₂

d) 隐藏层线性组合梯度:
∂a₁/∂z₁ = a₁(1-a₁) # Sigmoid导数
∂a₂/∂z₂ = a₂(1-a₂)
∴ ∂L/∂z₁ = (∂L/∂a₁)(∂a₁/∂z₁) = ∂L/∂a₁ · a₁(1-a₁)
∂L/∂z₂ = ∂L/∂a₂ · a₂(1-a₂)

e) 输入层到隐藏层权重梯度:
∂L/∂w₁₁ = (∂L/∂z₁)(∂z₁/∂w₁₁) = ∂L/∂z₁ · x₁
∂L/∂w₁₂ = ∂L/∂z₁ · x₂
∂L/∂w₂₁ = ∂L/∂z₂ · x₁
∂L/∂w₂₂ = ∂L/∂z₂ · x₂

  1. 权重更新公式
    使用梯度下降法:
    w₃₁ ← w₃₁ - η·∂L/∂w₃₁
    w₃₂ ← w₃₂ - η·∂L/∂w₃₂
    其他权重同理更新,其中η是学习率

  2. 算法总结
    反向传播的核心优势在于通过链式法则实现了梯度的高效计算,避免了重复计算。实际应用中通常使用矩阵运算批量处理数据,并配合各种优化算法(如动量法、Adam等)提高训练效率。

反向传播(Backpropagation)算法的原理与计算过程 题目描述:反向传播是训练神经网络的核心算法,用于高效计算损失函数对网络各层权重的梯度。我们将以一个包含输入层、单隐藏层和输出层的简单神经网络为例,详细推导反向传播的计算步骤。 解题过程: 网络结构与前向传播 我们考虑一个三层网络: 输入层:2个神经元(x₁, x₂) 隐藏层:2个神经元(使用Sigmoid激活函数) 输出层:1个神经元(使用Sigmoid激活函数) 前向传播步骤: a) 输入层到隐藏层: z₁ = w₁₁x₁ + w₁₂x₂ + b₁ z₂ = w₂₁x₁ + w₂₂x₂ + b₂ a₁ = σ(z₁) = 1/(1+e^{-z₁}) a₂ = σ(z₂) = 1/(1+e^{-z₂}) b) 隐藏层到输出层: z₃ = w₃₁a₁ + w₃₂a₂ + b₃ ŷ = σ(z₃) = 1/(1+e^{-z₃}) 损失函数定义 使用均方误差损失: L = ½(y - ŷ)² 其中y是真实标签,ŷ是预测值 反向传播梯度计算 关键思想:使用链式法则从输出层向输入层反向传播误差 a) 输出层梯度: ∂L/∂ŷ = ŷ - y ∂ŷ/∂z₃ = ŷ(1-ŷ) # Sigmoid函数导数 ∴ ∂L/∂z₃ = (∂L/∂ŷ)(∂ŷ/∂z₃) = (ŷ-y)ŷ(1-ŷ) b) 隐藏层到输出层权重梯度: ∂L/∂w₃₁ = (∂L/∂z₃)(∂z₃/∂w₃₁) = ∂L/∂z₃ · a₁ ∂L/∂w₃₂ = ∂L/∂z₃ · a₂ ∂L/∂b₃ = ∂L/∂z₃ # 偏置项的梯度 c) 隐藏层神经元梯度: ∂L/∂a₁ = (∂L/∂z₃)(∂z₃/∂a₁) = ∂L/∂z₃ · w₃₁ ∂L/∂a₂ = ∂L/∂z₃ · w₃₂ d) 隐藏层线性组合梯度: ∂a₁/∂z₁ = a₁(1-a₁) # Sigmoid导数 ∂a₂/∂z₂ = a₂(1-a₂) ∴ ∂L/∂z₁ = (∂L/∂a₁)(∂a₁/∂z₁) = ∂L/∂a₁ · a₁(1-a₁) ∂L/∂z₂ = ∂L/∂a₂ · a₂(1-a₂) e) 输入层到隐藏层权重梯度: ∂L/∂w₁₁ = (∂L/∂z₁)(∂z₁/∂w₁₁) = ∂L/∂z₁ · x₁ ∂L/∂w₁₂ = ∂L/∂z₁ · x₂ ∂L/∂w₂₁ = ∂L/∂z₂ · x₁ ∂L/∂w₂₂ = ∂L/∂z₂ · x₂ 权重更新公式 使用梯度下降法: w₃₁ ← w₃₁ - η·∂L/∂w₃₁ w₃₂ ← w₃₂ - η·∂L/∂w₃₂ 其他权重同理更新,其中η是学习率 算法总结 反向传播的核心优势在于通过链式法则实现了梯度的高效计算,避免了重复计算。实际应用中通常使用矩阵运算批量处理数据,并配合各种优化算法(如动量法、Adam等)提高训练效率。