W:要训练的参数 J(W):代价函数 ∇WJ(W):代价函数的梯度 η:学习率
1.SGD(常用)
W = W−η⋅∇WJ(W;x(i);y(i))
2.Momentum:
γ:动力,通常设置为0.9
vt = γvt − 1 + η∇WJ(W)
W = W−vt
当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。
这样 可以加快小球的向下的速度。
3.NAG(Nesterov accelerated gradient):
vt = γvt − 1 + η∇WJ(W−γvt − 1)
W = W−vt
NAG在TF中跟Momentum合并在同一个函数tf.train.MomentumOptimizer中,可以通过参 数配置启用。 在Momentun中小球会盲目地跟从下坡的梯度,容易发生错误,所以我们需要一个更聪明的 小球,这个小球提前知道它要去哪里,它还要知道走到坡底的时候速度慢下来而不是又冲上另 一个坡。γvt−1会用来修改W的值,计算W−γvt−1可以表示小球下一个位置大概在哪里。从 而我们可以提前计算下一个位置的梯度,然后使用到当前位置。
4.Adagrad
i:代表第i个分类 t:代表出现次数 ϵ:的作用是避免分母为0,取值一般为1e-8 η:取值一般为0.01
gt,i = ∇WJ(Wi)
它是基于SGD的一种算法,它的核心思想是对比较常见的数据给予它比较小的学习率去调整 参数,对于比较罕见的数据给予它比较大的学习率去调整参数。它很适合应用于数据稀疏的数 据集。Adagrad主要的优势在于不需要人为的调节学习率,它可以自动调节。它的缺点在于,随着 迭代次数的增多,学习率也会越来越低,最终会趋向于0。
5.RMSprop
RMS(Root Mean Square)是均方根的缩写。γ:动力,通常设置为0.9 η:取值一般为0.001
E[g2 ]t:表示前t次的梯度平方的平均值
RMSprop借鉴了一些Adagrad的思想,不过这里RMSprop只用到了前t-1次梯度平方的平均 值加上当前梯度的平方的和的开平方作为学习率的分母。这样RMSprop不会出现学习率越来越低的问题,而且也能自己调节学习率,并且可以有一个比较好的效果。
Adadelta
使用Adadelta我们甚至不需要设置一个默认学习率,在Adadelta不需要使用学习率也可以达 到一个非常好的效果。
Adam
就像Adadelta和RMSprop一样Adam会存储之前衰减的平方梯度,同时它也会保存之前衰减 的梯度。经过一些处理之后再使用类似Adadelta和RMSprop的方式更新参数。
从各个参数优化方法来看,最先收敛的的两种方法的参考为:Adadelta,Adagrad