随机梯度下降
Last updated
Was this helpful?
Last updated
Was this helpful?
迭代中存在的各种问题:
学习率太大
学习率过早调小
不同参数学习率不同
SGD容易卡在鞍点
于是乎SGD很多改进版本出现了。
注意该链接中最后一个Saddle Point可视图,这个常遇到。
如何理解momentum: 原始的是沿着当前点的负梯度走,这个方向仅仅是当前点看上去下降最快的。之前的负梯度是站在之前点上看上去下降最快的方向。可否揉合一点之前的方向,形成的新方向岂不是更有大局观一点!so, the momentum!
GSA算法的核心原理非常简单:在迭代的每一步对单个样本的损失函数做线搜索。具体来说,我们对逻辑回归和softmax回归的交叉熵损失函数,推导出了一套仅用当前样本点的梯度信息来计算精确线搜索步长的近似公式。我们把利用这套近似公式得到的步长做时间平均来计算当前迭代步的学习率。这样做有两方面的好处:基于精确线搜索得到的步长包含了当前迭代点到全局极小的距离信息——接近收敛时步长比较小,反之则更大,因而保证收敛速度;另一方面平均策略使算法对离群点更鲁棒,损失下降曲线不至剧烈抖动,为算法带来了额外的稳定性。
以及MLAPP第13章 spare Linear modle,专门讲了 L1问题的各种求解,包括FISTA等。
Imgur网友通过可视化方法,对比了SGD, momentum, Nesterov, AdaGrad, AdaDelta, RMSProp等优化算法在Long Valley, Beale's Function及Saddle Point情况下的性质:
理解为: momentum :合并当前点的梯度和 之前几步梯度的累加(因为很多步以前的变成了 ,影响非常小) Nesterov momentum:当前点,再向当前累加的梯度冲出一段 ,到达新的点后求梯度, 再加上之前几步的梯度累加。
这个应该更好点吧
比对各种算法的速度和并行化。
《Fast Asynchronous Parallel Stochastic Gradient Decent》快速并行随机梯度下降 《Stochastic Gradient Descent Tricks》 和
NIPS 2016 异步SGD