Press "Enter" to skip to content

deep learning 卷积神经网络详解

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

filter/kernel:提取原始图像的局部特征

 

filter/kernel = weights

 

如何设计一个filter = 通过神经网络学习

 

example:

这个fileter提取出了原始图像的边界,称他为 [边界检测]

 

CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,从而进行图像识别等等功能。

 

二、CNN的基本概念

 

1.padding:

 

问题:每次卷积,图像都缩小,这样卷不了几次就没了; – 相比于图片中间的点,图片边缘的点在卷积中被计算的次数很少。这样的话,边缘的信息就易于丢失。

 

解决:以采用padding的方法。我们每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一样大,同时,原来的边缘也被计算了更多次。

把上面这种“让卷积之后的大小不变”的padding方式,称为 “Same”方式, 把不经过任何填白的,称为 “Valid”方式。这个是我们在使用一些框架的时候,需要设置的超参数。

 

2.stride

 

前面我们所介绍的卷积,都是默认步长是1,但实际上,我们可以设置步长为其他的值。

 

3.pooling 池化

 

polling:提取卷积图的主要部分,并减少参数数量,防止模型过拟合 max poling/average polling

4.对多通道(channels)图片的卷积

 

彩色图像,一般都是RGB三个通道(channel)的,因此输入数据的维度一般有三个:(长,宽,通道)。 比如一个28×28的RGB图片,维度就是(28,28,3)。

 

前面的引子中,输入图片是2维的(8,8),filter是(3,3),输出也是2维的(6,6)。

 

如果输入图片是三维的呢(即增多了一个channels),比如是(8,8,3),这个时候,我们的filter的维度就要变成(3,3,3)了,它的 最后一维要跟输入的channel维度一致 。 这个时候的卷积,是三个channel的所有元素对应相乘后求和 ,也就是之前是9个乘积的和,现在是27个乘积的和。因此, 输出的维度并不会变化。还是(6,6)。

 

但是,一般情况下,我们会 使用多个filters同时卷积 ,比如,如果我们同时使用4个filter的话,那幺 输出的维度则会变为(6,6,4) 。

 

图中的输入图像是(8,8,3),filter有4个,大小均为(3,3,3), 得到的输出为(6,6,4)。

其实,如果套用我们前面学过的神经网络的符号来看待CNN的话,

我们的输入图片就是X,shape=(8,8,3);
4个filters其实就是第一层神经网络的参数W1,shape=(3,3,3,4),这个4是指有4个filters;
我们的输出,就是Z1,shape=(6,6,4);
后面其实还应该有一个激活函数,比如relu,经过激活后,Z1变为A1,shape=(6,6,4);

所以,在前面的图中,我加一个激活函数,给对应的部分标上符号,就是这样的:

三、CNN的结构组成

 

1. Convolutional layer(卷积层–CONV)

 

由滤波器filters和激活函数构成。 一般要设置的超参数包括filters的数量、大小、步长,以及padding是“valid”还是“same”。当然,还包括选择什幺激活函数。

 

2. Pooling layer (池化层–POOL)

 

这里里面没有参数需要我们学习,因为这里里面的参数都是我们设置好了,要幺是Maxpooling,要幺是Averagepooling。 需要指定的超参数,包括是Max还是average,窗口大小以及步长。 通常,我们使用的比较多的是Maxpooling,而且一般取大小为(2,2)步长为2的filter,这样,经过pooling之后,输入的长宽都会缩小2倍,channels不变。

 

3. Fully Connected layer(全连接层–FC)

 

这一层是每一个单元都和前一层的每一个单元相连接,所以称之为“全连接”。 这里要指定的超参数,无非就是神经元的数量,以及激活函数。

 

一个CNN的结构图:

它的结构可以用: X–>CONV(relu)–>MAXPOOL–>CONV(relu)–>FC(relu)–>FC(softmax)–>Y 来表示。

注:在经过数次卷积和池化之后,我们 最后会先将多维的数据进行“ 扁平化 ”,也就是把 (height,width,channel)的数据压缩成长度为 height × width × channel 的一维数组,然后再与 FC层连接,这之后就跟普通的神经网络无异了。
注:可以从图中看到,随着网络的深入,我们的 图像越来越小,但是channels却越来越大了 。在图中的表示就是长方体面对我们的面积越来越小,但是长度却越来越长了。

四、卷积神经网络 VS. 传统神经网络

 

传统的神经网络,其实就是多个FC层叠加起来。 CNN ,无非就是把FC改成了CONV和POOL,就是把传统的由一个个神经元组成的layer,变成了由filters组成的layer。

 

为什幺要这样变?有什幺好处? 具体说来有两点:

 

1.参数共享机制(parameters sharing)

参数数量显着下降!

 

因为,对于不同的区域,我们都共享同一个filter,因此就共享这同一组参数。

 

 

 

    1. 让我们的网络的参数数量大大地减少

 

    1. 可以有效地 避免过拟合

 

    1. 由于filter的参数共享,即使图片进行了一定的平移操作,我们照样可以识别出特征,这叫做 “平移不变性”。因此,模型就更加稳健了。

 

 

2.连接的稀疏性(sparsity of connections)

 

由卷积的操作可知,输出图像中的任何一个单元,只跟输入图像的一部分有关系:

而传统神经网络中,由于都是全连接,所以输出的任何一个单元,都要受输入的所有的单元的影响。这样无形中会对图像的识别效果大打折扣。比较,每一个区域都有自己的专属特征,我们不希望它受到其他区域的影响。

 

正是由于上面这两大优势,使得CNN超越了传统的NN,开启了神经网络的新时代。

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注