zoukankan      html  css  js  c++  java
  • 局部最优解

    反对回答区中一部分称“模型收敛于鞍点”的回答。当然也有的大牛可以一针见血,那我就对这个问题多展开一下吧,让鲜血流的更猛烈一些。(害怕.jpg)

    真的结束于最优点吗?

    我们知道,在局部最优点附近,各个维度的导数都接近0,而我们训练模型最常用的梯度下降法又是基于导数与步长的乘积去更新模型参数的,因此一旦陷入了局部最优点,就像掉进了一口井,你是无法直着跳出去的,你只有连续不间断的依托四周的井壁努力向上爬才有可能爬出去。更何况梯度下降法的每一步对梯度正确的估计都在试图让你坠入井底,因此势必要对梯度“估计错很多次”才可能侥幸逃出去。那么从数学上看,什么才是局部最优点呢?

    这个问题看似很白痴,很多人会说“局部最优点不就是在loss曲面上某个一阶导数为0的点嘛”。这就不准确啦,比如下面这个马鞍形状的中间的那个点:

    (图片来自《deep learning》)

    显然这个点也是(一阶)导数为0,但是肯定不是最优点。事实上,这个点就是我们常说的鞍点。

    显然,只用一阶导数是难以区分最优点和鞍点的。

    我们想一下,最优点和鞍点的区别不就在于其在各个维度是否都是最低点嘛~只要某个一阶导数为0的点在某个维度上是最高点而不是最低点,那它就是鞍点。而区分最高点和最低点当然就是用二阶导数(斜率从负变正的过程当然就是“下凸”,即斜率的导数大于0,即二阶导数大于0。反之则为“上凹”,二阶导数小于0)。也就是说,若某个一阶导数为0的点在至少一个方向上的二阶导数小于0,那它就是鞍点啦。

    那么二阶导数大于0和小于0的概率各是多少呢?由于我们并没有先验知识,因此按照最大熵原理,我们认为二阶导数大于和小于0的概率均为0.5!

    那么对于一个有n个参数的机器学习/深度学习模型,“loss曲面”即位于n+1维空间(loss值为纵轴,n个参数为n个横轴)。在这个空间里,如果我们通过梯度下降法一路下滑终于滑到了一个各方向导数均为0的点,那么它为局部最优点的概率即 0.5^n ,为鞍点的概率为 1-0.5^n ,显然,当模型参数稍微一多,即n稍微一大,就会发现这个点为鞍点的概率会远大于局部最优点!

    好吧我再啰嗦的举个栗子,已经反应过来的同学可以跳过这个栗子:

    假设我们的模型有100个参数(实际深度学习模型中一般会远大于100),那么某一阶导数为0的点为局部最优点的概率为约为 0.5^{100}approx10^{-31} ,而为鞍点的概率则为 1.0-10^{-31}approx 1.0 。就算我们的模型在训练时使用了特别厉害的“超级梯度下降法”,它可以每走一步都恰好踩在一个一阶导数为0的点上,那么从数学期望上来看,我们需要走10^31步才行。而实际的projects中,哪怕数据集规模为千万级,我们分了100万个batches,然后要迭代100次,那也仅仅是走了 10^6*10^2=10^8 步,你真的觉得运气可以辣么好的走到局部最优点上去吗?所以实际中,当我们的深度学习模型收敛时,几乎没有必要认为它收敛到了一个局部最优点,这完全等同于杞人忧天。

    也就是说,如果最后模型确实在梯度下降法的指引下收敛到了一个导数为0的点,那这个点几乎可以肯定就是一个鞍点。

    如果我们的模型真的收敛到鞍点上了,会很可怕吗?

    这就又回到了文章开头的那副马鞍状的图。

    显然,站在马鞍中央的时候,虽然很难翻过两边的山坡,但是往前或者往后随便走一步就能摔下马鞍!而在文章《batch size》中小夕讲过,我们默认使用的mini-batch梯度下降法本身就是有噪声的梯度估计,哪怕我们位于梯度为0的点,也经常在某个mini-batch下的估计把它估计偏了,导致往前或者往后挪了一步摔下马鞍,也就是mini-batch的梯度下降法使得模型很容易逃离特征空间中的鞍点。

    那么问题来了,既然局部最优点很难踩到,鞍点也很容易逃离出去,那么

    为什么我们的模型看起来是收敛了呢?

    初学者可能会说 “诶诶,会不会是学习率太大了,导致在“鞍点”附近震荡?” 首先,鞍点不像最优点那样容易震荡,而且哪怕你不断的减小学习率继续让模型收敛,你这时计算output层或者后几层的梯度向量的长度时往往会发现它依然离0很遥远!(这句话是有实验支撑的,不过那篇论文我暂时没记起来,找到时贴出来)说明大部分时候收敛到的并不是鞍点。

    那会不会踩到的鞍点太多,虽然前面的鞍点都轻松逃逸了,但是最后恰好收敛到一个跳不下去的鞍点身上了?

    虽然高维空间中的鞍点数量远远大于最优点,但是鞍点的数量在整个空间中又是微不足道的:按前面的假设,假设在某个维度上随机一跳有10%的概率踩到导数为0的点,那么我们在101维的空间中的一步恰好踩到这个点上的概率为10^-100,也就是说在101维空间里随机乱跳的时候,有10^-100的可能性踩到鞍点身上。因此,即使有难以逃离的鞍点,那么被我们正好踩到的概率也是非常小的。

    所以更令人信服的是,在高维空间里(深度学习问题上)真正可怕的不是局部最优也不是鞍点问题,而是一些特殊地形。比如大面积的平坦区域:

    (图片来自《deep learning》)

    在平坦区域,虽然导数不为0但是却不大。虽然是在不断下降但是路程却非常长。对于优化算法来说,它需要走很多很多步才有可能走过这一片平坦区域。甚至在这段地形的二阶导数过于特殊的情况下,一阶优化算法走无穷多步也走不出去(设想一下,如果终点在一米外,但是你第一次走0.5米,后续每一步都是前一步的一半长度,那么你永远也走不到面前的一米终点处)。

    所以相比于栽到最优点和鞍点上,优化算法更有可能载到这种类似平坦区的地形中(如果这个平坦区又是“高原地带”,即loss值很高的地带,那么恭喜你悲剧了)。更糟糕的是,由于高维地形难以可视化,还有很多更复杂的未知地形会导致假收敛,一旦陷入到这些危险地形中,几乎是无解的。

    所以说,在深度学习中,与其担忧陷入局部最优点怎么跳出来,更不如去考虑

    1. 如何去设计一个尽量没有“平坦区”等危险地形的loss空间,即着手于loss函数的设计以及深度学习模型的设计;
    2. 尽量让模型的初始化点远离空间中的危险地带,让最优化游戏开始于简单模式,即着手于模型参数的初始化策略;
    3. 让最优化过程更智能一点,该加速冲时加速冲,该大胆跳跃时就大胆跳,该慢慢踱步时慢慢走,对危险地形有一定的判断力,如梯度截断策略;
    4. 开外挂,本来下一步要走向死亡的,结果被外挂给拽回了安全区,如batch normalization策略等。

    初学神经网络者的疑惑:为什么BP神经网络有那么多...

    答:这是因为bp算法是最简单的,BP网络结构也最简单最经典。尽管有缺点,但实际应用效果还不错。其实很多其他变型网络如Elman网络实际上也用的是梯度下降法。 虽然BP网络得到了广泛的应用,但自身也存在一些缺陷和不足,主要包括以下几个方面的问题...

    对于非连续目标在深度神经网络的优化过程中 哪种梯...

    答:还有很多,一步正割算法,拟牛顿算法,量化共轭梯度法,弹性梯度下降法等等。具体可以在MATLAB的help文件训练函数中查看,路径是:Neural Network Toolbox>Functions>Training Functions,可以看到各种算法的函数及详细介绍

    梯度下降法怎么改变神经网络中的权重

    答:梯度下降算法是神经网络在每代更新网络权值的一种方法。 神经网络还有很多其他更新权值的方法,不只这一种

    梯度下降算法是指什么 神经网络

    答:梯度下降算法是神经网络在每代更新网络权值的一种方法。 神经网络还有很多其他更新权值的方法,不只这一种

    rbf神经网络和bp神经网络有什么区别

    答:bp神经网络学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的。而rbf神经网络是种高效的前馈式网络,它具有其他前向网络所不具有的最佳逼近性能...

    BP神经网络中学习速率是什么意思

    答:学习率实际和信号分析里的时间常数是一样的,学习率越小 学习会越精细,但同时学习速度也会降低,因为现实中很多模型都是非线性的,犹如一条曲线,梯度下降采用很多小直线迭代去逼近非线性的曲线,如果每一步跨度太大(学习率)就会失去很多曲线...

    bp神经网络中的gradient是什么意思

    答:若果对你有帮助,请点赞。 神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值。现在一般求解权值和阈值,都是采用梯度下降之类的搜索算法(梯度下降法、牛顿法、列文伯格-马跨特法、狗腿法等等),这些算法会先...

    卷积神经网络是如何反向调整参数的?

    答:参数调整流程: 计算loss--loss是根据网络输入值和真实值求解获得,与网络参数有关 根据loss使用梯度下降法进行反向传播--梯度下降的BP算法,参考微积分链式求导法则. 结束.. 可以追问的~~

    DPS软件的BP神经网络预测.怎样预测未来几年的数

    答:BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这...

    有哪位大神知道BP神经网络变学习率学习算法在Matla...

    答:额。。。 一种启发式的改进就是,为学习速率选用自适应值,它依赖于连续迭代步骤中的误差函数值。 自适应调整学习速率的梯度下降算法,在训练的过程中,力图使算法稳定,同时又使学习的步长尽量地大,学习速率则是根据局部误差曲面作出相应的调整。...

    链接:

    https://blog.csdn.net/eric_e/article/details/80371022

    http://blog.sina.com.cn/s/blog_15f0112800102wojj.html

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    基于bootstrap实现收缩导航条
    js判断打开网站页面是PC端还是手机端
    vs2015调试sqlserver 存储过程
    C#计算当前日是第几周
    C#计算一年有多少周
    tcpdump命令的使用
    keepalived配置
    正则匹配中文
    git merge 和 git rebase详解
    systemd和sysv服务管理和配置
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10141296.html
Copyright © 2011-2022 走看看