学习目录

阿力阿哩哩:深度学习 | 学习目录​zhuanlan.zhihu.com

我们在4.2节讲到了神经网络已经逐步成为人类智能生活的璀璨明珠,并介绍了全连接神经网络的整个训练过程,整个流程紧凑而又科学,似乎全连接神经网络已经能解决很多问题了,但细心的读者会发现笔者并没有提及全连接神经网络的缺点。因此,这一节笔者正好通过全连接神经网络的缺点来开展CNN卷积神经网络(Convolutional Neural Network)的教学。

4.3.1 全连接神经网络的缺点

为了讲清全连接神经网络的局限性,笔者还是拿出上一节最简单的全连接网络结构图来讲解,如图4.3所示,相信大家对这个图也不陌生了。设想一下,我们为了求解损失Loss 列出了关于w,b 的方程,并通过梯度下降的方法去求解最佳的(w , b),从而得到最小的损失Loss。换言之,4.2节的内容简单来讲就是站在山上找最陡峭的地方(梯度),不断地往下走,一直走到山谷,这时候我们所在坐标(w , b)就是Loss方程的最优解。

为此,针对图 4.3的这个网络结构,我们要对隐藏层和输出层求4个偏导,又因为隐藏层的输出作为输出层的输入,这时我们就要用到求偏导的链式法则,公式如下:

由公式(4.14)~(4.19),我们可以看出,两个神经元,为了求出隐藏层和输出层最佳的(w , b),我们就要求四个偏导,期间还得为链式求导付出3次连乘的代价。

现在,重点来了,如图 4.8所示,倘若我们的网络层次越深,偏导连乘也就越多,付出的计算代价也就越大。

紧接着,一个网络层不单止一个神经元,它可能会有多个神经元,那么多个神经元的输出作为下一级神经元的输入时,就会形成多个复杂的嵌套关系。

我们知道全连接神经网络层级之间都是全连接的,所以网络结构越复杂,那要求的(w , b)就会非常多,整个网络就会收敛得非常慢,这是我们所不希望看到的。这就是全连接神经网络的局限性,特别是针对图像这些冗余信息特别多的输入,如果用全连接神经网络去训练,简直就是一场计算灾难。那么既然问题出现了,就会有人提出解决方法。这时候CNN卷积神经网络便应运而生了。

图 4.8 多层全连接神经网络

4.3.2 CNN卷积神经网络原理

说了这么多,笔者这就给大家附上一张CNN网络结构图,如图 4.9所示,让大家都有个直观的了解。大家可以看到一个经典的CNN网络结构一般包含输入层(Input layer)、卷积层(convolutional layer)、池化层(pooling layer)和输出层(全连接层+softmax layer)。虽说目前除了输入层,咱啥也不认识,不过,不要慌,接下来就是剖析CNN的精彩时刻。

图 4.9 CNN卷积神经网络示意图

4.3.3 卷积神经网络与全连接神经网络的区别

1)总有至少1个的卷积层,用以提取特征。

2)卷积层级之间的神经元是局部连接和权值共享,这样的设计大大减少了(w , b)的数量,加快了训练。

以上便是卷积神经网络的特点,为了让大家更清晰地了解这个网络结构的特点,笔者接下来将分别对它的两个特性和特有的网络层次进行详细讲解。

4.3.4 卷积层(Convolutional Layer)

前面我们提到,图像拥有很多冗余的信息,而且往往作为输入信息,它的矩阵又非常大,利用全连接神经网络去训练的话,计算量非常大,前人为此提出了CNN,它的亮点之一就是拥有卷积层。

大家可以想象一下,如果信息过于冗余,那么我们能否去除冗余取出精华部分呢?对,卷积层就是干这个的,通俗易懂来说就是压缩提纯。

那卷积层又是如何工作的呢?大家可以看下图 4.9的CNN网络结构图。卷积层里面有个小框框,那个就是卷积核(Convolutional Kernel),压缩提纯的工作主要通过它来实现的。

现在,笔者再附上一张图,如图 4.10,让大家明白卷积核是怎么工作的,我们可以把蓝色矩阵看做卷积层的上一层,绿色矩阵看做卷积层,在蓝色矩阵上蠕动的便是卷积核,卷积核通过与他所覆盖蓝色矩阵的一部分进行卷积运算,然后把结果映射到绿色矩阵中。

