局部极小值与鞍点:优化过程中的拦路虎
在机器学习中,尤其是深度学习领域,我们经常会遇到局部极小值和鞍点这两个概念。它们是优化算法在寻找最优解的过程中可能遇到的障碍。
局部极小值(Local Minima)
- 定义: 在函数的某个区域内,存在一个点,其函数值比周围所有点的函数值都小,这个点就是局部最小值。
- 形象比喻: 可以想象成一个山谷中的低洼处,虽然不是整个山脉的最低点,但在这个小范围内已经是最低点。
- 问题: 优化算法很容易陷入局部最小值,一旦陷入,就很难再跳出来找到全局最小值。
鞍点(Saddle Point)
- 定义: 在函数的某个点,沿着某些方向是极大值点,沿着另一些方向是极小值点,这个点就是鞍点。
- 形象比喻: 可以想象成马鞍的中心,前后方向是高点,左右方向是低点。
- 问题: 鞍点也是优化算法容易陷入的一个点,因为它既不是局部最小值也不是局部最大值,梯度为零,但并不代表是全局最优解。
为什么局部极小值和鞍点会影响优化?
- 优化算法的局限性: 大多数优化算法都是基于梯度的,它们沿着梯度的负方向搜索最小值。一旦陷入局部最小值或鞍点,梯度为零,算法就无法继续前进。
- 高维空间的复杂性: 高维空间中的函数往往具有复杂的形态,存在大量的局部最小值和鞍点,这使得优化变得更加困难。
如何应对局部极小值和鞍点?
- 选择合适的优化算法:
- 动量法(Momentum):通过引入动量项,可以帮助算法跳出局部最小值。
- Adam:结合了自适应学习率和动量,具有更快的收敛速度和更好的性能。
- Adagrad:自适应地调整每个参数的学习率,可以加速收敛。
- 学习率调整:
- 学习率衰减: 随着训练的进行,逐渐减小学习率,可以帮助算法在接近最优解时更稳定地收敛。
- 学习率调度: 根据不同的训练阶段,采用不同的学习率调整策略。
- 批量大小(Batch Size):
- 合理的批量大小可以影响优化算法的性能,太小或太大都可能导致训练不稳定。
- 初始化参数:
- 合理的初始化参数可以帮助算法更快地收敛,避免陷入局部最小值。
- 正则化:
- L1正则化和L2正则化可以防止过拟合,同时也可以起到一定程度的平滑作用,减少局部最小值。
- 早停:
- 当验证集上的性能不再提升时,提前停止训练,可以避免过拟合。
批量和动量:深度学习优化中的重要概念
批量(Batch)
在深度学习中,批量是指在一次参数更新中,我们使用的训练样本的数量。
- 小批量(Mini-batch): 将训练数据分成多个小块,每次更新参数时只使用其中一个小块。这是最常用的方式,因为它兼顾了内存占用和计算效率。
- 全批量(Full batch): 每次更新参数时使用所有的训练数据。这种方法可以得到更准确的梯度估计,但对于大数据集来说,计算量非常大。
- 随机梯度下降(Stochastic Gradient Descent, SGD): 每次更新参数时只使用一个样本。这种方法可以在噪声较大的情况下加快收敛,但容易产生振荡。
批量大小的影响:
- 批量大小过小: 噪声较大,参数更新不稳定,训练过程可能出现振荡。
- 批量大小过大: 内存占用大,计算效率低,收敛速度慢。
- 批量大小适中: 可以平衡噪声和计算效率,获得较好的收敛效果。
动量(Momentum)
动量是一种优化算法,它在每次参数更新时,除了考虑当前梯度,还考虑之前更新的方向。通过引入动量项,可以加速收敛,并且能够帮助算法跳出局部最小值。
动量的直观解释:
想象一个球从山坡上滚下来,球的运动不仅受到当前坡度的影响,还受到之前运动的惯性影响。动量就类似于这个惯性,它可以让球在遇到小坑洼时继续向前滚动,而不是停留在那里。
动量的数学表达式:
v = γv + η∇θL
θ = θ - v
v
: 动量项γ
: 动量因子,通常设置为0.9η
: 学习率∇θL
: 损失函数对参数θ的梯度
动量的作用:
- 加速收敛: 动量项可以加速参数在正确的方向上移动,从而加快收敛速度。
- 抑制振荡: 动量项可以平滑参数更新,减少振荡。
- 跳出局部最小值: 动量项可以帮助算法跳出局部最小值,找到更好的解。
批量和动量的结合
在实际应用中,我们通常将批量和动量结合起来使用。小批量随机梯度下降加上动量是一种非常有效的优化方法。
- 小批量可以引入一定的噪声,帮助算法跳出局部最小值。
- 动量可以加速收敛,并提高算法的稳定性。
在书中有几个关键概念在这里做一个说明
- 海森矩阵:用于判断函数的极值点类型(局部极大值、局部极小值或鞍点)。
- 特征值:海森矩阵的特征值与函数的曲率相关,通过特征值的正负可以判断临界点的类型。
- 鞍点:梯度为零但不是极值的点,在某些方向上是极大值,在另一些方向上是极小值。
- 逃离鞍点:通过分析海森矩阵的特征向量,可以找到下降的方向,从而逃离鞍点。
-
为什么海森矩阵的特征值可以判断临界点的类型?
- 几何解释: 海森矩阵描述了函数在临界点附近的曲率。正的特征值对应函数在该方向上的凸起,负的特征值对应函数在该方向上的凹陷。如果所有特征值都为正,则函数在所有方向上都是凸的,因此是局部最小值。如果所有特征值都为负,则函数在所有方向上都是凹的,因此是局部最大值。如果特征值有正有负,则函数在不同方向上的曲率不同,因此是鞍点。
- 数学解释: 通过泰勒展开,可以将函数在临界点附近近似为一个二次型,而二次型的正定性、负定性或不定性由其对应的矩阵(即海森矩阵)的特征值决定。
-
为什么说海森矩阵可以告诉我们参数更新的方向?
- 特征向量表示下降方向: 负特征值对应的特征向量指示了函数值下降最快的方向。通过沿着这个方向更新参数,可以使函数值减小。
- 几何意义: 想象一个山谷,鞍点就像山谷中的一个鞍状点。如果我们站在鞍点上,沿着山谷的坡度向下走,就可以找到更低的地方。负特征向量就相当于这个山谷的坡度方向。
-
为什么在实际应用中很少直接计算海森矩阵?
- 计算量大: 海森矩阵的计算量非常大,尤其是对于高维的神经网络。
- 存储开销大: 海森矩阵是一个对称矩阵,存储它需要大量的内存。
- 数值稳定性问题: 海森矩阵的计算可能涉及到数值不稳定性。
以上内容都是参考李宏毅老师的书的感想,有不对的地方劳烦支持,谢谢!