01
—
卷积操作的背景知识
局部连接
根据图像其局部的像素联系较为紧密,距离较远的像素相关性较弱,这一合理的假设,CNN认为每个神经元没有必要对整个的全局图像进行感知,只需要对局部进行感知,然后接下来的隐含层中再对局部的信息综合起来,这样就提取成了一个新的保留了原来主要特征的图像。
局部连接对权重参数的减少力度大吗? 我们来计算下,文章开始说到一个如果采用DNN,那么权重参数为10^12个,假如采取局部连接,定义隐含层的每个神经元只与输入层的100个像素建立关系,也就是说共有:10^6 × 100 个权重参数,10^8个,这个参数量还是不小吧,所以需要第二种措施,权值共享。
权值共享
上文说到,只减少隐含层的节点关联的输入层的像素点,对参数的减少力度一般,那么,在这基础上,还能做些什么呢? 如果我们再做这么一个假设:从紧邻的100个像素点抽取出一小块,并已知这一块的每个像素点的权重参数,假定这一块的权重参数也会被100个像素点的权重参数被其他块所共享,这就是权值共享,称抽取的那一小块对应的权重参数为:kernel(也可称为 filter, feature detector),并且这个操作可以一层一层地做下去,这样图像的特征会随着隐含层的加深,而逐渐变得抽象起来。
CNN借助以上两种措施对权重参数做减法,并且把这两种措施合起来,起了一个名字,叫做卷积操作,并且将这种深度学习算法称为卷积神经网络算法。
总结,可以看出,DNN中是节点与前后层是全连接的,而CNN算法对节点做了局部连接和权重参数共享,以此减少参数,加快收敛速度,使得用神经网络模型对图像进行分类操作成为了可能。
02
—
单核做卷积操作
在卷积操作中,涉及到一种特殊的操作,叫做求内积,它是两个同型矩阵对应的元素相乘,然后求和。具体说来,如下,
A和B做内积后,得到一个数:1*1 + 0*0 + 1*1 + 0*0 + 1*1 + 0*0 + 1*1 + 0*0 + 1*1 = 5,这就是两个矩阵求内积得到的结果。
接下来,看下100个像素点,如何用一个指定大小的卷积核,做卷积操作的,为了演示的方便,直接拿一个5×5的原图像块,经过3×3的卷积核,最后如何提取特征的,首先3×3的卷积核长这样:
filter = [1 0 1
0 1 0
1 0 1 ]
为了更清晰,表达在原矩阵上,如左上角所示,这样第一次做内积后,得到 4, 放在卷积后的矩阵中的第一元素中。
第二步,要想这个filter核需要移动多大的步长呢,在此移动步长为1,这就是CNN中的一个重要超参数:步长(stride),移动1个步长和卷积操作后,得到3,再放入结果中,如下图所示:
这样依次移动9步,最后的卷积结果如下图所示:
03
—
多核做卷积操作
如果用多个卷积核进行卷积操作,应该是怎样的呢,为了表达方便,分享一个多核卷积操作的动画演示,图中的输入为 7 × 7 × 3,可以看到还做了一层零填充(Zero-padding),这是CNN中另一个重要的超参数,用到了两个过滤核:w0和w1,这在CNN中称为深度(Depth),是CNN三个超参数介绍的最后一个,分别用两个过滤核w0,和w1做了一次卷积操作,对应的得到两个卷积结果。
本gif参考网址
http://cs231n.github.io/assets/conv-demo/index.html
04
—
总结
以上这些就是CNN的卷积部分,它应用了两种技术:
减少了权重参数,具体这个操作为卷积操作,这个操作有3个重要的超参数:
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!