学习链接:Datawhale (linklearner.com)
本笔记记录了深度学习的一些基础概念
局部最小值与鞍点
做损失函数的优化时,经常会发现随着参数不断更新,训练的损失(Loss)不会再下降,但是我们对这个损失不满意,将训练模型替换为更深层的网络,发现损失可能还是做的不好-深层网络没有发挥全部力量。这就是所谓的优化失败。要理解优化失败的原因,就要了解局部最小值和鞍点的概念。
临界点及种类
常见的情况是,优化到某个地方,梯度为零,参数就不再更新了。此时可能有以下三种情况:跑到局部最小值(local minimum)了,跑到鞍点(saddle point),跑到局部最大值。对于梯度为零的点,统一称为临界点(critical point)。梯度没有继续下降,也许只是收敛到了临界点(比如鞍点),而不一定是局部最小值。鞍点指的是该点梯度为零,往某些方向损失函数增大,某些方向损失函数减小,画出来图像马鞍:
判断临界值种类的方法
由于鞍点和局部最小值的梯度均为零,要区分他们需要引入新的参数。类似微积分学的极大值极小值判定定理,通过二阶微分判断将临界点继续分类。梯度为零时,可以用泰勒展开将损失函数在临界点处展开:
其中g是L的一阶微分向量(n*1维,就是的维度),也可以写作,其元素为
H是海森矩阵(n*n维),其元素为:
由于临界点处梯度为零,所以泰勒展开为:
将记为,则可以将改写为。
则临界点处泰勒展开又可以记为。临界点处有以下三种情况:
- 对于所有的,都有,这意味着对于任意,都有,所以该临界点是局部极小值点
- 对于所有的,都有,这意味着对于任意,都有,所以该临界点是局部极大值点
- 对于任意,有时候大于零,有时候小于零,这意味着对于有的,有,对于有的,有,所以该临界点是鞍点。
但是对于临界点,我们不可能将所有的v都拿来计算一遍,来判断临界点到底属于极大值还是极小值还是鞍点。此时只需要计算H的特征值即可。
由线性代数的知识,我们知道如果矩阵H所有特征值都是正数,则H是正定矩阵,则对所有的,都有,对应临界点是局部极小值点。同样,如果H的特征值都是负数,则H是负定矩阵,对所有的,都有,对应临界点是局部极大值点。如果特征值有正有负,则是鞍点。
因此,当梯度为0时,H可以告诉我们临界点的种类,同时还能告诉我们如果遇到鞍点,怎么更新参数可以逃离鞍点。下面举例说明(需要线性代数关于特征值、特征向量的知识,或者参见高中数学二维矩阵特征值、特征向量的介绍):
假设()是H的一个特征值(H特征值有正有负,所以可以假设一个小于零的特殊值),是H对应该特征值的一个特征向量,即有,对于我们的优化问题,假设将临界点更新为,我们这样来选择新的:。则中的第二项可以改写为:,则这样更新就可以使得Loss比原来降低,其实就是沿着特征值为负数的特征向量方向更新参数。
逃离鞍点的方法
局部最小值不容易遇到
首先要明确一点:随着维度的增加,几乎很难遇到局部最小值点,通常遇到的临界值点都是鞍点。也可以这样来理解,当你在低维度时觉得无路可走了,实际在更高维度的人看来,还有其他优化的途径。可以见下图:
这里可以引用一个概念:最小值比例。其定义是
对于局部最小值,最小值比例就应该是1,实际上,多数的临界点最小值比例都不会到1,最大也就处在0.5~0.6的范围,见下图:
所以可以说随着维度的增加,局部最小值问题就不会成为一个问题。
逃离鞍点方法
可以求海森矩阵,按照特征值为负数的特征向量方向更新参数。但这种方法计算量过大,很少有人用这种方法来逃离鞍点。
另一种逃离鞍点的方法是扰动梯度下降,就是在求得的梯度上加一个随机的微小扰动。
可以参考这篇报道
吴恩达导师Michael I.Jordan学术演讲:如何有效避开鞍点(视频+PPT)-36氪 (36kr.com)