bp神经网络和softmax原理_深度学习理论分享之——卷积神经网络(概述)

1

写在卷积神经网络之旅之前

通常,我们想要学习深度学习的相关技术,那么必不可少的步骤就是先认识什么神经网络、什么是深度学习、神经网络的范畴是怎样的、深度学习的范畴又是如何被定义等。然后再从易到难,挨个去学习神经网络、深度学习中各个经典的神经网络算法模型。比如最简单的单层感知器告诉我们神经网络中的神经元是怎么开展工作的,能帮我解决哪些人力不能及的难题?多层感知器、BP神经网络又是如何工作的,它们的作用体现哪些地方?当我们学完了单层感知器、多层感知器,我们就会不免发问:神经网络就这么?

当然不是。因为这些单层感知器也好、多层感知器、BP神经网络也罢,都不过是一种浅层神经网络的代表而已。所谓浅层,指的是网络的层数并不会太多,通常会小于5层。而由层数的不足这个缺陷就注定了这些浅层神经网络在处理复杂问题时的表现就会不尽如人意。毕竟按照这些神经网络模型的行话来说:虽然是学到了事物的深层次特征,但不好意思的是这些特征的层次也并没有多深。

所以,以加拿大著名的深度学习之父——Geoffrey Hinton为首的一帮DL狂人就不断地改进升级之前所发明出来的浅层神经网络。说直白一点就是不断地改进学习训练的算法,使得网络内的神经网络层数不断增加。要知道,网络层次的增加在很大程度上就意味着能学习出来的东西就会更深刻更高级,从而使得训练出来的模型就能更好的表征客观事物。而我们利用AI来处理问题不就是图它们能够比肉眼看到的更深刻更全面吗?不就是图它们对复杂棘手问题的解决更加快速高效吗?

于是,当多层感知器被发明出来后,尽管它在诸如图像识别、文本分类等领域焕发出强大的生命力,但各路豪侠们大显身手后发现,原来还有一种类型的网络模型比多层感知器更加高效,即支持向量机、径向基神经网络等纯数学意义上的神经网络。也正因为如此,Geoffrey Hinton等AI的开山祖师们才冥思苦想,夜以继日地升级改造多层感知器等浅层神经网络,先后提出诸如深度置信网络(Deep Belief Networks(DBN))、卷积神经网络、循环神经网络、深度残差网络、生成对抗网络等等一系列越来越高级的神经网络模型。

而这可以说就是卷积神经网络诞生的一个大致背景。但实际上卷积神经网络的诞生有它数学上严谨的依据和缘由。当然这都是下一小节要给大家普及的东东了,哈哈哈。

2

卷积神经网络诞生之因

注意:这里小标题中的因指的是从数学角度上所要阐述的那个因,可不要泛泛而说成是它诞生的全部因素哦。否则那就讲个三天三夜也是很难讲清楚的。

我们仍然以前面阐述MLP时用到的一个三层神经网络模型为例:

fe017b900622fb0872f0ac7acc2909f1.png

图1

如图1所示,我们的输入层和隐藏层之间都是两两相连,也就是说输入层的每个神经元都会与隐藏层上的任意神经元有一种数学上的联系。同样的,隐藏层上的任意神经元都与输出层上的任意神经元也有着某种数学关系。

在神经网络的范畴内,我们把这种不同神经网络层上的神经元之间两两相连的网络层称之为全连接层,也叫作稠密层(英文名称叫:Dense Layer)。Dense层在TensorFlow库中有专门的类和API来加以实现,前面我们对MLP的代码举例中实际上也已经用到了TensorFlow库中的Dense层类,大家不妨在此去回翻一下当时的阐述。

这里我们暂且不对这个Dense层的类做一个详细介绍。先来看看这种全连接层都有一些什么特点可供我们研究:

第一:既然是全连接层,那么每个神经元都会与其他网络层的全部神经元都有某种数学关系,意味着从数学角度来说,该神经元与其他网络层的全部神经元之间都会有一个权重系数——wij。那么问题来了,假设有M层的神经网络,每层的神经元个数分别为n1,n2,...,nm。那么可想而知,依赖于这个神经网络的权重系数得有多少个:

