深度学习:卷积神经网络(详解版)


一、全局连接VS局部连接

       生物的神经网络是通过刺激而发生的连接,这说明在生物的神经网络中,什么时候需要哪部分神经网络的神经元,哪部分神经元就会被激活(连接)。
       而我们一开始根据生物神经网络模拟的人工神经网络的相邻神经元之间是全部激活的(全连接),这样不但增加了整个网络的权重和计算量,也增加了无用的信息,使网络容易过拟合。那么在人工神经网络中我们如何去模拟类似生物神经网络的这个过程呢?也就是不用把所有神经元都激活。

       这说明在一幅图中,如果要识别单独的某个物体,模型只要感受到局部的信息即可,无需感受到全图的信息。所以只要提取对应局部位置的特征信息即可,无需把图像上所有的信息都计算一遍。如果我们能够设计出一个只需要提取图像局部信息的网络模型,就可以解决这个问题了,这也就是相当于神经元的局部激活,只在图像的对应位置做计算。

       这样一来,原来在整幅图上做的运算,就变成了在局部做运算了。

       比如我们看到图上有人有马,我们在分辨马和人的位置的时候,是否需要观看整幅图呢?显然不是,我们只是针对目标所在的局部区域进行观看并分析。
       同样,我们判断哪个是人,哪个是马的时候也不一定要看完所有部位,我们只需要看到人的头、胳膊、腿等部位就可以判断图像表示的是人了,很明显,这也是基于局部区域特征而做出的判断。而对于每个小的局部信息做一个处理就要简单的多了,同计算量会大幅减少。

1.1 局部神经元连接的优势

在这里插入图片描述
局部连接,可以看到上一层网络中只有3个神经元和下一层网络的神经元相连接(这张图的流程是从下到上)。

总结:

  1. 局部连接的第一个作用是减少计算参数。
  2. 局部连接的第二个重要作用就是权重共享。

1.2 全连接网络的权重参数量

       以mnist数据为例,一张图像的大小是[28,28,1],那就意味着网络输入一张图片的参数就有28 x 28 =784个,如果隐藏层用了256个神经元,那么简单计算一下,第一层网络需要的参数个数(w和b)就有784 x 256+256个,第二层网络需要的参数个数(w和b)就有(256 x 10+10)个。

       而整个网络的计算量就有(784* 256+256)+ (256*10+10) 个,这个参数太多了,随便进行一次反向传播计算量都是巨大的,从计算资源和调参的角度都不建议用传统的神经网络。

1.3 神经网络的局部特征提取(卷积)

       卷积层最主要的两个特征就是局部连接和权值共享,或者叫做稀疏连接和参数共享。所谓局部连接,就是卷积层的节点仅仅和其前一层的部分节点相连接,只用来学习局部特征。

       局部感知结构的构思理念来源于动物视觉的皮层结构,其指的是动物视觉的神经元在感知外界物体的过程中起作用的只有一部分神经元。

       在计算机视觉中,图像中的某一块区域中,像素之间的相关性与像素之间的距离同样相关,距离较近的像素间相关性强,距离较远则相关性就比较弱,由此可见局部相关性理论也适用于计算机视觉的图像处理领域。

       因此,局部感知采用部分神经元接受图像信息,再通过综合全部的图像信息达到增强图像信息的目的。

       在一幅图像中,想要提取局部数据的特征,最直接的办法就是让这些局部的数据和一个对应大小的权重矩阵做内积运算。这个权重矩阵在神经网络中称为卷积核。

       在神经网络的各个维度的数据中,通过滑动滤波器提取局部数据特征的过程,称为神经网络的卷积过程。这种提取网络特征的模型被称为卷积神经网络模型。

1、对原始图像的边缘进行某种方式的填充(一般为0填充)。
2、将掩膜划过整幅图像,计算图像中每个像素点的滤波结果。

二:感受野

2.1 生物上的定义

       感受器受刺激兴奋时,通过感受器官中的向心神经元将神经冲动(各种感觉信息)传到上位中枢,一个神经元所反应(支配)的刺激区域就叫做神经元的感受野(receptive field)。

2.2 深度学习的定义

       在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。通俗的说,感受野就是输入图像对这一层输出的神经元的影响有多大。

2.3 感受野的作用

       感受野用来表示网络内部的不同神经元对原图像的感受范围的大小,或者说convNets(cnn)每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。

