SGD
单个样本进行学习
组成mini-batch进行学习
- batch的选择影响训练速度已经,优化效果;
- 通常来说batch越大则更有机会收敛到全局最优;
设需要更新参数为,损失函数为
(w),一个batch包含
个样本则:
记一个batch的总的损失为:则:
(可以是向量,则就相当于矩阵求导)
SGD with momentum
动量类似于物理中的惯性,引入动量可以使得在学习过程中有更大几率脱离局部最优点,并且能够加快训练过程。
设初始动量为,动量参数为
,学习率为
,更新参数为
,损失函数为
- 可以看到,动量在上坡不断减小;在下坡不断增大;和物理常=场景类似;
- 参数更新量由当前梯度和上一个动量共同决定;
令
,则:
设初始动量为,动量参数为
,学习率为
,更新参数为
,损失函数为
- NAG 把梯度计算放在对参数施加当前速度之后。
这个“提前量”的设计让算法有了对前方环境“预判”的能力。Nesterov 动量可以解释为往标准动量方法中添加了一个修正因子。
自适应梯度AdaGrad
背景
解决学习率自适应问题;
- 通常来说,不常出现的特征具有很高的信息量和辨别能力(往往这类特征具有决定性作用);
- 给常出现的特征小的学习率,不常出现的特征大的学习率;
- 对于稀疏的数据它的表现很好;
- 对低频的参数做较大的更新,对高频的做较小的更新;
- 特征频率体现在参数变换频率上?
- 频率大小体现在梯度大小上?
- 理解方式:对于常出现的特征则会导致该参数不断更新,所以最终其学习率会不断降低;对于低频特征,相对于高频特征对应的参数来说,虽然学习率也会下降(学习足够之后,lr下降是必要的),但是其降低速度明显慢于高频特征对应的参数。(自己的理解)
更新规则
其中:
参考:
优化算法
深度学习,优化器算法