前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BAT面试题24:什么是卷积?

BAT面试题24:什么是卷积?

作者头像
double
发布2018-12-25 16:16:02
9890
发布2018-12-25 16:16:02
举报
文章被收录于专栏:算法channel

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个重要的超参数:

  1. 步长(Stride)
  2. 零填充(Zero-padding)
  3. 深度(Depth)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档