深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

Posted multiangle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)相关的知识,希望对你有一定的参考价值。

深度学习笔记(一):logistic分类
深度学习笔记(二):简单神经网络,后向传播算法及实现
深度学习笔记(三):激活函数和损失函数
深度学习笔记:优化方法总结
深度学习笔记(四):循环神经网络的概念,结构和代码注释
深度学习笔记(五):LSTM
深度学习笔记(六):Encoder-Decoder模型和Attention模型


最近在看Google的Deep Learning一书,看到优化方法那一部分,正巧之前用tensorflow也是对那些优化方法一知半解的,所以看完后就整理了下放上来,主要是一阶的梯度法,包括SGD, Momentum, Nesterov Momentum, AdaGrad, RMSProp, Adam。 其中SGD,Momentum,Nesterov Momentum是手动指定学习速率的,而后面的AdaGrad, RMSProp, Adam,就能够自动调节学习速率.
二阶的方法目前我水平太差,看不懂….就不放上来了。


BGD

即batch gradient descent. 在训练中,每一步迭代都使用训练集的所有内容. 也就是说,利用现有参数对训练集中的每一个输入生成一个估计输出 yi^ ,然后跟实际输出 yi 比较,统计所有误差,求平均以后得到平均误差,以此来作为更新参数的依据.

具体实现:
需要:学习速率 ϵ , 初始参数 θ
每步迭代过程:
1. 提取训练集中的所有内容 x1,,xn ,以及相关的输出 yi
2. 计算梯度和误差并更新参数:

ĝ +1nθiL(f(xi;θ),yi)θθϵĝ 

优点:
由于每一步都利用了训练集中的所有数据,因此当损失函数达到最小值以后,能够保证此时计算出的梯度为0,换句话说,就是能够收敛.因此,使用BGD时不需要逐渐减小学习速率 ϵk

缺点:
由于每一步都要使用所有数据,因此随着数据集的增大,运行速度会越来越慢.


SGD

SGD全名 stochastic gradient descent, 即随机梯度下降。不过这里的SGD其实跟MBGD(minibatch gradient descent)是一个意思,即随机抽取一批样本,以此为根据来更新参数.

具体实现:
需要:学习速率 ϵ , 初始参数 θ
每步迭代过程:
1. 从训练集中的随机抽取一批容量为m的样本 x1,,xm ,以及相关的输出 yi
2. 计算梯度和误差并更新参数:

ĝ +1mθiL(f(xi;θ),yi)θθϵĝ 

优点:
训练速度快,对于很大的数据集,也能够以较快的速度收敛.

缺点:
由于是抽取,因此不可避免的,得到的梯度肯定有误差.因此学习速率需要逐渐减小.否则模型无法收敛
因为误差,所以每一次迭代的梯度受抽样的影响比较大,也就是说梯度含有比较大的噪声,不能很好的反映真实梯度.

学习速率该如何调整:
那么这样一来, ϵ 如何衰减就成了问题.如果要保证SGD收敛,应该满足如下两个要求:

k=1ϵk=k=1ϵ2k<
而在实际操作中,一般是进行线性衰减:
ϵk=(1α)ϵ0+αϵτα=kτ
其中 ϵ0 是初始学习率, ϵτ 是最后一次迭代的学习率. τ 自然代表迭代次数.一般来说, ϵτ 设为深度学习笔记:SGDMomentumRMSpropAdam优化算法解析

深度学习笔记:SGDMomentumRMSpropAdam优化算法解析

深度学习笔记:Encoder-Decoder模型和Attention模型

优化算法比较的实验结果比较(BGD,SGD,MBGD,Momentum,Nesterov,Adagrad,RMSprop)

深度学习中的优化算法之SGD

深度学习的优化方法 总结