美文网首页
卷积网络概要

卷积网络概要

作者: 饕餮007 | 来源:发表于2019-01-06 23:32 被阅读0次

一、卷积的概念

卷积是数学上的概念,具体数学上的不详解,有兴趣可以看看信号分析与处理相关的内容,里面大量用到卷积计算。这里主要谈谈在深度学习中的卷积,可以简单的理解为在原始输入f(x)中取固定大小的一段(或者是一片/一块等)乘以某个给定的函数g(x),并按照一定的步长移动,依次执行函数计算,直到遍历完原始的输入,在深度学习的图像相关任务中中常见的g(x)往往是一个给定大小的矩阵,将此矩阵在原始图像输入中进行滑动卷积,最后得到一个新的图像矩阵。

二、卷积为什么在图像处理中常用

1、考虑使用全连接的神经网络作为隐藏层,则原始二维图像需要被展开成一个单列数组进行输入,在这种数据处理方式下,原始图像的空间结构信息丢失,神经网络很难较好的学习到原始图片的空间信息,而卷积计算是在原始图像空间中进行计算,有效的考虑了原始图像中的空间关系,神经网络可以很好的学习到原始图像特征。

2、卷积计算在对原始图像各个空间位置进行计算的时候,所采用的参数是一致的,从而实现了共享的参数,此方式大大减少了需要训练的参数数量,便于计算机进行处理。

        这里考虑一个简单的例子:假设图片原始输入为64*64*3(RGB三个通道)。

        方案一采用全连接方式,隐藏层节点为500,则次数需要的连接参数数量为:64*64*3*500=6144000个,而这仅仅是第一层的隐藏层参数。

        方案二采用卷积神经网络,卷积核为3*3*3,卷积数量为200个,则参数数量为:3*3*3*200 = 5400个,由此可知两种方式所需要学习的参数数量相差巨大,从而计算机可以高效的学习。

三、卷积神经网络常见结构

输入层-->卷积层-->卷积层-->池化层-->卷积层-->卷积层-->池化层...-->全连接层->连接层-->输出层

以上是常见的卷积网络结构,省略号表示可以多次重复,视实际情况而定。下面对涉及到的层及作用进行说明。

输入层:原始数据输入层,如果任务为图像类别,则输入层为(n,n,c)的矩阵,c表示图像的通道,例如灰度图是1,常见的彩色图通道数为3,n代表长和宽,因为后续要做卷积,所以输入图片需要resize到长和宽相等,此处用n表示

卷积层:卷积层可以理解为一个(w,w,c)的矩阵,w为卷积核的长和宽,一般为奇数,如3,5,7等等。c为通道数,需要和输入层的通道保持一致,如果输入为3通道(RGB)图像,则此处的c也应该为3。为了简化问题,此处假设输入图像为灰度图,则c=1,那么卷积核变为一个w*w的正方形,我们将这个正方形在原始图像中从左至右,从上至下的滑动,滑动的步幅为s,每次滑动,都将此正方形和原始图片被覆盖的部分各自相乘后相加,最后得到一个数字代表结果。有个简单的公式可以计算出卷积后图片的大小:newWidth=(n+2p-w)/s+1,这里的p表示padding值,即表示在卷积前,为了保证卷积后的图片大小保持不变,我们会在图片的四周加上一圈0值,叫做padding,这样可以保障图片的尺寸在卷积前后不变。

池化层:池化层是一种特殊的层,一般用来缩小图片的大小,采用的策略一般是max pooling(最常用)和average pooling(较少用),具体操作方式见下图

简单解释一下,上图表现的是采用(2,2)的滑动窗口,步长s为2,在每种颜色块中进行了一次池化,采用的策略是max pooling,即在当中找到最大的值,并填入右边的格子中,这样操作完毕后会将原始图片大小缩小一半,但又不至于丢失主要信息。

池化层的意义主要是防止过拟合以及提升网络的泛化能力,具体原因此处不详细展开解释。

全连接层:主要用于将之前反复卷积和池化后的多维矩阵展开层一维列表,以供后面进行分类或回归使用。

连接层:同传统神经网络一样,就是普通的连接层,和上层输入彼此连接,以供后续输出层使用

输出层:神经网络实际输出数据的地方,具体采用何种方式设计要看实际问题需要,如果是分类任务,可以采用每个类别一个输出节点,然后使用softmax计算概率,用交叉熵做loss function。如果是回归任务,则可以按照回归的思路设计输出层,然后用mse做loss function。额外提一下,在对象定位任务中,由于网络需要同时输出对象的类别预测和对象的坐标值,所以综合使用了分类和回归的思路进行设计输出层,在后续的object localization任务中会详细解释。但核心思路还是从设计合适的loss function出发,依实际任务灵活定义和组合。

四、经典卷积网络

在过去几年,经典卷积网络结构不断出现,为我们的工作提供了很多灵感和启发,这里做一个简单的讲解,如果有兴趣,欢迎去github上搜索相应网络的算法实现

LeNet-5:


比较早的卷积网络,用于mnist手写数字识别,大约有6万个参数,在LeNet出现的时候,开启了利用卷积神经网络进行计算机视觉处理的高潮。

AlexNet:


深度为8层(不考虑输入层),大约包含6000万个参数,更大的深度提升了网络的处理能力,因此表现优于上面的LeNet。需要提醒一下,受限于当时的GPU显存容量,AlexNet在设计时采用了复杂的分布式设计,其在两块GPU上进行训练,在现在已经不需要这样做。

VGG-16:


此网络用语处理1000分类问题,所以可以看到最下面是FC-1000,表示全连接,1000个神经元,然后使用softmax进行概率计算。上面则是卷积层和池化层的累加,此网络参数高达约1.4亿,需要大量的资源和时间进行训练。在后期已经倾向于不用全连接层,而用(1,1)的卷积计算代替,也可以起到全连接的作用,在后续文章中会提到。

ResNet:


微软的ResNet在2016年横空出世,前面提到,深度学习网络往往越深,则网络的表达能力越好,因此我们倾向于使用更深的网络进行训练,但是越深的网络也代表越难训练,因为随着深度的增加,误差所引起的梯度难以传播到前层,往往会发生梯度消失和梯度保障,从而无法训练。而在ResNet中,微软创造性的使用了短接的概念,将前面的输入直接跳过几层后,接到后续的输出层,与输出层的输出相加后在运行激活函数,此方法使得更加容易训练深层的神经网络,因此性能表现非常好。提醒一下,个人认为短接的思想很重要,在后续RNN中,也能看到这一类思想的使用。关于此网络的具体分析,建议查看链接:[论文阅读] Deep Residual Learning for Image Recognition(ResNet)

四、总结

本文主要是对卷积的概念进行理解,后面的经典卷积网络介绍也是为了加深各位的理解,在此基本概念上进行变化和叠加,最终可以得到类似ResNet这种复杂的神经网络结构,从而可以更好的训练神经网络处理视觉任务。后续将陆续推出一些实际案例及代码,以进一步加深理解,敬请期待!

相关文章

网友评论

      本文标题:卷积网络概要

      本文链接:https://www.haomeiwen.com/subject/iyoerqtx.html