卷积神经网络CNN---权值共享_m0_37957160的博客-程序员宅基地

技术标签: Deep learning  

1、权值共享的由来:

权值共享这个词最开始其实是由LeNet5模型提出来,在1998年,LeCun发布了LeNet网络架构,就是下面这个:

虽然现在大多数的说法是2012年的AlexNet网络是深度学习的开端,但是CNN的开端最早其实可以追溯到LeNet5模型,它的几个特性在2010年初的卷积神经网络研究中被广泛的使用——其中一个就是权值共享

2、什么是权值共享?

所谓权值共享就是说给定一张输入图片,用一个卷积核来卷积这张图,卷积核里的值叫做权重,这张图的每个位置是被同一个卷积核扫的,即卷积的时候所用的权重是一样的。其实权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个3*3*1的卷积核,这个卷积核内9个的参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。说的再直白一些,就是用一个卷积核不改变其内权系数的情况下卷积处理整张图片(当然CNN中每一层不会只有一个卷积核的,这样说只是为了方便解释而已)。
作用:大大减少网络训练参数的同时,还可以实现并行训练。

PS:大白话就是给你一张图片,用一个filter去卷积操作这张图,filter里边的数就叫做权重,这张图的每个位置是被同样的filter进行卷积操作的,所以权重都是一样的,也就是实现的共享。

3、作用:大减少网络训练参数的同时,还可以实现并行训练

把局部连接(感受野)中的每一个卷积核中对应的权值进行共享,就可以进一步减少网络中参数的个数,即下一层每一个像素点是由上一层对应位置的N×N的局部区域图片(也就是感受野)与同一卷积核N×N的权值做内积,加偏置后经过非线性映射而来的,至此,网络训练参数的数量不再受原始输入图片大小的影响(因为卷积核固定了,里边的权值多少也就固定了)。此处需要注意,一组卷积核N×N的权值只能得到一张Feature map,为更好的表示图像特征,需要使用不同的多组卷积核(过滤器)来使学得的图像特征更丰富。

 

LeNet首次把卷积的思想加入到神经网络模型中,这是一项开创性的工作,而在此之前,传统的神经网络输入的都是提取到的特征而已,就比如想要做一个房价预测,我们选取了房屋面积,卧室个数等等数据作为特征。而将卷积核引入到了神经网络去处理图片后(也就是卷积神经网络),自然而然就会出现一个问题,神经网络的输入是什么?如果还是一个个像素点上的像素值的话,那就意味着每一个像素值都会对应一个权系数,这样就带来了两个问题:
1.每一层都会有大量的参数
2.将像素值作为输入特征本质上和传统的神经网络没有区别,并没有利用到图像空间上的局部相关性。

所以卷积神经网络是在局部感受野上进行一步步卷积操作的。

而权值共享的卷积操作有效解决了这个问题,无论图像的尺寸是多大,都可以选择固定尺寸的卷积核,LeNet中最大的卷积核只有5*5*1,而在AlexNet中最大的卷积核也不过是11*11*3。而卷积操作保证了每一个像素都有一个权系数,只是这些系数是被整个图片共享的,这大大减少了卷积核中的参数量。此外卷积操作利用了图片空间上的局部相关性,这也就是CNN与传统神经网络或机器学习的一个最大的不同点,特征的自动提取。
这也就是为什么卷积层往往会有多个卷积核(甚至几十个,上百个),因为权值共享后意味着每一个卷积核只能提取到一种特征(即每一个卷积核只能提取到到一个特征。所以,卷积层会有多个卷积核,来提取不同种类的特征。),为了增加CNN的表达能力,当然需要多个核,不幸的是,它是一个Hyper-Parameter。

切记不要忘记卷积操作最后的偏置项b

4、根据LeNet网络示意图,分析每一层的参数个数

eNet-5上图已经清晰的标明了各层神经网络的参数了,即 C1,C3为卷积层,S2,S4为降采样层,C5、F6为全连接层,还有一个输出层。

