干货|(DL~2)一看就懂的卷积神经网络

文章来自:https://leonardoaraujosantos.gitbooks.io

作者:Leonardo Araujo dos Santos

作者:石文华

编辑:陈人和

image

image

前  言

卷积神经网络由很多层组成,利用过滤器(卷积核)从输入中获取有用的信息,这些卷积核的参数通过“学习”自动的进行调整,使其为没有进行过手工特征提取的任务提取最有用的信息。卷积神经网络更适合图像任务,而全连接神经网络并不很适合图像分类问题。本文继承上次推文《深度学习以及卷积基础》。

章节目录

与全连接神经网络对比

卷积层

卷积操作

特征图占的内存

FC->Conv

参考文献

1与全连接神经网络的对比

在全连接网络中,我们需要将图像转化为一个一维的向量[1,(width.height.channels)],然后将数据送入一个全连接的隐藏层,如下图的10001000图片,输入到100万个节点的隐藏层,这样一个隐藏层就会产生10¹²个参数,而如果使用1010的卷积核做卷积,这个卷积层才1亿个参数。

image

常见的构建模式

通常[CONV-> ReLU-> Pool-> CONV-> ReLU-> Pool-> FC-> Softmax_loss(在训练期间)]这样的模式相当普遍。

image.gif

2卷积层

卷积神经网络中最重要的操作是对输入做卷积,如果我们将该一个32x32x3图像与5x5x3进行卷积(卷积核深度必须与输入的深度相同),步长为1,则输出的特征图的维度是28x28x1。

image

过滤器的作用相当于对图片进行特征提取,并且一个过滤器在一个输入上只会产生一个特征图。

image

如果我们希望我们的卷积层寻找6个不同的特征图。在这种情况下,我们需要6个5x5x3过滤器。每一个过滤器都会对输入图片进行特征提取。

image

卷积本身是一种线性操作,如果我们不想受到线性分类问题的困扰,那么我们需要在卷积做完之后添加一个非线性层(通常是Relu)。

使用卷积作为模式匹配的另外一个原因是图像上搜索的目标跟位置是不相关的。在卷积神经网络中,模型将在训练期间对目标所在的确切位置学习它的特征。

超参数

卷积层的超参数有:

卷积核的大小(K):小的更好(如果是在第一层,需要消耗大量的内存)

步长(S):卷积核窗口将滑动多少个像素(通常为1,在pooling层通常为2)

零填充(pad):在图片边缘填充0,使得输出跟输入的大小一致(F = 1,PAD = 0; F = 3,PAD = 1; F = 5,PAD = 2; F = 7,PAD = 3)

过滤器数量(F):也就是希望输出多少个特征图。

输出的特征图的大小

通常情况下,卷积之后的输出是小于输入的,但是我们可以使用0填充使得输出跟输入大小一致。不使用全零填充情况下计算输出特征图的大小,我们可以使用下列公式:

Out(length)=[in(length)-filter(length)+1]/stride(length)

Out(width)=[in(width)-filter(width)+1]/stride(width)

3卷积操作

接下来的几个例子,我们通过改变一些超参数来看看卷积操作的效果。

padding为0,步长为1.

输入为44的矩阵,卷积核为33,padding为0,步长为1,如下图:

image

****padding为1,步长为1.****

输入为55的矩阵,卷积核为33,padding为1,步长为1,在某些库中,  会有参数“same”使得输出矩阵的维度跟输入是一样的。 ****

image

****

参数的数量(权重)

我们用一个简单的例子举例说明如何计算一个卷积层的参数的数量,输入图片为32323,也就是3232大小的RGB彩色图,卷积核大小为(55),步长为1,padding为2,卷积核数量为10(也就是深度为10),参数的数量为:

(553+1)*10=760,也就是说参数的数量只与卷积核的大小,输入图片的深度以及卷积核的数量有关,其中+1是偏置项,你也可以省略+1,因为偏置项可以设为0。

4特征图占的内存

如何计算卷积图层输出所需的内存量呢?假设我们的输入为32x32x3,3表示RGB三个通道。卷积层的配置为:Kernel(F):5x5,Stride:1,Pad:2,numFilters:10,因为我们使用了填充,所以输出将是32x32x10,最终得到特征图所占的内存大小为:323210=10240字节。内存量基本上只是输出量张量的乘积。

11卷积核*

这种类型的卷积通常适用于深度,合并它们的时候,并不影响空间信息。

