欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【漫话机器学习系列】063.梯度下降(Gradient Descent)

【漫话机器学习系列】063.梯度下降(Gradient Descent)

2025/6/27 23:01:40 来源:https://blog.csdn.net/IT_ORACLE/article/details/145364323  浏览:    关键词:【漫话机器学习系列】063.梯度下降(Gradient Descent)

梯度下降(Gradient Descent)

1. 什么是梯度下降?

梯度下降(Gradient Descent)是一种优化算法,用于通过迭代更新模型参数,最小化目标函数(通常是损失函数)。它是机器学习和深度学习中最常用的优化方法之一。


2. 梯度下降的目标

目标是找到模型参数(如权重 w 和偏置 b),使得损失函数 J(w, b) 达到最小值。这意味着找到目标函数的最优解(通常是最小值)。

数学定义

假设我们有一个目标函数 J(w),梯度下降的更新公式为:

w_{t+1} = w_t - \alpha \cdot \nabla J(w_t)

  • w_t:当前参数值。
  • α:学习率(Learning Rate),控制步长大小。
  • \nabla J(w_t):损失函数 J(w) 对 w 的梯度。

3. 梯度的意义

梯度是目标函数的一阶导数,表示函数在某一点处变化的方向和速率。

  • 梯度的方向:函数增长最快的方向。
  • 负梯度方向:函数下降最快的方向。

4. 梯度下降的类型

根据计算梯度的方式不同,梯度下降有以下几种类型:

  1. 批量梯度下降(Batch Gradient Descent, BGD)

    • 每次迭代计算所有训练数据的梯度。
    • 优点:收敛稳定,方向准确。
    • 缺点:计算成本高,特别是在大数据集上。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD)

    • 每次迭代仅使用一个样本计算梯度。
    • 优点:速度快,适合大规模数据。
    • 缺点:收敛不稳定,可能震荡。
  3. 小批量梯度下降(Mini-batch Gradient Descent)

    • 每次迭代使用一小批数据计算梯度(通常是 32 或 64 个样本)。
    • 优点:计算效率高,收敛相对稳定。
    • 缺点:需要选择合适的批量大小。

5. 梯度下降的工作原理
  1. 初始化参数:随机初始化模型参数(如权重和偏置)。
  2. 计算损失:使用当前参数计算损失函数 J(w,b)。
  3. 计算梯度:计算损失函数对参数的偏导数。
  4. 更新参数:使用梯度下降公式更新参数。
  5. 重复迭代:直到达到停止条件(如损失函数收敛或达到最大迭代次数)。

6. 梯度下降的学习率

学习率 α\alphaα 是梯度下降的关键超参数,决定每次参数更新的步长大小。

  • 学习率太大:可能跳过最优解,甚至导致发散。
  • 学习率太小:收敛速度慢,训练时间长。

解决方法

  • 使用自适应学习率优化算法(如 Adam、RMSprop)。
  • 手动调整学习率或使用学习率调度。

7. 常见问题
  1. 局部最小值问题

    • 非凸函数可能存在多个局部最小值,梯度下降可能陷入局部最优。
    • 在深度学习中,损失函数通常是高维非凸的,但局部最小值问题不太严重,因为随机初始化和动量项可以帮助逃离局部最优。
  2. 鞍点问题

    • 在鞍点(梯度为零的点),梯度下降可能停滞不前。
  3. 梯度消失和梯度爆炸

    • 深层网络中,梯度可能逐层缩小或增大,导致模型训练失败。
    • 解决方法包括使用归一化技术(如 Batch Normalization)、自适应优化算法(如 Adam)或改进激活函数(如 ReLU)。

8. 优化梯度下降的算法
  1. 动量法(Momentum)

    • 在梯度下降中加入动量项,加速收敛并减小震荡。
  2. 自适应梯度(Adagrad)

    • 为每个参数设计不同的学习率。
  3. RMSprop

    • 对 Adagrad 进行改进,通过指数衰减移动平均值调整学习率。
  4. Adam

    • 结合动量法和 RMSprop,既考虑梯度的平均值,又考虑梯度的方差。

9. 梯度下降的应用

梯度下降被广泛应用于以下领域:

  • 线性回归和逻辑回归:用于参数估计。
  • 神经网络训练:优化权重和偏置。
  • 支持向量机(SVM):用于最大间隔分类器的参数优化。
  • 深度学习:广泛用于 CNN、RNN、Transformer 等模型的训练。

10. 示例代码

以下是一个梯度下降优化线性回归模型的示例代码:

import numpy as np# 模拟数据
np.random.seed(0)
X = np.random.rand(100, 1)  # 特征
y = 3 * X.squeeze() + 2 + np.random.randn(100) * 0.1  # 目标值# 梯度下降实现
def gradient_descent(X, y, lr=0.1, epochs=100):m, n = X.shapetheta = np.zeros(n + 1)  # 初始化参数X = np.c_[np.ones(m), X]  # 添加偏置项for epoch in range(epochs):gradients = -2/m * X.T @ (y - X @ theta)theta -= lr * gradientsloss = np.mean((y - X @ theta) ** 2)if epoch % 10 == 0:print(f"Epoch {epoch}, Loss: {loss:.4f}")return theta# 训练模型
theta = gradient_descent(X, y, lr=0.1, epochs=100)
print("最终参数:", theta)

运行结果

Epoch 0, Loss: 7.1997
Epoch 10, Loss: 0.1870
Epoch 20, Loss: 0.1273
Epoch 30, Loss: 0.0995
Epoch 40, Loss: 0.0783
Epoch 50, Loss: 0.0621
Epoch 60, Loss: 0.0498
Epoch 70, Loss: 0.0403
Epoch 80, Loss: 0.0331
Epoch 90, Loss: 0.0276
最终参数: [2.22800035 2.58762454]


11. 总结

梯度下降是机器学习和深度学习中的基础优化方法,尽管简单,但却非常强大。通过调整学习率和结合先进优化算法(如 Adam),梯度下降可以高效解决许多复杂的模型优化问题。理解其原理和实现是深入学习机器学习的关键步骤。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词