图 4.10 卷积核运算示意图1

那么接下来我们要了解卷积核是如何将结果映射到卷积层的。如图 4.11所示。

图 4.11卷积核运算示意图2

现在大家也看到了,卷积核在滑动过程中做的卷积运算就是卷积核w 与其所覆盖的区域的数进行点积,最后将结果映射到卷积层。具体的运算公式如式(4.20)所示。

这样看来,我们将9个点的信息量,压缩成了1个点,也就是有损压缩,这个过程我们也可以认为是特征提取。

公式中(w , b)和之前全连接神经网络并没有区别,就是权值w 和偏置b ,它们在初始化之后,随着整个训练过程一轮又一轮的迭代逐渐趋向于最优。

在卷积核 之后一般会加一个Relu的激励函数,就跟4.2节介绍的全连接神经网络的神经元计算组合公式(4.1)和(4.2)一样,只不过这里换成了Relu激励函数,而全连接神经网络用的是sigmod激励函数。这么做的目的都是让训练结果更优。

好了,讲到这,大家应该大致明白了卷积层的工作方式,就是个压缩提纯的过程,而且每个卷积层不单止一个卷积核,它是可以多个的,大家又可以看一下图 4.9的CNN网络的卷积层,大家会看到输出的特征图在“变胖”,因为特征图的上一级经过多个卷积核压缩提纯,每个卷积核对应一层,多层叠加当然会“变胖”。

4.3.5 局部连接和权值共享

笔者在全连接神经网络的局限性中提它的网络层与层之间是全连接的,这就导致了整个训练过程要更新多对(w , b),为此CNN特定引入了局部连接和权值共享的两个特性,来减少训练的计算量。

笔者先给大家介绍一下这么做的科学性在哪?图像或者语言亦或者文本都是冗余信息特别多的东西,倘若我们依照全连接神经网络那般全连接,也就是将所有信息的权值都考虑进了训练过程。

讲到这,大家应该明白这么设计的用途了吧,没错,就是适当得放弃一些连接(局部连接),不仅可以避免网络将冗余信息都学习进来,同时也和权值共享特性一样减少训练的参数,加快整个网络的收敛。

局部连接与权值共享如图 4.12和图 4.13所示。

图 4.12 局部连接
图 4.13权值共享

大家可以重点看权值共享这张图,它同时也采用了局部连接,总共就有3*4=12个权值,再加上权值共享,我们就只用求3个权值了,大大减少了我们的计算量。

4.3.6 池化层(Pooling Layer)

一般来说,卷积层后面都会加一个池化层,这时候大家又可以往上看看图 4.9的CNN网络结构了,并且可以将它理解为对卷积层进一步特征抽样,池化层主要分为两种,这时候笔者认为前面说了这么多,现在给大家上一张图,大家应该就明白池化层是何用处。池化层运算如图 4.14所示。

图 4.14 Pooling运算示意图

是的,max就是将对应方块中最大值一一映射到最大池化层(max pooling layer),mean就是将对应方块的平均值一一映射到平均池化层(mean pooling layer)。

4.3.7 训练

好了,讲到这,我们终于把整个CNN架构特有的层次结构和属性都过了一遍,这时候大家应该大致明白整个CNN架构就是一个不断压缩提纯的过程,目的不单止是为了加快训练速度,同时也是为了放弃冗余信息,避免将没必要的特征都学习进来,保证训练模型的泛化性。

CNN整个训练过程和全连接神经网络差不多,甚至是笔者之后介绍的RNN、LSTM模型,他们的训练过程也和全连接神经网络差不多,唯一不同的就是损失Loss 函数的定义,之后就是不断训练,找出最优的(w , b),完成建模,所以大家搞懂了全连接神经网络的训练过程,就基本吃遍了整个深度学习最重要的数学核心知识了。

这时候,细心的读者们会发现CNN网络结构的输出层也就是softmax层没介绍,是的,笔者现在就开始介绍。CNN损失函数之所以不同也是因为它,这层是CNN的分类层,如图 4.15所示。

