Skip to content

DeepLearning笔记(6)——CNN

1. CNN特点

假设一批图片样本,图片尺寸都是100 × 100(单通道)。使用神经网络来进行训练,假设第一个隐藏层有2500个神经单元,则参数个数一共为 10000 × 2500 = 2500W

存在的问题:

  1. 参数数据量太多,需要大量的计算资源
  2. 图片是一个二维结构,相邻像素之间的关联较强,距离远的像素之间关联较弱,因此不必要一次性把所有像素在一起计算

CNN可以很好地解决这两个问题,其基本特点是:

  • 权值共享
  • 局部连接

2. 卷积

卷积是一种数学运算,定义可以参考wiki。在CNN中,主要关注离散卷积。关于离散卷积的例子,可以参考 如何通俗易懂地解释卷积?- 马同学的回答。CNN中的卷积操作和数学上的定义类似,但并不完全一致(相乘的顺序不同)。

卷积核即filter,用来对图像进行特征提取。计算规则如图所示:

图片来源:https://mlnotebook.github.io/post/CNN1/

假设图片尺寸为 nH×nW,filter尺寸为 f,则卷积操作后的尺寸为 (nHf+1)×(nWf+1)

3. Padding

上面的操作存在的不足:

  1. 每次卷积操作都会使图像缩小
  2. 角落和边缘区域的像素点使用的很少,即丢失了图像边缘位置的信息

为了解决这两个问题,在卷积操作之前,先对图像周围进行填充,通常为zero-padding,即填充0。

图片来源:https://mlnotebook.github.io/post/CNN1/

常用的填充方式为:

  • Valid:不填充 p=0
  • Same:输出尺寸和输入尺寸一致 p=f12

filter尺寸通常为奇数:方便same padding

4. Stride

filter每次移动多个像素。此时输出尺寸为:

nH+2pfs+1×nW+2pfs+1

5. Channel

对于RGB图像,有三个色彩通道,此时filter不再是二维,而是一个三维的结构。

图片来源:https://mlnotebook.github.io/post/CNN1/

  • 输入尺寸 nH×nW×nC
  • filter尺寸 f×f×nC
  • 输出尺寸 nH+2pfs+1×nW+2pfs+1

假设filter的个数为 nC,则最后输出的尺寸为 nH+2pfs+1×nW+2pfs+1×nC

6. 卷积层的符号表示

  • filter size: f[l]
  • padding: p[l]
  • stride: s[l]
  • number of filters: nC[l]
  • input: nH[l1]×nW[l1]×nC[l1]
  • output: nH[l]×nW[l]×nC[l],其中 nH[l]=nH[l1]+2p[l]f[l]s[l]+1, nW[l]=nW[l1]+2p[l]f[l]s[l]+1
  • each filter: f[l]×f[l]×nC[l1]
  • activations: a[l]nH[l]×nW[l]×nC[l], A[l]m×nH[l]×nW[l]×nC[l]
  • weights: f[l]×f[l]×nC[l1]×nC[l]
  • bias: (1,1,1,nC[l])

7. Pooling

  • 提高计算速度
  • 提高所提取的特征的有效性

参数:尺寸 f,步长 s

pooling方法有:

  • max pooling
  • average pooling

常用的是max pooling:

8. CNN一般结构

  • 卷积层(CONV)
  • 池化层(POOL)
  • 全连接层(FC)