您当前的位置:首页 >> 综合
博客 | 闲话神经网络
发布时间:2019-06-28
 

一篇杂文,把之前收集的神经网络点点滴滴串联起来,便于理解,如有不当,麻烦及时指出。

神经网络发展历史

先看几张图:

神经网络三次兴起:

  • 第一次,控制论时代,1958年,感知器诞生,能分类,但解决不了异或问题;

  • 第二次,联结主义时代,BP网络诞生,加非线性激活函数,解决了异或,但受限于理论不完善(局部最优,黑盒)+数据少+训练方法+计算能力,败于SVM与概率图;

  • 第三次,2006年,祖师爷Goeffrey Hinton坐了几十年冷板凳,琢磨出pre-training,DBN等,接着一发不可收拾。Yann LeCun将CNN发扬光大(将BP与CNN结合,推出第一个可用的Le-Net,深度学习入门者的hello world),Jürgen Schmidhuber 90年代发明的LSTM,沉寂多年后复活了,Yoshua Bengio开创了神经网络语言模型。加上大数据时代,GPU的发展等,诸多因素导致深度学习“大爆炸”。

注:这里不做过多介绍,详情参考,「Deep Learning」读书系列分享(一)


神经网络基础回顾


左边展示了一个生物学的神经元,右边展示了一个常用的数学模型。人工神经网络中的神经元设计受到生物神经元的启发。

总结要点:

  • 生物神经元(左图)中,树突将信号传递到细胞体,信号在细胞体中相加。如果和高于某个阈值,那么神经元将会激活,向其轴突输出一个峰值信号,注意是一个脉冲信号。

  • 数学计算模型(右图)中,将输入进行加权求和加上偏置,输入到激活函数(模拟生物中神经元)中,继续往后传递。

  • 需要注意:生物中神经元复杂得多,其一,输出是一个脉冲,而不是一个值,现在也有脉冲人工神经网络(号称第三代神经网络)。


多个神经元组合起来,输入层,隐含层和输出层,形成神经网络。常见的是前馈神经网络,典型例子多层感知器,变种是循环神经网络(时间上共享)和卷积神经网络(空间上共享)等。当然,80-90年代,还有诞生过其他结构的网络,如反馈神经网络(输出与输入直接关联,如Elman网络和Hopfield网络),自组织神经网络(无监督,每次竞争,只更新一个神经元,参数和网络结构自适应),模糊神经网络,径向基神经网络(跟早期的BP网络同步)等等,只是淹没在时代潮流里,被人遗忘。

参考:神经网络用作分类器


十万个为什么

神经网络从名不见经传到现在大红大紫,成了AI浪潮的主力。只要跟AI相关,基本都要扯上神经网络,从多层感知器MLP,到卷积神经网络CNN,循环神经网络RNN,再到自编码器AE,变分自编码VAE,生成对抗网络GAN,让人应接不暇。

对于身处信息爆炸时代的初学者,如果人云亦云,没有自己的思考,很容易陷入懵逼状态:

  • 神经网络到底是什么“神经”物种?神经元?人类大脑?

  1. 1.外行一听就觉得高端大气上档次,却又遥不可及,只得双手合十,顶礼膜拜,不可理解推敲焉,只好找个佛龛供起来,一方面自己有了信仰,心里不慌,另一方面又能“吓唬”别人,^_^。

  • 神经网络怎么工作的?为什么具备这么强的拟合能力?——以第二代神经网络MLP(含BP机制,第一代是感知器,第二代是BP网络,第三代是脉冲神经网络)为例,结构并不复杂:输入层,隐含层和输出层,训练期间,根据预设的目标通过BP反向传播机制学习出一组隐含层参数。万能近似定理说为我们提供了坚实的神经网络理论保障。

    • 万能近似定理(universal approximation theorem)(Hornik et al., 1989;Cybenko, 1989) 表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种‘‘挤压’’ 性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维空间到另一个有限维空间的Borel 可测函数(定义在紧集上的连续函数)。(《Deep learning》英文版P194,中文版P171)

      带着这些问题,我们接着往下走

    • 注:如果对神经网络工作原理缺乏了解,但想在30min内有个基本轮廓,建议看完以下视频:

      • 3Blue1Brown科普:什么是神经网络?

      • 相关视频:线性代数本质、微积分等

      • 三棕一蓝很优秀,很无私,赞一个!

隐含层有什么用?

对隐含层的感性认知

神经网络给大家留下了深刻的印象,但是总让人琢磨不透。权重和偏置量能自动地学习得到,但是这并不意味着能解释神经网络是怎么样得出的这些参数。现在仍然没人说清楚为什么某某节点的权重参数为什么取值为某个值。

所以,第二次寒潮被人批评的槽点至今还在:神经网络模型是个黑盒子,凭什么让我信任?o(╯□╰)o。

这个“黑盒子”,主要是指隐含层,光看名字就有种神秘感,隐形人,神秘人

作为好奇心爆棚的人类,有想过,隐含层到底在做什么吗?

