CNN架构


仅用于个人学习与总结,持续更新中......

1 引言

  写这篇文章的缘由是因为领导让我看一篇论文,论文原名叫《Reconstructing cell cycle and disease progression using deep learning》(直译:利用深度学习重建细胞周期和疾病进展),2017年发表在Nature Communications期刊上。这篇文章提出了一种通用的工作流程,结合卷积神经网络(Convolutional Neural Networks,CNN)和非线性降维,进行图像分类和可视化。由于所使用的网络最后一层的激活空间太高,解释性很差,作者采用非线性降维的方法在低维空间进行可视化。

 

  这篇文章的一个重要观点是深度学习能够基于分类标签重建连续的过程(意思是说标签可能具有连续关系但顺序未知,重建细胞周期即是仅利用离散的细胞状态标签便可形成一个连续的生物过程),另一个重要观点是深度学习不仅可以重建生物过程,而且能够产生足够普遍的特征,可以分离出不属于该过程的错误标记的细胞(如下图b)。第一个观点非常好理解,相邻的类在形态上比时间上相隔较远的类更相似,下图a是作者在糖尿病视网膜病变数据验证集上的tsne可视化。图a和b都产生了一个小且单独的簇,在图b中已用箭头突出显示,这个簇不在细胞周期阶段的标签里,经验证,该簇是死细胞。

   作者基于Inception-V1架构开发了"deepflow"架构,而Inception-V1是一种经典的CNN结构。众所周知,选用不同的CNN结构对最终的结果影响颇大。回归到本篇文章的初心,接下来主要针对不同CNN架构进行研究和探讨。

2 知识准备

 

3 CNN架构

  卷积神经网络发展非常迅速,应用非常广阔,下图为经典卷积神经网络发展的大致轨迹。CNN 取得的大多数进展不仅仅源自更强大的硬件、更大的数据集和更大的模型,更是由新的想法、算法以及更优化的网络结构共同带来的结果。

   本部分将按照时间顺序依次总结十三种经典CNN架构,依次如下:

  1. LeNet(1998 年)
  2. AlexNet(2012年)
  3. VGG(2014年9月)  
  4. Inception-V1(2014年9月)
  5. Inception-V2(2015年2月)
  6. Inception-V3(2015年12月)
  7. ResNet(2015年12月)
  8. Inception-V4(2016年2月)
  9. DenseNet(2016年8月)
  10. Xception(2016年10月)
  11. MobileNet-V1(2017年4月)
  12. MobileNet-V2(2018年1月)
  13. MobileNet-V3(2019年5月)

3.1 LeNet-5

 论文地址:http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

  LeNet-5是被誉为”卷积神经网络之父“的LeCun在1998年提出的,用于解决手写数字识别的视觉任务。自那时起,CNN最基本的架构就定下来了,即卷积层+池化层+全连接层。

  LeNet-5模型结构为输入层(INPUT)、卷积层(C1)、池化层(S2)、卷积层(C3)、池化层(S4)、卷积层(C5)、全连接层(F6)、输出层(OUTPUT),为串联模式,如下图所示。

  1.卷积层C1

  该层输入为32*32,使用6个5*5的卷积核,输出6组大小为28*28的特征图(32-5+1=28)。因此C1层的神经元数量为4704个(6*28*28=4704),可训练参数为156个(每个卷积核有5*5+1个参数,其中+1是表示一个卷积核有一个偏置参数,6个卷积核就是6*(5*5+1)=156),连接数为122304个(输出的特征图每一个像素都与输入图像中5*5个像素和1个偏置有连接,即6*(5*5+1)*28*28=122304)。虽然有122304个连接,但是只需要学习156个参数,主要是通过权值共享实现的。

  2.池化层S2

  该层输入为28*28,池化窗口为2*2,使用平均池化,有6个池化窗口,输出6组大小为14*14的特征图(28/2=14)。论文中池化层也具有训练参数,它将每个单元的均值乘以一个可训练权重,加上一个可训练偏置,并通过激活函数Sigmoid。因此S2层神经元数量为1176个(6*14*14=1176),可训练参数为12个(6*(1+1)=12),连接数为5880个(池化层S2是对C1中的2*2区域内的像素求均值后乘以一个权重参数和一个偏置并对结果做一个映射,故有6*14*14*(2*2+1)=5880)。

  3.卷积层C3

  该层输入为14*14,使用60个5*5的卷积核,输出16组大小为10*10的特征图,LeNet-5使用一个连接表来定义输入和输出特征映射之间的依赖关系。卷积层的每一个输出特征映射都依赖于所有输入特征映射,相当于卷积层的输入和输出特征映射之间是全连接的关系,实际上,这种全连接关系不是必须的,我们可以让每一个输出特征映射都依赖于少数几个输入特征映射。

  为什么不将每张S2特征图与每张C3特征图连接起来呢?作者的原话是:原因有两个方面,首先,非完全连接的方案将连接的数量保持在合理的范围内。更重要的是,它迫使网络中的对称性被打破。不同的特征图被迫提取不同的(希望是互补的)特征,因为它们得到不同的输入。

  在LeNet-5中,连接表的基本设定如上图所示,表中的0~5行代表S2层输出的6组14*14的特征图,表中0~15列代表C3层输出的16组10*10的特征图。

  C3层输出的第0~5个特征图依赖于S2层输出的特征图组的每3个连续子集,C3层输出的第6-11个特征图依赖于S2层输出的特征图组的每4个连续子集,C3层输出的第12-14个特征图依赖于S2层输出的特征图组的每4个不连续子集,C3层输出的第15个特征图依赖于S2层输出的所有特征图。

  为了方便理解,以C3层输出的第0个特征图为例,它对应着S2层输出的前3个特征图0、1、2。每个特征图使用1个5*5的卷积核,因此C3层输出的特征图大小为10*10(14-5+1=10),神经元数量为1600个(16*10*10=1600),可训练参数为1516(图中X的个数为卷积核的个数,共有3*6+4*6+4*3+6*1=60个,可训练参数为6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516个,其中+1为表示每组卷积核有一个偏置参数),连接数为151600个(1516*10*10=151600)。

  4.池化层S4

 

  5.卷积层C5

 

  (2)模型特点

  • 定义了卷积层,与全连接层相比,卷积层的不同之处有两点:局部感受野、权值共享。
  • 采用池化层进行下采样,从而减少计算量。
  • 使用双曲正切(Tanh)作为非线性激活函数。
  • 最后用MLP作为分类器。

3.2 AlexNet

   经典的LeNet诞生于1998年。然而之后CNN的锋芒开始被SVM等手工设计的特征盖过。随着ReLU和dropout的提出,以及GPU和大数据带来的历史机遇,CNN在2012年迎来了历史突破–AlexNet,从此CNN呈现爆炸式发展。

3.3 VGG