前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[机智的机器在学习] 常用网络层总结之CNN篇

[机智的机器在学习] 常用网络层总结之CNN篇

作者头像
用户1622570
发布2018-04-11 15:37:14
9320
发布2018-04-11 15:37:14
举报
文章被收录于专栏:机器学习和数学

卷积神经网络(CNN)由输入(Inputs)、卷积层(Convolutions layer)、激活层(Activation)、池化层(Pooling layer)和全连接层(Fully Connected, FC)成。这句话的意思是CNN里面可以有这些层,但是每种网络层(Layer)的个数理论上是可以任意多个的。这也就有了后来的AlexNet,GoogLeNet,ResNet等著名的网络结构,后面我会选择一两个介绍下吧。他们的主要区别就在于Layer的深度不一样,也就是Layer的数量。一般来说Layer越深,能学习到的特征就越多。但是Layer越多需要的数据量就越大,需要的计算资源也就更多。但是近几年大量可获得的数据的出现(ImageNet Datasets),更牛皮的GPU (NVIDIA),促进了Layer向更深的方向发展。

今天呢我还是会再举个栗子,通过下面这张图,把CNN涉及到的网络层逐一介绍一些前两篇关于CNN入门中没有提到的一些细节。

图1:卷积神经网络细节图(来源于网络)

我们从左往右逐个先大概浏览一下,首先是一张31x39x1大小的一张灰度图,然后通过4个Convolution layer,3个Pooling layer, 一个FC,最后是一个用于分类的SoftMax layer。如果换做彩色图,也是可以的,对于灰度图和彩色图处理上的区别,可能就在于最开始的通道数(channel number)不一样,其实并不影响什么,通过卷积之后得到的特征图(FeatureMaps),其实就是通道(channel)。

1. Inputs-->Convolutional layer1-->max-Pooling1

输入是一张图片,然后对他做一系列的处理计算,最后就能知道它是什么,比如说可以知道它是一个人头像的照片。

然后我们看一下细节的东西,图片的中间有一个4x4x1大小的卷积核。通过Convolutional layer 1得到一个28x36x20大小的Feature Maps。这里有个公式之前提到过,就是(31-4+1)x(39-4+1)=28x36。如果图片大小和卷积核大小变了,还是一样的计算方法哈。这里是没有加边缘的,就是之前提到过得Zero Padding,后面遇到了再说细节。为什么是20个Feature Maps呢?是因为它用了20个4x4大小的卷积核对图像做卷积处理。为什么要用20个呢?是因为特征图越多,可以学习到的特征就越多。那可不可以用更大的数字?可以的。但是不保证效果一定就好。

还是那句话,deep learning是一门实验性极强的学科,参数的设置都是要通过具体的问题,经过多次实验最终得到的。所以说做deep learning是一个很费时间,资源的工作。还记得我刚开始要学deep learning的时候,有人就说不建议一个人去搞这个,最好有个团队,因为无论从硬件和软件,都是一个挑战,我敢说国内很多大学的实验室,是没有相关的计算资源的。当时我就不明白为啥一个人不行,所以我傻乎乎的坚持学,哎,想想那个过程,都是泪!!!如果你现在的状态和我开始的时候是一样的,我建议keep going,you can do it better ! 打好基础,问题会一步步解决的!卷积层就说到这,下面再看一下Pooling。

你可能也注意到了,这张图写的Max-Pooling,也叫最大值池化。那有没有别的Pooling?有。还有一种但没有Max更常用的叫做均值Pooling,Mean-Pooling。从名称上应该就能体会到他们的区别,MaxPooling呢就是取池化窗口(Pooling Window)中最大的那个值最为新的值,MeanPooling呢就是取平均值。上图的Pooling Window的池化大小(Pooling size)是2x2,也就是一个window里面有4个值,对吧,然后max一下,就是把最大的取出来。先别想整幅图,就看这个2x2大小的图,Pooling之后相当于把长和宽都取了一半,对不对?2x2取最大值,那不就剩下1个数了,1个就是1x1大小。那么对于整副图来说,图片的大小也就变为原来的一半。那么问题来了,为什么要做Pooling?不做行不行?