图 4.15 softmax层示意图

softmax层的每一个节点的激励函数

上面的公式,我们可以理解为每个节点输出一个概率,所有节点的概率加和等于1,这也是CNN选择softmax层进行分类的原因所在,可以将一张待分类的图片放进模型,softmax输出的概率中,最大概率所对应的标签便是这张待分类图的标签。

这时候,笔者给大家举个例子就明白了。现在我们的softmax层有3个神经元,也就是说我们可以训练一个分三类的分类器,现在假设我们有一组带标签的训练样本,他们的标签可以如此标记,对应节点标记1,其他标记0。其实就是onehot编码,如图 4.16所示。

图 4.16 One-hot编码示意图

训练的时候将训练样本图片放入输入层,标签向量放入输出层,最终训练出一个模型。

此时,笔者将一张待分类的图片放入我们的模型中,如果最后softmax层输出的结果是结果(4.25)。

这时,大家就明白了上诉公式的含义了,0.85对应着最大概率,说明这张图片是猫。接着所有概率加起来等于1,这样是不是好理解很多啦。好了,讲了这么久,我们还是没有把softmax的损失函数给写出来,它有点特殊,叫交叉熵,如式(4.26)~(4.27)所示。

虽说它长得奇奇怪怪的,但是整体的训练过程和全连接神经网络的思路是一样,都是通过梯度下降法找出最优的(w , b),使Loss 最小,最终完成建模。

4.3.8 CNN卷积神经网络的超参数设置

接下来介绍的内容就比较愉快了,主要是介绍训练CNN网络之前有些参数需要大家手动去设置,行话称之为超参数设置(hyperparameters setting)。

1. 卷积核初始化

卷积核的权值w和偏置b一开始是需要我们人工去初始化的,这里初始化的方法有很多,Tensorflow或者Keras在我们构建卷积层的时候自行给我们初始化了,但是哪天大家心血来潮想自己初始化也是可以的,我们的权值初始化可以根据高斯分布去设置,这样得到的初始化权值更加符合自然规律,毕竟咱们的计算机也是自然界的一部分。2. Padding

Padding是指对输入图像用多少个像素去填充,如图 4.17所示。

这么做的目的也非常的简单,就是为了保持边界信息,倘若不填充,边界信息被卷积核扫描的次数远比不是中间信息的扫描次数,这样就降低了边界信息的参考价值了。

其次还有另外一个目的是,有可能输入图片的尺寸参差不齐,通过Padding来使所有的输入图像尺寸一致,避免训练过程中没必要的错误。

图 4.17 Padding示意图

3. Stride步幅

就是卷积核工作的时候,每次滑动的格子数,默认是1,但是也可以自行设置,步幅越大,扫描次数越少,得到的特征也就越“粗糙”,至于如何设置,业界并没有很好的判断方法,也就是说,一切全靠大家自己去试,怎么优秀怎么来。如图 4.18所示。

图 4.18 Stride示意图

4.3.9 CNN卷积神经网络小结

上面讲了这么多,其实放在TensorFlow或者Keras里面就是几行代码的事,但是笔者还是倾向于让大家理解整个CNN到底是怎么训练的,它的优点又在哪,这样大家也不至于只知道CNN能用来干嘛,也知道了CNN为什么能这么做,这样对大家以后自己组建一个厉害的网络是很有指导意义的。

下一期,我们将讲授

神经网络的超参数(Hyperparameters)

敬请期待~

关注我的微信公众号【阿力阿哩哩的炼丹日常】~不定期更新相关专业知识~

喜欢就点个赞吧~

cnn输入层_一文掌握CNN卷积神经网络相关推荐

  1. cnn输入层_多尺度CNN特征图的分析与应用

    本文适用于那些参与CNN架构设计的工程师和研究人员,他们厌倦了盲目尝试和错误,可以从CNN主干中选择哪些特征图以改善其模型的性能,而宁愿从早期开始设计过程的步骤,以使特征图的空间比例轮廓与训练数据集中 ...

  2. cnn输入层_完全使用忆阻器实现CNN,清华大学微电子所新研究登上Nature

    不久之前,清华大学微电子所等机构在 Nature 上发表文章,展示了他们完全基于硬件的卷积神经网络(CNN)实现.他们构建的基于忆阻器的五层 CNN 在 MNIST 手写数字识别任务中实现了 96.1 ...

  3. 卷积层的主要作用_对卷积神经网络CNN的理解,一文读懂卷积神经网络。

    什么是神经网络? 神经网络ANN全称为(artificial neutral network),也就是人工神经网络,是一种仿人类神经网络原理构造的一种计算机模型. 主要由:输入,权重,激活函数来构成一 ...

  4. 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)

    http://blog.itpub.net/29829936/viewspace-2648775/ 2019-06-25 21:31:18 卷积神经网络 – CNN 最擅长的就是图片的处理.它受到人类 ...

  5. 了解CNN这一篇就够了——关于卷积神经网络的介绍

    https://www.toutiao.com/a6695023125253325320/ 关于CNN, 第1部分:卷积神经网络的介绍 CNN是什么?:它们如何工作,以及如何在Python中从头开始构 ...

  6. 【深度学习理论】一文看懂卷积神经网络

    [深度学习理论]一文看懂卷积神经网络 https://mp.weixin.qq.com/s/wzpMtMFkVDDH6scVcAdhlA 选自Medium 作者: Pranjal Yadav 经机器之 ...

  7. 技术向:一文读懂卷积神经网络

     技术向:一文读懂卷积神经网络 技术网络 36大数据(张雨石) · 2015-03-06 05:47 自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Ne ...

  8. 卷积神经网络训练准确率突然下降_基于联邦学习和卷积神经网络的入侵检测方法...

    王蓉1,马春光2,武朋2 1. 哈尔滨工程大学计算机科学与技术学院,哈尔滨 150001:2. 山东科技大学计算机科学与工程学院,青岛 266590 doi :10.3969/j.issn.1671- ...

  9. cnn输入层_cnn模型怎么画?手把手教你绘制模型图

    cnn模型全称为卷积神经网络,是深度神经网络中最成功的DNN特例之一.cnn模型是由输入层.卷积层.池化层和全连接层构成的.cnn模型主要能实现特征的提取.一个cnn结构:输入→卷积→ReLU→卷积→ ...

最新文章

  1. python 重复输出字符串
  2. VTK修炼之道83:Pipeline管线执行模型
  3. 20 个使用 Java CompletableFuture的例子
  4. grunt之Gruntfile(1)
  5. selenium 实现循环点击_-循环点击遇到的坑(每次点击后返回,页面元素都会变化的解决方法)...
  6. 6G尚处于早期研究阶段,长足发展需要时间和耐心
  7. java面试宝典2019_Java面试宝典2019完整版.doc
  8. Linux上快速安装软RAID详细步骤
  9. Deep Convolutional Network Cascade for Facial Point Detection论文算法解析
  10. 51nod 1268最大距离
  11. (转)一个百倍股的坠落:那个曾经满大街的ESPRIT是如何衰败的
  12. Qt编写安防视频监控系统60-子模块4云台控制
  13. (四) 制作一个最简单的qt界面
  14. AMiner发布2022 AI 2000人工智能最具影响力学者名单
  15. 开源的微信公众号管理工具
  16. 浪潮服务器键盘自动输空格,键盘空格键的常用技巧分享
  17. Caché 时间函数
  18. 如何做好职业规划(乾卦)
  19. [JavaScript]如何将www.xxx.com变为com.xxx.www
  20. 教师资格证面试计算机教案模板,教师资格证面试教案怎么写?教案模板拿走

热门文章

  1. 基于JAVA+SpringMVC+MYSQL的在线招标管理系统
  2. linux智能灌溉流程,农田自动灌溉系统及灌溉方法与流程
  3. 刷《剑指offer》笔记
  4. HTC Vive 叠影器无法创建设备
  5. NKOJ2317 英语四六级考试
  6. MVC中某个页面不需要引用母版页的正确写法
  7. PHP数据结构之四 一元多项式的相加PHP单链实现
  8. 【Android教程】Android用户系统管理
  9. [翻译]当jQuery遭遇CoffeeScript的时候——妙,不可言
  10. 【转载】qsort 与 bsearch 的魔力