卷积神经网络CNN架构分析 - LeNet

作者:Sanjay Chan [http://blog.csdn.net/chenzomi]

背景

之前在网上搜索了好多好多关于CNN的文章,由于网络上的文章很多断章取义或者描述不清晰,看了很多youtobe上面的教学视频还是没有弄懂,最后经过痛苦漫长的煎熬之后对于神经网络和卷积有了粗浅的了解。

于是在这里记录下所学到的知识,关于CNN 卷积神经网络,需要总结深入的知识有很多:

  • 人工神经网络 ANN
  • 卷积神经网络 CNN
  • 卷积神经网络 CNN - BP算法
  • 卷积神经网络 CNN - caffe应用
  • 卷积神经网络 CNN - LetNet分析
  • LetNet网络

    下图是一个经典的CNN结构,称为LeNet-5网络

    输入层
    输入为一个32*32大小的黑白图像

    C1 卷积层
    6个特征图,每个特征图中的每个神经元与输入的5*5卷积核权值相连,特征图大小为28*28.
    每个卷积神经元的参数数目,5*5=25个权值参数和1个偏置参数
    连接数:(5∗5+1)∗6∗(28∗28)=122304 条连接
    参数共享:每个特征图内共享一个卷积,因此参数总数为:(5∗5+1)∗6=156 个参数

    S2 下采样层
    6个 14∗14 的特征图,每个图中的每个像素与C1特征图中的一个 2∗2 领域相连接,不重叠。因此,S2中每一个特征图的大小是C1中特征图大小的1/4,也就是长和宽各减半。
    S2 层每个单元4个输入想家,乘以一个可训练的参数w,加上一个可训练的偏置b,结果通过sigmoid激活函数计算。
    连接数:(2∗2+1)∗6∗(14∗14)=5880 个连接
    参数共享:特征图内共享参数,每张特征图中的每个神经元需要1个因子和一个偏置,因此有 2∗6=12 个可训练参数。

    C3 卷积层
    16个卷积核,得到16张特征图,特征图大小为10*10
    每个特征图中的每个神经元与S2中某基层的多个5*5的领域相连接;

    S4 下采样层
    16个 5∗5 的特征图,每个图中的每个像素与C3特征图中的一个 2∗2 领域相连接,不重叠。因此,S4中每一个特征图的大小是C3中特征图大小的1/4,也就是长和宽各减半。
    连接数(2*2+1)*(5*5)*16=2000$ 个连接
    参数共享:特征图内共享参数,每张特征图中的每个神经元需要1个因子和一个偏置,因此有 2∗16=32 个可训练参数。

    C5 卷积层
    通过flatting把S4中的每个像素拉长,变成120个神经元,同样可以看做是120个特征图,每张特征图的大小为1*1
    由于C5层是一个全连接层,因此C5中每个神经元与S4层的全部16个单元的5*5领域相连接。
    连接数:(5*5*16+1)*120=48120 个,S4层特征图大小为5*5,16个特征图加一个偏置,全连接120个神经元。

    F6 全连接层
    有84个单元与C5层全连接
    F6层计算输入向量和权重向量之间的点积,再加上一个偏置。
    连接数:(120+1)*84=10164

    输出层
    输出层采用欧氏径向基函数(Euclidean Radial Basis Function)单元

  • 给定一个输入模式,损失函数能使F6的配置与RBF参数向量足够接近
  • 每一个分类一个单元,每个单元连接84个输入,每个输出RBF单元计算输入向量和参数向量之间的欧氏距离。
  • RBF输出可以被理解为F6层配置空间的高斯分布
  • 最后输出的是10个分类数字,0,1,2,....,9 10个分类的得分。

    小结

    实际计算中,连接数和参数共享数不会向上面所述的一模一样(至少在训练的开始是一样的),后面通过BP算法计算的时候会越来越少,因为BP算法通过多层局部神经网络不断反馈计算,部分权重参数会趋向于0,对于趋向于0的参数实际上并没有任何物理意义,因此可以删掉该部分的连接,使整个卷积神经网络结构更加“瘦”。如下图所示: