卷积神经网络总结

深度学习系列~卷积神经网络

漫谈

毕业设计顺利结束,这三个月以来每天都有事做的感觉真的很好,能够专注的去读论文、写代码、写论文,并且毕设期间确实学到了很多东西,尤其是大学四年很少涉及的算法,这几个月通过不断地学习与编码实践,感觉自己的算法能力稍稍提高了些,也对自己未来研究生阶段的学习增添了信心吧。

福利

后台回复"机器学习"可获得电子版西瓜书等资源,回复"深度学习"可获得花书等资源。

简介

本篇文章主要是对毕业设计中涉及的深度学习算法——卷及神经网络,进行简单的描述和总结,其中涉及的详细的数学推导可以参考南瓜书中的内容。本篇不做详细阐述。

什么是卷积神经网络?

这样的问题,Google一下会出现各种各样的答案,阅读之后会发现,大家讲的都比较深奥而又不易理解,对于卷积神经网络,我的理解是:

  1. 首先,他是一个网络结构的多层模型。
  2. 其次,层与层之间的连接是通过数学运算——卷积,来维持的。

通俗来讲,可以把卷积神经网络看做一个加工机器,我们把实验数据作为原材料,然后将原材料喂给加工机器,加工机器经过卷积运算也就是材料加工过程,得到成品即分类预测的结果。


为什么要选择使用卷积神经网络?

第一:参数少

在上一个问题中,已将把卷积神经网络理解为加工机器,这个比喻也恰恰回答了这个问题。在普通的神经网络中,层与层之间都要做相应的运算,我们以两层网络(每层5个神经元)为例:

神经元1 神经元2 神经元3 神经元4 神经元5
神经元6 神经元7 神经元8 神经元9 神经元10

那么在上表中,每一个神经元都要跟下层的所有神经元进行运算,故需要运算参数5*5=25次,但在实际的应用中,每一层的神经元却要远远高于5,且层数也不止2层,当神经元数目增加、神经网络层数增加,那么整个网络运算的参数就会急剧增加。

而对于卷积神经网络来说:

由于卷积层(加工)的存在,通过卷积运算(原材料加工)可以大幅度的减少参数,如下图所示:

可以很清楚的看到,原数据(原材料)经过卷积(加工)后,数据矩阵维度由5×5变为3×3,参数由25下降到9。这对于大型网络来说,显示出来的性能极为重要。

第二:有效的获得数据特征

对于这个特性,它很好理解但却不好解释,我们以下图进行说明:

上图可以很清楚的看到,原始图像经过卷积运算,变成了右侧三副图,而对应的分别是改图片的相应特征,比如图像边缘特征。那么这一点,传统的神经网络却很难提取。

综上,这两点便是卷积神经网络的优势,以及选择其的理由。截止到这里,我们对卷积神经网络是什么?还有卷积神经网络的优势做了宏观的概括,想必大家应该有了大概的了解,下一部分将详细的讲解。

什么是卷积?

学习过线性代数的同学应该不会陌生,卷积(Convolution)又称作摺积,它是一种重要的运算,在信号处理学科中,卷积核又被称作滤波器。下面我们以图片的形式展示卷积核是如何进行卷积运算的。

由图可知,卷积核将以一定的步长(s)在原始数据上进行滑动,并找到与自己大小相同的数据片("原始数据"红色区域)进行卷积运算,并得到运算结果。而这个运算也特别简单,无非就是相同位置的数据元素做运算,然后加和得到输出数据的一个元素值。以上便是卷积运算的简化版讲解,如何希望了解更多的信息,可以学习斯坦福大学李菲菲教授讲解的深度学习课程cs231n,里面有非常好的讲解和丰富的例子。

当然,在卷积运算中还包括步长(Stride)和零填充(Zero Padding)操作,步长指的是卷积核运算时移动的距离,而零填充则是为了保证数据的输出维度,人为填充的操作。那么我们假设:***卷积层的输入神经元个数为n,卷积大小为m,步长(stride)为s,输入 神经元两端各填补p个零(zero padding),那么该卷积层的神经元数量为(n− m+ 2p)/s+ 1。***


那么对于卷积神经网络的数学公式部分,我们只介绍这么多,大家可能会纠结于到底需不需要掌握数学公式的推导过程?那么我的想法是:“一切都应该尽可能地简单, 但不能过于简单”,也就是说,学习时可以先不做详细的理解,等有了更多的实践编码之后,再做更加深入的理解。

卷积神经网络的结构?

