Optimization 神经网络优化问题

103 阅读4分钟

关于判断local minima和saddle point

critical point: gradient为0的点 local minima和saddle point都是微分为0的点

local minima和saddle point的区别是后者还是可以有方向可走,前者不知道往哪个方向走,因为前者四周方向都是往loss升高的方向走。

截屏2024-10-22 10.20.26.png

通过hessian来判断是哪一种类型的critical point 截屏2024-10-17 18.17.59.png 第一个式子是将该点的loss function泰勒展开。不可能也不需要遍历所有的v,只需要看这个hessian矩阵里面的所有值。但是实际操作中基本不可能计算这个Hessian矩阵,里面的计算量太大。

Why using batch 为什么需要用批量训练

Larger batch size does not require longer time to compute gradient(unless batch size is too large) 批量大不一定导致梯度更新所需的时间增加(因为有gpu可以平行运算,除非批量非常非常大) 截屏2024-10-21 20.47.27.png

Smaller batch requires longer time for one epoch(longer time for seeing all data once) 左边的图是不同批量大小对应要更新一次梯度的时间,右边的图是不同批量大小所对应要更新一个epoch所花费的时间。 截屏2024-10-21 20.49.56.png

  • Smaller batch size has better performance
  • "Noisy" update is better for training

关于用了batch后为什么会效果更好的其中一个原因如下图所示,由于用了batch后,每次其实是太不同的loss function上更新,比如在l1上走到了局部最优解不一定在l2也卡住。 截屏2024-10-21 20.54.47.png

如图,这里面有两个loss function的Minima点,其中Flat Minima的点是直觉上觉得比较好的点,sharp Minima是比较差的。然后可能由于testing的样本分布的原因,在训练集上的Minima点不一定是测试集上的Minima的点。然后又由于batch的loss function比较随机,比较容易走出sharp minima,所以比较容易走到flat minima,所以可能这就是在batch上训练的时候得到的modle在testingset上表现良好。 截屏2024-10-21 21.01.02.png

Momentum 动量

模拟物理世界里从高处往下滚球的过程,由于有动量的关系,球并不会卡在saddle point,在图中,假如动量够大,甚至可以翻过那个小山丘继续往下走 截屏2024-10-21 21.12.46.png

下一步前进的方向同时取决于前一步走的方向和当前的梯度方向 截屏2024-10-21 21.17.21.png

将式子代入后你也可以说Momentum是过去梯度的总和 截屏2024-10-21 21.17.21.png

Adaptive learning rave 自适应学习率

当随着迭代次数增加,loss值不变的时候不一定是因为卡在saddle point或者local minema,如图,可能就是在山谷这里来回震荡。 截屏2024-10-21 21.27.03.png

如图,我们希望在gradient方向比较陡峭时候学习率小点,在gradient比较平缓的时候gradient大点。然后在图右下角的式子里我们希望这个学习率是Parameter dependent的。 截屏2024-10-22 08.09.15.png

Adagrad:每次用学习率除于以往的根号平均梯度平方和 截屏2024-10-22 08.14.47.png

比如在图中,在1方向上整个loss相对比较平缓,算出来的gradient就比较小,所以它的root mean square就比较小,然后一除所得到的learning rate就比较大。2方向上则相反,是我们想要的结果。 截屏2024-10-22 08.17.36.png

RMSProp 截屏2024-10-22 08.21.55.png

如图,在上半段比较平缓的时候,算出来梯度小,所以parameter算出来也小。完了在中半段梯度大的时候,如果这个阿尔法参数设置比较小,就是让此时此刻的梯度影响比较大,然后得到的parameter比较大,这个时候的learning rate就会比较小。 ![截屏2024-10-22 08.24.08.png](p0-xtjj-private.juejin.cn/tos-cn-i-73…

Learning Rate Scheduling

截屏2024-10-22 08.30.24.png

  • learning Rate Scheduling: 随着时间增加,learning rate会减小
  • Warm up: learning rate先减小后增加。可以理解在前半段的时候,这个parameter是由以往算过的gradient决定的,但是在前面的时候算过的gradient比较小,对于error surface理解比较浅,我们把学习率设置大一点让它自己探索。 截屏2024-10-22 08.31.41.png

root mean square只考虑gradient的大小 momentum考虑了gradeint的方向 截屏2024-10-22 08.42.26.png

Batch nomalization

当input的feature里每个dimention的值,它的scale差距很大的时候,它会产生如图所示的error surface,也就是它不同方向的斜率非常不同。想办法给不同的dimention同样的数值范围,它就可以制造比较好的error surface,让training变得容易一点。

截屏2024-10-22 09.50.53.png

  • 将该特征上的每个值减去均值后/标准差
  • 做完这个normalization后会得到在该特征上的平均值是0 image.png

Batch normalizaton on trainingset: image.png