Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 神经网络的计算原理之反向传播

神经网络的计算原理之反向传播

1. 反向传播的基本概念

反向传播(Backpropagation)是训练神经网络的核心算法,用于高效计算损失函数对网络参数的梯度。其核心思想是通过链式法则(Chain Rule)将误差从输出层逐层反向传播至输入层,从而更新各层权重。

  • 关键特点:
    • 基于梯度下降的优化方法
    • 分阶段计算:前向传播(计算输出)→ 反向传播(计算梯度)
    • 适用于任意层数的神经网络

2. 数学推导

2.1 链式法则的应用

设神经网络的损失函数为 LLL,某一层的权重为 W(l)W^{(l)}W(l),反向传播通过以下步骤计算梯度:

∂L∂W(l)=∂L∂z(l+1)⋅∂z(l+1)∂W(l)\frac{\partial L}{\partial W^{(l)}} = \frac{\partial L}{\partial z^{(l+1)}} \cdot \frac{\partial z^{(l+1)}}{\partial W^{(l)}} ∂W(l)∂L​=∂z(l+1)∂L​⋅∂W(l)∂z(l+1)​

其中 z(l)z^{(l)}z(l) 为第 lll 层的加权输入。

2.2 误差项的传递

定义第 lll 层的误差项 δ(l)\delta^{(l)}δ(l):

δ(l)=∂L∂z(l)=δ(l+1)⋅W(l)⊙f′(z(l))\delta^{(l)} = \frac{\partial L}{\partial z^{(l)}} = \delta^{(l+1)} \cdot W^{(l)} \odot f'(z^{(l)}) δ(l)=∂z(l)∂L​=δ(l+1)⋅W(l)⊙f′(z(l))

  • ⊙\odot⊙ 表示逐元素乘法
  • f′f'f′ 为激活函数的导数

3. 算法步骤

  1. 前向传播:计算每一层的输出 a(l)=f(z(l))a^{(l)} = f(z^{(l)})a(l)=f(z(l))。
  2. 计算输出层误差:

    δ(L)=∂L∂a(L)⊙f′(z(L))\delta^{(L)} = \frac{\partial L}{\partial a^{(L)}} \odot f'(z^{(L)}) δ(L)=∂a(L)∂L​⊙f′(z(L))

  3. 反向传播误差:逐层计算 δ(l)\delta^{(l)}δ(l)。
  4. 更新权重:

    W(l)←W(l)−η⋅δ(l)⋅a(l−1)TW^{(l)} \leftarrow W^{(l)} - \eta \cdot \delta^{(l)} \cdot a^{(l-1)T} W(l)←W(l)−η⋅δ(l)⋅a(l−1)T

    (η\etaη 为学习率)

4. 代码示例(伪代码)

def backward_propagation(X, y, weights, activations):
    gradients = {}
    L = len(weights)  # 网络层数
    m = X.shape[1]     # 样本数
    
    # 计算输出层误差
    dZ = activations[L] - y
    gradients[f"dW{L}"] = np.dot(dZ, activations[L-1].T) / m
    gradients[f"db{L}"] = np.sum(dZ, axis=1, keepdims=True) / m
    
    # 反向传播
    for l in reversed(range(1, L)):
        dA_prev = np.dot(weights[l].T, dZ)
        dZ = dA_prev * relu_derivative(activations[l])
        gradients[f"dW{l}"] = np.dot(dZ, activations[l-1].T) / m
        gradients[f"db{l}"] = np.sum(dZ, axis=1, keepdims=True) / m
    
    return gradients

5. 常见问题与解决方案

问题原因解决方案
梯度消失深层网络中梯度连乘过小使用ReLU/LeakyReLU,残差连接
梯度爆炸权重初始化过大或学习率过高梯度裁剪,权重归一化
计算效率低全连接层的密集计算使用卷积或稀疏连接

6. 扩展阅读

  • 高阶优化:结合动量(Momentum)、Adam等优化器加速收敛。
  • 自动微分:现代框架(如PyTorch)通过计算图实现自动反向传播。
  • 二阶方法:Hessian矩阵近似(如L-BFGS)用于更精确的梯度方向。

关键点总结:反向传播通过链式法则实现高效梯度计算,是深度学习训练的基石。理解其数学本质有助于调试模型和设计新架构。

Last Updated:: 6/17/25, 10:13 AM