恩佐2登录 > SEO攻略 > 从动力学角度看优化算法(三):一个更整新宝7登录体的视角

从动力学角度看优化算法(三):一个更整新宝7登录体的视角

admin SEO攻略 2020年01月22日

  欢迎访问“科学空间”,这里将与您共同探讨自然科学,回味人生百态;也期待大家的分享~

  最近把优化算法跟动力学结合起来思考得越来越起劲了,这是优化算法与动力学系列的第三篇,我有预感还会有第4篇,敬请期待~

  简单来个剧情回顾:第一篇中我们指出了其实SGD相当于常微分方程(ODE)的数值解法:欧拉法;第二篇我们还是数值解法的误差分析的角度,新宝7登录分析了为什么可以通过梯度来调节学习率,因此也就解释了RMSprop、Adam等算法中,用梯度调节学习率的原理。

  本文将给出一个更统一的观点来看待这两个事情,并且试图回答一个更本质的问题:为什么是梯度下降?

  前两篇文章讨论的观点是“梯度下降相当于解ODE”,可是我们似乎还没有回答过,为什么是梯度下降?它是怎么来的?也就是说,之前我们只是在有了梯度下降之后,去解释梯度下降,还没有去面对梯度下降的起源问题。

  基本的说法是这样的:梯度的反方向,是loss下降得最快的方向,所以要梯度下降。人们一般还会画出一个等高线图之类的示意图,来解释为什么梯度的反方向是loss下降得最快的方向。因此,很多人诟病RMSprop之类的自适应学习率优化器的原因也很简单:因为它们改变了参数下降的方向,使得优化不再是往梯度方向下降,所以效果不好。

  值得一提的是第2点,它其实并不是必要的,但有助于我们后面描述的一些探讨。也就是说,第2点其实只是一个假设,要知道,随便给我们一个函数,要我们求最小值的位置,但一般来说我们并不能事先知道它的最小值是多少;但是在深度学习中,这一点基本是成立的,因为我们通常会把loss设置成非负,并且得益于神经网络强大的拟合能力,loss很大程度上都能足够接近于0。

  这也就说明了,梯度的反方向确实是loss下降最快的方向。而根据第一篇文章,上式不就是梯度下降?于是我们就很干脆地导出了梯度下降了。并且将$\eqref{eq:gd}$代入到$\eqref{eq:ld}$中,我们得到

  这表明,只要学习率足够小(模拟ODE模拟到足够准确),并且$\nabla_{\boldsymbol{\theta}}L\neq \boldsymbol{0}$,那么$L$就一定会下降,直到$\nabla_{\boldsymbol{\theta}}L = 0$,这时候停留的位置,是个极小值点或者鞍点,理论上不可能是极大值点。此外,我们经常用的是随机梯度下降,mini-batch的做法会带来一定的噪声,而噪声在一定程度上能降低鞍点的概率(鞍点有可能对扰动不鲁棒),所以通常随机梯度下降效果比全量梯度下降要好些。

  其实如果真的理解了上述推导过程,那么读者可以自己折腾出很多不同的优化算法出来。

  比如,虽然前面已经证明了梯度的反方向是loss下降最快的方向,但凭什么就一定要往降得最快的的方向走呢?虽然梯度的反方向是堂堂正道,但也总有一些剑走偏锋的,理论上只要我保证能下降就行了,比如我可以取

  结合$\eqref{eq:rmsprop-1}$和第二篇文章,再配合滑动平均,可以发现这一节说的就是RMSprop算法。

  也就是说,自适应学习率优化器中,“学习率变成了向量,使得优化方向不再是梯度方向”根本不是什么毛病,也就不应该是自适应学习率优化器被人诟病之处。

  但事实上是,真的精细调参的话,通常来说自适应学习率最终效果真的是不如SGD,说明自适应学习率优化器确实是有点毛病的。也就是说,如果你剑走偏锋,虽然一开始你走的比别人快,后期你就不如别人了。

  毛病在哪呢?其实,如果是Adagrad,那问题显然是“太早停下来了”,因为它将历史梯度求和了(而不是平均),导致后期学习率太接近0了;如果是上面说的RMSprop,那么问题是——“根本停不下来”。

  但这只能算是缓解了问题,用ODE的话说就是“这个ODE并不是渐近稳定的”,所以终究会经常与局部最优点插肩而过。这才是自适应学习率算法的问题。

  前面说了,如果真的理解过这个过程,其实自己都可以捣鼓出一些“独创的”优化算法出来,顺便还分析收敛情况。下面介绍我自己的一个捣鼓过程,还让我误以为是一个能绝对找出全局最优点的优化器~

  当然没有~我们来看式$\eqref{eq:me-gd}$,如果跑到了一个局部最优点,满足$\nabla_{\boldsymbol{\theta}}L=\boldsymbol{0},\,L>

  0$,那么式$\eqref{eq:me-gd}$的右端就是负无穷了,这在理论上没有问题,新宝7登录但是在数值计算上是无法实现的。开始我以为这个问题很容易解决,似乎对分母加个epsilon避开原点就行了。但进一步分析才发现,这个问题是致命性的。

  其中$M \gg 0$是个常数,这样就绕开了奇点。这样子做倒是真的能绕开一些局部最优点,比如下面的例子:

  这个函数大约在$x=0.41$之间有一个全局最优点,函数值能取到0,但是在$x=3$的时候有一个次最优点。如果以$x_0=4$为初始值,单纯是用梯度下降的话,那么基本上都会收敛到$x=3$,但是用$\eqref{eq:me-gd-3}$,还是从$x_0=4$出发,那么经过一定振荡后,最终能收敛到$x=0.41$附近:

  可以看到,开始确实会在$x=3$附近徘徊,振荡一段时间后就跳出来了,到了$x=0.41$附近。作图代码:

  然而,看上去很美好,实际上它没有什么价值,因为真的要保证跳出所有的局部最优点,$M$必须足够大(这样才能跟原始的$\eqref{eq:me-gd-2}$足够接近),而且迭代步数足够多。但如果真能达到这个条件,其实还不如我们自己往梯度下降中加入高斯噪声,因为在第一篇文章我们已经表明,如果假设梯度的噪声是高斯的,那么从概率上来看,总能达到全局最优点(也需要迭代步数足够多)。所以,这个看上去很漂亮的玩意,并没有什么实用价值。

  好了,哆里哆嗦捣鼓了一阵,又水了一篇文章。个人感觉从动力学角度来分析优化算法是一件非常有趣的事情,它能让你以一种相对轻松的角度来理解优化算法的魅力,甚至能将很多方面的知识联系起来。

  一般的理解优化算法的思路,是从凸优化出发,然后把凸优化的结果不严格地用到非凸情形中。我们研究凸优化,是因为“凸性”对很多理论证明都是一个有力的条件,然而深度学习几乎处处都是非凸的。既然都已经是非凸了,也就是凸优化中的证明完备的这一优点已经不存在了,我觉得倒不如从一个更轻松的角度来看这个事情。这个更轻松的角度,就是动力系统,或者说常微分方程组。

  事实上,这个视角的潜力很大,包括GAN的收敛分析,以及脍炙人口的“神经ODE”,都终将落到这个视角来。当然这些都是后话了~

  如果您觉得本文还不错,欢迎分享打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

  因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。

  有一个小小的建议,希望您能在写文章的时候加点参考文献,这样一方面可以帮助读者去了解或者学习您之前学习的过程,另一方面即使读者在某处没看懂您的文字,或许可以去那边找一找 :)

  如果我真的翻了什么参考文献,我就会写出来的。没有写说明我没有翻参考文献,怎么写...

  这些东西其实就是普通的ode数值计算,很久之前就看过了,哪能写得出参考文献出来~

  同学,你好。我也是一名研究生,对深度学习算法比较感兴趣,看到你写的关于GAN的博文,觉得写得很好。因为你是数学系的,想请问一下,算法方面的数学知识除了微积分、线性代数、概率论,还需要看哪些书?谢谢!

  谢谢。你能搞懂这微积分、线性代数、概率论这几个,你已经完全具备高阶基础了,到那时候你就可以自己把握了。

  苏大佬的背景我看了一下,主要是数学背景。像动力学这种物理方面的,您是如何了解的呢?了解多少?觉得对深度学习的研究有哪些帮助?以及有什么推荐的书吗?

  2、如果你说的“背景”指的是兴趣,那么我的兴趣很广泛,数学、物理、计算机甚至文学,我都有兴趣,也都花过一些时间去学习,所以,我不是纯粹的数学背景。

  一口气看了很多文章,可惜这个系列的三篇文章 似乎要求数学功底。。。看的有点晕

  1. 可以在评论中使用LaTeX代码,点击“预览效果”可即时查看效果,点击这里可以查看更多内容;

  支持整句搜索!网站自动使用结巴分词进行分词,并结合ngrams排序算法给出合理的搜索结果。

  jqwylb: kernel_constraint=unit_norm()这种方式是事后处理,这里应该要事前处理吧

  马祥祥: GAN添加的约束项与强化学习里的PPO添加的约束差不多,PPO是为了消减方差添加的约束,这两者...

  jqwylb: 不知道作者在训练deepinformax时候,prior_kl_loss会不会出现NAN,经常...

  苏剑林: 每个样本都乘以$\alpha$,方差变为原来的$\alpha^2$,这不是统计里边一个基本结论么~

标签: seo算法