Optimization(When gradient is small)

Critical Point

training fails because

此部分仅讨论Optimization,即如何将梯度下降做的更好,首先了解为什么Optimization会失败。
image.png

常常在做Optimization的时候,会发现,随著你的参数不断的更新,training的loss不会再下降,但是这个loss并不是较优解,就像之前所描述,将deep的network,跟linear的model,或与shallow network 比较,发现并没有比后述的model的Loss更低,所以Optimization显然是有问题的。 有时候也会出现,一开始你的model就train不起来,一开始你不管怎麼update你的参数,你的loss通通都掉不下去,那这个时候到底发生了什麼事情呢? 过去常见的一个猜想,是因為我们现在走到了一个地方,这个地方参数对loss的微分為零,当你的参数对loss微分為零的时候,gradient descent就没有办法再update参数了,这个时候training就停下来了,loss当然就不会再下降了。 讲到gradient為零的时候,大家通常脑海中最先浮现的,可能就是local minimum,所以常有人说做deep learning,用gradient descent会卡在local minima,然后gradient descent不工作。

【注】:但是如果有一天要写跟deep learning相关paper的时候,千万不要讲卡在local minima这种事情,别人会觉得你非常没有水准。
image.png
如上图,并不是所有的梯度为零的点都是local minimum,也有可能是saddle point(鞍点),可以说卡在critical point的地方。

为什么我们想要知道到底是卡在local minima,还是卡在saddle point呢

  • 如果是卡在local minima,那可能就没有路可以走了,因為四周都比较高,你现在所在的位置已经是最低的点,loss最低的点了,往四周走 loss都会比较高,你会不知道怎麼走到其他的地方去。
  • 但saddle point就比较没有这个问题,如果你今天是卡在saddle point的话,saddle point旁边还是有路可以走的,还是有路可以让你的loss更低的,你只要逃离saddle point,你就有可能让你的loss更低

所以鉴别critical point到底是local minima还是saddle point,是一个值得去探讨的问题。

那怎麼知道今天一个critical point,到底是属于local minima,还是saddle point呢?

Tayler Series Approximation

如果给定某一组参数,比如说下图蓝色的三:Local minimum and saddle point - 图3,在附近的loss function,它写出来就像是这个样子(泰勒展开):
image.png
【注】:H表示为Hessian(海森矩阵),对任一未知数的二次微分。
image.png
如上图,在critical point的地方g为0(梯度为0),则三:Local minimum and saddle point - 图6它可以被近似為加上红色的这一项,则可以根据海森矩阵来判断,在附近的error surface,是一个local minima,亦或是一个local maxima,还是一个saddle point。
接下来便是如何根据Hessian,来判断θ’附近的地貌。
image.png
如上图所述:将任意v带入公式实际去求,但是实际情况并不允许。
image.png
【结论】:线性代数理论中,对所有的v而言,都大於零,那这种矩阵叫做positive definite (正定矩阵),positive definite的矩阵,它所有的eigen value(特征值)都是正的。

所以如果你今天算出一个hessian,你不需要把它跟所有的v都乘看看,你只要去直接看这个H的eigen value,如果你发现:

  • 所有eigen value都是正的,那就代表Critical point就是local minima。
  • 对所有的v而言小于零,H便是negative definite,代表所有eigen value都是负的,就保证他是local maxima。
  • 如果eigen value有正有负,那就代表是saddle point。

举例说明:

我们现在有一个史上最废的network,它只有一个neuron,而且这个neuron,还没有activation function,所以x乘上以后三:Local minimum and saddle point - 图9之后就输出,然后再乘上三:Local minimum and saddle point - 图10然后就再输出,就得到最终的数据就是y。总之这个function非常的简单 我们有一个史上最废的training set,我们只有一笔data,这笔data是x,是1的时候,它的level是1 ,所以输入1进去,你希望最终的输出跟1越接近越好 而这个史上最废的training,它的error surface,也是有办法直接画出来的,因為反正只有两个参数 w₁ w₂,连bias都没有,假设没有bias,只有w₁跟w₂两个参数,这个network只有两个参数 w₁跟w₂,那我们可以穷举所有w₁跟w₂的数值,算出所有w₁ w₂数值所代来的loss,然后就画出error surface 长这个样:

