当前位置: 首页 > news >正文

神经网络之反向传播

反向传播(Backpropagation)是现代神经网络中最核心的算法之一,用于高效地计算神经网络中各参数的梯度,以便通过梯度下降等优化算法来更新参数,使损失函数最小化。


一、反向传播的背景与意义

神经网络的训练本质上是一个优化问题:我们希望调整网络中的参数(权重和偏置),使得网络的输出更接近真实标签(最小化损失函数)。

为了做到这一点,需要计算损失函数对各个参数的导数,也就是梯度,然后使用如梯度下降(Gradient Descent)的方法更新参数。而神经网络层数较多(尤其是深度网络),直接计算梯度非常复杂,这时候就需要一个系统、可重复、高效的算法,这就是反向传播。


二、反向传播的核心思想

反向传播的核心思想是使用链式法则(Chain Rule),从输出层开始,逐层向前(即反向)传播误差,计算每一层的梯度。

基本流程:

  1. 前向传播(Forward Pass):计算网络的输出和损失函数值。

  2. 反向传播(Backward Pass)

    • 计算输出层的误差。
    • 使用链式法则,将误差逐层传回去。
    • 计算每一层参数对损失的导数(梯度)。
  3. 更新参数:使用梯度下降或其他优化器来更新权重。


三、数学推导:一个两层神经网络的例子

假设我们有一个简单的网络结构:

  • 输入层:输入 ( x \in \mathbb{R}^n )

  • 隐藏层:

    • 权重矩阵 ( W_1 \in \mathbb{R}^{h \times n} )
    • 偏置向量 ( b_1 \in \mathbb{R}^h )
    • 激活函数:ReLU 或 sigmoid,记为 ( \sigma )
  • 输出层:

    • 权重 ( W_2 \in \mathbb{R}^{m \times h} )
    • 偏置 ( b_2 \in \mathbb{R}^m )
    • 输出 ( \hat{y} \in \mathbb{R}^m )

前向传播:

  1. 隐藏层线性输出:
    [
    z_1 = W_1 x + b_1
    ]
  2. 隐藏层激活:
    [
    a_1 = \sigma(z_1)
    ]
  3. 输出层线性输出:
    [
    z_2 = W_2 a_1 + b_2
    ]
  4. 预测输出(假设是回归问题):
    [
    \hat{y} = z_2
    ]
  5. 损失函数(均方误差):
    [
    L = \frac{1}{2} |\hat{y} - y|^2
    ]

四、反向传播:从输出反向求导

第一步:对输出层的梯度

损失对输出层输出的导数:

[
\frac{\partial L}{\partial z_2} = \hat{y} - y
]

然后对 ( W_2 ), ( b_2 ) 求导:

[
\frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial z_2} \cdot a_1^T
]
[
\frac{\partial L}{\partial b_2} = \frac{\partial L}{\partial z_2}
]

第二步:传播误差到隐藏层

用链式法则:

[
\frac{\partial L}{\partial a_1} = W_2^T \cdot \frac{\partial L}{\partial z_2}
]

激活函数求导(以 sigmoid 为例):

[
\frac{\partial L}{\partial z_1} = \frac{\partial L}{\partial a_1} \circ \sigma’(z_1)
]
其中 ( \circ ) 表示逐元素相乘。

第三步:对隐藏层参数求导

[
\frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_1} \cdot x^T
]
[
\frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial z_1}
]


五、向量化表达(高效实现)

实际神经网络实现中都是用矩阵运算(向量化)来提升效率,避免使用显式的 for 循环。

例如,对整个 mini-batch 的输入:

  • 所有中间变量变为矩阵形式
  • 每一步计算保持维度一致
  • 使用 NumPy / PyTorch / TensorFlow 的自动求导工具可以自动进行反向传播(但底层还是基于反向传播算法)

六、误差的本质

在反向传播中,传播的是“误差”或者说“梯度”:

  • 每一层的误差告诉我们这层输出对最终损失的贡献有多大。
  • 梯度信息用于调整该层的参数。

我们从最后一层开始,有了损失对输出的导数,然后逐层向前传播这些导数,并计算每层的权重梯度。


七、反向传播的可视化(简略)

Forward:
x → [W1 + b1] → z1 → σ → a1 → [W2 + b2] → z2 → output → LossBackward:
∂L/∂z2 → ∂L/∂W2, ∂L/∂b2 → ∂L/∂a1 → ∂L/∂z1 → ∂L/∂W1, ∂L/∂b1

每一层都依赖上一层的梯度,通过链式法则进行递推。


八、现代深度学习框架中的实现

框架如 PyTorch、TensorFlow 等都有自动微分引擎:

  • 会自动构建“计算图”(computation graph)
  • 前向传播时记录操作
  • 反向传播时通过链式法则自动求导

使用者只需要定义模型和损失函数,调用 .backward() 即可。


九、反向传播的常见问题

  1. 梯度消失/爆炸

    • 在深层网络或使用 sigmoid/tanh 时,梯度可能非常小或非常大,导致训练困难。
    • 解决方法:ReLU、BatchNorm、残差连接等。
  2. 局部最小值或鞍点问题

    • 深度网络的损失函数可能存在很多鞍点或局部极小值。
  3. 计算效率问题

    • 需要高效的矩阵运算,使用 GPU 加速。

十、总结一句话

反向传播是一个基于链式法则的高效梯度计算算法,使得我们可以训练深度神经网络。

http://www.dtcms.com/a/494725.html

相关文章:

  • el-table-column show-overflow-tooltip 只能显示纯文本,无法渲染 <p> 标签
  • (定时任务)接上篇:定时任务的分布式执行与分布式锁使用场景
  • 广州网站制作哪家专业凡科互动游戏可以作弊码
  • caching_sha2_password认证插件说明
  • 13.继承(一)
  • vue3:el-progress的圆形无线滚动,心跳、呼吸效果,加载中的效果
  • 高速光耦:电子系统的卓越赋能者
  • 鸿蒙HAP文件数字签名提取与解析
  • 《宋代水墨国漫3D:动态镜头笔触连贯的开发拆解》
  • Fast-Agent:重新定义AI Agent开发的“快“与“简“
  • 做电力的系统集成公司网站个人简历在线制作免费
  • 如何查网站是那家做的用什么做视频网站比较好的
  • SQL UPDATE 语句详解
  • 一个基于BiTCN-BiLSTM混合神经网络的时间序列预测MATLAB程序
  • Python开发的自我修养之数据类型的选择策略
  • Day02_刷题niuke20251017
  • [嵌入式系统-135]:主流AIOT智能体开发板
  • 设计模式---观察者模式
  • 【软考备考】 高并发场景如何做负载均衡知识点四
  • LOFAR物理频谱特征提取及实现
  • excel拼接数据库
  • 23ICPC杭州vp补题
  • 做网站不难吧长兴网站建设
  • Kafka、ActiveMQ、RabbitMQ、RocketMQ 对比
  • Unity中UI背景的高斯模糊
  • Avalonia 的命令基类和通知基类备份
  • 分布式和微服务的区别是什么?
  • windows10 安装 WSL2 及 ubuntu 24.04,Ubuntu中安装CUDA
  • 全链路智能运维中的多模态数据融合与语义对齐技术
  • 【DevOps】基于Nexus部署内网pypi代理镜像仓库操作手册