深度学习理论篇之 ( 九) -- 卷积神经网络之风云盛世

2022-06-01 19:49:55 浏览数 (1)

科普知识

监督学习是从标记的训练数据来推断一个功能的机器学习任务。训练数据包括一套训练示例。在监督学习中,每个实例都是由一个输入对象(通常为矢量)和一个期望的输出值(也称为监督信号)组成。监督学习算法是分析该训练数据,并产生一个推断的功能,其可以用于映射出新的实例。一个最佳的方案将允许该算法来正确地决定那些看不见的实例的类标签。这就要求学习算法是在一种“合理”的方式从一种从训练数据到看不见的情况下形成。

前言

相信大家对于神经网络的学习已经有了一定的认识,也大致了解了神经网络的整个训练流程,然而,之前的都是基础,还有很多优秀的神经网络值得我们去学习,今天,我们将会学习神经网络的一颗明星--卷积神经网络,它的横空出世,在一定程度上引领了深度学习的发展,即使现在,它的优秀依旧毫不褪色.....

一、卷积神经网络

卷积神经网络(Convolution Neural Network, CNN)诞生于全连接网络(Fully Connected network, FCN, 之前我们学习的普通神经网络)之后的时代,它的出现彻底改变了研究者对于神经网络的认识,其在众多的人工智能的任务上表现尤为出色,特别是在图像问题上表现的可以说是前所未有,原因之一在于它在特征提取能力上显得非常给力。在当前的深度学习算法中,卷积神经网络中已经成为了经典网络之一,被用于各种图像、文本、语音的人工智能任务中,颇受关注,并且被大量的研究者加以改进,发展迅速。近年来,深度学习图像任务十分的受欢迎,著名的ImageNet数据集比赛在深度学习中尤其是计算机视觉领域掀起了巨大的浪潮。该数据集由华人科学家李飞飞团队创立,主要用于图像识别和目标检测的图像任务,由于数据集较大,传统的方法很难得到较好的结果,自从2010年举办以来,各大公司和顶尖的团队参赛不断,包括Google、MSRA、DeepMind、港中文等。2012年,AlexNet卷积神经网络一举打破之前的最好成绩,在ImageNet比赛获得冠军。官方提供的数据显示准确率达到57.1%,AlexNet, top-5错误率16.4%。随后,VGGNet、Google Inception Net和ResNet等卷积神经网络百花齐放,都取得了非常不错的结果, 如此,CNN的影响力直到今天。

根据我们的分享历程安排,今天将会对卷积神经网络的理论知识进行讲解,还是那句老话,我们不做内容的搬迁者,我们尽量用最简洁的话语做一个内容的解读者,让更多的人能够更好的理解我们的分享内容,并持续输出。

1.1 全连接网络有什么不足的地方

神经网络(全连接网络)示意图

不知道同学们还记得我们之前学习的神经网络吗,那是最基础的神经网络,也叫做全连接网络(如上图),与之前一样,学习一门新的知识之前,我们先来想想之前的知识的不足或者说可以改进的地方,最后得出为什么会出现卷积神经网络。

从上图我们可以看到不管是输入层还是隐藏层,他们的每一个神经元都连接了下一层的每一个神经元,换句话说就是下一层的每一个神经元都连接上一层的所有神经元(如果这段话不太理解,请大家仔细看上图再进行下一步阅读),这样设计的神经网络计算将会对每一个神经元分配一个权重与输入进行乘积,等等,每一个?如果我们的神经元的数量很多,甚至是数百上千呢?深度学习其实就是模拟人脑进行神经网络计算的,然而人脑中的神经元的神经元根据科学家的实验结果绝对是成千上万的,那么深度学习的神经元不能太少吧,太少了就不能够对输入数据的特征学习得很好,因此全连接网络的设计对于大量神经元的计算是十分有待改进的地方,换句话说,最起码不能让一个神经元都去连接上一层的每一个神经元吧,是否可以让下一层的每一个神经元至只与上一层的某几个神经元相连呢?是的,有如此需求,就有相应的研究者诞生,因此,CNN的出现也就变得理所当然,有个问题其实我们可以反思,就是当目前的研究出现瓶颈或者说需要改进的地方的时候,总会出现解决相应问题的研究者,有需求就有研究,我们的社会就是如此不断进步,很幸运,我们正处于这样的时代。

1.2 卷积神经网络

卷积神经网络示意图

