CNN之权值共享的理解

最近一直在看CNN,其一个亮点就是通过感受野和权值共享减少了神经网络需要训练的参数的个数。
左图所示:若我们有1000x1000像素的图像,有1百万个隐藏层的神经元,如果全连接(即每个隐层神经元都要与图像的每一个像素点进行连接),就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。但是图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,因为每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来可得到全局信息。这样,我们就可以减少连接的数目,即减少神经网络需要训练的权值参数的个数了。
CNN之权值共享的理解_第1张图片
如有图所示:假如局部感受野是10x10,则隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。这样训练起来就没那么费力了,但还是感觉有点多,有其它方法吗?
我们知道,隐藏层的每一个神经元都连接10x10个元素的图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数呢??只有100个参数(从10的8次方到10的2次方)天壤之别!!!不管你隐层的神经元个数有多少,两层间的连接就只有100个参数啊,这就是权值共享啊!即卷积神经网络的亮点之一。

大家都知道,用CNN可以提取特征。好了,你就会想,这样提取特征会不会有点不靠谱?因为每个神经元都用同样的一个滤波器,那么只能提取一种特征?当需要提取多种特征是怎么办?其实一种滤波器,也就是一种卷积核就是提取出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,则可以怎么办,加多几种滤波器不就行了吗?所以假设我们加到50,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以50种卷积核就有对应的50个Feature Map。这50个Feature Map就组成了一层神经元。我们这一层有多少个参数了?50种卷积核x每种卷积核共享100个参数=50*100,也就是5000个参数,达到了我们想要 的效果,不仅可以提取多方面的特征而且还可以减少计算。见上图右:不同的颜色表示不同的滤波器。

你可能感兴趣的:(卷积神经网络)