AI中的数学-梯度下降算法

一、概念

1、导数和偏导数

导数是函数在某一点处关于单一自变量的变化率,即函数值随输入变量的微小变化而产生的瞬时变化率。导数的几何意义是表示函数图像在该点的切线斜率。示例:若 f(x)=x2,则 f′(x)=2x,表示在任意点 x 处,f(x) 的变化率是 2x。

偏导数是多元函数对某一个自变量的导数,而将其他自变量的值视为常数。

示例:若 f(x,y)=x2 * y,则:

  • 关于x的偏导数=2x+y(将 y 视为常数),
  • 关于y的偏导数=x2(将 自变量x的值视为常数)。

比较:

导数偏导数
针对一元函数 y=f(x)针对多元函数 z=f(x,y,…)
只有一个自变量对某一自变量求导,其他变量视为常数
几何意义:切线斜率几何意义:沿坐标轴方向的斜率

2、梯度下降算法

梯度下降算法(Gradient Descent)是一种优化算法,用于最小化目标函数,例如损失函数或代价函数。梯度是目标函数关于各个参数的偏导数,表示了目标函数在每个参数方向上的变化率。梯度下降算法广泛应用于机器学习和深度学习模型的参数优化。

梯度下降算法的基本思想是,假设我们有一个目标函数 f(x1,x2,…,xn),其中x1,x2,…,xn是函数的参数,例如机器学习模型中的权重。梯度下降算法通过计算该函数在当前点的梯度,并沿着梯度的反方向(即负梯度方向)更新参数,使得目标函数的值逐步减少,最终收敛到局部最优或全局最优点(最小)。直观上,可以将目标函数/损失函数想象为一个山谷,梯度下降算法的作用类似于“顺着山坡往下走”,直到找到最低点,为最优解。

对于多元目标函数 f(x1,x2,…,xn),其梯度是一个向量,由所有变量的偏导数组成:

f=(关于x1的偏导数,关于x2的偏导数,…,关于xn的偏导数)

  • 梯度指向函数值增长最快(变化率最大)的方向。
  • 梯度下降中,我们沿梯度的反方向(即 −∇f)迭代更新参数,以减小(变化率)函数值。变化率趋近为0时候,为梯度下降法的最优解。

3、实例演示

目标函数: f(x,y)=x2+2y2(这是一个凸函数,最小值在 (0,0))。

步骤:

  1. 计算偏导数:关于x的偏导数=2x, 关于y的偏导数 = 4y
  2. 初始化:设 (x0,y0)=(1,1),学习率 α=0.1。
  3. 第一次迭代:
    1. x1=1−0.1×2×1=0.8
    2. y1=1−0.1×4×1=0.6
    3. 函数值从 f(1,1)=3 降至 f(0.8,0.6)=0.82+2×0.62=1.04。

4、学习率的调整策略

学习率(α)是梯度下降算法中最关键的超参数之一,它决定了每次参数更新时的步长大小,直接影响模型的收敛速度、稳定性和最终性能。过大:可能导致震荡(不收敛)或越过最优解。过小:收敛速度极慢,训练时间过长。

学习率与损失函数的关系:

  • 凸函数:固定学习率可能收敛到全局最优。
  • 非凸函数(如神经网络):学习率需动态调整以避免局部最优。

(1) 固定学习率

  • 简单但需手动调参,适用于简单模型(如线性回归)。
  • 典型值:0.001、0.01、0.1(根据问题规模调整)。

(2) 学习率衰减(Learning Rate Decay)

逐步减小学习率,平衡初期快速收敛和后期稳定性:

  • 指数衰减:αt=α0⋅e−kt
  • 逆时衰减:αt=α0/(1+kt)
  • 余弦退火:周期性调整学习率(适合深度学习)。

(3) 自适应学习率方法

自动调整不同参数的学习率:

方法原理优点
Momentum引入动量项,加速收敛并减少震荡(类似惯性)缓解局部最优
Adagrad对稀疏特征赋予更大学习率,适合处理稀疏数据自适应调整
RMSprop改进 Adagrad,解决其学习率过早衰减问题适合非凸优化
Adam结合 Momentum 和 RMSprop,主流深度学习优化器快速收敛、鲁棒性强

5. 学习率与其他问题的关联

  • 梯度消失/爆炸:学习率过大可能加剧梯度爆炸(LSTM/RNN 中常见)。
  • 批量大小(Batch Size):学习率通常需随 Batch Size 增大而线性增加(如 Large Batch Training)。
  • 正则化:高学习率可能需配合更强的权重衰减(L2 正则化)。

6. 代码示例

(1) PyTorch 中的学习率设置

import torch.optim as optim

model = ...  # 定义模型
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 固定学习率

# 学习率衰减
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
for epoch in range(100):
   train(...)
   scheduler.step()  # 每30轮学习率×0.1

(2) 使用 Adam 优化器

optimizer = optim.Adam(model.parameters(), lr=0.001)  # 默认学习率

总结

  • 学习率是梯度下降的“步长”,直接影响训练效果。
  • 调参建议:从小值开始(如 0.001),结合衰减策略或自适应方法(如 Adam)。
  • 深度学习:优先尝试自适应优化器,而非固定学习率。

通过合理设置学习率,可以显著提升模型收敛速度和性能!

二、开发框架

XGBoost 和 LightGBM 是两个基于梯度提升决策树(Gradient Boosted Decision Tree, GBDT) 的高效机器学习库,主要用于结构化数据的分类和回归任务。

XGBoost(Extreme Gradient Boosting)

核心特点

  • 梯度提升思想:通过迭代地构建决策树模型,每棵树学习前序模型的残差(损失函数的负梯度),逐步优化预测结果。
  • 正则化优化:内置 L1/L2 正则化(lambdaalpha 参数),防止过拟合。
  • 高效实现:支持并行计算(多线程)、分布式训练,内置交叉验证(cv 参数)和早停机制(early_stopping_rounds)。
  • 灵活的数据处理:支持缺失值(missing 参数)和自定义评估指标。

LightGBM(Light Gradient Boosting Machine)

核心特点

  • 梯度提升优化:继承 GBDT 思想,但引入了 梯度单边采样(Gradient One-Side Sampling) 和 互斥特征捆绑(Exclusive Feature Bundling),显著减少计算量。
  • 内存友好:直接使用内存存储数据,适合大数据集。
  • 支持多种数据类型:除数值型外,还支持类别型(categorical 参数)和时间序列数据。
  • 高效训练:采用叶子节点生长策略(Leaf-wise Growth)而非深度优先,速度更快,精度更高。

三、参考资料

发表评论