随机梯度下降(stochastic gradient descent,SGD)
当样本数据过于庞大时,采用原来传统的梯度下降算法,训练时间过长,收敛太慢,所以使用SGD的方法来加快收敛,该方法伪代码如下:

每个参数更新时只使用一个样本,原先是使用所有样本,这样说来,该算法虽然大概率得不到全局最优解,但是当样本数量足够多时,总是能得到最优解附近的值,而且训练速度快。
后续在深度学习中广泛使用的mini-bach,每次更新参数使用几百个样本,这样做比使用一个样本大概率训练效果好些,而且训练速度也较快。伪代码如下:

关于该算法为何会收敛的问题:总的来说就是从expected loss用特卡洛(monte carlo)来表示计算,那batch GD, mini-batch GD, SGD都可以看成SGD的范畴。因为大家都是在一个真实的分布中得到的样本,对于分布的拟合都是近似的。那这个时候三种方式的梯度下降就都是可以看成用样本来近似分布的过程,都是可以收敛的!更详细的回答见:知乎李文哲的回答
附加自己的思考:由于优化目标是让损失函数达到最小,那么采用不同的batch进行训练,因为损失函数还是用的所有样本,但是参数更新时所用的batch不同,当然用全部样本的话,梯度下降一直朝着最优的方向进行,若只用部分样本虽然在训练过程中可能会绕圈子,但大致方向还是朝着最优解靠近,最终收敛到最优解附近。如Andrew NG中课件图中所示:

随机梯度下降(SGD)用于加速大规模数据集的训练过程,通过每次仅使用一个样本进行参数更新,虽然可能无法达到全局最优解,但在样本数量足够大时能逼近最优解。相比于传统的梯度下降,SGD训练速度快。随着深度学习的发展,mini-batch SGD成为常用方法,它在保持速度优势的同时,通过每次更新使用数百个样本,提高训练效果。SGD的收敛性源于其使用样本来近似整体分布,尽管训练路径可能曲折,但总体趋势仍朝向最优解。
最低0.47元/天 解锁文章
2513

被折叠的 条评论
为什么被折叠?