image.png

四个角落loss是高的,在这个图上有一些critical point,(0,0)原点的地方是critical point,然后事实上,右上三个黑点也是一排critical point,左下三个点也是一排critical point 如果更进一步要分析,是saddle point,还是local minima,原点这个地方是saddle point,為什麼是saddle point呢? 往左上方向走 loss会变大,往右下方向走 loss会变大,往左下这个方向走 loss会变小,往右下这个方向走 loss会变小,所以是一个saddle point 而这两群critical point,它们都是local minima,然后在原点的地方,有一个saddle point,这个是我们把error surface,暴力所有的参数,得到的loss function以后,画出error surface,可以得到这样的结论。 现在假设如果不暴力所有可能的loss,如果要直接算说一个点,是local minima,还是saddle point的话 怎麼算呢?

image.png

我们可以把loss的function写出来,这个loss的function 这个L是: 三:Local minimum and saddle point - 图13 它的gradient求出来,w₁对L的微分,w₂对L的微分写出来是这个样子: 三:Local minimum and saddle point - 图14 上式就是所谓的gradient,什麼时候gradient会零呢,什麼时候会到一个critical point呢? 举例来说 如果w₁=0 w₂=0,就在圆心这个地方,如果w₁代0 w₂代0,w₁对L的微分 w₂对L的微分,算出来就都是零,这个时候我们就知道说,原点就是一个critical point,但它是local maxima,它是local maxima,local minima,还是saddle point呢,那你就要看hessian才能够知道了。

image.png
如上图三:Local minimum and saddle point - 图16即为海森矩阵,它是local minima,还是saddle point呢,那你就要看这个矩阵的eigen value,算一下发现,这个矩阵有两个eigen value,2跟-2,eigen value有正有负,代表saddle point。
image.png
与此同时,在遇到鞍点(saddle point)的时候,海森矩阵还揭示了参数更新的方向,如下图所示:
image.png
即在特征是为负的特征向量的方向上进行参数更新。

但是在实际的implementation中,你几乎不会真的把Hessian算出来,需要的运算量非常非常的大,更遑论你还要把它的eigen value,跟eigen vector找出来,所以在实际操作中,你几乎没有看到,有人用这一个方法来逃离saddle point。 当然别的更好的逃离saddle point的方法,他们的运算量都比要算这个H,还要小很多,那今天之所以我们把,这个saddle point跟 eigen vector,跟Hessian的eigen vector拿出来讲,是想说,如果是卡在saddle point,也许没有那麼可怕,最糟的状况下你还有这一招,可以告诉你要往哪一个方向走。

「扩展」

image.png

