优化算法总结
优化算法主要分为两大阵营:梯度下降学派和牛顿法学派。
关于两者的区别,我们引用下@金秉文 的回答:
比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的标的目的走一步,牛顿法在选择标的目的时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
批量梯度下降法
批量梯度下降法(Batch Gradient Descent)是梯度下降法最原始的形式,它在每次参数更新时城市使用上所有样本的信息:
\theta = \theta - \eta \cdot \nabla_\theta J( \theta)
可想而知,当样本很大时,其训练过程会很慢,但迭代次数会斗劲少。
随机梯度下降法
随机梯度下降法每次只使用一个样本的信息来更新参数,在样本很大的情况下,可能只用此中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比于批量梯度下降来说就快了很多了。
\theta = \theta - \eta \cdot \nabla_\theta J( \theta; x^{(i)}; y^{(i)})
但是,因为每次只操作一个样本的信息,不能保证每次迭代都向着整体最优化标的目的,也就是会曲折着前行。
这样做虽然会加快训练速度,但其准度会有所降低。
那么有没有算法能够兼具这两种方式的长处呢?
随机梯度下降其收敛是有理论保证,具体可参见:为什么随机梯度下降方式能够收敛? - 数学Mini-batch gradient descent
通用的做法是,我们可以将整体样本划分为多个Batch,此中每个Batch包含必然数量的样本(一般50到256之间),每一次我们只使用一个Batch来更新参数,这也是我们目前所遍及采用的方式。
但是变化到此刻,我们依然还有一些没有解决的问题:
[*]如何选择合适的学习速率?太大会阻碍收敛,太小会使得收敛过慢。
[*]自适应调整学习速率?
: An overview of gradient descent optimization algorithms
: 梯度下降法的三种形式BGD、SGD以及MBGD
: What's the difference between gradient descent and stochastic gradient descent?
页:
[1]