卷积神经网络(Convolutional Neural Networks)

     最近看了卷积神经网络,在此记录一下自己的心得体会。


     1. 卷积神经网络的结构

      卷积神经网络由多层神经网络构成,每层包含多个二维平面,每个平面包含多个独立的神经元。

    卷积神经网络(Convolutional Neural Networks)_第1张图片

       在以上途中,输入图像与三个可训练的滤波器和可加偏置进行卷积,卷积后的结果在C1层产生三个特征映射图(Feature Maps),然后每个特征映射图中的四个相邻像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再经过滤波得到C3层,然后经过与C1->S2一样的过程产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

       一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层(计算层),网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射采用sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

       此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。


2. 局部感受野与权值共享

卷积神经网络(Convolutional Neural Networks)_第2张图片

2.1局部感受野

       上图左:全连接网络。如果我们有1000x1000像素的图像,有1百万个隐层神经元,每个隐层神经元都连接图像的每一个像素点,就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。

       上图右:局部连接网络,每一个节点与上层节点同位置附件10x10的窗口相连接,则1百万个隐层神经元就只有100w乘以100,即10^8个参数。其权值连接个数比原来减少了四个数量级。

2.2 权值共享

       卷积神经网络(Convolutional Neural Networks)_第3张图片

       在卷积神经网络中,权值共享指的是每个特征映射平面中的所有神经元具有相同的权值,并且用相同的权值与输入图像的扫描窗口内的像素做卷积。在上图右中,隐层的每个神经元与前一层的10*10区域相连,那么每个神经元就包含10*10=100个连接的权值参数,并且100个权值是固定不变的(每个神经元用相同的100个权值参数与图像的不同区域做卷积),也就是说每个神经元用同一个卷积核去卷积图像。
       在上图中,图像大小为1000*1000,隐层含有1M个神经元,假设滤波器大小为10*10,那么最后需要训练的权值个数为1M*10*10=100M。
       隐层的参数个数与神经元的个数无关,只和输入图像、滤波器的大小、滤波器移动的步长以及滤波器个数有关。例如,原始图像为1000*1000,滤波器大小是10*10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了。当然,这只是一个滤波器,即一个Feature Map的神经元个数,如果有100个滤波器,那么就要乘以100了。
       每个滤波器只能提取一种特征,如果需要提取多个特征,就要用多个滤波器去卷积图像。例如,我们用100个不同参数的滤波器去卷积图像,就得到100个Feature Map,这100个Feature Map就构成了一层神经元。

3. LeNet-5系统
        LeNet-5是一种典型的用来识别数字的卷积网络。结构如下:卷积神经网络(Convolutional Neural Networks)_第4张图片

1) 输入图像是32x32的大小,局部滑动窗的大小是5x5的,由于不考虑对图像的边界进行拓展,则滑动窗将有28x28个不同的位置,也就是C1层的大小是28x28。这里设定有6个不同的C1层,每一个C1层内的权值是相同的。


2) S2层是一个下采样层。简单的说,由4个点下采样为1个点,也就是4个数的加权平均。但在LeNet-5系统,下采样层比较复杂,因为这4个加权系数也需要学习得到,这显然增加了模型的复杂度。在斯坦福关于深度学习的教程中,这个过程叫做Pool。


3) 根据对前面C1层同样的理解,我们很容易得到C3层的大小为10x10. 只不过,C3层的变成了16个10x10网络。如果S2层只有1个平面,那么由S2层得到C3就和由输入层得到C1层是完全一样的。但是,S2层由多层,那么,我们只需要按照一定的顺利组合这些层就可以了。具体的组合规则,在LeNet-5 系统中给出了下面的表格:

卷积神经网络(Convolutional Neural Networks)_第5张图片

       简单的说,例如对于C3层第0张特征图,其每一个节点与S2层的第0张特征图,第1张特征图,第2张特征图,总共3个5x5个节点相连接。后面依次类推,C3层每一张特征映射图的权值是相同的。


4)S4 层是在C3层基础上下采样,前面已述。在后面的层由于每一层节点个数比较少,都是全连接层,这个比较简单,不再赘述。


4. 简化的LeNet-5系统

      简化的LeNet-5系统把下采样层和卷积层结合起来,避免了下采样层过多的参数学习过程,同样保留了对图像位移,扭曲的鲁棒性。其网络结构图如下所示:

卷积神经网络(Convolutional Neural Networks)_第6张图片

       简化的LeNet-5系统包括输入层的话,只有5层结构,而原始LeNet-5结构不包含输入层就已经是7层网络结构了。它实现下采样非常简单,直接取其第一个位置节点上的值可以了。

1) 输入层。MNIST手写数字图像的大小是28x28的,这里通过补零扩展为29x29的大小。这样输入层神经节点个数为29x29等于841个。

2)第一层。由6张不同的特征映射图组成。每一张特征图的大小是13x13. 注意,由于卷积窗大小为5x5,加上下采样过程,易得其大小为13x13. 所以, 第二层共有6x13x13等于1014个神经元节点。每一张特征图加上偏置共有5x5+1等于26个权值需要训练,总共有6x26等于156个不同的权值。即总共有1014x156等于26364条连接线。

3)第二层。由50张不同的特征映射图组成。每一张特征图的大小是5x5. 注意,由于卷积窗大小为5x5,加上下采样过程,易得其大小为5x5. 由于上一 层是由多个特征映射图组成,那么,如何组合这些特征形成下一层特征映射图的节点呢?简化的LeNet-5系统采用全部所有上层特征图的组合。也就是原始LeNet-5 特征映射组合图的最后一列的组合方式。因此,总共有5x5x50等于1250 个神经元节点,有(5x5+1)x6x50等于7800 个权值,总共有1250x26等于32500条连接线。

4) 第三层。 这一层是一个一维线性排布的网络节点,与前一层是全连接的网络,其节点个数设为为100,故而总共有100x(1250+1)等于125100个不同的权值,同时,也有相同数目的连接线。

5)第四层。这一层是网络的输出层,如果要识别0-9数字的话,就是10个节点。该层与前一层是全连接的,故而,总共有10x(100+1)等于1010个权值,有相同数目的连接线。

你可能感兴趣的:(算法,机器学习,deep,learning,图像处理,深度学习)