(nin+1)*n1+(n1+1)*n2+...+(nm-1+1)*nm。                                                   公式1

其中,nin代表的是输入向量的长度。

这要是换算成实际的数字,那估计很有可能就是奔着百万、千万乃至上亿的数量级别去的。而我们又知道,如果是在一个32或64位的操作系统中,通常一个实数会占据4个或者8个字节(取决于你是用单精度还是双精度)。想想看,如果是一个需要百万级别权重系数的神经网络,那么光存储这些权重系数需要消耗计算机的多少内存?答案是数M或者是数十M之多。

让我们来看一下一个实际的全连接层的网络模型需要用到的参数量级的例子,代码如下:

import tensorflow as tf

#定义一个规模为512*256*128*10的全连接神经网络

#这里都加上的一个name参数,是为了便于在结果上

#快速对应到模型中特定的地方

model = tf.keras.Sequential([

    tf.keras.layers.Dense(512,activation='sigmoid',name='firstLayer'),

    tf.keras.layers.Dense(256,activation='relu',name='secondLayer'),

    tf.keras.layers.Dense(128,activation='softmax',name='thirdLayer'),

    tf.keras.layers.Dense(10,activation='softmax',name='fourthLayer')

],

    name='secondMLP'

)

#建立该模型,并输出该模型的基本信息

model.build(input_shape=(3,784))

print(model.summary())

其运行结果如下:

8011ed43e22d093524a378623bb31663.png

从运行结果的截图上看:

firstLayer层的参数数量401920=784*512+512:

其中784是代码中:model.build(input_shape=(3,784))中的输入向量的长度;而被加数512代表firstLayer层上需要有512个偏置值系数;

secondLayer层的参数数量131328=512*256+256,512表示firstLayer层上有512个神经元,256表示secondLayer层上有256个神经元,也需要256个偏置值系数;

thirdLayer和fourthLayer上的参数数量也可同上逻辑计算得来。

最后总的可训练的参数数量为401920+131328+32896+1290=567434个。大家不妨在此计算一下,看看这样一个简单的全连接神经网络模型光存储这些训练参数需要消耗多少内存,假设每个参数的字节为4个字节。

而事实上我们在神经网络的整个训练与实际工作中,并不会仅仅存储这些需要被训练出来的权重系数与偏置值系数,还会存储很多计算过程的中间结果等。因此我们完全有必要从这个角度出发来让我们的神经网络尽可能地在保持高效运作的同时也能做到“省吃俭用”! 所以,依赖于全连接层的多层感知器乃至后续的BP神经网络、深度置信网络等都会遇到一个共同的瓶颈——消耗过大乃至于我们无法更多地增加神经网络的层数。要知道,对于事物的认知,当然是越深入,对其认知就越深刻准确。而深入的前提是我们能够构造出足够多层次的神经网络。但足够多层次的神经网络反过来又会不断地吞噬我们计算机内部的有限计算资源:比如显卡内存、内存等等。这些资源往往需要被其他应用程序所共享使用的。

于是我们就知道了,不能够随心所欲地去增加神经网络的层次,只能是在资源和性能之间达成某种微妙的平衡。

第二,对于事物的认识虽然是越深入越好,但绝不意味着我们就需要把事物的那些边边角角的特征也都全部学习到位,这是不太明智的。要知道,我们在哲学的课堂上曾不止一次地学到过一个真理:决定事物本质的矛盾才是主要矛盾!因此,对于神经网络的学习而言,我们同样学习到的也都是一些事物的主要特征和特征的主要方面,至于那些微小的特征,对于我们神经网络准确描述客观事物来说造成不了多少实质性的扰动,因此我们大可不必为此大费周章。

此外我们也在MLP的学习中知道,在神经网络中,表征事物某一方面特征的往往就是一个权重系数。

于是,综合上面两段话,我们不难得出结论,在利用神经网络开展学习时,应当使其重点学习事物的主要特征和特征的主要方面。用一句通俗的话说就是:利用有限的资源在有限的时间里干最有意义的事儿!

所以,对于那些用于表征极其次要特征的权重系数,我们大可不必加以表示。这样就与全连接层的初衷发生了矛盾。从而使得我们更加有必要去改进所谓的全连接层以及基于此而实现的那些神经网络,以便使得神经网络更好地去学习外界的事物。

