content

  1. 概述
  2. 文字识别系统LeNet-5
  3. 简化的LeNet-5系统
  4. 卷积神经网络的实现问题

深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。

第二篇,讲讲经典的卷积神经网络。我不打算详细描述卷积神经网络的生物学运行机理,因为网络上有太多的教程可以参考。这里,主要描述其数学上的计算过程,也就是如何自己编程去实现的问题。

1. 概述

回想一下BP神经网络。BP网络每一层节点是一个线性的一维排列状态,层与层的网络节点之间是全连接的。这样设想一下,如果BP网络中层与层之间的节点连接不再是全连接,而是局部连接的。这样,就是一种最简单的一维卷积网络。如果我们把上述这个思路扩展到二维,这就是我们在大多数参考资料上看到的卷积神经网络。具体参看下图:

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

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

根据BP网络信号前向传递过程,我们可以很容易计算网络节点的输出。例如,对于上图中被标注为红色节点的净输入,就等于所有与红线相连接的上一层神经元节点值与红色线表示的权值之积的累加。这样的计算过程,很多书上称其为卷积。

事实上,对于数字滤波而言,其滤波器的系数通常是对称的。否则,卷积的计算需要先反向对折,然后进行乘累加的计算。上述神经网络权值满足对称吗?我想答案是否定的!所以,上述称其为卷积运算,显然是有失偏颇的。但这并不重要,仅仅是一个名词称谓而已。只是,搞信号处理的人,在初次接触卷积神经网络的时候,带来了一些理解上的误区。

卷积神经网络另外一个特性是权值共享。例如,就上面右边那幅图来说,权值共享,不是说,所有的红色线标注的连接权值相同。这一点,初学者容易产生误解。

上面描述的只是单层网络结构,前A&T Shannon Lab   的  Yann LeCun等人据此提出了基于卷积神经网络的一个文字识别系统 LeNet-5。该系统90年代就被用于银行手写数字的识别。

2. 文字识别系统LeNet-5

在经典的模式识别中,一般是事先提取特征。提取诸多特征后,要对这些特征进行相关性分析,找到最能代表字符的特征,去掉对分类无关和自相关的特征。然而,这些特征的提取太过依赖人的经验和主观意识,提取到的特征的不同对分类性能影响很大,甚至提取的特征的顺序也会影响最后的分类性能。同时,图像预处理的好坏也会影响到提取的特征。那么,如何把特征提取这一过程作为一个自适应、自学习的过程,通过机器学习找到分类性能最优的特征呢?

卷积神经元每一个隐层的单元提取图像局部特征,将其映射成一个平面,特征映射函数采用 sigmoid 函数作为卷积网络的激活函数,使得特征映射具有位移不变性。每个神经元与前一层的局部感受野相连。注意前面我们说了,不是局部连接的神经元权值相同,而是同一平面层的神经元权值相同,有相同程度的位移、旋转不变性。每个特征提取后都紧跟着一个用来求局部平均与二次提取的亚取样层。这种特有的两次特征提取结构使得网络对输入样本有较高的畸变容忍能力。也就是说,卷积神经网络通过局部感受野、共享权值和亚取样来保证图像对位移、缩放、扭曲的鲁棒性。

下面,有必要来解释下上面这个用于文字识别的LeNet-5深层卷积网络。

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 系统中给出了下面的表格:

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

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

3.  简化的LeNet-5系统

 
      简化的LeNet-5系统把下采样层和卷积层结合起来,避免了下采样层过多的参数学习过程,同样保留了对图像位移,扭曲的鲁棒性。其网络结构图如下所示:
 
                            
 
          简化的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个权值,有相同数目的连接线。
 

4. 卷积神经网络的实现问题

      网上可以下载到很多关于卷积神经网络的源码,其中有matlab的,也有C++的。如果自己编程,需要注意些什么问题呢?
 
      由于卷积神经网络采用BP网络相同的算法。所以,采用现有BP网络就可以实现。开源的神经网络代码FAAN可以利用。这个开源的实现采用了一些代码优化技术,有双精度,单精度,定点运算三个不同的版本。
      由于经典的BP网络是一个一维节点分布排列,而卷积神经网络是二维网络结构。所以,要把卷积神经网络的每一层,按照一定的顺序和规则映射为一维节点分布,然后,按照这个分布创建一个多层反向传播算法的网络结构,就可以按照一般的BP训练算法去学习网络参数。对于实际环境中新样本的预测,也采用BP算法中相同信号前向传递算法进行。具体细节也可以参考网上的一个开源代码,链接如下:
 
 
