为什么我们更宠爱“随机”梯度下降?(SGD)

导读

特别声明:本文仅有的一点贡献就是用自己的理解翻译了 Leon Bottou 等人的论文 <Optimization Methods for Large-Scale Machine Learning>,初窥门径,才疏学浅,疏漏之处,望不吝指教。

引子

大家都知道,训练深度网络一般用的是 SGD (Stochastic Gradient Descent | 随机梯度下降)而不是 GD (Gradient Descent | 梯度下降),但是有没有考虑过 SGD 为什么比 GD 更受大家宠爱,SGD 是如何在用较低的 Computational Complexity (一般可以大概理解成,达成目标需要计算 Gradient 的次数)的同时还能保证比较好的训练效果。

本文主要给出几个特殊的例子,给大家一个从直觉性,实验上和理论上认知,为什么有时候,相对于GD 我们更宠爱 SGD?

我们主要从以下三个方面,一起看一看 SGD 相对于 GD 的优势。

Prat I: 直觉上 ( Intuitive Motivation)

Prat II: 实验上 ( Practical Motivation )

Prat III: 理论上 (Theoretical Motivation)

背景知识

我们一般想要优化的函数形式如下

e2bf0bd862280b78b24674b06008ac1fb3f19807

我们知道梯度下降每一次迭代都需要出所有的梯度,即每一次算n个梯度,进行下面的迭代

6f50369de45c097cc1fdfda7889fda4239d833fa

随机梯度下降,每一次选一个 0a6e273b53f4e9e4b065acf0dd7b05b47ac2d29e 计算梯度,然后迭代


5c8af98d6944fac01ea8e6a4021107596cbd003d

Part I: 直觉上 ( Intuitive Motivation)

结论是:相对于非随机算法,SGD 能更有效的利用信息,特别是信息比较冗余的时候。

c3162c9d30b3ede0c1bf956fecbd813a7f5cd875

Prat II: 实验上 ( Practical Motivation )

结论是:相对于非随机算法, SGD 在前期迭代效果卓越。

7c17d9bd250906b300ed920dce9907f8bd43196c

我直接截论文上面的图,大家观赏一下

L-BFGS是一种需要算所有梯度,还要拟合Hessian 的一个优化算法.。不过既然是要算 full gradient, 大家直接理解成一种像 GD 一样的非随机的算法吧。 x 轴可以看成计算的梯度的数量,y轴可以看成是和真实最小值的误差。(个人理解哈,可能有偏差,大家会个意呗,想精确了解的,自己去看看原论文呗~~)

比较上图可得,随机算法 SGD 前期每个 iteration 找到的迭代点,可以显著的接近最小值点。

这里又有一个特别好玩的小例子来解释为什么 SGD 前期表现好,后期就水了现象。

这是我最想翻译的部分!!其他可以跳过,这里要认真听了哈~~。

假设我们需要优化的函数全部是二次函数,形式如下

eeb58f9610559df98922119c0306d3ef645c7ac6

其中a8bddf3b1a5489849153859a264fd34888fb5569是常数,并且满足

f1276bd41d35f509ac08cd85d0aea14d573be73b

我们求导,令导数等于零得到

4b67a8d0f0889d75bb42bfb77524280717b0b25e

其实这就是一堆sample, 在平方距离公式下,离他们最近的点就是他们的均值。

结合我们的假设公式(2.2)我们得到,最小值点在0处,也就是

49d92468c41cebb25d1367677b6955ea768298a0

所以函数的最小值点在0处。我们现在看看 SGD 的表现,假设我们最开始的初始点在最左边,然后无论你选到那个二次函数的分支,沿着梯度,都能向靠近最小值点的方向移动。所以SGD 前期效率很高。

我们假设选中最左边那个c2f6d44d27303672a80678552a38da96c7f002f0,举个例子。

4cc060f3193455e7ec95c78c15b4fffac4d27ba5

而到了后期,我们的 39ffeeaea43e478803874d25a9fa14f72f447619 足够靠近我们的最小值点 1ad9b8ef76f845d1d430d5e7a7e095e0370937be ,那么单纯靠选择一个二次函数的导数方向移动,便不能达到很好的效果,时而远离最小值点 “0”,时而接近最小值点,我们的前进方向开始犹豫徘徊,这时候便需要计算更多的梯度信息来进行决策了。你看下图,选 b119921e2249595ea68a122c9bcdbfb5439f9faa 会背离,选 ec7fb93bb707fed71aaf0e32ac62357f096225e6 会接近,就如同诗经《蒹葭》里面描述你追求你心爱的姑娘一样,溯洄从之,宛在水中央。 溯游从之,宛在水中坻。 朦朦胧胧不知方向,忽近忽远~~。这个时候你需要更多的信息了。

850302ae593d6761214771e9fe383d3f1e1f8270

多好的例子啊!!!奇美无比~~~。

我突然意识到,随机梯度下降怎么和与女生相处那么相似。刚开始,离的远的时候,不经意间便能产生好感,慢慢靠近。等靠的近了,好感想转换成爱情的时候,便开始茫然失措,不知方向,忽远忽近~~。

忽近忽远后怎么办?

所以对于随机梯度下降,我其实不太清楚如何解决忽近忽远,但是如果想随机梯度下降收敛的比较好,我知道的方法有,一是采取递减的 stepsize,原理是什么我还没搞清楚,二就是 Variance reduction 的一些方法吧,比如采用更多的样本算梯度,或者用SAGA, SVRG这种方法吧。个人猜测,这些做法是不是为了解决忽近忽远的问题,其实我不太清楚,当个讨论题,希望有大牛能帮我们解答一下。

Prat III: 理论上 (Theoretical Motivation)

结论是:如果样本数量大,那么 SGD的Computational Complexity 依然有优势。

65837a0c40eda5899fc309779a5ac92aa1660d9f

总结

好了总结一下, SGD 相比与 GD 优势如下:

Prat I: 相对于非随机算法,SGD 能更有效的利用信息,特别是信息比较冗余的时候。

Prat II: 相对于非随机算法, SGD 在前期迭代效果卓越。

Prat III: 如果样本数量大,那么 SGD的Computational Complexity 依然有优势。

原文发布时间为:2018-09-19

本文作者:zeap

本文来自云栖社区合作伙伴“ 深度学习自然语言处理”,了解相关信息可以关注“ 深度学习自然语言处理”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值