2.4 感受野的计算公式

在这里插入图片描述
       其中,RF是感受野。N_ RF和RF有点像,N代表neighbour, 指的是第n层的a feature在n- 1层的RF,记住N _RF只 是一个中间变量(某一层的感受野),不要和RF混淆。stride是步长, ksize是卷积核大小。

       这个算法从最后一层往前层层迭代直到追溯回input image,从而计算出感受野(RF)。

       可以看到在Conv1中的每一个单元所能看到的原始图像范围是3 x 3,而由于Conv2的每个单元都是由2 x 2范围的Conv1构成,回溯到原始图像,由于卷积核移动的时候重叠了一个像素,应该被减去,最终其实是能够看到的是5 x 5的原始图像范围。
       因此我们说Conv1的感受野是3 x 3,Conv2的感受野是5 x 5.输入图像的每个单元的感受野被定义为1,这应该很好理解,因为每个像素只能看到自己。

2.5 感受野对网络的影响

       神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和pooling层,在层与层之间均为局部连接。

       神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含全局语义层次更高的特征。相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。

三:卷积神经网络的构成元素

       卷积神经网络的元素一般由输入图像、卷积核、步长、填充、通道变化、输出图像(特征图)构成。

3.1 卷积核

       卷积核的形状一般是二维的,指的是卷积核在各个维度上的数据卷积,而各个维度上的卷积核其实是同时卷积的,这样各个维度上的卷积核就形成了一个滤波器,所以说滤波器是三维的。但是在深度学习中,二者的叫法有时候不是很明显。

1、180度 翻转卷积核。
2、不做边界填充,直接对图像进行相应位置乘积和。

       卷积核就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核。

       数学中的卷积和卷积神经网络中的卷积严格意义上是两种不同的运算。数学中卷积,主要是为了诸如信号处理、求两个随机变量和分布而定义的运算,所以需要“翻转”是根据问题的需要而确定的。

       卷积神经网络中"卷积”,是为了提取图像的特征,其实只借鉴了“加权求和”的特点。数学中的“卷积核”都是已知的或者给定的,卷积神经网络中“卷积核”本来就是trainable的参数,不是给定的,根据数据训练学习的,那么翻不翻转还有什么关系呢?因为无论翻转与否对应的都是未知参数!

       所以说,在CNN中,卷积核的权值不需要提前设计。在CNN中,卷积核一般都是正方形。

3.2 步长

       卷积核(滤波器)每次移动的像素单位就称为步长。

3.3 填充

       卷积运算后,输出图片尺寸缩小,越是边缘的像素点,对于输出的影响越小,因为卷积运算在移动的时候到边缘就结束了。中间的像素点有可能会参与多次计算,但是边缘像素点可能只参与一次。所以我们的结果可能会丢失边缘信息。

       那么为了解决这个问题,我们引入padding,什么是padding呢,就是我们认为的扩充图片,在图片外围补充一些像素点,把这些像素点初始化为0.

       经过padding之后,原始图片尺寸为(n+2p) x (n+2p),filter尺寸为fxf,则卷积后的图片尺寸为(n+2p-f+1) x (n+2p-f+1)。若要保证卷积前后图片尺寸不变(步长为1),则p应满足: p=(f-1) / 2

       那么填充的优势是什么呢?

       (1) 保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。
       (2) 步长为2的时候,卷积不会丢失信息。

       (3) 卷积神经网络的卷积层加入Padding,可以使得卷积层的输入大小和输出大小一致。

3.4 输出图像(特征图)

       每层卷积结束后得到的卷积值的组合就是特征图。

四:卷积的计算

在这里插入图片描述
       根据对卷积的结构分析,可以确定,卷积过程中的权重参数是和卷积核的大小、输入通道数、输出通道数相关的,而和输入大小、输出大小无关的。

       比如图像输入大小是6 x 6 x 3,卷积核大小是3 x 3,通道变化是从3变到 2,也就是说卷积核从3个通道的输入变成了输出2个通道的输出,当然对应的特征图也成了2个,那么卷积层的参数量就是3 x 3 x 3 x 2+2,后面加的2是输出通道上的偏置。

       根据前面的知识,已经知道卷积层的参数量就是卷积核的形状乘以输入通道数,再乘以输出通道数,再加偏置。即(kernel WkernelL H in channels* out channels+out channels) ,例如某一层卷积神经网络的卷积核是3*3,输入通道为1,输出通道为16,那么这一层网络的参数量就是:
