Datawhale X 李宏毅苹果书 AI夏令营_第五期 深度学习进阶Task1笔记

104 阅读1分钟

1 局部极小值与鞍点

神经网络训练时优化失败的表现:

  • Loss下降但是降不到足够小;
  • 不管怎么训练Loss都降不下去。

image.png

出现这种情况的原因是参数对LOSS的微分接近零,即梯度约等于零。此时由于梯度下降法更新参数时使用θθ学习率×Lθ\theta \leftarrow \theta-学习率 \times\frac{\partial L}{\partial \theta},导致参数更新幅度很小甚至不变。

1.1 临界点

将梯度为零的点统称为临界点(critical point),局部极大值、局部极小值、鞍点都是临界点。

  • 局部极小值(local minimum):无论向哪个方向走都会导致损失变大,但不一定是全局最小值点。
  • 局部极大值(local maximum):无论向哪个方向走都会导致损失变小;
  • 鞍点(saddle point):往任意方向损失可能变大,可能变小。

处于临界点时,损失没有办法再下降。若该临界点是局部极小值,则可能无处可走,因为周围的点的损失都更高;若该临界点为鞍点,则是有方向能够使得损失更低的(如图3.2所示)。因此,判断临界点种类就存在其必要性了。

image.png

1.2 判断临界值种类

给定一组参数θ\theta',我们可以近似损失函数为:

L(θ)L(θ)+(θθ)Tg+12(θθ)TH(θθ)L(\theta)\approx L(\theta')+(\theta-\theta')^Tg+\frac{1}{2}(\theta-\theta')^TH(\theta-\theta')
  • 梯度(gradient) g = L(θ)\nabla L(\theta'),其元素由一阶微分组成,即gi=L(θ)θig_i=\frac{\partial L(\theta')}{\partial \theta_i}
  • 海森矩阵(Hessian matirx) H,其元素由二阶微分组成,即Hij=2L(θ)θiθjH_{ij} = \frac{\partial^2 L(\theta')}{\partial \theta_i\partial \theta_j}

走到临界点时时,梯度g为0,则(θθ)Tg=0(\theta-\theta')^Tg=0。此时,损失函数近似为:

L(θ)L(θ)+12(θθ)TH(θθ)L(\theta)\approx L(\theta')+\frac{1}{2}(\theta-\theta')^TH(\theta-\theta')

此时我们可以根据12(θθ)TH(θθ)\frac{1}{2}(\theta-\theta')^TH(\theta-\theta')来判断处于哪类临界点。设θθ\theta-\theta'vv,改变θ\theta的取值时,vv改变,若对于所有vv

  • L(θ)>L(θ)L(\theta)>L(\theta'),则为局部极小值,因为其附近所有其他参数取值的损失都比当前要大;
  • L(θ)<L(θ)L(\theta)<L(\theta'),则为局部极大值;
  • 若有时L(θ)<L(θ)L(\theta)<L(\theta'),有时L(θ)>L(θ)L(\theta)>L(\theta'),则为鞍点。

但是,穷尽所有vv的取值难以实现,因此,可以通过计算海森矩阵H的特征值来简便判断,

  • 若H的所有特征值都大于0,此时vTHv>0v^THv>0,则为局部极小值;
  • 若H的所有特征值都小于0,此时vTHv<0v^THv<0,则为局部极大值;
  • 若H的特征值有正有负,则为鞍点。

1.3 逃离鞍点的方法

由于鞍点周围实际存在降低损失的方向,而局部极小值附近不存在这样的方向,因此,遇到鞍点实际上比遇到局部极小值更好。如图3.5所示,一维空间中的误差表面有一个局部极小值,但是在二维空间这个点就可能只是一个鞍点。同理,低维空间的局部极小值,在高一维度的空间中可能也只是个鞍点。

image.png

在实际情况中,几乎找不到局部极小值,而鞍点较多。若定义最小值比例为:

最小值比例=正特征值数量总特征值数量最小值比例 = \frac{正特征值数量}{总特征值数量},

则当最小值比例为1时,该点为局部极小值,图3.6是训练某不同神经网络的结果,每个点对应一个神经网络。纵轴代表训练网络时,损失收敛到临界点,损失没法下降时的损失,横轴是最小值比例。可以发现,这些临界点中几乎不存在特征值都为正的,即基本不存在局部极小值。因此,多数时候,训练到梯度很小,参数不再更新时,往往是遇到了鞍点。

image.png

2 批量与动量

实际计算梯度时,不是对所有数据的损失L计算梯度,而是将所有数据分成一个个批量(batch),遍历所有批量的过程称为一个回合(epoch)。如图3.7所示,N笔数据被分为多个批量,每个批量大小为B,每次更新参数时,取其中一批(B笔数据)来计算损失和梯度以更新参数,再用新的参数根据下一批的数据进行更新。

image.png

2.1 批量大小对梯度下降法的影响

给定N笔训练数据,考虑两种极端情况:

  • 批量大小 = 数据大小 = N,这种使用全部数据来更新一次参数的方法称为批量梯度下降法(Batch Gradient Descent,BGD)。此时,模型根据所有数据来计算损失和梯度,再进行一次参数更新。
  • 批量大小 = 1,这种方法称为随机梯度下降法(Stochastic Gradient Descent,SGD)。在一个回合内,共要对N笔数据一笔笔进行更新,需更新N次参数。由于单个数据具有随机性,即存在更多噪声,其更新的方向是曲折的。

相对而言,大的批量更新比较稳定,小的批量梯度方向存在一定的噪声,有噪声的梯度反而可以帮助训练。

2.2 动量法

动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。使用梯度下降时,模型计算完梯度后,根据 θ1=θ0ηg0\theta_1 = \theta_0-\eta g_0 往梯度的反方向移动一步,再依次类推下去。

image.png

引入动量后,每次更新参数时,不仅考虑当前的梯度,还要考虑之前的移动,将之前的移动用m来表示,其中mim_i为第i步之前所有计算的梯度的加权和,即mi=λmi1ηgi1m_i = \lambda m_{i-1} -\eta g_{i-1} (η\eta为学习率,λ\lambda为前一个方向的权重参数),初始m0=0m_0=0。可以从两个角度理解这个方法:

  • 一个角度,动量是梯度的负反方向加上前一次移动的方向;
  • 另一个角度,当加上动量的时候,更新的方向不是只考虑现在的梯度,而是考虑过去所有梯度的总和。而且由于权重参数的存在,可以发现,若设置λ<1\lambda<1,越远的移动对现在的影响越小,类似于LSTM。

image.png

原本模型根据梯度下降走到一个局部极小值或者鞍点时会停下不动,但由于动量的存在,其会继续向前走,这可能可以帮助其翻过一个小丘,走到更好的局部最小值处。或是往鞍点能够使得损失下降的方向走下去。

image.png