0%

CS231n笔记——卷积神经网络

CS231n 笔记

Lecture 5 Convolutional Neural Networks 卷积神经网络

背景

常规的神经网络(全连接网络)在大尺寸图像分类领域由于参数量过大,易导致过拟合且算力消耗巨大,效果不佳。

卷积神经网络的结构

特点是神经元呈三维排列。CNN 中各层的神经元是三维排列的,分为宽度高度深度(这里的深度是指激活数据体的第三个维度,不是整个网络的深度)。

常规NN和CNN 一般 CNN 主要由三类层构成:卷积层池化层全连接层

卷积层

卷积层由卷积核集合构成。卷积核(又称滤波器)在宽度和高度上都比较小,但是深度和输入数据一致(卷积核深度上 extend 输入数据的全部深度)。即连接在空间(宽高)上是局部的,但在深度上是与输入一致的。 每个卷积核在输入数据上按照步长(stride)滑动,并在每个区域内计算内积,从而将原本的三维数据变成二维激活映射(activation map)。多个卷积核依次卷积后又得到了一个三维激活映射。 经过学习,卷积核学习到它应该在看到某些类型的视觉特征时被激活,这些特征很可能就是图像中物体的边缘,或是轮廓等更复杂的部分(事实上动物的视觉感知过程也是如此,由简单到复杂抽象)

卷积层输出尺寸的计算

输入图像的维度 N(input=\(N\times N\times d\)) 卷积核维度 F(filter_size=\(F\times F\times d\)) 步长(stride) 卷积核数量 c

\[ 单层输出尺寸=\frac{N-F}{stride}+1 \\总输出尺寸=上式\times c \]

除此之外,输出尺寸还与超参数零填充(zero-padding)有关。 0 填充是为了让输入图像的尺寸符合目标。 例如:input=7×7,output=7×7,步长 stride=1,如何处理?

解答: 把 input 扩充一圈,扩充的位置用 0 填充。 填充部分的大小计算: 设填充\(n\)圈,有

\[ (7+2n-F)/1=7 n=\frac{F-1}2 \]

F=3 ---> n=1 F=5 ---> n=2 F=7 ---> n=3

0 填充的意义在于,防止图片数据“shrinking too fast”,也就是防止图片尺寸收缩得过快,因为那样会丢失掉很多细节信息。 最终的公式如下:

  • 输入尺寸\(W_1\times H_1\times D_1\)
  • 卷积核数量\(K\)
  • 卷积核空间尺寸\(F\)
  • 步长\(S\)
  • 零填充数量\(P\)
  • 输出尺寸为\(W_2\times H_2\times D_2\)

\[ W_2=\frac{(W_1-F+2P)}S+1 \]

\[ H_2=\frac{(H_1-F+2P)}S+1 \]

\[ D_2=K \]

参数共享 卷积核数量K, 卷积核空间尺寸F,输入尺寸N×N×d

\[ 参数数量=K\times F\times F\times d+K \]

池化只做平面上的,不做深度上的,因此池化完成后深度不变 池化与卷积很相似,只不过在扫描时不做点积,而是做一些简单的操作,比如最大池化,就是取这一个区域中的最大值,池化时设定步长,使得每一个没有任何重叠。

它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。

可以理解为降采样处理

可以通过改变卷积核窗口滑动步长来取代池化层,同样具有降采样效果。

有一个趋势——完全弃用池化层和全连接层,保留卷积层,形成非常深的卷积网络