梯度下降算法
约 1204 字大约 4 分钟
梯度下降算法
课程概要
本节课介绍了在机器学习中,当输入特征过多、样本数量过大时,相比于一步求解的“正规方程”,一种更常用、更节省计算资源的参数优化方法——梯度下降。课程从直观的几何解释入手,逐步推导了梯度的数学定义和计算方法,并将其应用于调整模型参数,最终对比了批量梯度下降、随机梯度下降和小批量梯度下降的优缺点。
核心知识点
1. 核心思想:通过“挪动”寻找最低点
- 问题:寻找使误差代价函数最小的参数。
- 传统方法:通过顶点坐标公式一步求解(正规方程),但计算成本高。
- 新方法:采用迭代调整参数的策略,逐步“挪动”到代价函数的最低点。
2. 梯度(斜率)的指导作用
- 对于开口向上的抛物线(一元二次代价函数):
- 最低点左边:斜率为负,需要增大参数 (W)。
- 最低点右边:斜率为正,需要减小参数 (W)。
- 最低点:斜率为零。
- 关键:计算代价函数在当前参数取值点上的斜率,以指导参数调整方向。
3. 导数的两种求法
为了得到某个点的斜率(即导数),有两种方法:
方法一:定义法(极限思想)
- 在曲线上取横坐标相差
ΔW的两个点。 - 当
ΔW趋近于无穷小时,两点连线的斜率即为该点的导数。 - 对于一元二次函数
E = AW² + BW + C,其导数为:斜率 = 2AW + B
方法二:公式法(利用导数运算法则)
- 常用函数的导数公式:例如,幂函数
xⁿ的导数为n*xⁿ⁻¹。 - 运算法则:
- 加法法则:
(f+g)' = f' + g' - 乘法法则:
(f*g)' = f'*g + f*g'
- 加法法则:
- 应用法则求解
E = AW² + BW + C:(AW²)' = 2AW(BW)' = BC' = 0- 求和得:
导数 = 2AW + B
4. 梯度下降算法
- 基本更新公式:
W_new = W_old - α * KK:当前参数W处的梯度(斜率)。α:学习率,一个较小的正数(如0.1),用于控制每次调整的步长,防止震荡。
- 工作原理:
- 当
W在最低点右侧 (K>0):W减小。 - 当
W在最低点左侧 (K<0):W增大。 - 距离最低点远 (
|K|大):调整幅度大,收敛快。 - 距离最低点近 (
|K|小):调整幅度小,更精准。
- 当
5. 三种梯度下降策略对比
| 策略 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 批量梯度下降 (BGD) | 每次使用全部样本计算整体代价函数的梯度进行更新。 | 收敛路径平滑,易于收敛到全局最优点;可并行计算。 | 计算开销大,不适合海量数据;内存占用高。 |
| 随机梯度下降 (SGD) | 每次仅使用一个样本计算其代价函数的梯度进行更新。 | 参数更新快;适合海量数据,内存占用低。 | 收敛路径随机震荡(布朗运动),不易收敛到全局最优点;无法并行。 |
| 小批量梯度下降 (Mini-batch GD) | 每次使用一小批样本(如100个)计算梯度进行更新。 | 折中方案:兼顾了收敛稳定性和更新速度;可部分并行。 | 需要手动设置批量大小。 |
关键公式与定义
- 一元二次代价函数:
E = AW² + BW + C - 导数(梯度):
- 定义式:
导数 = lim(ΔW→0) [E(W+ΔW) - E(W)] / ΔW - 对于
E = AW² + BW + C:导数 = 2AW + B
- 定义式:
- 梯度下降参数更新:
W_new = W_old - α * (2AW_old + B) - 单个样本的代价函数斜率 (K):
K = 2 * X² * W - 2 * X * Y
实验要点(随机梯度下降示例)
- 创建代价函数:对于单个样本
(X, Y),其抛物线代价函数系数为:A = X²B = -2XYC = Y²
- 计算斜率:
K = 2 * A * W + B = 2 * X² * W - 2 * X * Y - 更新参数:
W = W - α * K(通常设置α=0.1) - 迭代:在所有样本上循环多次(如100次)进行更新。
- 可视化:可使用
matplotlib的clf()和pause()函数实现参数调整过程的动态可视化。
总结
本节课系统地讲解了梯度下降这一机器学习的核心优化算法。通过将复杂的全局最优求解问题,转化为基于局部梯度信息的迭代“挪动”过程,梯度下降显著降低了大规模数据下的计算成本。课程明确了导数的计算是算法的关键,并对比了批量、随机和小批量三种梯度下降策略的适用场景与优劣。最终,通过代码实验展示了随机梯度下降的高效与简洁,为后续更复杂的模型训练奠定了基础。