这个故事发生在1543年,那一年君士坦丁堡沦陷,君士坦丁堡本来是东罗马帝国的领土,然后被鄂图曼土耳其帝国佔领了,然后东罗马帝国就灭亡了,在鄂图曼土耳其人进攻君士坦丁堡的时候,那时候东罗马帝国的国王,是君士坦丁十一世,他不知道要怎麼对抗土耳其人,有人就献上了一策,找来了一个魔法师叫做狄奥伦娜,这是真实的故事,出自三体的故事,狄奥伦娜是谁呢,他有一个能力跟张飞一样,张飞不是可以万军从中取上将首级如探囊取物吗,狄奥伦娜也是一样,他可以直接取得那个苏丹的头,他可以从万军中取得苏丹的头,大家想说狄奥伦娜怎麼这麼厉害,他真的有这麼强大的魔法吗,所以大家就要狄奥伦娜,先展示一下他的力量,这时候狄奥伦娜就拿出了一个圣杯,大家看到这个圣杯就大吃一惊,為什麼大家看到这个圣杯,要大吃一惊呢,因為这个圣杯,本来是放在圣索菲亚大教堂的地下室,而且它是被放在一个石棺裡面,这个石棺是密封的,没有人可以打开它。但是狄奥伦娜他从裡面取得了圣杯,而且还放了一串葡萄进去,君士坦丁十一世為了要验证,狄奥伦娜是不是真的有这个能力,就带了一堆人真的去撬开了这个石棺,发现圣杯真的被拿走了,裡面真的有一串新鲜的葡萄,就知道狄奥伦娜真的有这个万军从中取上将首级的能力,那為什麼迪奥伦娜可以做到这些事呢,那是因為这个石棺你觉得它是封闭的,是因為你是从三维的空间来看,这个石棺是封闭的,没有任何路可以进去,但是狄奥伦娜可以进入四维的空间,从高维的空间中,这个石棺是有路可以进去的,它并不是封闭的,至於狄奥伦娜有没有成功刺杀苏丹呢,你可以想像一定是没有嘛,所以君坦丁堡才沦陷,那至於為什麼没有,大家请见於三体。

image.png
三维的空间来看,是没有路可以走的东西,在高维的空间中是有路可以走的,error surface会不会也一样呢?

我的这边现在有一个local minima,但是会不会这个local minima,只是在二维的空间中,看起来是一个local minima,在更高维的空间中,它看起来就是saddle point,在二维的空间中,我们没有路可以走,那会不会在更高的维度上,因為更高的维度,我们没办法visualize它,我们没办法真的拿出来看,会不会在更高维的空间中,其实有路可以走的,那如果维度越高,是不是可以走的路就越多了呢,所以今天我们在训练一个network的时候,我们的参数往往动輒百万千万以上,所以我们的error surface,其实是在一个非常高的维度中,对不对,我们参数有多少,就代表我们的error surface的维度有多少,参数是一千万就代表error surface的维度是一千万,竟然维度这麼高,会不会其实,根本就有非常多的路可以走呢,那既然有非常多的路可以走,会不会其实local minima,根本就很少呢。 而实际上,如果你自己做一些实验的话,也支持这个假说:

image.png

上图是训练某一个network的结果,每一个点代表某个network训练完之后,把它的Hessian拿出来进行计算的结果,所以这边的每一个点,都代表一个network。我们训练某一个network使其gradient很小,卡在critical point,把那组参数拿出来分析,看看它比较像是saddle point,还是比较像是local minima。

  • 纵轴代表training的时候的loss,就是我们今天卡住了,那个loss没办法再下降了,那个loss是多少,那很多时候,你的loss在还很高的时候,训练就不动了,就卡在critical point,那很多时候loss可以降得很低,才卡在critical point,这是纵轴的部分。
  • 横轴的部分是minimum ratio,minimum ratio是eigen value的数目分之正的eigen value的数目如果所有的eigen value都是正的,代表我们今天的critical point,是local minima,如果有正有负代表saddle point。在实际情况下上你会发现说,你几乎找不到完全所有eigen value都是正的critical point,你看这边这个例子裡面,这个minimum ratio代表eigen value的数目分之正的eigen value的数目,最大也不过0.5到0.6间而已,代表说只有一半的eigen value是正的,还有一半的eigen value是负的。

所以今天虽然在这个图上,越往右代表我们的critical point越像local minima,但是它们都没有真的,变成local minima,就算是在最极端的状况,我们仍然有一半的case,我们的eigen value是负的,这一半的case eigen value是正的,代表说在所有的维度裡面有一半的路,这一半的路 如果要让loss上升,还有一半的路可以让loss下降。 所以从经验上看起来,其实local minima并没有那麼常见,多数的时候你觉得你训练到一个地方,然后你的参数不再update了,往往是因為你卡在了一个saddle point。