本文讨论的优化问题指的是,给定目标函数f(x),咱们须要找到一组参数x(权重),使得f(x)的值最小。算法
如下内容假设读者已经了解机器学习基本知识,和梯度降低的原理。机器学习
SGD指stochastic gradient descent,即随机梯度降低。是梯度降低的batch版本。函数
对于训练数据集,咱们首先将其分红n个batch,每一个batch包含m个样本。咱们每次更新都利用一个batch的数据,而非整个训练集。即:性能
其中,η为学习率,gt为x在t时刻的梯度。 学习
这么作的好处在于:大数据
SGD方法的一个缺点是,其更新方向彻底依赖于当前的batch,于是其更新十分不稳定。解决这一问题的一个简单的作法即是引入momentum。优化
momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在必定程度上保留以前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,能够在必定程度上增长稳定性,从而学习地更快,而且还有必定摆脱局部最优的能力:spa
其中,ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,因为梯度可能会很大,因此初始值通常选为0.5;当梯度不那么大时,改成0.9。η 是学习率,即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。ρ 与 η 之和不必定为1。blog
这是对传统momentum方法的一项改进,由Ilya Sutskever(2012 unpublished)在Nesterov工做的启发下提出的。内存
首先,按照原来的更新方向更新一步(棕色线),而后在该位置计算梯度值(红色线),而后用这个梯度值修正最终的更新方向(绿色线)。上图中描述了两步的更新示意图,其中蓝色线是标准momentum更新路径。
公式描述为:
Adagrad实际上是对学习率进行了一个约束。即:
此处,对从1到
进行一个递推造成一个约束项regularizer,
,
用来保证分母非0
特色:
缺点:
Adadelta是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,可是进行了计算上的简化。Adagrad会累加以前全部的梯度平方,而Adadelta只累加固定大小的项,而且也不直接存储这些项,仅仅是近似计算对应的平均值。即:
在此处Adadelta其实仍是依赖于全局学习率的,可是做者作了必定处理,通过近似牛顿迭代法(求根点)以后:
其中,表明求指望。
此时,能够看出Adadelta已经不用依赖于全局学习率了。
特色:
RMSprop能够算做Adadelta的一个特例:
当时,
就变为了求梯度平方和的平均数。
若是再求根的话,就变成了RMS(均方根):
此时,这个RMS就能够做为学习率的一个约束:
特色:
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每一个参数的学习率。Adam的优势主要在于通过偏置校订后,每一次迭代学习率都有个肯定范围,使得参数比较平稳。公式以下:
其中,,
分别是对梯度的一阶矩估计和二阶矩估计,u和v为衰减率,u一般为0.9,v一般为0.999,能够看做对指望
,
的估计;
,
是对
,
的校订,这样能够近似为对指望的无偏估计。能够看出,直接对梯度的矩估计对内存没有额外的要求,并且能够根据梯度进行动态调整,而
对学习率造成一个动态约束,并且有明确的范围。
特色:
性能比较
损失曲面的轮廓和不一样优化算法的时间演化(Contours of a loss surface and time evolution of different optimization algorithms)
参考:
[1] Optimization Algorithms for Deep Learning
[2] Adam — latest trends in deep learning optimization
[3] Intro to optimization in deep learning: Momentum, RMSProp and Adam
[4] Gradient Descent based Optimization Algorithms for Deep Learning Models Training