CNN入门讲解:如何理解卷积神经网络的结构
原创文章,一家之言。
个人公众号:follow_bobo
知乎号:蒋竺波
转载请通知本人。
大家好,我是波波,欢迎再次来到CNN入门讲解。
上次我们讲什么卷积以及卷积在卷积神经网络里的作用,那我们这一期来理一理卷积神经网络大致的结构
吗?
我不!!
惊不惊喜?!
抱歉,我就是这样一个水性杨花,做事看心情的美男子。
不服,请点赞。
哈哈哈哈哈哈哈哈哈哈[email protected]&^EU#(kjt
(一阵尴尬的沉默)
上一期我们讲了,卷积实际上可以充当一个对原图像进行二次转化,提取feature 的作用,
相当于信号处理的滤波器,大家可以再去了解一下高斯滤波,拉普拉斯滤波等,这些都可以写成卷积的形式
比如这样:
神经网络想必大家都有了解,评价神经网络好坏的一个重要的依据就是:
以最少的代价,使神经网络获得最好的准确率
关键词:代价,准确率
那我们来看看下面这张图:
我们先来看一个手写体的‘2’(大小是32*32)
正常情况下,我们人眼看这张图的全局,立马就能识别出这是个数字‘2’
机器如何去看全局呢
实际上,就是把所有pixels 一股脑全放进一个神经网络
让神经网络去处理这些pixels
这个神经网络,我们先叫他全连接层吧
就像下图一样:
感觉就是暴力解决嘛
抛开准确率不说
我们大概会得到3*32*32*1024*512 = 1610612736 个参数,这些参数量是非常大的了
而这仅仅是一个32*32 的图像,运算量非常大了
同时,由于参数过多,极其容易产生训练结果好,检测结果差的现象(overfitting)
但我们仔细看这个图,我们肉眼其实也是有选择性的,我们并不太关心上图中灰色的区域,以及数字’2‘中的黑色区域
我们更关心’2‘与灰色区域的相交的边缘,因为这才是我们判断的主要依据
那我们会不会也可以在计算机里也这么做,主要提取边缘特征,对于灰色和黑色这种冗余或者不重要的的区域特征,我们尽量丢弃或者少保留,那么这样可能会减少参数或者减少提参数的过程
既然这样,那我们干脆在全连接层前面,对输入图像进行一个预处理吧
把那些没用的
烂糟的
统统扔掉
于是我们加了个采集模块
我们只保留那些我们想要的,或者相对比较重要的pixels
我们就叫它采样层吧
所以,我们得到下面这个网络:
然后,我们再来看一个问题:
我们来把这个’2‘分成块,一块一块看:
你一块块看
是不是仍然会发现这是个数字’2‘?
也是说,你大脑会自动把这些分散的图片组合起来进行识别
同时如果我们这么看:
是不是你就识别不出来这是‘2’
也就是说,我们发现了两个现象:
- 如果我们只知道局部的图片,以及局部的相对位置,只要我们能将它正确组合起来,我们也可以对物体进行识别
- 同时局部与局部之间关联性不大,也就是局部的变化,很少影响到另外一个局部
我们还要解决两个问题:
- 输入的只是原始图片,我们还没有提取图片的特征
- 我们目前要处理的参数仍然非常多,我们需要对原始输入进行降维或者减少参数
我们现在回到上次讲的卷积:
一个3x3 source pixels 经过一个3x3的卷积核后,source pixels 的特征映射成一个1x1 destination pixel
然后我们再加上以上我们提到一些人眼识别图像的性质
那么
我们就会发现
来着早不如来得巧,卷积加上刚刚好
好了 ,我们得到了如下神经网络:
(大家请忽略图上的数字,以后会讲的)
实际上,我们还会遇到两个问题:
- 一张图片特征这么多,一个卷积层提取的特征数量有限的,提取不过来啊!
- 我怎么知道最后采样层选出来的特征是不是重要的呢?
烦人!
啊哈哈
我这里又要提一个新概念----级联分类器(cascade of classifiers)
这个概念我以后会在机器学习入门上会细说,是个很常用的方法
我来大概介绍一下级联分类器
大概意思就是我从一堆弱分类器里面,挑出一个最符合要求的弱分类器,用着这个弱分类器把不想要的数据剔除,保留想要的数据
然后再从剩下的弱分类器里,再挑出一个最符合要求的弱分类器,对上一级保留的数据,把不想要的数据剔除,保留想要的数据。
最后,通过不断串联几个弱分类器,进过数据层层筛选,最后得到我们想要的数据
(你们也可以去搜搜Adaboost)
那么,针对刚才的问题,我们是否也可以级联一个卷积层和采样层?
是的,效果还不错
于是,如下图所示:
灯,等灯等灯
最简单的一个卷积神经网络,就诞生了
我想要申明的是,这是一个最简答的CNN结构,往后我会慢慢把结构加深
好了,我们来总结一下
CNN主要由3钟模块构成:
- 卷积层
- 采样层
- 全连接层
大致上可以理解为:
- 通过第一个卷积层提取最初特征,输出特征图(feature map)
- 通过第一个采样层对最初的特征图(feature map )进行特征选择,去除多余特征,重构新的特征图
- 第二个卷积层是对上一层的采样层的输出特征图(feature map)进行二次特征提取
- 第二个采样层也对上层输出进行二次特征选择
- 全连接层就是根据得到的特征进行分类
初学者是不是有点懵逼
其实整个框架很好理解,我举个生动形象的例子:
输入图像好比甘蔗。
卷积层好比A君要吃甘蔗,吃完之后(卷积),他得出一系列结论,这个甘蔗真好吃,我还想再吃!
啊不是,说错了
他得出结论,这个甘蔗是圆柱形,长条,甜的,白的,多汁的等等(提取特征)
采样层就好比第一个吃甘蔗的人告诉B君,吃甘蔗,重要的是吃个开心,为什么开心,因为它又甜又多汁,还嘎嘣脆(特征选取)
第二个卷积层就好比,B君并没有去吃剩下的甘蔗,而是
头也不回。
拦也拦不住的
去吃A君吐出的甘蔗渣
然后得出结论,嗯~~,
咦~~?
哦~~!
‘原来这甘蔗渣是涩的,是苦的,不易嚼,不好咽’B君这么说道(二次提取特征)
第二个采样层就好比,B君对别人说,这个甘蔗渣啊,吃的我不开心,因为它很涩,不好咽(二次特征选取)
如果你们要吃,注意点!
注意点!
意点!
点!
全连接层的作用,就好比是一个决策者,他听取了A,B君的描述
这样,如果有人吃很多东西,其中就有甘蔗
他们吃的时候,有一样东西吃起来,感觉和A,B君描述的非常接近,那么决策者就认为
这个很大概率是甘蔗了
好了,我讲了这么多,是不是大概有点理解CNN了?
什么
没有
你那按我说方法去吃甘蔗试试?