When gradient is small:
1. 局部极小值与鞍点
局部极小值(local minimum)
鞍点(saddle point):梯度是零且区别于局部极小值和局部极大值(local maximum)的点。
临界点(critical point):梯度为零的点的统称。
当损失没有办法再下降时,也许是因为收敛在了临界点,但不一定收敛在局部极小值,因为鞍点也是梯度为零的点。
做论文时,你可以说你卡在了critical point,不能说卡在了local minima,因为不能确定是不是saddle point.
2.判断临界值种类的方法:
泰勒级数近似(Tayler series appoximation)
海森矩阵(Hessian matrix)
是这三种情况的那一种取决于第三个式子。
看个海森矩阵 H 的特征值:
若 H 的所有特征值都是正的,H 为正定矩阵,则 v THv > 0,临界点是局部极小值。
若 H 的所有特征值都是负的,H 为负定矩阵,则 v THv < 0,临界点是局部极大值。
若 H 的特征值有正有负,临界点是鞍点。
在实际应用中,这种方法计算量太大。但这种方法告诉我们,卡在saddle point不可怕,有解法。H 不只可以帮助我们判断是不是在一个鞍 点,还指出了参数可以更新的方向。
逃离鞍点的方法:
低维度空间中的局部极小值点,在更高维的空间中,实际是鞍点。同样地,如果在二维的空间中没有路可以走,会不会在更高维的空间中,其实有路可以走?
我们在训练一个网络的时候,参数数量动辄达百万千万级,所以误差 表面其实有非常高的维度—— 参数的数量代表了误差表面的维度。既然维度这么高,会不会 其实就有非常多的路可以走呢?既然有非常多的路可以走,会不会其实局部极小值就很少呢?
横轴代表最小值比例(minimum ratio)
从经验上看起来,局部极小值并没有那么常见。多数的时候,我们训练到一个梯度 很小的地方,参数不再更新,往往只是遇到了鞍点。
隐藏任务①:搜索资料,找到一个优化失败的案例,尝试用自己的话描述一遍情况~
局部极小值的例子
情景描述
假设我们正在训练一个简单的两层神经网络来拟合一个非线性可分的数据集。损失函数被定义为均方误差(MSE),我们的目标是通过梯度下降法找到能够最小化MSE的权重。
优化过程
-
初始状态:我们从一组随机初始化的权重开始。
-
训练过程:随着训练的进行,我们不断地更新权重以减小损失。
-
遭遇问题:在某一时刻,优化器发现损失函数的下降趋势变缓,并最终在一个非全局最小值的位置停滞下来。
图像描述
想象一下,损失函数在二维空间中的表现形式像是一个山谷,其中有一个宽阔的底部区域,但在这个宽阔底部的某处还隐藏着一个更深的坑洞。如果优化器过早地停止在这个宽阔底部而不是继续探索直到找到那个更深的坑洞,那么我们就说它陷入了一个局部极小值。
结果
-
结果:由于优化器未能找到真正的全局最小值,模型的表现并不理想。
解决方法:
-
调整学习率:使用自适应学习率方法,如Adam或RMSProp,可以帮助我们更好地应对局部极小值。
-
增加随机性:利用随机梯度下降(SGD)而非批量梯度下降,通过引入噪声使优化器有可能逃离局部极小值。
-
使用动量项:动量项可以帮助优化器在某些维度上克服局部极小值附近的梯度消失问题。
-
初始化策略:采用不同的初始化策略,如Xavier初始化或He初始化,可以帮助减少陷入不良局部极小值的机会。
隐藏任务②:过一遍文档,给自己的理解程度打一个分数,如果低于30%,尝试配合视频食用,另外尝试问问AI,在这条任务下评论找到的参考资料和补充信息!
能理解50%左右,需要多看几遍。
3.批量和动量
批量(batch)
遍历所有批量的过程 称为一个回合(epoch)
随机打乱(shuffle)
使用全批量(full batch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD),此时模型必须把 20 笔训练数据都看完,才能够计算损失和梯度,参数才能够更新一次。
左右两边,左边没有用batch,右边batch为1.
左边运算时间并不一定比右边更长。
跑完1个epoch,小的batch花的时间比大的batch的时间长。
Batch size越大,准确度越差。小的Batch size的optimization效果比较好。
小的batch也对testing有帮助。原因是小的batch更容易overfitting.
在峡谷里的minima是坏的,在平原上的是好的。对在一个“盆地”里面的最小值,其在训练跟测试上面的结果不会差太多,只差了一点点。但对在右边在“峡谷”里面的 最小值,一差就可以天差地远 。虽然它在训练集上的损失很低,但训练跟测试之间的损失函 数不一样,因此测试时,损失函数一变,计算出的损失就变得很大。
大的批量大小会让我们倾向于走到“峡谷”里面,而小的批量大小倾向于让我们走到“盆地” 里面。小的批量有很多的损失,其更新方向比较随机,其每次更新的方向都不太一样。即使 “峡谷”非常窄,它也可以跳出去,之后如果有一个非常宽的“盆地”,它才会停下来。
参考文献:
-
动量法
动量法(momentum method)
每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度 的反方向加上前一步移动的方向决定移动方向。
每一步的移动都用 m 来表示。m 其实可以写成之前所有计算的梯度的加权和。引入动量后,可以从两 个角度来理解动量法。一个角度是动量是梯度的负反方向加上前一次移动的方向。另外一个 角度是当加上动量的时候,更新的方向不是只考虑现在的梯度,而是考虑过去所有梯度的总和。