优化算法以加快训练的速度
1. mini-batch
把训练集划分成小点的子集(mini-batch)
X{1}表示第一个mini-batch
X(1)第1个样本
X[1]第一层的输入
1.1 mini-batch梯度下降方法过程:每次对一个mini-batch进行计算,包括J, w都是针对一个子集的
epoch:一代,表示遍历了整个数据集(而不是一个子集)
1.2 使用mini-batch的代价函数变化:每次迭代处理的是一个mini-batch,而代价函数也是指J{t}
1.3如何选择min-batch的大小
太大的话每次迭代耗时太长,太小的话每次只处理少量效率低(失去了向量加速的优势)
2. 指数加权平均(指数加权移动平均)exponentially weighted average
vt可以看作是前多少天的温度平均值。因为Vt虽然是包含1~t天的温度,但由于b的次方太大会导致前面几天的温度对t的影响很小,几乎为0
2. 做偏差修正bias correct
开始的时候设置v0=0,容易导致前期的预测会比较实际的小很多,估计不准确
所以用vt/1-bt 来计算(进行偏差修正),当t很大时,分母接近于1,所以后期紫线与绿线会重合
3. 优化梯度下降算法
- 从某个点出发,向最小值前进时,会出现一定的波动:减少波动,纵向快一点,而横向快一点
- 无法使用更大的学习率,因为可能会偏离函数范围
3.1动量梯度下降法: momentum
3.2 RMSprop : root mean square prop
3.3 Adam算法 :momentum与RMSprop的结合,常用的方法
3.4 学习率衰减:随时间逐渐减少学习率
为什么:如果一直用比较大的学习率,当靠近最小值时,结果可能会在较大范围内进行浮动(不易收敛),而不是在很接近最小值的小范围
重要性:不是最开始的重点,可以先设置一个固定的,先调整其它的
4. 局部最优
- 这不是一个问题,要找到一个局部最优点,需要它在各个维度都是最优的(比如都是凹/凸),如果维度很大,这是很难的
- 但是找到鞍点,还是比较容易的(各维导数为0)
存在平滑导致变化慢的问题,不过我们有加快的方法(上面~)
原文地址:https://www.cnblogs.com/coolqiyu/p/8573056.html