一般来说,Pooling可以减小输入的大小,加速模型的训练过程。但是这样做会不会造成信息的损失呢?损失肯定是有的,但是相比如训练时间以及最后的准确度,这点损失几乎可以忽略。为什么可以忽略?那是因为图片具有“静态性”的属性,简单说就是一副图片相邻区域的特征几乎一样,想想实际生活中的图片正是这样的,你懂的!

然后说了这么多,貌似没有提到Activation,Activation一般是加在Convolutional后面,Activation的作用呢就是激活。怎么理解激活呢,从神经学的角度来说,有些神经元通过卷积之后可能就died了,所以激活一下,让他活过来。好了别闹了,我们处理的是图片,明显是无生命的东西。从数学的角度讲,Activation就是为了把一些丢失的值给变回来,来弥补Convolutional造成的信息的损失, Activation通常有很多种做法,不同的做法对应不同的激活函数(Activationfunction)。常见的之前提到过,比如softmax,relu,Leak relu,tanh,sigmoid等。区别是什么呢?这个各位看官自己去查一下吧,不难,就是几个数学公式,我举个栗子吧,不想单独讲一次了。比如我们的relu,公式是

F(x) = max(0, x)

是不是很简单!relu就是把输入x和0比较一下,取最大值,说白了就是把正数保留,负数变为0。函数图像就不画了,但是各位要去看一下哦~。

图2: (./copy图1.sh )(方便看)

2. Convolutional layer 4--> Deephidden identity features

在这个之前把1 Inputs-->Convolutional layer1-->max-Pooling1再double一下就可以了,计算方法完全一样,其实你也可以triple kill,quadruple kill,甚至 penta kill一下。都是没得问题的。只不过需要注意的是,不论你用什么框架,TensorFlow,Keras,还是Caffe,还是别的,都要注意他们先后的参数设置,要保证正确。如果不正确就会导致前一个Layer的输出无法作为后一个Layer的输入,说白了就是要匹配。如果不懂,可以去尝试写n个这样的循环,先不考虑最后分类的结果怎么样,n你自己定,然后你就明白了。(为了让大家动手写,我也是操碎了心呐!)

到了Convolutional 4的时候,原始图片变为了80个1x2的Feature Maps。最后这个FC稍微有点特殊,特殊之处在于他的一部分是Convolutional layer 4,一部分是Max-Pooling layer 3。暂且可以不考虑那么多,就说Convolutionallayer 4,他经过FC之后,变为80x2x1=160维特征的一个特征向量。Deep hidden identity features就是经过前面这一系列完美(乱七八糟)的计算得到的深层的关于输入图像的特征。到这里应该明白了什么是FC,简单说就是把上一个layer的特征全部铺平(Dense)了。

关于特征(Features)其实坑点也挺多的,在Machine Learning里面Feature selection 也是一个重要的课题,后面再讲吧。最后面的那个Soft-max layer,就是把FC做一个多分类回归,关于soft-max分类呢,他是sigmoid的一个推广,sigmoid一般解决二分类问题,而soft-max呢是多分类。细节请关注后续分享!

最后在说一句,今天的分享是为了补前俩天拉下的东西,本来昨天是要分享的,结果生活出了点bug,导致我经过26+个小时的连续作战,最终于9点多到家,吃了饭就去休息了,所以就没写,请大家见谅!然后呢,听说长得帅的看官已经share给小伙伴了 !

“五一”这三天就不更新了,祝大家过一个开心,快乐,开心,快乐,开心,快乐的假期! 好日子分享给大家, hhahah

下期写什么呢, 下期写一下今天没有提到的其他的Layer!敬请关注!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

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

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

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