16 深度学习与神经网络之梯度下降与优化算法
系列进度
计算机视觉网络教程 · 第 16 / 31 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
优化算法决定模型如何沿着梯度调整参数。学习率太大容易震荡,太小会很慢,优化器选择要结合数据和模型观察。
我会先固定模型和数据,只调学习率或优化器。一次改太多东西,无法知道效果来自哪里。
在上一篇中,我们详细探讨了前向传播与反向传播的过程,了解了如何通过这些步骤来计算神经网络的输出及其误差,以及如何根据误差调整网络的权重。接下来,我们将深入了解梯度下降及其各种优化算法,这些技术对于训练神经网络至关重要。
梯度下降
梯度下降是一种用于优化的迭代算法,目标是通过最小化损失函数来寻找最佳的模型参数。在神经网络中,损失函数通常用于衡量模型预测与实际标签之间的差距。
理解梯度下降与优化算法时,先看损失曲线、梯度方向、学习率、批量大小和收敛或震荡迹象。
基本原理
给定一个可微损失函数,其中是网络中需要优化的参数,我们的目标是找到参数使得最小化。梯度下降的核心思想是沿着损失函数的负梯度方向更新参数:
其中,是学习率(通常是一个小正数),是损失函数关于参数的梯度。
学习率的选择
学习率的选择对训练过程至关重要。如果学习率过大,可能会导致损失函数震荡甚至发散;如果学习率过小,则收敛速度会变得非常缓慢。因此,选择合适的学习率至关重要,通常需要通过实验来确定。
优化算法
在基本的梯度下降算法之后,许多更高级的优化算法被提出,这些算法在不同情况下提供了更好的收敛性能。接下来,我们将介绍几种常见的优化算法。
读《深度学习与神经网络之梯度下降与优化算法》时,可以先看配图里的任务、概念、练习和判断点,再回到正文补细节。这样更容易判断这篇内容能放到哪个真实场景里。
1. 随机梯度下降(SGD)
随机梯度下降(SGD)是梯度下降的一种变体,它每次只使用一个样本来计算梯度。这使得参数更新更加频繁,从而增加了收敛的速度。
更新公式为:
其中是单个训练样本。
2. 小批量梯度下降(Mini-batch SGD)
小批量梯度下降结合了批量梯度下降和随机梯度下降的优点。它每次使用一小批样本计算梯度。这种方法有效地平衡了计算效率和梯度估计的准确性。
其中是小批量样本的大小。
3. 动量法(Momentum)
为了解决SGD的震荡问题,动量法加入了过去梯度的影响,类似于物体在物理中的动量:
这里,是更新的“动量”,是动量项的衰减率,通常设置为。
4. 自适应学习率算法(如 AdaGrad、RMSProp 和 Adam)
这些优化算法采用自适应学习率的方法。这意味着每个参数都有自己的学习率,并且这些学习率根据参数的历史梯度调整:
- AdaGrad通过增加每个参数的平方梯度的累积和来调整学习率,适合稀疏数据的情况。
- RMSProp对AdaGrad进行了改进,使用指数加权平均来衰减过往梯度的影响。
- Adam结合了
动量法和RMSProp的优点,适用于各种情况,具有很好的性能。
其中,是梯度的移动平均,是梯度平方的移动平均,和是控制平均影响的参数。
案例代码
以下是一个简单的代码示例,展示了如何在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)
在这个代码示例中,我们创建了一个简单的线性模型来拟合数据,并使用SGD和Adam分别训练模型。通过观察训练过程中的损失变化,我们可以直观地理解不同优化算法的性能差异。
读到这里,可以把《深度学习与神经网络之梯度下降与优化算法》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《深度学习与神经网络之梯度下降与优化算法》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
小结
在本篇中,我们详细探讨了梯度下降及其多种优化算法,这些方法是训练神经网络的核心。通过选择合适的优化算法,我们可以有效提高模型的训练效果和收敛速度。在下一篇中,我们将开始介绍卷积神经网络(CNN)中的卷积与池化操作,继续深入计算机视觉领域。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
深度学习与神经网络之梯度下降与优化算法适合谁读?
这是 计算机视觉网络教程 系列第 16 / 31 篇,适合正在学习计算机视觉网络教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇计算机视觉网络教程要多久?
按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读