1.卷积层(Convolution Layer)
2.池化层(Pooling Layer)
3.CNN经典架构

1.卷积层(Convolution Layer)
a.卷积层介绍
以CIFAR10中的图像为例,它的大小为32*32*3,CNN处理的就是如同图像结构的数据,CNN中的各层以这种结构的数据为输入,经过处理后输出的数据也是同样的组织形式,所以CNN操作的数据是如同图像一样的立体结构,而不是传统神经网络处理的向量形式。
【CS231n笔记】07 Convolutional Neural Networks
这种立体结构有三个维度(长度、宽度、深度),在整个CNN中数据都要保持这些三维特征。
注:这里的深度并非“深度神经网络”中“深度”的含义,它只是数据的第三个维度。

卷积层工作流程:使用若干滤波器(filter)对图像进行卷积。具体的,每个滤波器以固定步长对图像进行遍历,计算每个数据块(维度同滤波器一致)与滤波器的点乘得到一个数值,同一滤波器的结果组成一个**图,将多个不同滤波器生成的**图在深度维度上堆叠,即得到该卷积层的输出。
【CS231n笔记】07 Convolutional Neural Networks
滤波器的维度一般很小,常用的有3*3、5*5等,注意滤波器的深度维度要同输入数据的一致。
卷积神经网络就是使用一系列卷积层对数据进行处理,另外中间穿插使用**函数(如ReLU),具体结构如下图:
【CS231n笔记】07 Convolutional Neural Networks
经过多个卷积层处理的数据会构建成具有层次结构的特征表示,如下图所示,将各层的特征图进行可视化:
【CS231n笔记】07 Convolutional Neural Networks
可以看到,第一层中基本都是边缘或者色块,那么该层的滤波器就会在原始图像中寻找这些特征,随着网络的深入,将底层特征组合成为更高层更抽象的特征。
这与Hubel和Weisel的层次特征理论相一致,底层特征经过组合得到更加复杂的特征表示。
【CS231n笔记】07 Convolutional Neural Networks

另举例如下图,每个滤波器对应一个**图。可以看到第一个滤波器注重于检测相应反向的纹理,而第二个滤波器注重于检测橙色特征。
【CS231n笔记】07 Convolutional Neural Networks

卷积神经网络的大体布局如下:
【CS231n笔记】07 Convolutional Neural Networks
主要有卷积层(CONV)、非线性变换层(如ReLU)、池化层(POOL),这三种类型的层经过若干次堆叠,会得到越来越抽象的表示,最后接若干全连接层(FC),用来判定输入图像在不同类别上的得分。

在进行卷积操作之前,会在输入数据边界进行零值填补,这样经过卷积操作的输出数据与输入数据的长宽会保持一致。
【CS231n笔记】07 Convolutional Neural Networks
一般的,如果卷积层滤波器滑动步长为1,大小为F*F,那么零值填充的需要(F-1)/2,这样就可以保证输入输出数据的长宽一致。

输出数据的维度一般根据下列公式进行计算,影响输出数据维度的因素有滤波器数量K、滤波器大小F*F、滑动步长S、零值填充P。滤波器数量一般是2的幂,常用的有32、64、128、512等,大小一般取1*1、3*3、5*5,步长一般为1或2,零值填充根据前面的设置来决定。
【CS231n笔记】07 Convolutional Neural Networks
每个**图由一个滤波器生成,即卷积层采用了参数共享策略,所以每个卷积层中的参数数量为(F*F*D1)*K,另外还有K个偏置。

采用1*1大小的滤波器的卷积层也是有意义的,虽然滤波器在长宽维度上为1,但在深度维度并非如此,所以1*1卷积层中的滤波器进行1*1*D的点乘运算。
【CS231n笔记】07 Convolutional Neural Networks
1*1卷积层一般可以用于降维。

b.卷积层在不同软件中的配置
(1) Torch
【CS231n笔记】07 Convolutional Neural Networks
(2) Caffe
【CS231n笔记】07 Convolutional Neural Networks
(3) Lasagne
【CS231n笔记】07 Convolutional Neural Networks

c.从大脑/神经元的角度看卷积层
【CS231n笔记】07 Convolutional Neural Networks
滤波器在某位置的点乘操作可以看作一个固定在此位置的神经元,它只与输入数据中的一小部分相连接(局部连接),对该区域的输入进行操作。
【CS231n笔记】07 Convolutional Neural Networks
但是同一个**图中的滤波器参数是相同的,也就是说生成同一个**图的神经元共享参数,但是它们的局部连接区域不同,F*F大小的滤波器也意味着每个神经元具有F*F大小的感受区域(receptive field)。
【CS231n笔记】07 Convolutional Neural Networks
但是在深度维度上,局部连接区域相同的神经元具有不同的参数,所以神经元只与生成同一**图的神经元共享参数。
由此可以看出,卷积层中的神经元具有共享参数和局部连接的特点。共享参数使得每个**图由相同特征组成,并且可以减少参数数量,避免过拟合。局部连接即使用小的滤波器而非全局连接,这样也可以减少参数数量。

2.池化层(Pooling Layer)
由于采用零值填充,卷积层一般不会减小长宽维度的尺寸,而是池化层通过下采样(downsampling)进行尺寸减小,下采样处理在每个**图中独立进行。
【CS231n笔记】07 Convolutional Neural Networks
最常用的是最大值池化(max pooling),即选取滤波器中的最大值作为输出。
【CS231n笔记】07 Convolutional Neural Networks
另外常用的还有平均值池化,取滤波器中数据的平均值作为输出。

池化层的输出维度计算如下
【CS231n笔记】07 Convolutional Neural Networks
池化层中没有参数,另外注意池化层一般不使用零值填充处理。

卷积神经网络演示(ConvNetJS)
http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

3.CNN经典架构
a. LeNet-5
【CS231n笔记】07 Convolutional Neural Networks

b. AlexNet
【CS231n笔记】07 Convolutional Neural Networks

c. ZFNet
【CS231n笔记】07 Convolutional Neural Networks

d. VGGNet
【CS231n笔记】07 Convolutional Neural Networks

e. GoogLeNet
【CS231n笔记】07 Convolutional Neural Networks

f. ResNet
【CS231n笔记】07 Convolutional Neural Networks
具体地
【CS231n笔记】07 Convolutional Neural Networks

模型规模与准确率
【CS231n笔记】07 Convolutional Neural Networks

总结
— 卷积神经网络一般由卷积层、池化层、全连接层组成
— 发展趋势:
滤波器尺寸变小;
网络架构变深;
不再使用池化层和全连接层,仅使用卷积层构成整个网络
— 典型架构为 [(CONV-RELU)*N-POOL?]*M-(FC-RELU)*K,SOFTMAX
N一般大于5,M较大,0 <= K <= 2;
近期如ResNet和GoogLeNet并没有采取这种形式

相关文章:

  • 2022-12-23
  • 2021-06-18
  • 2021-08-14
  • 2021-10-31
  • 2022-01-08
  • 2022-01-28
  • 2021-06-08
  • 2021-04-02
猜你喜欢
  • 2022-12-23
  • 2021-09-06
  • 2021-12-30
  • 2021-09-15
  • 2021-08-08
  • 2021-06-02
  • 2021-10-19
相关资源
相似解决方案