layer name kernel size output size
输入层 32x32
C1 6x5x5 6x28x28
max pooling S2 2x2   stride=2 6x14x14
C3 16x5x5 16x10x10
max pooling S4 2x2   stride=2 16x5x5
C5 120x5x5 120
F6 120 84
Output 84 10

解读:

对于卷积层,它的超参数就是对应的 kernel 的值和偏置项。

C1:

C1 是一个卷积层,有6个卷积核,由6个Feature Map组成。 每一个Feature Map中的每个神经元与输入中5*5的区域相连(也就是Filter的大小),Feature Map的大小为28*28,

 C1一共有156个参数,因为5*5个参数加上一个bias,一共又有6个Filter,所以为:(5*5+1)*6=156个参数,(这里的1是偏置,每一个filter都对应一个偏置b,所以也要乘以6)。

总的计算数目:

相当于是卷积核卷积一次会得到feature的一个像素点,相当于是每一个卷积核计算的次数,再乘以这一个feature map是28x28的像素,然后再乘6个。一共有156*(28*28) = 122304个连接。(因为输出是28x28,所以应该进行了28x28次卷积操作)

(5*5+1)是说我在这个卷积核内进行了多少次操作,(因为你卷积核是要进行相乘相加操作的),你卷积一次会得到一个像素点,你要在这个上边滑动操作,得到28x28个像素点,一个有6个28x28,所以计算数目就是这样算出来的。

S2:

(所以pooling层到底有没有参数,还要根据具体的网络来分析,有的网络可能在计算的时候加入了参数,有的没有?我是这样认为的)(对于最大池化操作来说,没有超参数。

C1到S2这里是做了一个采样(采样方式是我在4个输入也就是2x2的区域,然后把这4个区域相加乘以一个可训练参数,相当于我把这里面4个像素点加和了乘以一个w再加上一个偏置b,所以每一个相当于是有2个这样的参数,一共是有6个feature map,他就是2x6也就是6+6一共是12个参数)

总计算数目是:(2\times 2+1)\times 6\times 14\times 14因为每一个2x2的区域对应feature map上的一个像素,有6个feature map,每个feature map一共有14x14个像素。每个2x2的区域要进行相加相乘再加上一个偏置。

上图说明了卷积过程子采样过程。卷积过程中,用一个可训练的过滤器f x 去卷积一个输入图像,然后添加一个偏置bx  ,得到卷积层Cx 。子采样过程就是:每个邻域4个像素变为一个像素,然后加上标量Wx 加权,最后再增加偏置bx+1 ,接着通过一个sigmoid激活函数,产生一个大概缩小了4倍的特征映射图Sx+1。

C3:

这一层是S2到C3,实际上是从6个这样的feature map把它扩展到了16个feature map。

0到15分别代表C3层的feature map,0到5分别代表S2层的feature map;C3层的前6个是把S2层相邻的3个做卷积(即他不是把这深度为6的6个全部做卷积),然后6到11他是把S2中4个相邻的做了卷积。剩余的3个他是把S2中不相邻的做了卷积,还剩下最后一个就是第15个他就做了一个全卷积。

这里从S2到C3不是单纯的我拿所有的深度去做卷积,而是把其中的某一些相邻的或者不相邻的取出来做卷积操作。

S4:

C3到S4同C1到S2。

C5:

从S2到C5

4. 小结

  • LeNet-5 是一个5层卷积神经网络
  • 总共有约6万(60790)个超参数
  • 随着网络越来越深,图像的高度和宽度在缩小,与此同时,图像的 channel 数量一直在增加。

参考链接:https://blog.csdn.net/Genius_zz/article/details/52804585?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328641.9440.16155302984251095&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

https://cuijiahua.com/blog/2018/01/dl_3.html

https://www.cnblogs.com/fengff/p/10173071.html

https://www.cnblogs.com/monologuesmw/p/11872269.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37957160/article/details/114693985

智能推荐

随便推点