神经网络算法 - 一文搞懂Gradient Descent(梯度下降)
2024-12-31
梯度下降
一、梯度下降的本质
机器学习“三板斧”:选择模型家族,定义损失函数量化预测误差,通过优化算法找到最小化损失的最优模型参数。
机器学习 vs 人类学习
- 定义一个函数集合(模型选择)
- 判断函数的好坏(损失函数)
- 目标:量化模型预测与真实结果之间的差异。
- 示例:均方误差(MSE)用于回归;交叉熵损失用于分类。
- 考虑因素:损失的性质(凸性、可微性等)、易于优化、对异常值的鲁棒性等。
- 选择最好的函数(优化算法)
- 目标:在函数集合中找到最小化损失函数的模型参数。
- 主要方法:梯度下降及其变种(随机梯度下降、批量梯度下降、Adam等)。
- 考虑因素:收敛速度、计算效率、参数调整的复杂性等。
梯度下降的本质:用于求解机器学习和深度学习中的最优化问题。
梯度下降的基本思想是从一个初始点出发,沿着损失函数的负梯度方向不断更新参数,直到达到一个局部最小值或者全局最小值。
梯度下降的基本思想
- 初始化参数:选择一个初始的参数值。
- 计算梯度:计算损失函数在当前参数值下的梯度。
- 更新参数:沿着梯度的反方向更新参数,通常使用一个学习率(Learning Rate)来控制更新的步长。
- 重复迭代:重复步骤2和3,直到满足停止条件(如达到最大迭代次数、损失函数值小于一个阈值等)。
梯度下降的关键步骤
二、梯度下降的原理
在梯度下降中,利用方向导数的最小值(即梯度的反方向)来更新参数,从而逼近函数的最小值。
方向导数:在梯度下降算法中,方向导数用于确定函数值下降的最快方向。
- 定义:方向导数是函数在某一点沿特定方向的变化率。对于多元函数,它表示函数值在该点沿某一确定方向上的瞬时变化率。
- 性质:方向导数的大小取决于函数在该点的梯度以及方向向量的选择。当方向向量与梯度方向相同时,方向导数达到最大值;当方向向量与梯度方向相反时,方向导数达到最小值。
- 与梯度下降的关系:在梯度下降算法中,方向导数用于确定函数值下降的最快方向。通过计算负梯度方向上的方向导数,可以找到使函数值减小的方向,从而更新参数以逼近函数的最小值。
方向导数
梯度(Gradient):在梯度下降算法中,梯度提供了函数下降的方向和速度信息。
- 定义:梯度是一个向量,它的每个分量是函数对相应自变量的偏导数。对于多元函数,梯度表示函数在某一点的最大变化率和该变化发生的方向。
- 性质:梯度的方向总是指向函数值增长最快的方向,而梯度的大小(模长)表示该方向上的最大变化率。在函数的驻点(梯度为零的点)处,函数可能达到局部极小值、局部极大值或鞍点。
- 与梯度下降的关系:梯度下降算法利用梯度的信息来更新参数,以最小化目标函数。在每一步迭代中,算法计算当前点的梯度,并沿着梯度的反方向(负梯度方向)移动一定的步长,这个步长通常由学习率控制。
梯度
三、梯度下降的算法
批量梯度下降(BGD):在每次迭代中,批量梯度下降使用整个数据集来计算损失函数的梯度,并根据这个梯度来更新模型的所有参数。
批量梯度下降(BGD)
- 优点:稳定收敛:由于使用了整个数据集来计算梯度,批量梯度下降通常能够更稳定地收敛到损失函数的最小值,避免了在优化过程中的剧烈波动。全局视角:它考虑了数据集中的所有样本来进行参数更新,这有助于模型获得一个全局的视角,而不是仅仅关注于单个样本或一小部分样本。易于实现:批量梯度下降算法相对简单,容易理解和实现。
- 缺点:计算成本高:当数据集非常大时,批量梯度下降的计算成本会变得非常高,因为每次迭代都需要处理整个数据集。内存消耗大:由于需要同时加载整个数据集到内存中,批量梯度下降对于内存的需求也相对较高。更新速度慢:由于每次更新都是基于整个数据集的平均梯度,因此在某些情况下,批量梯度下降可能会比随机梯度下降更慢地更新参数。
随机梯度下降(SGD):与批量梯度下降不同,随机梯度下降在每次迭代中仅随机选择一个样本来计算损失函数的梯度,并根据这个梯度来更新模型的一个或多个参数。
随机梯度下降(SGD)
优点:
- 计算效率高:由于每次迭代只处理一个样本,随机梯度下降的计算效率通常比批量梯度下降高得多,特别是在处理大规模数据集时。
- 内存消耗小:随机梯度下降只需要加载一个样本到内存中,因此对于内存的需求相对较低。
- 有助于跳出局部最小值:由于每次更新都是基于单个样本的梯度,随机梯度下降在优化过程中具有更大的随机性,这有助于模型跳出局部最小值,找到更好的全局最小值。
缺点:
- 收敛过程不稳定:由于每次更新都是基于单个样本的梯度,随机梯度下降的收敛过程通常比批量梯度下降更不稳定,可能会产生较大的波动。
- 难以达到全局最优:在某些情况下,随机梯度下降可能会陷入局部最小值,而无法达到全局最优解。
- 需要额外的技巧:为了提高随机梯度下降的性能和稳定性,通常需要采用一些额外的技巧,如逐渐减小学习率(学习率衰减)、使用动量等。
本文章转载微信公众号@架构师带你玩转AI