如上图所示就是一个用卷积神经网络构建的模型(整体没看懂没关系,看懂大概就行,后期会对每一个部分进行讲解),我们可以看到输入是一只猫或者一个大写字母A, 而卷积神经网络的目的就是给定我们的输入,最终输出物体的类别,是猫还是A? 那么卷积神经网络的核心肯定是卷积了,卷积到底是什么呢?不知道大家有没有学过信号与系统这门课,在里面的卷积操作是针对两个函数在一个区间内进行一个平移融合(融合),最后生成一个新的函数,学的时候可能就是记得是一种数学操作而已,并没有什么特别的,当然,我们深度学习里面的卷积神经网络和信号与系统里面是有相似的地方,但是又有一点不同,不过没关系,我们先来看下面一幅稍微形象化的图:

首先的意思是输入图像经过卷积层(Convolution Layer)后生成了3个特征图(Feature Maps, 不知道是啥没关系,只要知道经过卷积之后的输出就是特征图就对了),一次后面还经过了池化层(Pooling Layer),经过一系列的操作就到了输出层(Output Layer),这一层包括三个神经元,由此,我们可以看到该网络用于一个图像三分类的任务(也许是两类物体,一个背景),下面,我们就来看看卷积操作是怎样进行的。

通常来说卷积操作对于图像任务会更加友好一点(那它可以用于其他任务吗?当然就可以啦,语音,文本都可以的),这里我们也用图像来进行讲解,我们都知道彩色图像是三通道(RGB),灰度图像是单通道,他们在电脑中的存储就是一个具有长宽高的矩阵,矩阵的值通常在0-255,也可以归一化为0-1,如果之前还没有接触过图像处理的同学,请先学习我们公众号的Python图像处理篇:【图像篇】opencv图像处理(一)---图像基础知识,以便我们更好的学习深度学习。

假如说,我们的一个单通道图像(灰度图像)的矩阵是这样的:

是的,你没看错,图像在计算机中的存储就是这样一个矩阵,如果是彩色图像的话,通常是三个通道,是这样的:

卷积操作主要包含四个要素:卷积核(也叫滤波器),卷积核的数量(也可以称之为深度),卷积核大小(一般为一个小方形,例如3x3大小的卷积核),卷积步长(卷积核每多少个像素进行一次移动,后面会讲),卷积操作其实就用一个卷积核对输入图像进行卷积计算,计算的范围仅仅取决于卷积核当前所包含的区域,如下图,我们有这样一个卷积核:

卷积核与输入图像进行卷积操作:

上图的意思就是说一个输入大小为5x5大小的图像与一个3x3大小的卷积和进行卷积操作生成了一个3x3的特征图,那么我们来看看它的计算操作,也就是卷积后的输出是什么:

如图,左边就是原始图像叠加上了卷积核进行了卷积操作,右边是卷积操作的输出,我们可以清晰的看到,卷积核从图像左上角开始覆盖与卷积核大小同样的区域进行计算,随后向右进行移动,这里的步长为1,也就是卷积核进行第一次计算后向右移动一个像素进行下一次计算,当右边覆盖完之后,就会自动地移到下一行反复上面操作,每一次计算都只会得出一个值,而这个值也会随着卷积核的位置进行放置,上图就是在第一行移动了三次,因此输出的第一行也就只有三个值,那么之前提到的计算是怎么回事呢?如果同学们仔细观察就会发现,卷积的计算操作就是当前卷积核覆盖的图像区域的每一个值对应相乘后进行相加就得的了输出对应位置的值,简单点就是,卷积核的值对应图像区域的像素值进行相乘,然后全部加起来就得到了输出(也叫加权求和),请切记,每一次计算有且只有一个值进行输出。上面的图没太看明白,我们看看这个:

上图就是比较形象化的卷积核(Kernel)在图像上的移动计算(也叫滑动),很显然,经过一个3x3大小的卷积核进行卷积运算后,我们的原始图像6x6变成了4x4, 原始图像变小了,因此,卷积运算有一个作用就是降维,这个我们后期再说,降维的操作不光只有卷积哦。

卷积神经网络的文章我们准备分为两次或者三次讲解,本次文章我们仅仅带领大家认识一下卷积操作,从图像的角度让大家了解卷积的计算,下次文章,我们将会用数学公式让大家更好的理解卷积计算。

结语:

本次分享文章结束了,我们主要学习了卷积操作的几个要素和卷积操作的计算过程,其中要素是大家一定要记得的,因为后期的卷积神经网络的搭建这几个参数才是重点,至于卷积的计算过程,我们还在下一次文章用数学公式再次进行讲解,让大家从图像到数学的方式更好的理解卷积操作。今天的内容十分基础,希望大家用心的看看卷积的计算过程,特别是位置对应和滑动操作。

周末愉快,我们下期再见!

编辑:玥怡居士|审核:小圈圈居士

0 人点赞