0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一些人会怀疑:难道神经网络不是最先进的技术?

zhKF_jqr_AI 来源:未知 作者:李倩 2018-06-30 08:55 次阅读

编者按:在机器学习面前,我们都像一个孩子。当刚学会反向传播算法时,许多人会不满足于最基础的感知器,去尝试搭建更深、层数更多的神经网络。他们欣赏着自己的实现,就像沙滩上的孩子骄傲地看着自己用泥沙堆起来的城堡。但和城堡的徒有其表一样,这些神经网络的性能往往也难以令人满意,它们也许会陷入无休止的训练,也许准确率永远提不上来。这时,一些人就会开始怀疑:难道神经网络不是最先进的技术?

类似的怀疑,谁都有过——

神经网络的训练过程包括前向传播和反向传播两个部分,如果前向传播得到的预测结果和实际结果不符,这就说明网络没有训练好,要用反向传播去重新调整各个权重。这之中涉及各种常见的优化算法,以梯度下降为例,它的思路是把当前梯度的负值方向作为搜索方向,通过调整权重使目标函数趋近局部最小值,也就是让代价函数/损失函数越来越小。

如上式所述,梯度下降算法用原权重减去乘上标量α(0到1之间)的梯度来更新权重,并“重复”这一过程直至收敛。但在实际操作中,这个“重复”的迭代次数是一个人为选定的超参数,这意味着它可能过小,最后收敛效果并不好;它也可能过大,网络被训练得“没完没了”。因此训练时间和训练效果之间存在“过犹不及”的尴尬情况。

那么这个超参数是怎么影响收敛的?就像不同人下山速度不同一样,梯度下降有一个下降步长,迭代时间越短,步长就越大,虽然收敛速度很快,但它容易无法精确收敛到最后的最优解;相反地,如果迭代时间过长,步长越小,那在很长一段收敛过程中,可能网络的权重并不会发生太大改变,而且相对大步长,小步长在规定迭代次数内接近最小值也更难。

小步长收敛宛如“蜗牛”

大步长收敛效率更高

这还不是唯一的毛病,当梯度数值过小时,它容易被四舍五入为0,也就是下溢出。这时再对这个数做某些运算就会出问题。

看到这里,我们似乎已经得到这样一个事实:小梯度 = 不好。虽然这个结论看起来有些武断,但在很多情况下,它并不是危言耸听,因为本文要讲的梯度消失就是由小梯度引起的。

让我们回想一下sigmoid函数,这是一个经常会在分类问题中遇到的激活函数:

如上图所示,sigmoid的作用确实是有目共睹的,它能把任何输入的阈值都限定在0到1之间,非常适合概率预测和分类预测。但这几年sigmoid与tanh却一直火不起来,凡是提及激活函数,大家第一个想到的就是ReLU,为什么?

因为sigmoid几乎就是梯度消失的代名词,我们先对它求导:

这看起来就是个很普通的 s(1-s) 算式,好像没什么问题。让我们绘制它的图像:

仔细看一看,还是没问题吗?可以发现,上图中最大值只有1/4,最小值无限接近0,换言之,这个导数的阈值是(0, 1/4]。记住这个值,待会儿我们会用到。

现在我们先回头继续讨论神经网络的反向传播算法,看看梯度对它们会产生什么影响。

这是一个最简单的神经网络,除了输入神经元,其他神经元的act()都来自前一层的神经元:先用act()乘上一个权重,再经激活函数馈送进下一层,来自上层的信息就成了一个全新的act()。最后的J归纳了前馈过程中的所有误差项(error),输出网络整体误差。这之后,我们再执行反向传播,通过梯度下降修改参数,使J的输出最小化。

下面是第一项权重w1的导数:

我们可以利用权重的导数来进行梯度下降,继而迭代出全局最优点,但在那之前,这个派生的乘法运算值得关注:

由于上一层的输出乘上激活函数就是下一层的输入,所以上式其实还包含sigmoid的导数,如果把信息全部表示完整,从输出返回到第二层隐藏层的表达式应该是:

同理,从第二层隐藏层到第一层隐藏层则是:

它们都包含sigmoid函数,合起来就是:

