上一篇文章介绍了什么是误差反向传播和梯度下降:https://blog.csdn.net/qq_38232171/article/details/103288345
本文将对现有的一些梯度下降的优化算法进行总结和对比。
BGD:上文中的公式其实算是BGD,就是利用了全部数据进行梯度计算,缺点是计算量大,且不允许在线更新模型,优点是考虑了所有数据,拟合过程稳定。
SGD:随机梯度下降,计算梯度时随机选择一条数据进行计算,每次更新的速度快,但是波动性比较大,容易收敛到局部最优。
MBGD:综合BGD和SGD的优点,使用小批量数据进行梯度计算。
Momentum:加入动量的梯度计算方式,即当前步骤计算梯度时考虑上一步结果的影响。更新参数时,增加上一步的影响因子,若当前梯度方向与上一步方向相近,则增强当前梯度下降的幅度,若当前梯度方向与上一步相反,则减少当前步骤梯度下降的幅度:
累积动量:,可以看出,如果方向相同,则动量会增加,如果方向相反,动量则减少。
更新参数:
图1. momentum梯度下降过程中动量的影响示意图【1】
Adagrad:无论是SGD,BGD,Momentum都有一个极大的缺点,所有参数的学习率是一致的,Adagrad的出现就是为了让学习率能适应不同的参数。学习率逐步下降,且参数梯度越大,下降的越快。使得训练过程中,初始时步长较大,随着训练的进行,越来越接近最优点,学习率的减少有助于收敛到最优点,但也可能过早导致梯度过小,提前结束训练。Adagrad的参数更新方式如下【2】
Adam:利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,而且加入了类似动量的影响,使用移动平均指数衰减的方式使之前时刻的累计动量对当前存在影响,且离的时刻越远,影响呈指数级衰减,且每次更新都有一个确定的范围,可以保证更稳定的参数更新,参数更新方式如下【3,4】:
参考文章
文中一些地方引用了其他作者的一些内容,在相应部分注明引用,也没有很规范的引用格式,若有冒犯请联系删除。
【1】https://blog.csdn.net/tsyccnh/article/details/76270707
【2】https://blog.csdn.net/program_developer/article/details/80756008
【3】https://blog.csdn.net/qq_30614451/article/details/93753322