吴恩达深度学习笔记(4)---加速神经网络训练速度的优化算法
机器学习的应用是一个高度依赖经验,不断重复的过程,需要训练很多模型才能找到一个确实好用的。
小批量梯度下降算法:
矢量化可以有效计算m个算例而不需要for循环,因此我们需要将所有的训练样例放入巨型矩阵中。但是当数据量超大时,计算时间仍需很久,可以考虑将训练集分为微小的训练集,即小批量训练集。
对于一个小的训练集进行下图计算,也叫做训练集的一次遍历。
梯度下降过程中,代价函数是不断下降的,但是小批量的代价函数趋势是下降,过程中有噪声。
设置一个批量的参数,极端情况是一个小训练集的样本是所有样本,这种情况下,每次需要遍历全部的样本,另一个极端情况是一个样本一个集合(随机梯度下降),如下图,一个下降步长大,另一个随机噪声很大,虽然可以通过小的学习率改善,但是一般很难收敛到最低点,而是在最低点周围波动,同时失去了可以利用向量加速运算的机会
因此参数要取合适值
- 可以利用向量加速运算
- 不必每次遍历全部的样本再进行梯度下降
参数的选择
- 当样本数小于2000时,不需要用
- 其他情况下可以设置2的幂次,常见的为:64、128、256、512
指数加权(滑动)平均(基本理论):
指数加权平均的函数:
当增大,曲线右移,更加平滑。
假设样本有100个,将指数加权平均的函数展开可得下式,所有系数之和等于或接近1。
在算法开始初始值设置为0时,将会导致前几个数字结果不能很好拟合
在算法估算初期用代替。
动量(动量梯度下降)
他比标准梯度下降算法更快,算法主要计算梯度的指数加权平均,之后使用这个梯度过更新权重。
梯度下降算法产生的这种上下震荡会减慢梯度下降的速度,并且不能用较大的学习率,否则会超调。因此希望在纵轴上减慢学习速度,在横轴上加快学习速度
上述方法可以让梯度下降的每一步变得平滑,算法对于一些问题有效,但是对于碗型的函数
,由于加速度使速度变快,但是小于1相当于摩檫力,所以球不会无线加速。
RMSprop均方根传递:
我们希望在纵轴方向上学习速度减慢,在横轴方向上保持不变或者加快
适应性矩估计(adam)算法优化:
学习速率衰减:
缓慢的降低学习率,在初始阶段取较大值,步长大,随着学习率下降,步长变小,可以收敛于一点。
局部最优解问题:
如果我们建立一个神经网络,通常梯度为零的点,并不是如左图中的局部最优点,而是右图中的鞍点