从一个问题开始,如何区分以下三张图哪个是人?

从一个问题开始,如何区分以下三张图哪个是人?

这个人脸识别任务中,神经网络模型该怎么建立?简单起见,图像里所有像素作为输入,输出是是或否的标签。

那么隐含层怎么分析呢? 如果是人,我们会试着将这个问题分解为一些列的子问题

比如:

  • 在上方有头发吗?

  • 在左上、右上各有一个眼睛吗?

  • 在中间有鼻子吗?

  • 在下方中间位置有嘴巴吗?

  • 在左、右两侧有耳朵吗?

  • ...

识别眼睛这个子任务,可能对应一个子网络:

这个子网络还可以进一步分解,一层又一层地分解,直到能由一个神经元给出结果。

这么说,隐含层承担的角色是子任务的识别、组合,从一系列简单、具体得问题开始,建立更复杂、抽象的概念。

神经网络隐含层的物理含义

刚才是从人的感性角度来理解,这次换成无感情的物理角度。

  • 多层神经网络,将原始输入数据在隐含层上做了多个二分类,隐含层有多少个神经元,就有多少个分类。

注:源自Youtube上的一个优秀的教学视频:A Friendly Introduction to Machine Learning

假设在平板上玩改版的水果忍者,同时飞过来一堆圣女果和葡萄,怎么分开?

  • 如果刚好线性可分,那么轻松划一刀就好了

  • 如果葡萄都聚集在中间三角区的呢?这时就以迅雷不及掩耳之势,连砍三刀,K.O.

  • 等等,这游戏跟神经网络什么关系?

    水果在平板上的坐标就是输入数据,维度是2,即x1和x2,线性可分,一个分类器就行;线性不可分的三角形区域,就得综合3个二分类器的结果,即y1、y2和y3围成的区域。其实,这就是有3个神经元的隐含层。细心的话,会发现,你砍的每一刀(每个神经元)就是一个LR回归(自行脑补LR数学表达式)

    对于高维数据,不清楚分类面长啥样,隐含层的层数以及每层中神经元的个数,只能通过多次训练调整

    这就是为什么多层神经网络有多个隐含层。

    AI圣经《Deep Learning》中有一部分解释的很清楚,隐含层的意义就是让线性不可分的数据变得线性可分:

    • 高维空间上的数据就像一张白纸上的两类点,分类面奇奇怪怪。对着足够多次后,总能找到近似平行的线段

    • 每个线段附近的分类任务对应一个神经元

    • 每次折叠对应一个隐含层

    • 要点:深层网络的表示能力具备指数级优势

注:《deep learning》中文版第6章P124,以上是个人理解,不一定正确

既然隐含层这么重要,是不是越多越好呢?

有更多神经元的神经网络可以表达更复杂的函数。然而这既是优势也是不足,优势是可以分类更复杂的数据,不足是可能造成对训练数据的过拟合。

注:过拟合(Overfitting)是网络对数据中的噪声有很强的拟合能力,而没有重视数据间(假设)的潜在基本关系。举例来说,有20个神经元隐层的网络拟合了所有的训练数据,但代价是把决策边界变成了许多不相连的红绿区域。而有3个神经元的模型表达能力只能用比较宽泛的方式去分类。它将数据看做是两个大块,并把个别在绿色区域内的红色点看做噪声。实际上,在测试数据中会获得更好的泛化(generalization)能力。

反过来,如果数据不是足够复杂,似乎小一点的网络更好,可以防止过拟合。然而并非如此,防止神经网络的过拟合有很多方法(L2正则化,dropout和输入噪音等),后面会详细讨论。在实践中,使用这些方法来控制过拟合比减少网络神经元数目要好得多

原因是小网络更难使用梯度下降等局部方法来进行训练:虽然小型网络的损失函数的局部极小值更少,也比较容易收敛到这些局部极小值,但是这些最小值一般都很差,损失值很高。相反,大网络拥有更多的局部极小值,但就实际损失值来看,这些局部极小值表现更好,损失更小。因为神经网络是非凸的,就很难从数学上研究这些特性。即便如此,还是有一些文章尝试对这些目标函数进行理解,例如The Loss Surfaces of Multilayer Networks 这篇论文。在实际中,你将发现如果训练的是一个小网络,那么最终的损失值将展现出多变性:某些情况下运气好会收敛到一个好的地方,某些情况下就收敛到一个不好的极值。从另一方面来说,如果训练一个大的网络,你将发现许多不同的解决方法,但是最终损失值的差异将会小很多。所有的解决办法都差不多,而且对于随机初始化参数好坏的依赖也会小很多。

正则化强度是控制神经网络过拟合的好方法。看下图结果:

(不同正则化强度的效果:每个神经网络都有20个隐层神经元,但是随着正则化强度增加,它的决策边界变得更加平滑。)

需要记住的是:不应该因为害怕出现过拟合而使用小网络。相反,应该进尽可能使用大网络,然后使用正则化技巧来控制过拟合.

参考:神经网络七:神经网络设置层的数量和尺寸

相关阅读