简介
卷积神经网络(convolutional neural network,CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。卷积网络在诸多应用领域都表现优异。“卷积神经网络”一词表明该网络使用了卷积(convolution)这种数学运算。卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。
卷积
卷积的定义如下:
$$
s(t)=(X*W)(t)
$$
上式中,$X$代表输入层输入,$W$叫做核函数(卷积核)。
对于二维(图像)情况,则有:
$$
s(i,j)=(X*W)(i,j) = \sum\limits_m \sum\limits_n x(i+m,j+n) w(m,n)
$$
上式与二维卷积的定义稍有不同,但许多机器学习的库都是使用此运算。
如下图为一个$3\times 4$的矩阵经过$2\times 2$的核映射得到$2\times 3$的输出矩阵,具体计算方式是在左上角初始化一个$2\times 2$的窗口,将窗口内元素分别与核函数对应位置相乘并求和,得到$aw+bx+cy+fz$(不是矩阵乘法哦!),再将窗口向右移动一位,再计算一次输出,依次类推。
在斯坦福大学的cs231n的课程上,有一个动态的例子,链接在这。 如下图,可以方便理解。
相对传统神经网络的改善
卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互(sparse interactions)、参数共享(parameter sharing)、等变表示(equivariant representations)。
稀疏交互
稀疏交互也称局部感知,卷积神经网络中,层与层之间的神经元节点不再是全连接形式,利用层间局部空间相关性将相邻每一层的神经元节点只与和它相近的上层神经元节点连接,即局部连接。这样大大降低了神经网络架构的参数规模。
参数共享
在卷积神经网络中,卷积层的每一个卷积滤波器重复的作用于整个感受野中,对输入图像进行卷积,卷积结果构成了输入图像的特征图,提取出图像的局部特征。每一个卷积滤波器共享相同的参数,包括相同的权重矩阵和偏置项。共享权重的好处是在对图像进行特征提取时不用考虑局部特征的位置。而且权重共享提供了一种有效的方式,使要学习的卷积神经网络模型参数数量大大降低。
等变表示
指CNN网络结构对平移、缩放、倾斜等变形具有高度不变性 。(通常依赖池化函数)
池化
池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。
池化函数一般采用MAX、AVERAGE、L2范数以及基于据中心像素距离的加权平均函数。
不管采用什么样的池化函数,当输入作出少量平移时,池化能够帮助输入的表示近似不变(invariant)。
池化综合了全体临近元素的反馈,使得池化单元少于探测单元,使下一次减小了k倍输入。这大大节省了网络的计算效率。
小作业
|
|
答案:
输出尺寸=(输入尺寸-filter尺寸+2*padding)/stride+1,
一层卷积 (200 - 5+ 2)/2 + 1 = 99.5 向下取整,则输出为99x99
pooling (99 - 3 + 0)/1 + 1 = 97 输出为97x97
二层卷积 (97 - 3+ 2)/1 + 1 = 97 输出为97x97
VGGNet
VGGNet是一个经典的卷积神经网络,VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,是ILSVRC-2014中定位任务第一名和分类任务第二名。其突出贡献在于证明使用很小的卷积(3*3),增加网络深度可以有效提升模型的效果,而且VGGNet对其他数据集具有很好的泛化能力。
网络结构
- VGG-16有16个卷积层或全连接层,包括五组卷积层和3个全连接层,即:16=2+2+3+3+3+3。
- 5段卷积层(每段2~3卷积层,后加池化层 )+3段全连接层(卷积层3*3,padding为same,步幅为 1 ,池化层2*2,步幅为 2 )
- 三个3*3的卷积层串联的效果相当于1个7*7的卷积层。3个串联的3*3的卷积层,比1个7*7的卷积层参数量少,只有后者的(3*3*3)/(7*7)=55%
- 3个3*3的卷积层比1个7*7的卷积层有更多的非线性变换,前者可以使用三次ReLU激活函数,后者只有一次