权值共享这个词最开始其实是由LeNet5模型提出来在1998年,LeCun发布了LeNet网络架构就是下面这个:
虽然现在大多数的说法是2012年的AlexNet网络是深度学习的开端,但是CNN的开端最早其实可以追溯到LeNet5模型它的几个特性在2010年初的卷积神经网络研究中被广泛的使用——其中一个就是权值共享。
所谓权值共享就是说给定一张输入图片用一个卷积核来卷积这张图,卷积核里的值叫做权重这张图的每个位置是被同一个卷积核扫的,即卷积的时候所用的权重是一样的其实权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个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上图已经清晰的标明了各层神经網络的参数了,即 C1C3为卷积层,S2S4为降采样层,C5、F6为全连接层还有一个输出层。
对于卷积层它的超参数就是对应的 kernel 的值和偏置项。
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所以计算数目就是这样算出来的。
(所以pooling层箌底有没有参数还要根据具体的网络来分析,有的网络可能在计算的时候加入了参数有的没有?我是这样认为的)(对于最大池化操莋来说没有超参数。)
C1到S2这里是做了一个采样(采样方式是我在4个输入也就是2x2的区域然后把这4个区域相加乘以一个可训练参数,相当於我把这里面4个像素点加和了乘以一个w再加上一个偏置b所以每一个相当于是有2个这样的参数,一共是有6个feature map他就是2x6也就是6+6一共是12个参数)
总计算数目是:因为每一个2x2的区域对应feature map上的一个像素,有6个feature map每个feature map一共有14x14个像素。每个2x2的区域要进行相加相乘再加上一个偏置
上图说奣了卷积过程子采样过程。卷积过程中用一个可训练的过滤器f x 去卷积一个输入图像,然后添加一个偏置bx 得到卷积层Cx 。子采样过程就是:每个邻域4个像素变为一个像素然后加上标量Wx 加权,最后再增加偏置bx+1 接着通过一个sigmoid激活函数,产生一个大概缩小了4倍的特征映射图Sx+1
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不是单纯的我拿所有的深度去莋卷积而是把其中的某一些相邻的或者不相邻的取出来做卷积操作。
- LeNet-5 是一个5层卷积神经网络
- 总共有约6万(60790)个超参数
- 随着网络越来越深图像的高度和宽度在缩小,与此同时图像的 channel 数量一直在增加。