在critical point(g=0)的地方,绿色方框的这一项会变成0,但是红色框的这项不会变为0.
当H是的值全是正数,就是local minima;当H的值全是负数,就是local maxima;当H的值有正有负,就是saddle point。
g是一次微分,hessian是 二次微分
当我们遇到g已经为0,模型无法进行下一步更新,但是又没有达到最低值的时候,可以用H来做。二次微分的特征值入如果出现负数,那就会把误差减小。
下面是一个简单的模型,没有bias(常数项b),y^是label(真实值,此处为1),y是预测值,x是输入(这里为1)。根据这个等高线图可以看出,原点的地方是一个saddle ,分别像第一象限和第三象限有一个minima (局部最小),第二象限和第四象限就是比较高的。我们在检测出来saddle的时候如何找到loss最小的minima那边呢?
在这里,当我们的入为-2的时候,只要沿着u(特征向量)的方向就能找到minima。但是这种使用二次微分的情况在实际应用中的很少见的,因为这个运算量太大了。
实际上local minima不是很常见,很多时候都不是卡在local minima,而是卡在了saddle 的地方。
GPU有平行运算的能力,当我们的batch size在1-1000左右,运算时间几乎没有什么变化,但是再增大时间就会增加。
在这里,我们可以发现,当只有一个batch(N)的时候,或许耗时会比一个资料一个batch(noisy)小。
但是从训练的结果来看,batch size比较小还是比大的准确度要高。
这里的问题是因为我们的optimization不够好。
在full batch的时候,当我们遇到gradient为0 的时候(因为只进行一次参数更新),训练就会停止,而不进行后续的训练。但是我们用small batch的时候,因为我们每次都进行参数更新,所以在上一次gradient为0的时候,这次的参数就不为0(因为两次的参数不一样,所以两次的方程不一样),那我们就能继续进行更新。所以 小的batch会得到很好的准确度。
小的batch会在测试的时候做的更好,大的batch会在测试的时候做的不怎么样。
batch size是一个我们需要去调整的超参数(hyperparameter)
Momentum
当物理世界的一个小球从高处滚到局部最低点的时候,不会停止在那里,而是会有一个惯性让它继续向原来的方向走,或许会走出局部最低点到另一个局部最低点。
在这里我们了解到之前的一般梯度下降是这样的:
加上movement之后,我们需要加上上次行动。