注:这个代码在创建CNN的时候有个明显的BUG,如果你看明白了我上面对简化的LeNet-5的结构描述,一眼就会找出问题所在。
 
文献:
http://blog.csdn.net/celerychen2009/article/details/8973218
http://www.so.com/s?&ie=utf-8&src=360se7_addr&q=卷积网络
http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=convolutional%20networks&rsv_pq=bcacd8ef0009128f&rsv_t=77f8Gk0ZxXpw9ai2hxDUQXm1Wx8A4NDfkuWIMckrl3o5cRO%2FdfCf4sPxzKM&bs=Experiments
http://blog.sina.com.cn/s/blog_890c6aa30100yaqi.html

数据挖掘、目标检测中的cnn和cn---卷积网络和卷积神经网络的更多相关文章

  1. 目标检测算法(1)目标检测中的问题描述和R-CNN算法

    目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...

  2. 目标检测 1 : 目标检测中的Anchor详解

    咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...

  3. 目标检测中特征融合技术(YOLO v4)(上)

    目标检测中特征融合技术(YOLO v4)(上) 论文链接:https://arxiv.org/abs/1612.03144 Feature Pyramid Networks for Object De ...

  4. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

  5. 目标检测中proposal的意义

    在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...

  6. 目标检测中的bounding box regression

    目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.

  7. 【计算机视觉】目标检测中的指标衡量Recall与Precision

    [计算机视觉]目标检测中的指标衡量Recall与Precision 标签(空格分隔): [图像处理] 说明:目标检测性能指标Recall与Precision的理解. Recall与Precision ...

  8. 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)

    上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...

  9. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free 1.  anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...

随机推荐

  1. usb 2.0 支援的速度

    from http://www.usb.org/developers/docs/usb20_docs/ high speed : 480 Mb/s full speed : 12 Mb/s low s ...

  2. 记录: 百度webuploader 分片文件上传java服务器端(spring mvc)示例的优化

    最近项目上用到文件分片上传,于是找到了百度的一个开源前端控件webuploader. 于是尝试使用. 下载下来后,它提供的服务器端示例代码是php版的,那么Java版的呢? 其实,上传文件都是按照rf ...

  3. idea 快速生成代码的快捷键

     psvm 加ab键   mian方法快速生成 sout 加tab键   输出打印快捷键  alt+insert      快速生成get  set 方法 itar 生成array for代码块 fo ...

  4. AC日记——幸运号码 51nod 1043

    幸运号码 思路: 传说中的数位dp: 不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000: 对于9000*1000的时间范围,我们可以用dp来解决: dp[i][j], ...

  5. Codeforces 743D Chloe and pleasant prizes(树型DP)

                                                                D. Chloe and pleasant prizes             ...

  6. usaco-Subset Sums

    题意: 给出一个1-n的数列,求把它分为两组数使得两组数的和相等的方案数. 分析: 如果可能分成两组,那么(n+1)n/2一定为偶数,且n%4=2或3.可以设dp[i][j]表示从1-i中的数拼出的方 ...

  7. Google Cloud服务免费申请试用以及使用教程

    简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...

  8. POJ 2484 A Funny Game [博弈]

    题意:n枚硬币围成一个圈,每次每个人可以从中取走一枚或者相邻的两枚(如果两枚硬币原本中间隔着一枚硬币,后来被取走,这两枚硬币不算相邻).谁取走最后一枚硬币谁就赢了. 思路:我们可以找找规律. 首先,n ...

  9. 比JSONKit还要快的第三方JSON解析器NextiveJson

    这款比JSONKit还好用,效率跟iOS5原生的差不多,不过解析后对内存的释放比原生的要多.所以推荐 https://github.com/nextive/NextiveJson 顺便提一下解析XML ...

  10. Mac Pro 系统自带python路径

    /usr/local/Frameworks/Python.framework/Versions/2.7/bin