深度学习介绍(四)卷积操作

接下来介绍一下,CNNs是如何利用空间结构减少需要学习的参数数目的
如果我们有一张1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都与图像的每一个像素点相连),这样就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。
深度学习介绍(四)卷积操作_第1张图片
假如局部感受野是10x10,隐层每个神经元只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个数量级,这样训练起来就没那么费力了,但还是感觉很多,那还有什么办法吗?那就是权值共享了。
由以上分析可知,隐含层的每一个神经元都连接10x10的图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元对应的这100个参数是相同的呢(也就是说每个神经元用的是同一个卷积核去卷积图像。)?这样岂不是就只有100个参数了?!不管隐层有多少个神经元,两层间的连接就只有100个参数。这就是权值共享的作用了。
这样卷积后得到的就是能够代表图像一种特征的一个feature map,而我们需要提取的是图像的多种特征,那如何提取图像的多种特征呢。需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分,所以权值个数需要加1。这个也是同一种滤波器共享的。
(停下来捋一捋上面的内容,如果有细节不理解也没关系,下面将进行更加详细的分析)
每个隐层神经元只与10*10的局部区域像素相连,这里的10*10就是滤波器的kernel size。stride就是滤波器的步长,即从一个隐层神经元到相邻隐层神经元之间的移动长度。各个神经元之间的权重是相同的,即权重共享。这样对kernel size中的局部图像进行卷积操作后,就映射得到了一个表示该图像同一特征的一个feature map。当又用一种滤波器进行相同的卷积操作后,就又得到能代表该图像另一特征的一个feature map……
深度学习介绍(四)卷积操作_第2张图片
用画图软件画了个图帮助理解。如图:黑色的框表示4*4的图片,当滤波器的kernel size为2,stride为2(即相邻两个隐层神经元之间无重叠)时,由之前介绍的公式知生成的feature maps的边长为(4-2)/2 + 1 = 2。同一种颜色代表一个filter,该图中有两个filter,生成了代表两种特征的feature maps。
也可以从另一种角度进行理解:
这里写图片描述
一个kernel size为2*2的filter对图像进行扫描,每次移动的步长stride为2,每条连接线上的权重固定,每次扫描后得到的值按照空间顺序组成一个feature map。当卷积核和权重更改时,即使用了另一个filter,生成另一个feature map。至于每条线上的权重则是通过训练得到的。
卷积过程如下图所示,原始图像的size为5*5,滤波器的kernel size为3*3,stride为1,权重固定。生成的feature map的边长为:(5-3)/1 +1 = 3。
深度学习介绍(四)卷积操作_第3张图片
具体卷积过程如下图所示:
深度学习介绍(四)卷积操作_第4张图片
为了加深理解,再举一个例子:
上一层的feature map大小为4*4,卷积核大小为2*2,卷积核每次移动一步,用这个卷积在feature map上滚一遍,得到一个一个(4-2+1)*(4-2+1)=3*3的feature map。如下图所示:
深度学习介绍(四)卷积操作_第5张图片

你可能感兴趣的:(DeepLearning)