目前卷积神经网络的结构主要包括:卷积层、汇聚层(池化层)、全连接层。

第一:卷积层的结构

我们在上文中将卷积神经网络看作加工机器,那么卷积层便可以比喻成提取器,顾名思义它的主要作用就是进行特征的提取。它的主要结构:

  1. 输入数据层
  2. 卷积核
  3. 输出数据层

输入数据层(笔者自己起的名字,便于理解)更多的都是图片,也就是M×N×D的三维模型,M表示长,N表示宽,D表示深度。

卷积核在信号处理中又称作滤波器,每个卷积核均有大小,本文只介绍长宽等大的卷积核,一般卷积核的大小采取5×5或者3×3不等,同时把卷积核的数目称作深度,故此若含有128个卷积核,则深度为128。

输出数据层则是输入数据层经过卷积核的运算得出的结果,也可以称作特征映射组。

综上,三者之间的关系便是输入数据层经过卷积核的卷积运算,得到输出数据层,同时卷积层在做卷积运算时,需要根据步长进行移动,并选取同卷积核大小的数据片进行卷积。

第二:汇聚层(池化层)的结构

我们将卷积层比喻为加工步骤,那么对于卷积层下面的池化层可以理解为精加工,所以池化层的作用也就是进一步的特征提取,这样也能够进一步减少参数。那么对应的池化函数主要有两种,包括最大池化(Max Pooling)和平均池化(Mean Pooling),前者是选择部分区域中的最大值代表这个区域,而后者是计算这个区域的平均值来代表这个区域。具体如下图所示:
卷积神经网络总结_第1张图片
可见,池化操作理解起来很简单。

第三:全连接层的结构

全连接层主要作为分类器。其内容简单,可自行Google即可。

以上内容,我们主要介绍了卷积神经网络的构造,包括卷积层、池化层、全连接层。下面将对主要的卷积神经网络进行简单的介绍。


主要的卷积神经网络

这部分内容,我们将主要介绍三种网络,均为典型的深层卷积神经网络。

1. LeNet-5

LeNet-5[LeCun et al., 1998]虽然提出的时间比较早, 但是是一个非常成功 的神经网络模型。 基于LeNet-5的手写数字识别系统在90年代被美国很多银行 使用,用来识别支票上面的手写数。

结构图如下:

  1. 输入层:输入图像大小为32×32×1
  2. C1:第一个卷积层,可以看到卷积层大小为28×28,数量为6个。故28×28×6
  3. S2:池化层(汇聚层):14×14×6
  4. C3:第二个卷积层:10×10×16
  5. S4:第二个池化层(汇聚层):5×5 ×16
  6. C5卷积层、F6全连接层

2. AlexNet

AlexNet是第一个现代深度卷积网络模型, 其首次 使用了很多现代深度卷积网络的一些技术方法, 比如使用GPU进行并行训练, 采用了ReLU作为非线性激活函数, 使用Dropout防止过拟合, 使用数据增强来 提高模型准确率等。 AlexNet赢得了2012年ImageNet图像分类竞赛的冠军。
卷积神经网络总结_第2张图片
可以从图中看到,不仅使用了5×5的卷积核,还是用的多个3 × 3的卷积核,事实上,两个3 × 3 的卷积核的卷积效果和一个5 × 5 一致。

3.Inception

在卷积网络中,如何设置卷积层的卷积核大小是一个十分关键的问题。在 Inception网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception模块。 Inception网络是由有多个inception模块和少量的汇聚层堆叠而成。
卷积神经网络总结_第3张图片

总结

本文讲述了卷积神经网络的相关内容,同时对每一层的结构也做了相应的介绍,最后也简单介绍了一下最主要的三种网络。希望读者在阅读时,多查文献,多做搜索,不要拘泥于看懂别人讲的,更应该学会用自己的语言通俗的理解。

展望

接下来,我打算使用Pytorch实现卷积神经网络,使用其对图片进行分类,另外,我在github上已经写了5节的Pytorch教程,点击这里即可访问,如下图所示:
卷积神经网络总结_第4张图片
卷积神经网络总结_第5张图片

欢迎访问,欢迎fork,欢迎star。

深度学习系列的文章,最近会一直更新。

然后可能还会写一些多线程爬虫、linux脚本编程的文章,有感兴趣的同学可以多多交流。


个人技术公众号:Coder引力

技术讨论与交流是我的动力,欢迎关注。

你可能感兴趣的:(算法,人工智能,卷积神经网络,深度学习)