代替大卷积核

这里我们解释一下级联几个小卷积的效果,如下图所示,两次33的卷积效果相当于一次55卷积之后的效果,也就是说级联可以使感受野变大。

image

现在更多的是趋向于使用小的卷积核,例如77的卷积核你可以使用三个33深度相同的卷积核来替换,但是不要在第一层替换,因为深度不匹配,所以无法在第一层替换(除非你第一层只有3个卷积核)

image

在上图中,我们用3个3x3的卷积核代替一个7x7的卷积核,每个卷积核中间我们有Relu层进行非线性化。此外,越到后面我们拥有更少的权重以及乘加操作,因此计算速度会更快。

计算替换的77卷积*

输入矩阵为WHC的矩阵上使用C个77的卷积核,我们可以计算出参数的数量为:77CC,如果我们使用3个33的过滤器代替77的话参数的数量为:333CC,可以看出我们将会有更少的参数,由于卷积层之间还要进行非线性的relu操作,所以我们的非线性程度更大。更少的参数和更大程度的非线性操作将使得模型会更优。

在第一层进行替换

如前所述,我们一般不会在第一层用小的卷积代替大的卷积,因为第一层使用小卷积的话得到的特征图所占的内存是远比大卷积得到的特征图的内存要大很多的,有兴趣的话可以计算一下输入图片为2562563,卷积神经网络的第一层为3x3与64个滤波器,步幅1和深度7x7和步幅2相同的深度的情况进行比较。

瓶颈层来替换33*

用一种称为瓶颈的机制来简化3x3卷积。与正常3×3卷积的效果是相同的,但它具有更少的参数和更多的非线性,观察下图用瓶颈层替换3*3的卷积,效果是一样的,但是参数更少,非线性更显著。

image

瓶颈层上使用的参数量计算如下:

image

计算出了是3.25CC,明显比9CC更少。

微软的残差网络也是用了这种瓶颈层,如下图所示残差网络。

image

另外一种替换33使得参数更少的结构是先使用13C再使用31*C,googlenet的 inception层上使用了这种方式。

image

image

5FC->Conv

可以将全连接层转换为卷积层,反之亦然,但我们对FC-> Conv转换更感兴趣。这是为了提高性能。

例如,设想输出K = 4096和输入7x7x512的FC层,转换将为:

CONV:卷积核:7x7,pad:0,步幅:1,卷积核数量:4096。

使用2d卷积公式size :

image

结果是1x1x4096。通过将FC层转换为卷积的好处:

性能:由于权重共享,计算速度更快

你可以使用比你训练的图像更大的图像,但不会改变任何内容

你将能够在同一图像上检测到2个对象(如果使用更大的图像),则最终输出将大于单行矢量的输出。

image

计算感受野

感受野是一个特定的卷积窗口,表示“看到”它输入的张量。

有时候,确切地知道每个单元格从输入图像上“看到”多少,这对于物体检测系统是特别重要的,因为我们需要以某种方式将某些激活图尺寸匹配回原始图像的尺寸(Label图片)。

image

Rk:当前层k的接受野

Kernel:当前图层k的内核大小

s:步长

image

指每一层都输出直到第k-1层(所有以前的层,而不是当前层)

需要注意的一点是:

对于第一层,接受野是内核大小。

这些计算与图层类型(CONV,POOL)无关,例如,步幅为2的CONV将与步幅为2的POOL具有相同的感受野。

例:

输入为14x14x3的图像:

CONV:S:1,P:0,K:3

CONV:S:1,P:0,K:3

MaxPool:S:2,P:0,K2

CONV:S:1,P:0,K:3

image

参考文献

http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

http://cs231n.github.io/convolutional-networks/

https://www.youtube.com/watch?v=LxfUGhug-iQ

https://www.youtube.com/watch?v=FmpDIaiMIeA

https://www.youtube.com/watch?v=jajksuQW4mc

https://www.facebook.com/yann.lecun/posts/10152820758292143

http://neuralnetworksanddeeplearning.com/chap6.html

https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

http://shawnleezx.github.io/blog/2017/02/11/calculating-receptive-field-of-cnn/

https://guillaumebrg.wordpress.com/2016/02/13/adopting-the-vgg-net-approach-more-layers-smaller-filters/

作者:机器学习算法工程师

链接:https://www.jianshu.com/p/e1f99f5eba91

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容