第三,在神经网络的发展史上,通常我们把这种层数不多(大约在5层或以下)的神经网络称之为浅层神经网络。而这种浅层神经网络对于复杂事物的认识往往有比较明显的局限,因此,这也是我们的那些神经网络祖师爷们苦心要去发明新的神经网络模型的原因所在。

3

卷积神经网络的内涵

说了这么多卷积神经网络必然会诞生的因素,接下来我们就聊聊到底什么是卷积神经网络,或者说它的内部结构是怎么样的,是一个怎样的工作原理,都有哪些比较成熟的应用案例等等。

简单来说,卷积神经网络的结构,顾名思义,其中必定有卷积的概念参与其中。而这里的卷积实际上就是数学上的那个卷积运算。但据我所学,貌似我们那会的大学数学,似乎是没学过卷积运算的。因此,为简化起见,这里我们就不深入去探讨卷积运算究竟是怎么回事。我们只需要记住一点的是:所谓的卷积运算指的就是两个函数通过翻转和平移的重叠部分函数值乘积对重叠长度的积分。如果这个概念理解起来较难,不要紧,后边我们还会有详细的计算示例来和大家一起感受卷积运算究竟是怎么干活的。

总之,卷积概念是卷积神经网络的核心概念,是卷积神经网络中最主要的特征提取方式之一。依托于卷积运算来提取特征的网络层就称之为卷积层。

此外,在卷积神经网络中,通常还会有子采样层(或者叫池化层)和一些比较复杂的全连接层。

让我们来看一个经典的卷积神经网络的完整网络结构示意图:

660138ddf11e1bc79c82ebdf1ce2be01.png

图2

从图2中我们就不难看出一个完整的卷积神经网络都包含哪些网络层了。

由此,我们可进一步分析得出,要想弄懂卷积神经网络的工作原理,那首先要弄懂的就是图2的前半部分——卷积层(Convolutions)、池化层(Subsampling)的工作原理,至于图2的后半部分中所示的Full connection等(也就是全连接层的工作原理,我们在MLP的工作原理介绍中已经多次讲过)。

所以,如果用一句话来概括卷积神经网络的原理,那就是卷积层运算+全连接层运算组合而成的一种新型深层次神经网络运算机制。要注意的是:图2中所示仅有2个卷积层、两个全连接层和一个高斯连接层(我们这里咱不用操心啥是高斯连接层,后续有需要时会专门介绍。),但实际上我们已知的那些高级的卷积神经网络层数,有多达152层,当然那也已经是老黄历的事儿了,兴许现在都能达到好几百层。

总之呢,有了这个卷积神经网络的问世,我们能够处理的问题的复杂度就得到了显著地提升,同时问题解决的效果也能够得到明显提升,同时在现有的GPU乃至TPU的配合下,工作的效率也是杠杠的,也不会有大量占用GPU计算资源的事儿发生。

4

小结

OK,说了这么多,无非就是想告诉大家伙一件事:卷积神经网络为何会产生,卷积神经网络它都有哪些网络层等。只有搞懂了这两点,我们才会明白如何去理解卷积神经网络的工作原理,也就是从何处入手去剖析它。

因此,接下来几个章节的知识分享中,将就重点围绕着卷积神经网络的一些主要算法来加以阐述,同时注意不同算法之间的配合。

首先要阐述的就是所谓的卷积运算(包括所谓的感受野是个啥机制,里边涉及到的权值共享又是什么逻辑等);

其次是池化运算(包括步长、填充等操作);

然后就是会插播一则有关过拟合以及如何消除过拟合的一个小方法——dropout方法,以及尽最大努力去消除深层次的卷积神经网络在计算过程中可能会发生的一些诸如网络参数长时间得不到更新(也就是参数不能够快速得到收敛)现象的方法,比如Batch Nomalization方法等;

最后我们要一起来感受的就是一个或者多个完整的卷积神经网络的实现案例,以实际的案例运行效果来真切体会卷积神经网络的魅力。

so,本节的知识分享就到此为止,谢谢大家。我们下一节分享中,不见不散!

ade61ef493c22230a3246776337d6163.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值