CS231n 笔记
Lecture 5 Convolutional Neural Networks 卷积神经网络
背景
常规的神经网络(全连接网络)在大尺寸图像分类领域由于参数量过大,易导致过拟合且算力消耗巨大,效果不佳。
卷积神经网络的结构
特点是神经元呈三维排列。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 \]
池化只做平面上的,不做深度上的,因此池化完成后深度不变 池化与卷积很相似,只不过在扫描时不做点积,而是做一些简单的操作,比如最大池化,就是取这一个区域中的最大值,池化时设定步长,使得每一个没有任何重叠。
它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。
可以理解为降采样处理
可以通过改变卷积核窗口滑动步长来取代池化层,同样具有降采样效果。
有一个趋势——完全弃用池化层和全连接层,保留卷积层,形成非常深的卷积网络