3 x 3 x 1 x 16+16=160,后面加的16是输出通道上的偏置。

       那么在卷积的某一层当中的运算量到底是多少,这个结果的影响就不仅仅是通道和卷积核的因素了,还和输出特征图的大小,以及批次有关系的。
       例如某一层卷积神经网络的卷积核是3 x 3,输入通道为1,输出通道为16,输出的特征图大小是14 x 14,如果输入数据的批次是100,那么还要乘以这个批次,所以这一层网络的运算量就是:
       (3 x 3 x 1 x 16 +16) x 14 x 14 x 100 = 2822400 + 313600 = 3136000

       卷积核在图上每滑动一次,相当于就做了一次运算结果的变化,所以最后的特征图大小正是卷积核在图上的横向和竖向上的滑动总次数,另外还有批次的影响,如果批次是一次输入2张图像,那么计算上还要乘以2才可以。

五:卷积神经网络的运行过程

(1)每个通道上的滤波器对应每个通道上的数据进行卷积,得到每个通道上的特征图。

(2)每个通道上的滤波器对应每个通道上的数据进行卷积,得到每个通道上的特征图。

(3)最后对这个特征图加上偏置,就得到了卷积神经网络在这一输出通道上的净输出。

六:卷积的优势

(1) 局部感知
(2) 共享权重
(3) 参数量少
(4) 训练时间短
(5) 模型收敛快
(6) 精度高

七:常见的卷积类型

7.1 一维卷积

左图:横轴表示次数,纵轴表示频率(统计量)。
右图:表示卷积核

       一维卷积常用于序列模型,信号处理、自然语言处理领域。

7.2 二维卷积

       二维卷积常用于计算机视觉、图像处理领域。

7.3 三维卷积

       三维卷积常用于医学领域(CT影像),视频处理领域(检测动作及人物行为)

八:分组卷积

       正常情况下,通道之间的全连接,通道融合是充分的。通道分组数越多,通道融合越不充分。

       当处理的问题比较简单的时候,如利用mnist数据集进行十分类,可以利用分组卷积。当处理问题比较复杂的时候,用了分组卷积以后,就会出现减少参数量,降低精度的情况。

       那我们应该怎么做,将输出的特征图通道进行打乱,再去分组,然后利用卷积核进行卷积,得到的结果就相当于把分组之后的通道融合了。这种处理方式叫做通道混洗。

九:扩张(空洞)卷积

       扩张卷积(dilated convolutions)又名空洞卷积(atrous convolutions),向卷积层引入了一个称为“扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。

       换句话说,相比原来的标准卷积,扩张卷积(dilated convolution)多了一个超参数称之为“扩张率”(dilationrate),指的是卷积核各点之间的间隔量,[ 通常convolution的dilatation rate为1],扩张卷积在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(featuremap)的大小保持不变。

       一个扩张率为2的3X3卷积核,感受野与5X5的卷积核相同,但参数数量仅为9个,是5X5卷积参数数量的36%。扩张卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑扩张卷积。

十:转置卷积

       卷积的时候是将卷积核和对应输入矩阵中的g个值相乘,并且相加,将其转变为一个输出值。一个卷积操作是一个多对一(many-to-one)的映射关系。

       反过来操作。我们想要将输入矩阵中的一个值映射到输出矩阵的g个值,这将是一个一对多(one-to-many)的映射关系。这个就像是卷积操作的反操作,其核心观点就是用转置卷积。

       之所以叫转置卷积是因为,它其实是把我们平时所用普通卷积操作中的卷积核做一个转置,然后把普通卷积的输出作为转置卷积的输入,而转置卷积的输出,就是普通卷积的输入。

       根据反卷积的数学含义,通过反卷积可以将通过卷积的输出信号,完全还原输入信号。转置卷积只能还原shape大小,而不能还原value。所以说转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。

       在使用转置卷积所需要注意的几点是:
(1)转置卷积的过程中图像上采样,越来越大,通道越来越浅。需要注意的是,转置前后padding, stride仍然 是卷积过程指定的数值,不会改变。
(2) stride=1时候的反卷积,不进行填充。当stride>1的时候,需要在原输入中插入0像素值。
(3)转置卷积一般会放大图像,也称为上采样过程,而卷积一般是缩小图像,也称为下采样过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值