卷积神经网络CNN 粗讲解

 本文参考原博主链接:https://blog.csdn.net/fengbingchun/article/details/50529500

卷积结构

        卷积神经网络结构包括:卷积层,降采样层,全链接层。每一层有多个特征图,每个特征图通过一种卷积滤波器提取输入的一种特征,每个特征图有多个神经元。

         卷积层:通过卷积运算,可以使原信号特征增强,并且降低噪音。他的核心是一个对于原图片进行一个卷积运算,每一个卷积运算对应一个卷积核,一个卷积核得出一个特征图,如上图第一次卷积得出四个特征图,第二次卷积有三个卷积核,每一次的卷积会将图片的像素降低。

        卷积层的map个数是在网络初始化指定的,而卷积层的map的大小是由卷积核和上一层输入map的大小决定的,假设上一层的map大小是n*n、卷积核的大小是k*k,则该层的map大小是(n-k+1)*(n-k+1)。

        降采样:使用降采样的原因是,根据图像局部相关性的原理,对图像进行子采样可以减少计算量,同时保持图像旋转不变性。他是将多个像素压缩成一个像素,如上图将两个像素压缩为一个。

        采样层是对上一层map的一个采样处理,这里的采样方式是对上一层map的相邻小区域进行聚合统计,区域大小为scale*scale,有些实现是取小区域的最大值,而ToolBox里面的实现是采用2*2小区域的均值。

        全连接层:采用softmax全连接,得到的激活值即卷积神经网络提取到的图片特征。

训练算法主要包括四步,这四步被分为两个阶段:

         第一阶段,向前传播阶段:

         (1)、从样本集中取一个样本,输入网络;

         (2)、计算相应的实际输出;在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常执行时执行的过程。

         第二阶段,向后传播阶段:

         (1)、计算实际输出与相应的理想输出的差;

         (2)、按极小化误差的方法调整权矩阵。

         这两个阶段的工作一般应受到精度要求的控制。

         网络的训练过程如下:

         (1)、选定训练组,从样本集中分别随机地寻求N个样本作为训练组;

         (2)、将各权值、阈值,置成小的接近于0的随机值,并初始化精度控制参数和学习率;

         (3)、从训练组中取一个输入模式加到网络,并给出它的目标输出向量;

         (4)、计算出中间层输出向量,计算出网络的实际输出向量;

         (5)、将输出向量中的元素与目标向量中的元素进行比较,计算出输出误差;对于中间层的隐单元也需要计算出误差;

         (6)、依次计算出各权值的调整量和阈值的调整量;

         (7)、调整权值和调整阈值;

         (8)、当经历M后,判断指标是否满足精度要求,如果不满足,则返回(3),继续迭代;如果满足就进入下一步;

          (9)、训练结束,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器已经形成。再一次进行训练,直接从文件导出权值和阈值进行训练,不需要进行初始化。

卷积神经网络LeNet-5结构分析(经典手写数字识别)

         CNN是一种带有卷积结构的深度神经网络,通常至少有两个非线性可训练的卷积层,两个非线性的固定卷积层(又叫Pooling Layer或降采样层)和一个全连接层,一共至少5个隐含层。

         LeNet-5手写数字识别结构(上图)分析:

         1.      输入层:N个32*32的训练样本

                 输入图像为32*32大小。这要比Mnist数据库中最大的字母还大。这样做的原因是希望潜在的明显特征如笔画断点或角点能够出现在最高层特征监测子感受野的中心。

         2.      C1层:

                  输入图片大小:      32*32

                 卷积窗大小:          5*5

                 卷积窗种类:          6

                 输出特征图数量:  6

                 输出特征图大小:  28*28        (32-5+1)

                 神经元数量:          4707          (28*28)*6)

                 连接数:                  122304      (28*28*5*5*6)+(28*28*6)

                 可训练参数:          156              5*5*6+6

                 用6个5×5的过滤器进行卷积,结果是在卷积层C1中,得到6张特征图,特征图的每个神经元与输入图片中的5×5的邻域相连,即用5×5的卷积核去卷积输入层,由卷积运算可得C1层输出的特征图大小为(32-5+1)×(32-5+1)=28×28。

         3.      S2层:

                 输入图片大小:       (28*28)*6

                 卷积窗大小:           2*2

                 卷积窗种类:           6

                 输出下采样图数量:6

                 输出下采样图大小:14*14      (28/2)*(28/2)

                 神经元数量:           1176         (14*14)*6

                 连接数:                     5880        2*2*14*14*6+14*14*6

                 可训练参数:          12               1*6+6

          卷积和子采样过程:

                 (1)、卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx。

 卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音。

                 (2)、子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

 利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。

 卷积之后进行子抽样的思想是受到动物视觉系统中的“简单的”细胞后面跟着“复杂的”细胞的想法的启发而产生的。

                 降采样后,降采样层S2的输出特征图大小为(28÷2)×(28÷2)=14×14。

                         S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,下采样相当于模糊图像。如果系数比较大,根据偏置的大小下采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。

                         从一个平面到下一个平面的映射可以看作是作卷积运算,S-层可看作是模糊滤波器,起到二次特征提取的作用。隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。

         4.      C3层: 

                 输入图片大小:      (14*14)*6

                 卷积窗大小:          5*5

                 卷积窗种类:          16

                 输出特征图数量:  16

                 输出特征图大小:  10*10             (14-5+1)

                 神经元数量:          1600               (10*10)*16)

                 连接数:                  151600          1516*10*10

                 可训练参数:          1516               6*(3*25+1)+6*(4*25+1)+3*(4*25+1)+1*(6*25+1)

                 C3层也是一个卷积层,它同样通过5x5的卷积核去卷积S2层,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。

                 C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征。

         5.      S4层:

                 输入图片大小:          (10*10)*16 

                 卷积窗大小:               2*2

                 卷积窗种类:               16

                 输出下采样图数量:   16

                 输出下采样图大小:   (5*5)*16

                 神经元数量:               400                            (5*5)*16

                 连接数:                       2000                          (2*2*5*5*16)+(5*5*16)

                 可训练参数:                32                              (1+1)*16

                 S4层是一个下采样层,由16个5*5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2*2邻域相连接,跟C1和S2之间的连接一样。S4层有32个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。

         6.      C5层: 

                 输入图片大小:       (5*5)*16

                 卷积窗大小:           5*5

                 卷积窗种类:           120

                 输出特征图数量:   120

                 输出特征图大小:   1*1                 (5-5+1)

                 神经元数量:           120                 (1*120)

                 连接数:                   48120             5*5*16*120*1+120*1

                 可训练参数:           48120             5*5*16*120+120

                 C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连。由于S4层特征图的大小也为5*5(同滤波器一样),故C5特征图的大小为1*1,这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。

         7.      F6层: 

                 输入图片大小:         (1*1)*120

                 卷积窗大小:            1*1

                 卷积窗种类:             84

                 输出特征图数量:    1

                 输出特征图大小:    84      

                 神经元数量:             84   

                 连接数:                     10164        120*84+84

                 可训练参数:             10164        120*84+84

                 F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。

         8.      OUTPUT层:

                 输入图片大小:       1*84

                 输出特征图数量:   1*10 

         最后,输出层由欧式径向基函数(EuclideanRadial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。

         使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

         RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值