之前我们已经对sigmoid求过导了,计算出它的阈值是(0, 1/4]。结合上式,两个0到1之间的小数相乘,积小于任一乘数。而在典型的神经网络中,权重初始化的一般方法是权重的选择要服从均值=0,方差=1的正态分布,因此这些初始权重的阈值是[-1, 1]。

接下来的事情就很清楚了:

即便不用常规权重初始化方法,w2和w3大于1,但它们对两个sigmoid导数相乘来说还是杯水车薪,梯度变得太小了。而在实际操作中,随机权重是很可能小于1的,所以那时它反而是在助纣为虐。

这还只有2个隐藏层,试想一下,如果这是一个工业级的深层神经网络,那么当它在执行反向传播时,这个梯度会变得有多小,小到突然消失也在情理之中。另一方面,如果我们把然激活函数导数的绝对值控制在大于1,那这个连乘操作也很吓人,结果会无限大,也就是我们常说的“梯度爆炸”。

现在,我们来看一个典型的ANN:

第一项权重距离误差项J最远,因此求导后它的表达式最长,也包含更多sigmoid函数,计算结果更小。所以神经网络的第一层往往是训练时间最长的一层。它同时也是后面所有层的基础,如果这一层不够准确,那就会产生连锁反应,直接拉低整个网络的性能。

这就也是神经网络,尤其是深层神经网络一开始并不为行业所接受的原因。正确训练前几层是整个网络的基础,但激活函数的缺陷和硬件设备的算力不足,使当时的研究人员连打好基础都做不到。

看到这里,我们应该都已经理解sigmoid函数的缺点了,它的替代方案tanh函数虽然也曾声名大噪,但考虑到tanh(x)=2sigmoid(2x)-1,它肯定也存在同样的问题。那么,现在大家都在用的ReLU好在哪儿?

首先,ReLU是一个分段函数:

它还有另一种写法:

当输入小于0时,函数输出0;当输入大于零时,函数输出x。

我们计算它的导数来对比sigmoid:

然后是它的图像,注意一点,它在0点不可微,所以当x=0时,图中y轴上应该是两个空心圆。

可以发现,导数的阈值终于不再是(0, 1)了,它好像可以避免梯度消失,但似乎又有点不对劲?当我们把一个负值输入到ReLU函数后,梯度为0,这时这个神经元就“坏死”了。换句话说,如果存在负数权重,那某些神经元可能永远不会被激活,导致相应参数永远不会被更新。从某种意义上来说,ReLU还是存在部分梯度消失问题。

那么,我们该怎么选择呢?不急,这里还有一种激活函数——Leakly ReLU。

既然ReLU的“梯度消失”源于它的阈值0,那么我们可以把它重设成一个0到1之间的具体小数。这之后,当输入为负时,它还是具有非常小的梯度,这就为网络继续学习提供了机会。

上式中的ε=0.01,但它最常见的范围是0.2-0.3。因为斜率小,输入负值权重后,它在图像上是一条非常缓的线:

这里我们要声明一点:虽然Leakly ReLU可以解决ReLU的神经元坏死问题,但它的表现并不一定比ReLU更好。比如常数ε万一过小,它就很可能会导致新的梯度消失。另一方面,这两个激活函数有个共同的缺点,即不像tanh和sigmoid一样输出有界,如果是在RNN这样很深的神经网络里,即便ReLU的导数是0或1,很小,但除了它我们还有那么多权重,多项连乘会导致非常大的输出值,然后梯度就爆炸了。

所以总的来说,ReLU并没有根治梯度消失这个问题,它只是在一定程度上缓解了矛盾,并产生了另一个新问题。这也是这些激活函数至今还能共存的原因——CNN用ReLU更常见,而RNN大多用tanh。在“玄学”的大背景下,这大概是新手入门机器学习后,接触到的第一起trade off吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4570

    浏览量

    98710
  • 梯度
    +关注

    关注

    0

    文章

    30

    浏览量

    10259
  • 深度学习
    +关注

    关注

    73

    文章

    5235

    浏览量

    119893

原文标题:深度学习解密:我的梯度怎么消失了?

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    人工神经网络原理及下载

    人工神经网络是根据的认识过程而开发出的种算法。假如我们现在只有一些输入和相应的输出,而对如何由输入得到输出的机理并不清楚,那么我们可以把输入与输出之间的未知过程看成是
    发表于 06-19 14:40

    Matlab基于卡尔曼滤波的神经网络的程序

    卡尔曼滤波的神经网络可以解决诸如BP网络一些缺陷。为大家提供几篇这方面的参考文献。
    发表于 02-28 09:29

    当训练好的神经网络用于应用的时候,权值是不是不能变了?

    当训练好的神经网络用于应用的时候,权值是不是不能变了????就是已经训练好的神经网络不是相当于得到个公式了,权值不能变了
    发表于 10-24 21:55

    神经网络解决方案让自动驾驶成为现实

    学习技术无疑为其指明了道路。以知名品牌为首的汽车制造业正在深度学习神经网络技术上进行投资,并向先进的计算企业、硅谷等技术引擎及学术界看齐。在中国,百度
    发表于 12-21 17:11

    AI知识科普 | 从无人相信到万追捧的神经网络

    工智能。几乎是夜间,神经网络技术从无人相信变成了万追捧。神经网络之父Hiton1、人工神经网络是什么?人工
    发表于 06-05 10:11

    【PYNQ-Z2申请】基于PYNQ-Z2的神经网络图形识别

    的raspberry pi接口,与树莓派联机,进行一些实验。预计成果:全程发帖记录整个试用过程,包括开发板demo测试,神经网络原理讲解,以及实现最终的手写数字图形识别。
    发表于 01-09 14:48

    【PYNQ-Z2试用体验】神经网络基础知识

    前言前面我们通过notebook,完成了在PYNQ-Z2开发板上编写并运行python程序。我们的最终目的是基于神经网络,完成手写的数字识别。在这之前,有必要讲神经网络的基本概念和工作原理。何为
    发表于 03-03 22:10

    卷积神经网络如何使用

    卷积神经网络(CNN)究竟是什么,鉴于神经网络在工程上经历了曲折的历史,您为什么还会在意它呢? 对于这些非常中肯的问题,我们似乎可以给出相对简明的答案。
    发表于 07-17 07:21

    【案例分享】ART神经网络与SOM神经网络

    今天学习了两个神经网络,分别是自适应谐振(ART)神经网络与自组织映射(SOM)神经网络。整体感觉不是很难,只不过一些最基础的概念容易理解不
    发表于 07-21 04:30

    人工神经网络实现方法有哪些?

    人工神经网络(Artificial Neural Network,ANN)是种类似生物神经网络的信息处理结构,它的提出是为了解决一些非线性,非平稳,复杂的实际问题。那有哪些办法能实现
    发表于 08-01 08:06

    如何设计BP神经网络图像压缩算法?

    神经网络(Neural Networks)是人工神经网络(Ar-tificial Neural Networks)的简称,是当前的研究热点之。人脑在接受视觉感官传来的大量图像信息后,能迅速做出反应
    发表于 08-08 06:11

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反
    发表于 07-12 08:02

    卷积神经网络维卷积的处理过程

    inference在设备端上做。嵌入式设备的特点是算力不强、memory小。可以通过对神经网络做量化来降load和省memory,但有时可能memory还吃紧,就需要对神经网络在memory使用上做进步优化
    发表于 12-23 06:16

    神经网络移植到STM32的方法

    神经网络移植到STM32最近在做的个项目需要用到网络进行拟合,并且将拟合得到的结果用作控制,就在想能不能直接在单片机上做神经网络计算,这样就可以实时计算,不依赖于上位机。所以要解决
    发表于 01-11 06:20

    神经网络会犯一些人类根本不会犯的错误

    的方式也与人类更相近。但是,神经网络还是会犯一些人类根本不会犯的错误,改进空间仍很大。 对抗样本:如果在这张熊猫图片上添加一个不可察觉的噪声层,会导致卷积神经网络将熊猫误识别为长臂猿。这些情况通常被称为“对抗样
    的头像 发表于 01-05 14:10 1947次阅读
    <b class='flag-5'>神经网络</b>会犯<b class='flag-5'>一些人</b>类根本不会犯的错误