CNN学习笔记(1)稀疏连接和权值共享的理解

来源:互联网 发布:单片机支持snmp协议 编辑:程序博客网 时间:2024/04/29 16:02

CNN学习笔记(1)稀疏连接和权值共享的理解

tuyunbin@qq.com
author:tuyunbin

声明:
1)该文章是自己在深度学习中关于CNN的个人理解,分享于此希望能够和各位学习讨论,共同进步。
2)该文章参考资料来源于:
http://blog.csdn.net/zouxy09/article/details/8781543
http://deeplearning.net/tutorial/lenet.html#maxpooling
3)本人刚学习不久,如有理解有偏差的地方,恳请各位批评指正,请联系:tuyunbin@qq.com
CNN对visual cortex的模仿
       视觉皮层包含了一系列复杂的细胞,这些细胞中的每个细胞只是对一个视觉区域内极小的一部分敏感,而对其他部分则可以视而不见,所以每一个这样的小部分区域我们称为receptive field(中文可以翻译为局部感受野吧)。而所有的receptive field的叠加就构成了visual field,而这些cell在当中就扮演了一个local filter(局部滤波器)的角色。
       cell有两种类型,简单or复杂,简单的cell可以最大程度响应特定的边缘特征通过这些receptive field;复杂的cell相比而言有着更大的receptive field。
      所以对应到CNN中,图像作为一个visual field,而每一个hidden layer中cells也就是各种滤波器,每一个局部滤波器就是一个卷积核,通过局部滤波器对图像的subset产生响应,之后每个cell提取到的信息传递到更高层汇总后就是整个图像的信息。

CNN特征一之 Sparse Connectivity(稀疏连接)

      这是CNN的第一个特征,为了模仿visual cortex中的cell对visual field的局部敏感,CNN在探索spatial-local correlation 的时候,通过在相邻层的神经元间使用一种local connectivity的方式,如下图所示,m-1层作为输入层,hidden layer m中的输入是来自于m-1中的subset,每个单元units有着相同范围的receptive field。


      m层中的每个神经元的receptive field的宽度为3,能接受来自前一层3个神经元的输入,同理,在下一层m+1中,神经元同样接受来自m层3个神经元的输入,但是每个神经元对超出自己receptive field的神经元就不会产生连接,也就是不做出响应。
       我们可以发现一个特点,下图中的每个神经元的receptive field的范围是相对的,对于相邻层,这个宽度为3,但是对于间隔一层的如m+1和m-1,这个值就变成了5。那么为什么不直接将这5个神经元的和m+1层相连接呢,反而还要在中间加了一层?
       这个其实可以对应到我们社会中的一个分层管理制度,比如一个公司,虽然所有的员工实际上都是为一个老板打工,但是如果所有员工都直接向老板汇报工作,那效率可想而知有多慢。所以公司管理制度往往是分层管理,普通员工向业务主管负责,业务主管向老板负责,金字塔结构的管理使得公司能够有条不紊的运作,我们的的神经网络同样如此。

CNN特征二之权值共享

      如上图所示,hidden layer m中的每一个神经单元的receptive field的范围是3,也就是每个神经单元的参数是3,那么3个神经元就有9个参数。但是事实上,我们在模型的训练中神经元的数量往往是成千上万,而图像的特征是固定的,所以如果每个神经元的参数都不一样,那么参数的数量将会大的惊人。所以,我们可以采取一个策略,就是每一层神经元中,对相同的图像特征我们都使用相同的参数。也就是说,为了提取图像中的A特征,不管该神经层有几个神经元,他们的参数,也就是产生响应的receptive field都是相同的,那么参数就下降到了3,这就是权值共享。

        这三个相同的receptive field就构成了一个feature map(通道),因为其参数一样,所以该feature map只能提取到一种特征,如果想提取到多种特征呢?很简单啊,多加几个feature map就OK了,也就是说在实际中,我们每一层神经元会有多个feature map,目的是提取图像中的多种特征。

       这种思维其实我们可以抽象成现实中生产零件,对于同样的零件,不同的人会有不同的模具,如果生产数量巨大,那么我们是不是要雇佣很多人来设计?但在同样的规格的前提下(对应到图像就是某种固定的特征),我们只要结果,所以自然是给出一个模具,工人只要按照那个模具去设计就好了,这样,就可以大大减少工人数量(神经元数量),提高效率。
举一个例子
       比如一幅100×100的图像,如果不采用CNN的sparse connectivity和weights share的策略,比如说我们有10000个神经元,如果每个神经元都做用于这100×100的图像,那么参数就是100×100×10000=10^8。
这时,我们可以分步骤来执行CNN的两个特征已达到简化参数的目的:
(1) sparse connectivity:每个神经元负责10×10的区域,那么10000个神经元产生的连接只有10^6了;
(2) weights share:每个神经元负责10×10的区域,每个神经元的参数就是100,如果这100个参数一样,也就是每个神经元使用同一个滤波器(卷积核),提取的10×10的区域内的特征是一样的,例如某个方向的边缘,那么参数就变为了(100×100)/(10×10)=100个,那现在和神经元数量无关了,而每个滤波器的大小是10×10,所以为了提取该100×100图像中的某一种特征,就需要该种滤波器10个。此时,该滤波器卷积得到的图像特征就称之为1个feature map,该feature map中神经元个数为图像大小除以滤波器大小就是100个(前提是滤波器不重叠,这也说明了实际提取特征时,训练参数只取决于滤波器大小)
同理,如果我们要提取所有特征,自然是加滤波器的数量,加多少?假设加到100种滤波器(应该够了吧,这么多),那么参数就变成:
100种滤波器×每个滤波器的尺寸(10×10)=10000个参数,参数再次下降为10^4。

1 0
原创粉丝点击