李宏毅机器学习笔记-网络设计技巧
1 局部最小
- Loss在局部最小值或者鞍点处,梯度为0,因此没法继续下降。
- 在局部最小值处,没有路可走,无法逃出来,但是在鞍点处,是可以走出来的,因此在梯度为0处要判断是否是鞍点。
1.1 利用Hessian矩阵判断鞍点
将Loss方程泰勒展开,其中二次项的系数矩阵,就是Hessian矩阵:
如下图所示当Hessian矩阵是正定阵或负定阵时,该点是局部最小值,否则,该点是鞍点。
1.2 实例
如下图所示,将w1,w2以及loss画在同一张图中,其中颜色越深代表loss越大,可以看出,在原点(0,0)出是鞍点,因为朝向135度方向走,loss会变大,朝向45度方向走,loss变小,即可以认为该点处的H矩阵,部分含有大于0的特征值,部分含有小于0的特征值。
在找到了 鞍点之后,我们可以利用鞍点找到L下降的方向:
方法就是找到特征值小于0时,对应的特征向量,沿着这个特征向量的方向前进,就可以让L下降
2 Batch与动量
batch方法是将数据分为N个小批次,分别进行参数更新,每个epoch会一次性看所有batch,到下一次epoch时,会shuffle一次,保证每次epoch下的batch不同。
batch-size 会影响训练的效果,当batch-size很大时,如下图左所示,可以发现,参数并没有更新很多次,而且参数最终的结果离最优值很远;当batch-size很小时,如下图右所示,参数更新了很多次,而且参数的轨迹在向最优值靠近,但是轨迹表面很不光滑。
除此之外,当batch-size很小时,参数更新一次的时间很短,因为数据量小;当batch-size很大时,参树更新一次的时间很长;
但是,对于一个epoch而言(即看完所有数据),batch-size很小时,完成一个epoch的时间长,batch-size很大时,完成一个epoch的时间短。
从下图的结果来看,在不同的数据集上,small batch有较好的训练结果
在利用大batch-size训练时,遇到的critical point,不一定在小batch-size训练时也遇到。
这篇论文通过不同的数据集,实验了不同的batch-size下,训练集与测试集的准确率
small batch-size 与 large batch-size 优缺点比较
2.2 动量
梯度下降加动量:
动量:上一次梯度更新的大小与方向
当使用梯度下降加动量时,原先在平坦的地方,单纯的梯度下降可能停滞,但是加上动量后,就有可能继续前进。
3 学习率
及时在没有critical point时,训练的效果也可能不够好
Adagrad算法:
RMSProp算法
|