郭震 AI公众号:郭震AI

16 深度学习与神经网络之梯度下降与优化算法

发布日期:

最近更新:

分类: 计算机视觉

预计阅读: 5 分钟

阅读次数: 0

预计阅读5 分钟
结构重点10 个
图文要点6 张
正文规模2.3k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 10 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

梯度下降与优化算法流程图查看大图
梯度下降与优化算法流程图

优化算法决定模型如何沿着梯度调整参数。学习率太大容易震荡,太小会很慢,优化器选择要结合数据和模型观察。

梯度下降与优化算法实操核对图查看大图
梯度下降与优化算法实操核对图

我会先固定模型和数据,只调学习率或优化器。一次改太多东西,无法知道效果来自哪里。

在上一篇中,我们详细探讨了前向传播反向传播的过程,了解了如何通过这些步骤来计算神经网络的输出及其误差,以及如何根据误差调整网络的权重。接下来,我们将深入了解梯度下降及其各种优化算法,这些技术对于训练神经网络至关重要。

梯度下降

梯度下降是一种用于优化的迭代算法,目标是通过最小化损失函数来寻找最佳的模型参数。在神经网络中,损失函数通常用于衡量模型预测与实际标签之间的差距。

梯度下降优化算法判断卡查看大图
梯度下降优化算法判断卡

理解梯度下降与优化算法时,先看损失曲线、梯度方向、学习率、批量大小和收敛或震荡迹象。

基本原理

给定一个可微损失函数L(w)L(w),其中ww是网络中需要优化的参数,我们的目标是找到参数ww使得L(w)L(w)最小化。梯度下降的核心思想是沿着损失函数的负梯度方向更新参数:

w:=wηL(w)w := w - \eta \nabla L(w)

其中,η\eta是学习率(通常是一个小正数),L(w)\nabla L(w)是损失函数L(w)L(w)关于参数ww的梯度。

学习率的选择

学习率的选择对训练过程至关重要。如果学习率过大,可能会导致损失函数震荡甚至发散;如果学习率过小,则收敛速度会变得非常缓慢。因此,选择合适的学习率至关重要,通常需要通过实验来确定。

优化算法

在基本的梯度下降算法之后,许多更高级的优化算法被提出,这些算法在不同情况下提供了更好的收敛性能。接下来,我们将介绍几种常见的优化算法。

计算机视觉阅读地图卡查看大图
计算机视觉阅读地图卡

读《深度学习与神经网络之梯度下降与优化算法》时,可以先看配图里的任务、概念、练习和判断点,再回到正文补细节。这样更容易判断这篇内容能放到哪个真实场景里。

1. 随机梯度下降(SGD)

随机梯度下降(SGD)是梯度下降的一种变体,它每次只使用一个样本来计算梯度。这使得参数更新更加频繁,从而增加了收敛的速度。

更新公式为:

w:=wηL(w;xi,yi)w := w - \eta \nabla L(w; x_i, y_i)

其中(xi,yi)(x_i, y_i)是单个训练样本。

2. 小批量梯度下降(Mini-batch SGD)

小批量梯度下降结合了批量梯度下降随机梯度下降的优点。它每次使用一小批样本计算梯度。这种方法有效地平衡了计算效率和梯度估计的准确性。

w:=wηL(w;{(xi,yi)}i=1m)w := w - \eta \nabla L(w; \{(x_i, y_i)\}_{i=1}^{m})

其中mm是小批量样本的大小。

3. 动量法(Momentum)

为了解决SGD的震荡问题,动量法加入了过去梯度的影响,类似于物体在物理中的动量:

v:=βv+(1β)L(w)v := \beta v + (1 - \beta) \nabla L(w) w:=wηvw := w - \eta v

这里,vv是更新的“动量”,β\beta是动量项的衰减率,通常设置为0.90.9

4. 自适应学习率算法(如 AdaGrad、RMSProp 和 Adam)

这些优化算法采用自适应学习率的方法。这意味着每个参数都有自己的学习率,并且这些学习率根据参数的历史梯度调整:

  • AdaGrad通过增加每个参数的平方梯度的累积和来调整学习率,适合稀疏数据的情况。
wi:=wiηGii+ϵL(w)w_i := w_i - \frac{\eta}{\sqrt{G_{ii} + \epsilon}} \nabla L(w)
  • RMSProp对AdaGrad进行了改进,使用指数加权平均来衰减过往梯度的影响。
v:=βv+(1β)(L(w))2v := \beta v + (1 - \beta) (\nabla L(w))^2 w:=wηv+ϵL(w)w := w - \frac{\eta}{\sqrt{v + \epsilon}} \nabla L(w)
  • Adam结合了动量法RMSProp的优点,适用于各种情况,具有很好的性能。
m:=β1m+(1β1)L(w)m := \beta_1 m + (1 - \beta_1) \nabla L(w) v:=β2v+(1β2)(L(w))2v := \beta_2 v + (1 - \beta_2) (\nabla L(w))^2 w:=wηv+ϵm1β1tw := w - \frac{\eta}{\sqrt{v} + \epsilon} \frac{m}{\sqrt{1 - \beta_1^t}}

其中,mm是梯度的移动平均,vv是梯度平方的移动平均,β1\beta_1β2\beta_2是控制平均影响的参数。

案例代码

以下是一个简单的代码示例,展示了如何在Python中实现普通的SGD和Adam优化器。在这个示例中,我们将使用TensorFlow库。

import tensorflow as tf
import numpy as np

# 生成模拟数据
x_train = np.random.rand(100, 1)
y_train = 3 * x_train + 2 + np.random.normal(0, 0.1, (100, 1))

# 创建模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_dim=1)
])

# 使用SGD优化器
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01), loss='mean_squared_error')

# 训练模型
model.fit(x_train, y_train, epochs=100)

# 使用Adam优化器
model.compile(optimizer='adam', loss='mean_squared_error')

# 重新训练模型
model.fit(x_train, y_train, epochs=100)

在这个代码示例中,我们创建了一个简单的线性模型来拟合数据,并使用SGDAdam分别训练模型。通过观察训练过程中的损失变化,我们可以直观地理解不同优化算法的性能差异。

深度学习与神经网络之梯度下降与优化算法应用复盘卡查看大图
深度学习与神经网络之梯度下降与优化算法应用复盘卡

读到这里,可以把《深度学习与神经网络之梯度下降与优化算法》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

深度学习与神经网络之梯度下降与优化算法应用检查卡查看大图
深度学习与神经网络之梯度下降与优化算法应用检查卡

读完《深度学习与神经网络之梯度下降与优化算法》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

小结

在本篇中,我们详细探讨了梯度下降及其多种优化算法,这些方法是训练神经网络的核心。通过选择合适的优化算法,我们可以有效提高模型的训练效果和收敛速度。在下一篇中,我们将开始介绍卷积神经网络(CNN)中的卷积与池化操作,继续深入计算机视觉领域。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

深度学习与神经网络之梯度下降与优化算法适合谁读?

这是 计算机视觉网络教程 系列第 16 / 31 篇,适合正在学习计算机视觉网络教程,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇计算机视觉网络教程要多久?

按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...