本文主要是介绍卷积神经网络CNN的各个层做的事情No.30,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我是小蕉。
今天跟大家聊聊卷积神经网络各个层实际做的事情以及原理。
马老大在一个峰会说:"我们之前做了很多算法的优化,但是现在有了深度学习,可能用一个算法,不断叠加叠加到729层,就能达到之前所不能达到的精度和效果。"
卷积神经网络是深度学习很重要的基础结构之一,很多深度学习的网络中都是一层加一层地叠加卷积神经网络来达到各种各样的目的。卷积神经网路开始发力应该是在2012年的ImageNet大赛中出现的AlexNet,达到了之前很多算法都无法达到的精度。也是在那之后,很多深度学习的网络开始出现。
按照我目前了解的情况来看,其实大部分是聪明能干的机器学习专家们从实验环境实验出来某个网络结构的表现比较好,后面的人都在上面改进吧了。
卷积神经网络难不难?
从两方面来说吧,卷积和神经网络。
卷积是什么?
先说一个定义,叫卷积核。卷积核就是一个N*N的矩阵。
比如下面就是一个3*3的卷积核C:
-1 1 -1
-1 5 -1
-2 2 -2
再说一个定义,叫补白padding,下面就是对原始矩阵进行0补白,从A变为Ap。
->
好接下来要开始卷积了,怎么做呢?
从A的左上角的第一个矩阵元素开始,以它为中心划出一个3*3的矩阵Q(这个矩阵跟卷积核的大小保持一致)。
如果中心在边缘咋办呢?那就需要我们补白过的矩阵Ap了,反正就要保证每一次都是3*3就对了。
然后对挑选出来的Q和卷积核C进行向量叉乘然后把矩阵9个元素进行加和。C x Q,然后加和得到Q’,这就生成了新矩阵的其中一个元素啦,也就是完成了一次卷积。
下定义:步长。就是3*3卷积核每次移动的的步伐。(步子大了容易扯到,你懂的)
如果步长为1那么就是把矩阵从左上角一步一步挪到右下角,每一个矩阵都做一次上面的卷积,这样就做完了一整个矩阵的卷积,然后就得到一个新的卷积后的新矩阵。
这个矩阵就能获取到原始矩阵的一些特征。怎么获得的呢,这个跟卷积核有关,卷积核能做的事情就是突出某些东西,忽视某些东西,这样经过整个卷积后,就能得到一整个矩阵的一些特征啦。
对于图片像素矩阵来说,就是把某些特点提取出来。
接下来该说说神经网络啦,神经网络是什么呢?其实上一篇已经说过了,大家可以翻回去看看。大意就是:每一个神经元都有1到N个输入,经过神经元的处理,然后有0或者M个输出。
尝试克服一下小伙伴对神经网络的恐惧No.26
能坚持看到这里的都是很有毅力的人了。
卷积神经网络的解释到此就差不多了。下面介绍经典的AlexNet,很多卷积神经网络都是在这个上面进行改进的。
不知道大家是不是跟我有同一个疑惑,神经网络有一个很玄乎的问题,什么叫隐藏层(Hidden Layer)。
后来发现。
特么的。除了输入层和输出层,其他全特么叫隐藏层。
好了吐槽完进入正题。
AlexNet来了。
上面的图也可以不用看。
输入层->卷积层->Relu层->pooling层->卷积层->Relu层->pooling层->全连接层->全连接层->softmax层->输出层。
除了输入层和输出层,其他全特么叫隐!藏!层!再吐槽一次,这个问题真的困扰了我很久什么叫隐藏层。
好了一个一个说吧。
卷积层就不说了,就上面那样的操作,目的就是提取特征,可能一次性给48个卷积和然后就获得48个特征输出矩阵啦。
Relu层,relu其实是一个函数,就是f(x) = max{0 , x},如果x小于0,那么f(x)就取0,如果x大于0,那么f(x)就取x。
pooling层,这个好玩了,pooling层就是把一个大大的矩阵切块,然后每一块都是一样大的比如2*2。然后做什么事情呢?取平均值或者取最大值。一般来说有maxPooling或者averagePooling两种。
比如说这个。
-> ->
进行maxpooling后就变成最右边这样了。这样做的好处是什么呢?就是为了减少特征数目,在把损失变成最小的同事把特征数目控制住。可别忽视了这一步,这一步要是没有,传入下一个卷积层的数据可就翻了好多倍啦!
有人说,那为毛不把步长变成2呢,这样直接结果也是maxpooling后的大小啊。
步长变成2,岂不是很多格子都没有扫到?这样损失也太严重了吧。所以普遍的做法都是先完整卷积,再进行pooling,这样子特征数目得到控制,精度也得到保证了。
这样叠个两层,聪明的科学家发现已经足够提取大部分的特征了,接下来就把所有的特征平铺成一维的,然后再当成我们前一节写的softmax神经网咯,进行两层的全连接,然后再进行softmax进行分类。
分类的结果呢,肯定是有误差的嘛,所以又会反向传播到第一层,进行参数梯度的变更,再进行下一次的训练啦,其他的跟上一次的没什么差别。
至于说为什么需要两个全连接层来做分类,分类是一定要的不然没法输出,为什么是两层这个是科学家实验的结果,你完全可以试试三四层或者一层这样。
另一方面全连接层在现在都是饱受诟病的东西,因为参数实在是太太太多了,所以后面很多科学家的研究都是把全连接层替换掉。有的网络里面就把全连接层替换成卷积层了。
卷积神经网络有什么好处呢?
最最最大的好处就是,参数少,神经网络最好的地方就是参数多,最怕的地方也是参数多。
一次完整的卷积,只需要一个卷积核参数,整个大矩阵都是按照这个卷积核来进行计算,这很大程度降低了训练的成本。
除此之外,上面没讲到的一个东西就是dropout层。
dropout,也就是丢掉。
我们都知道神经网络都具有过拟合的倾向,卷积神经网络也不例外,他也很可能会过拟合。科学家发现,通过设定某一个概率,去丢掉一些计算结果,反而会使得网络更加健壮,所以dropout层所做的事情就是把按照概率把某些计算结果丢掉。
神经元:计算完啦,给你给你。
dropout层:我掐指一算,你这个结果跟我的星座不合,不要不要,丢掉。
神经元:zzz。
好啦,卷积神经网络就分享到这,如果觉得有帮助的话,分享给你的朋友吧,这对我很重要,谢谢大家支持,么么哒~~
赏个糖吃嘛~
这篇关于卷积神经网络CNN的各个层做的事情No.30的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!