0


Datawhale X 李宏毅苹果书 AI夏令营 Task 1- 3.1 局部极小值与鞍点+ 3.2 批量和动量

《深度学习详解》 3.1 局部极小值与鞍点 + 3.2 批量和动量

3.1 局部极小值与鞍点

  • 优化神经网络时需要最小化损失函数,损失函数的关键特征是局部极小值和鞍点。局部极小值不是全局最优解,是在某个小区域内比周围点的值都要低的点。鞍点是损失函数在某些方向上的极小值,而在其他方向上是极大值或平坦的点。
  • 它们可能会导致梯度为零无法继续优化。不同的是局部极小值所在的位置已经是最低点,往四周走损失都会比它高,没路可走。但鞍点旁边还有能让损失更低的路径,只要逃离鞍点,就有可能让损失更低。如图所示局部极小值与鞍点
  • 依据损失函数可判断临界点是局部极小值还是鞍点。无法得到完整的损失函数时,可以通过给定的一组参数得出附近的损失函数。在临界点附近一次微分项值为0,损失函数可近似为损失函数值+海森矩阵: L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\theta) \approx L(\theta\prime) + \frac{1}{2} (\theta - \theta\prime)^T H(\theta - \theta\prime) L(θ)≈L(θ′)+21​(θ−θ′)TH(θ−θ′) 不用带入所有的值计算,只需计算海森矩阵的特征值。如果所有特征值为正,即海森矩阵是正定的,那么临界点是局部极小值;如果所有特征值为负,即海森矩阵是负定的,那么临界点是局部极大值;如果所有特征值有正有负,那么临界点是鞍点。
  • 可视化误差表面能更方便地做出判断。
  • 在鞍点处找出负的特征值,再找出这个特征值对应的特征向量,沿着它的方向去更新参数,就可以找到一个比鞍点的损失还要更低的点。但海森矩阵需要算二次微分,计算量很大,所以这个方法很少用。
  • 低维度空间中的局部极小值点,在更高维的空间中是鞍点。从下图可以看出,最小值比例(最小值比例 = 正特征值数量/总特征值数量)最大为0.5~0.6,几乎找不到所有特征值都为正的临界点。所以多数情况下参数不再更新,往往是因为遇到了鞍点。在这里插入图片描述

3.2 批量和动量

  • Batch是完整数据集被分割成的、用于训练神经网络的最小单位,遍历所有batch的过程称为一个epoch。分割时会进行随机打乱(shuffle),常用的做法是在每一个epoch开始前重新分割。
  • 不同训练方式的区别在于更新一次参数所用的数据量- 批量梯度下降(Batch Gradient Descent)- 全部batch- 小批量梯度下降(Mini-batch Gradient Descent)- 全部batch的一个子集- 随机梯度下降(Stochastic Gradient Descent, SGD)- 随机选择的一个样本,相当于一个batch且batch大小为1
  • 批量大小的选择- T i m e 训练 = N u m b e r e p o c h ∗ ( T i m e 处理一个 b a t c h + T i m e 一次参数更新 ) Time_{训练} = Number_{epoch}*(Time_{处理一个batch} + Time_{一次参数更新}) Time训练​=Numberepoch​∗(Time处理一个batch​+Time一次参数更新​)- 当Batch大小超过GPU并行处理能同时处理的数据量之后,处理一个batch的时间才会随batch变大而变长。- 除了处理一个batch的时间,也要考虑参数更新所需时间,batch太小导致epoch很多,相乘后最终所需时间并不少。- 所以考虑并行计算时,大的batch花时间反而少。- 参数更新:大批量的参数更新更稳定,小批量的梯度方向比较有噪声- 优化:小批量的噪声有助于训练 - 大批量,比如批量梯度下降在临界点停下后,如果不看海森矩阵,不能继续更新参数。- 小批量梯度下降每一次更新参数使用的损失函数有差异, L 1 L_1 L1​卡住, L 2 L_2 L2​不一定卡住,用没卡住的损失函数还可以继续训练。- 随机梯度下降因为在梯度上引入了随机噪声,在非凸优化问题上更容易逃离局部最小值。- 准确率:大批量的训练准确率即使跟小批量差不多,在测试时准确率也会更差,即过拟合。 - 平坦的“盆地”中的局部最小值好,在这里训练和测试的结果不会差太多;尖锐的“峡谷”中的局部最小值坏,这里的结果一差就会差很多。平坦的“盆地”与尖锐的“峡谷”- 大batch容易走进“峡谷”中的最小值,小batch因为梯度方向的噪声容易跳出“峡谷”中最小值,在“盆地”里才会停下来
  • 动量法可理解为在原有梯度更新公式里加入了惯性,即之前的梯度方向。参数更新公式如下: θ t + 1 = θ t − η ⋅ ∇ θ J ( θ t ) − γ ⋅ m t \theta_{t+1} = \theta_t - \eta \cdot \nabla_{\theta} J(\theta_t) - \gamma \cdot m_t θt+1​=θt​−η⋅∇θ​J(θt​)−γ⋅mt​ 其中: θ t \theta_t θt​表示当前参数; η \eta η表示学习率; ∇ θ J ( θ t ) \nabla_{\theta} J(\theta_t) ∇θ​J(θt​)表示损失函数对参数 θ t \theta_t θt​的当前梯度; m t m_t mt​是上一步的动量,初始时 m 0 = 0 m_0 = 0 m0​=0; γ \gamma γ是动量因子,通常取值在 0.9 0.9 0.9左右,用于控制动量的影响程度。
  • 动量法使得参数更新既依赖当前的梯度,也参考之前梯度的趋势。这样,- 在当前和之前梯度一致的方向上可以加速收敛。- 在当前和之前梯度不一样的点上,减少受当前梯度突然变化的影响,减少震荡。- 在鞍点或局部最小值,之前梯度带来的动量有可能让它继续往下走,甚至翻过一个小丘。

本文转载自: https://blog.csdn.net/MAJILIAO/article/details/141614915
版权归原作者 JinH101 所有, 如有侵权,请联系我们删除。

“Datawhale X 李宏毅苹果书 AI夏令营 Task 1- 3.1 局部极小值与鞍点+ 3.2 批量和动量”的评论:

还没有评论