关于判断local minima和saddle point
critical point: gradient为0的点 local minima和saddle point都是微分为0的点
local minima和saddle point的区别是后者还是可以有方向可走,前者不知道往哪个方向走,因为前者四周方向都是往loss升高的方向走。
通过hessian来判断是哪一种类型的critical point
第一个式子是将该点的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可以平行运算,除非批量非常非常大)
Smaller batch requires longer time for one epoch(longer time for seeing all data once) 左边的图是不同批量大小对应要更新一次梯度的时间,右边的图是不同批量大小所对应要更新一个epoch所花费的时间。
- Smaller batch size has better performance
- "Noisy" update is better for training
关于用了batch后为什么会效果更好的其中一个原因如下图所示,由于用了batch后,每次其实是太不同的loss function上更新,比如在l1上走到了局部最优解不一定在l2也卡住。
如图,这里面有两个loss function的Minima点,其中Flat Minima的点是直觉上觉得比较好的点,sharp Minima是比较差的。然后可能由于testing的样本分布的原因,在训练集上的Minima点不一定是测试集上的Minima的点。然后又由于batch的loss function比较随机,比较容易走出sharp minima,所以比较容易走到flat minima,所以可能这就是在batch上训练的时候得到的modle在testingset上表现良好。
Momentum 动量
模拟物理世界里从高处往下滚球的过程,由于有动量的关系,球并不会卡在saddle point,在图中,假如动量够大,甚至可以翻过那个小山丘继续往下走
下一步前进的方向同时取决于前一步走的方向和当前的梯度方向
将式子代入后你也可以说Momentum是过去梯度的总和
Adaptive learning rave 自适应学习率
当随着迭代次数增加,loss值不变的时候不一定是因为卡在saddle point或者local minema,如图,可能就是在山谷这里来回震荡。
如图,我们希望在gradient方向比较陡峭时候学习率小点,在gradient比较平缓的时候gradient大点。然后在图右下角的式子里我们希望这个学习率是Parameter dependent的。
Adagrad:每次用学习率除于以往的根号平均梯度平方和
比如在图中,在1方向上整个loss相对比较平缓,算出来的gradient就比较小,所以它的root mean square就比较小,然后一除所得到的learning rate就比较大。2方向上则相反,是我们想要的结果。
RMSProp
如图,在上半段比较平缓的时候,算出来梯度小,所以parameter算出来也小。完了在中半段梯度大的时候,如果这个阿尔法参数设置比较小,就是让此时此刻的梯度影响比较大,然后得到的parameter比较大,这个时候的learning rate就会比较小。 ![截屏2024-10-22 08.24.08.png](p0-xtjj-private.juejin.cn/tos-cn-i-73…
Learning Rate Scheduling
- learning Rate Scheduling: 随着时间增加,learning rate会减小
- Warm up: learning rate先减小后增加。可以理解在前半段的时候,这个parameter是由以往算过的gradient决定的,但是在前面的时候算过的gradient比较小,对于error surface理解比较浅,我们把学习率设置大一点让它自己探索。
root mean square只考虑gradient的大小
momentum考虑了gradeint的方向
Batch nomalization
当input的feature里每个dimention的值,它的scale差距很大的时候,它会产生如图所示的error surface,也就是它不同方向的斜率非常不同。想办法给不同的dimention同样的数值范围,它就可以制造比较好的error surface,让training变得容易一点。
- 将该特征上的每个值减去均值后/标准差
- 做完这个normalization后会得到在该特征上的平均值是0
Batch normalizaton on trainingset: