目录
一、局部极小值与鞍点
在深度学习中,局部极小值和鞍点是优化过程中可能遇到的两种关键点,它们对模型的训练和性能有着显著的影响。
局部极小值
是指在参数空间中,某个点的损失值比周围所有点的损失值都要小,但可能不是全局最小值。在局部极小值点,所有方向上的梯度都为正或为负,这意味着如果继续基于梯度下降的优化方法,参数更新将不会带来损失的减少 。
鞍点
是一种特殊的临界点,其梯度为零,但不是局部最小值或局部最大值。在鞍点处,损失函数可能在一个方向上增加而在另一个方向上减少,类似于马鞍的形状。
判断一个临界点到底是局部极小值还是鞍点需要知道损失函数的形状。鞍点可以通过损失函数的Hessian矩阵来判断,如果Hessian矩阵的特征值有正有负,则该点是鞍点 。
在梯度下降法中,通常当梯度为零时终止运算,并默认此点为全局最优点(local minima)。但这种方法有缺陷,即可能到达鞍点(saddle points)而难以前进。鞍点处函数梯度等于0,但函数值并非局部最小,如图所示:
所以如果一个点的梯度真的很接近零,我们走到临界点的时候,这个临界点到底是局部极小值还是鞍点,是一个值得去探讨的问题。因为如果损失收敛在局部极小值,我们所在的位置已经是损失最低的点了,往四周走损失都会比较高,就没有路可以走了。但鞍点没有这个问题,旁边还是有路可以让损失更低的。只要逃离鞍点,就有可能让损失更低。
逃离鞍点的方法之一是通过特征向量更新参数。在鞍点处,梯度为零,因此无法继续通过梯度下降来优化模型。然而,通过分析Hessian矩阵的特征值,我们可以找到对应的特征向量,并沿着这些特征向量的方向更新参数,从而逃离鞍点 。
在实际应用中,由于直接计算Hessian矩阵和特征值的计算复杂性较高,通常采用其他方法来避免模型陷入鞍点,例如引入随机噪声、使用动量法或调整学习率等策略 。
此外,深度学习中的优化算法,如SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop和Adam等,也在不断发展以应对局部极小值和鞍点问题 。例如,Adam算法结合了动量和自适应学习率调整,通过指数加权移动平均值来估算梯度的动量和二次矩,以提高优化效率 。
二、批量和动量
在深度学习中,批量和动量是两种重要的优化技术,它们对于提高训练效率和模型性能起着关键作用。
批量(Batch Size):
批量大小是每次迭代中用于计算梯度的样本数量。在计算梯度的时候,并不是对所有数据的损失 L 计算梯度,而是把所有的数据分成一个一个的批量(batch)。每个批量的大小是 B ,即带有 B 笔数据。每次在更新参数的时候,会去取出 B 笔数据用来计算出损失和梯度更新参数。
批量大小在批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)和小批量梯度下降(Mini-batch Gradient Descent)中扮演不同的角色,影响算法的收敛速度、稳定性和内存需求。
1.批量梯度下降(Batch Gradient Descent):
- 在BGD中,批量大小等同于整个训练数据集的大小。
- 每次参数更新都基于全部训练样本的损失函数的梯度。
- 优点是每次更新都能保证使用所有信息,因此梯度的估计非常准确。
- 缺点是当数据集很大时,计算成本很高,需要大量内存来处理整个数据集,并且每次更新需要较长时间。
2.随机梯度下降(Stochastic Gradient Descent):
- 在SGD中,批量大小为1,即每次更新只使用一个训练样本。
- 这意味着每次参数更新都是基于单个样本的损失函数梯度。
- SGD的优点是计算效率高,因为每次只需要处理一个样本,这使得算法可以快速更新。
- 缺点是更新可能会非常嘈杂且不稳定,导致收敛速度慢,且有可能收敛到局部最小值或鞍点。
3.小批量梯度下降(Mini-batch Gradient Descent):
- MBGD是BGD和SGD的折中方案,批量大小介于1和整个数据集大小之间。
- 每次参数更新基于一小批样本的损失函数梯度。
- 优点包括:相比于BGD,MBGD可以更快地更新参数,因为每次只需要处理一小部分数据。相比于SGD,MBGD的更新更加稳定,因为梯度是基于多个样本而不是单个样本估计的。
- MBGD可以利用并行计算来加速梯度的计算,同时保持了较好的泛化能力。
- 缺点是选择合适的批量大小可能需要一些实验,因为不同的批量大小可能会对模型性能产生不同的影响。
在实际应用中,MBGD由于其稳定性和效率通常被广泛使用。选择合适的批量大小是一个重要的超参数调整过程,它需要在训练速度、内存消耗和模型性能之间做出权衡。通常,批量大小的选择取决于具体的应用场景、数据集的大小和可用的计算资源。
动量(Momentum):
动量法是另外一个可以对抗鞍点或局部最小值的方法,它通过引入“惯性”来加速梯度下降过程。具体来说,动量法不仅考虑当前的梯度,还利用前一次的更新方向,使得参数更新更具惯性,从而更快地接近最优解 。
假设误差表面就是真正的斜坡,参数是一个球,把球从斜坡上滚下来,如果使用梯度下降,球走到局部最小值或鞍点就停住了。 但是在物理的世界里,一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻过小坡继续往前走。 因此在物理的世界里面,一个球从高处滚下来的时候,它并不一定会被鞍点或局部最小值卡住,如果将其应用到梯度下降中,这就是动量。
一般梯度下降法(Gradient Descent, GD)和动量法(Momentum)都是优化算法,用于最小化损失函数并找到模型参数的最优值。
一般梯度下降法
动量法
- 动量法可以看作是在梯度下降的方向上加入了之前更新方向的加权和,这有助于模型跳出局部最小值和鞍点。动量参数通常设置为0.9或0.99,这有助于在优化过程中获得显著的性能提升 。
- 梯度下降法在每次迭代中只考虑当前的梯度,这可能导致更新方向频繁改变,从而减慢收敛速度,尤其在梯度变化剧烈的地方。 梯度下降法主要的超参数是学习率。梯度下降法适用于数据量较小、损失函数相对平滑的情况。
- 动量法则通过累加过去的梯度信息来平滑更新方向,这有助于减少震荡,加快收敛速度。动量法除了学习率外,还有动量参数 ,这为算法提供了更多的调整空间。动量法适用于数据量大、损失函数复杂或有噪声的情况,尤其是在深度学习中广泛使用。
在实际应用中,选择合适的批量大小和动量参数对于提升模型训练速度和泛化能力至关重要。小批量训练通常能够提供更好的泛化性能,而动量法则有助于加快收敛并避免陷入局部最优解 。