卷积神经网络(CNN)学习笔记
本系列将分为 8 篇 。本次为第 6 篇 ,介绍在计算机视觉中使用广泛并且十分基础的卷积神经网络 。
1.从感受野说起
不知道大家是否听说过感受野这个名词 ,是在 60 年代 Hubel 等人通过对猫视觉皮层细胞进行研究提出来的一个概念 。到80年代,Fukushima 在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。
2.CNN 基本知识
我们已经知道神经网络结构是怎样的了 ,见下图 :
卷积神经网络与普通神经网络的区别在于 ,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器 。在卷积神经网络的卷积层中 ,一个神经元只与部分邻层神经元连接 。
卷积神经网络所必须要理解的操作有卷积和池化 ,两个必须了解的概念有局部连接和权值共享 ,下边将一一道来 。
3.卷积
卷积层是卷积神经网络中的核心 ,从命名也能够看出来 。主要有两个关键的操作 ,即局部关联和窗口滑动 。将每一个卷积核在输入窗口依次滑动 ,进行卷积计算得到卷积结果 。例如下图 :
当然 ,上述图片中的卷积计算和数学中学的略有不同 ,理论来说卷积计算需要将卷积核旋转 180 度再进行滑动计算 ,但在这省略了旋转操作这一步骤(这一段可以跳过 ,避免数学基础不强的朋友弄混) 。
上述图片基本上介绍了卷积计算的方式 ,还需要介绍的有几个概念 以在计算机视觉领域为例 ,包括概念 :输入图片大小 ,卷积核大小(就是感受野大小),卷积核滑动步长 ,填充值 。
3.1 输入图片尺寸大小 ,记作 ni * ni *n维 ,ni 为图片大小 ,n维表示图片通道信息 ,例如 RGB 三通道图片中为 3 。
3.2 卷积核大小 ,记作 nf * nf * n维 ,也可以理解成感受野大小 ,即一个神经元连接的输入神经元个数或者说范围 。例如上图中为 2*2 ,即一个输出神经元通过卷积连接的输入神经元大小是 2*2 ,也就是局部连接的概念 !值得注意的是卷积核的维度必须和输入图片维度一致
3.3 滑动步长 stride ,记作s 。代表的是卷积核在输入上单次滑动的幅度 ,例如上图即为 stride=1 ,表示一次卷积后水平或垂直移动一个位置 。
3.4 填充值 padding ,以下图为例子,比如有这么一个5*5的图片(一个格子一个像素),我们滑动窗口取2*2,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?
我们可以在原先的矩阵加了一层填充值 ,使得变成 6*6 的矩阵 ,那么窗口就可以刚好把所有像素遍历完 ,这就是填充值 padding 的作用 。
值得一提的是 padding取值有两种 ,一个是 SAME ,一个是 VALID ,Same padding 时 ,卷积前后图片尺寸不变 ,padding = 0时即为 Valid padding 。
3.5 输出大小 ,如果我们用s表示stride长度,p表示padding长度,如果原始图片尺寸为n x n,filter尺寸为f x f,则卷积后的图片尺寸为:
其中 ,⌊⋯⌋表示向下取整。
然后就是多通道图片的卷积操作和多个卷积核的卷积操作 。
对于多通道图片的卷积操作 ,例如 RGB 三通道图片 ,只需要用同样三通道卷积核进行卷积操作然后累加得到卷积结果即可 。
至于多个卷积核的卷积操作 ,则可以理解成一个卷积核提取了图片的一种特征 ,多个卷积核分别对图片提取特征并得到多通道的输出结果 。
最后 ,关于卷积操作 。分享一张经典的动态图 ,很生动的描述了卷积层的操作过程 。
上述提到局部连接和参数共享两个概念 ,这两个也正是卷积神经网络区别于相比标准神经网络的关键 ,CNN 的优势之一就是参数数目要少得多 。参数数目少的原因有两个 :
- 参数共享 :一个特征检测器(例如垂直边缘检测)对图片某块区域有用 ,同时也可能作用在图片其它区域 。
- 局部连接 :因为滤波器算子尺寸限制 ,每一层的每个输出只与输入部分区域内有关 。
4.池化
池化层 Pooling layers 在 CNN 中能够减小数据大小 ,提高运算速度的 ,使用较多的池化方法有 max pooling 和 average pooling 两种 。max pooling是最常用的做法 。即取区域内的最大值 。同理 average pooling 即计算区域内的平均值作为特征 。计算示意图分别如下所示 :
max pooling
average pooling
最后 ,如果觉得这个系列不错 ,记得扫码关注噢 !