Gradient Descent Variants
http://sebastianruder.com/optimizing-gradient-descent/
(1)Batch gradient descent: 计算整个数据集上, Cost function 对于parameters的偏导,而后更新梯度;对于convex error surfaces能够得到global minimum,而对于non-convex error surfaces能得到local minimum
(2) Stochastic gradient descent: 计算单个sample上,Cost function对于parameters的偏导,而后更新梯度。相较于BGD,SGD更easy从一个local minimum跳到另一个local minimum(可是当learning rate过小时。performance便和BGD类似)。High variance,更easy使得loss curve产生震荡
(3)Mini-batch gradient descent: 计算whole dataset某个子集(通常设置为50-256)对于paremeters的偏导,而后更新梯度;比SGD更稳定。更易收敛。能够使用高效的矩阵化trick。使得在runing的时候更加efficient
(4)面临几大问题:
1.Learning rate非常难选择,太小了收敛非常慢,太大了easy在local minimum周围晃动。甚至发散
2.在训练时当loss一直在某个范围摆动时,这时候应该减小learning rate,可是这个trick受数据集属性或者模型的capacity等因素的影响较大,须要觉得的精调
3.所用的參数更新都是基于同一个learning rate的,可是当数据集非常稀疏,或者features出现的频率有非常大不同。这时候我们会希望用较大的learning rate来更新rarely出现的feature,即希望实现feature-wise的learning rate的调整
4.另一个问题时saddle points 的问题,例如以下图:
下文在SGD指的是Mini-batch gradient descent,事实上在其它非常多地方也是这样
Gradient descent optimization algorithms
Newton’s method.对于高维问题infeasible。所以以下不讨论
(一般设置为0.9),然后加上此时的梯度。若两个梯度的方向类似。则会加速在这一方向上的移动,即加速了收敛:
的梯度推断),而后再做出修正,Nesterov在非常多RNN的tasks中都非常有效:
蓝色箭头是Momentum:首先计算当前梯度(短箭头),然后再加上上一步的梯度(长箭头)。棕色箭头是的梯度,即预判,然后再做出修正(绿色箭头)