有熟悉深度学习中神经网络模型的人吗?

卷积神经网络是n年前就有的算法只是近年来因为深度学习相关算法为多层网络的训练提供了新方法,然后现在电脑的计算能力已非当年的那种计算水平同时现在的训練数据很多,于是神经网络的相关算法又重新火了起来因此卷积神经网络就又活了起来。

在开始前我们需要明确的是网上讲的卷积神經网络的相关教程一般指的是神经网络的前向传导过程,反向传播都是用梯度下降法进行训练大部分深度学习库,都已经把反向求导的功能给封装好了如果想要深入学习反向求导,就需要自己慢慢学了

因为卷积神经网络的经典模型是:Lenet-5实现,只要理解了这个的前向传導过程基本上就OK了,因此我们后面主要讲解Lenet-5的实现

作为CNN的入门文章,没有打算啰嗦太多的东西因为什么权值共享、局部感受野什么嘚,讲那么多都是那些生物学的相关理论,看了那些玩意大部分初学者已经烦了。卷积神经网络的相关博文也是一大堆但是讲的,基本上都是抄过来抄过去就像我之前不理解从S2层到C3层是怎么实现的,网上看了一大堆教程没有一个解答这个问题的。我的个人感觉整個过程就只有S2到C3是最难理解的。接着我将用最浅显易懂的方式进行讲解

卷积的概念这个我想只要学过图像处理的人都懂的概念了,这個不解释我们知道对于给定的一幅图像来说,给定一个卷积核卷积就是根据卷积窗口,进行像素的加权求和

卷积神经网络与我们之湔所学到的图像的卷积的区别,我的理解是:我们之前学图像处理遇到卷积一般来说,这个卷积核是已知的比如各种边缘检测算子、高斯模糊等这些,都是已经知道卷积核然后再与图像进行卷积运算。然而深度学习中的卷积神经网络卷积核是未知的我们训练一个神經网络,就是要训练得出这些卷积核而这些卷积核就相当于我们学单层感知器的时候的那些参数W,因此你可以把这些待学习的卷积核看荿是神经网络的训练参数W

刚开始学习CNN的时候,看到这个词好像高大上的样子,于是查了很多资料理论一大堆,但是实践、算法实现卻都没讲到也不懂池化要怎么实现?其实所谓的池化就是图片下采样。这个时候你会发现CNN每一层的构建跟图像高斯金字塔的构建有點类似,因此你如果已经懂得了图像金字塔融合的相关算法那么就变的容易理解了。在高斯金子塔构建中每一层通过卷积,然后卷积後进行下采样而CNN也是同样的过程。废话不多说这里就讲一下,CNN的池化:

为了简单起见我用上面的图片作为例子,假设上面的图片大尛是4*4的如上图所示,然后图片中每个像素点的值是上面各个格子中的数值然后我要对这张4*4的图片进行池化,池化的大小为(2,2)跨步为2,那么采用最大池化也就是对上面4*4的图片进行分块每个块的大小为2*2,然后统计每个块的最大值作为下采样后图片的像素值,具体计算如丅图所示:

也就是说我们最后得到下采样后的图片为:

这就是所谓的最大池化当然以后你还会遇到各种池化方法,比如均值池化也就昰对每个块求取平均值作为下采样的新像素值。还有重叠采样的池化我上面这个例子是没有重叠的采样的,也就是每个块之间没有相互偅叠的部分上面我说的跨步为2,就是为了使得分块都非重叠等等,这些以后再跟大家解释池化常用方法这里就先记住最大池化就好叻,因为这个目前是最常用的

这个单词国人把它翻译成特征图,挺起来很专业的名词那么什么叫特征图呢?其实一张图片经过一个卷積核进行卷积运算我们可以得到一张卷积后的结果图片,而这张图片就是特征图在CNN中,我们要训练的卷积核并不是仅仅只有一个这些卷积核用于提取特征,卷积核个数越多提取的特征越多,理论上来说精度也会更高然而卷积核一堆,意味着我们要训练的参数的个數越多在LeNet-5经典结构中,第一层卷积核选择了6个而在AlexNet中,第一层卷积核就选择了96个具体多少个合适,还有待学习

回到特征图概念,CNN嘚每一个卷积层我们都要人为的选取合适的卷积核个数及卷积核大小。每个卷积核与图片进行卷积就可以得到一张特征图了,比如LeNet-5经典结构中第一层卷积核选择了6个,我们可以得到6个特征图这些特征图也就是下一层网络的输入了。我们也可以把输入图片看成一张特征图作为第一层网络的输入。

对于刚入门CNN的人来说我们首先需要现在的一些经典结构:

(1)LeNet-5。这个是n多年前就有的一个CNN的经典结构主要昰用于手写字体的识别,也是刚入门需要学习熟悉的一个网络我的这篇博文主要就是要讲这个网络

在imagenet上的图像分类challenge上大神Alex提出的alexnet网络结構模型赢得了2012届的冠军,振奋人心利用CNN实现了图片分类,别人用传统的算法调参跳到半死也就那样Alex利用CNN精度远超传统的网络。

输入:32*32嘚手写字体图片这些手写字体包含0~9数字,也就是相当于10个类别的图片

输出:分类结果0~9之间的一个数

因此我们可以知道,这是一个多分類问题总共有十个类,因此神经网络的最后输出层必然是SoftMax问题然后神经元的个数是10个。LeNet-5结构:

输入层:32*32的图片也就是相当于1024个神经え

C1层:paper作者,选择6个特征卷积核然后卷积核大小选择5*5,这样我们可以得到6个特征图然后每个特征图的大小为32-5+1=28,也就是神经元的个数由1024減小到了28*28=784

S2层:这就是下采样层,也就是使用最大池化进行下采样池化的size,选择(2,2)也就是相当于对C1层28*28的图片,进行分块每个块的大小為2*2,这样我们可以得到14*14个块然后我们统计每个块中,最大的值作为下采样的新像素因此我们可以得到S1结果为:14*14大小的图片,共有6个这樣的图片

C3层:卷积层,这一层我们选择卷积核的大小依旧为5*5据此我们可以得到新的图片大小为14-5+1=10,然后我们希望可以得到16张特征图那麼问题来了?这一层是最难理解的我们知道S2包含:6张14*14大小的图片,我们希望这一层得到的结果是:16张10*10的图片这16张图片的每一张,是通過S2的6张图片进行加权组合得到的具体是怎么组合的呢?问题如下图所示:

为了解释这个问题我们先从简单的开始,我现在假设输入6特征图的大小是5*5的分别用6个5*5的卷积核进行卷积,得到6个卷积结果图片大小为1*1如下图所示:


    为了简便起见,我这里先做一些标号的定义:峩们假设输入第i个特征图的各个像素值为x1ix2i……x25i,因为每个特征图有25个像素因此第I个特征图经过5*5的图片卷积后,得到的卷积结果图片的潒素值Pi可以表示成:

这个是卷积公式不解释。因此对于上面的P1~P6的计算方法这个就是直接根据公式。然后我们把P1~P6相加起来也就是:

把仩面的Pi的计算公式,代入上式那么我们可以得到:

其中X就是输入的那6张5*5特征图片的各个像素点值,而W就是我们需要学习的参数也就相當于6个5*5的卷积核,当然它包含着6*(5*5)个参数因此我们的输出特征图就是:

这个就是从S2到C3的计算方法,其中b表示偏置项f为激活函数。

我們回归到原来的问题:有6张输入14*14的特征图片我们希望用5*5的卷积核,然后最后我们希望得到一张10*10的输出特征图片

根据上面的过程,也就昰其实我们用5*5的卷积核去卷积每一张输入的特征图当然每张特征图的卷积核参数是不一样的,也就是不共享因此我们就相当于需要6*(5*5)个參数。对每一张输入特征图进行卷积后我们得到6张10*10,新图片这个时候,我们把这6张图片相加在一起然后加一个偏置项b,然后用激活函数进行映射就可以得到一张10*10的输出特征图了。

    而我们希望得到16张10*10的输出特征图因此我们就需要卷积参数个数为16*(6*(5*5))=16*6*(5*5)个参数。总之C3层每個图片是通过S2图片进行卷积后,然后相加并且加上偏置b,最后在进行激活函数映射得到的结果。

S4层:下采样层比较简单,也是知己对C3的16張10*10的图片进行最大池化池化块的大小为2*2。因此最后S4层为16张大小为5*5的图片至此我们的神经元个数已经减少为:16*5*5=400。

C5层:我们继续用5*5的卷积核进行卷积然后我们希望得到120个特征图。这样C5层图片的大小为5-5+1=1也就是相当于1个神经元,120个特征图因此最后只剩下120个神经元了。这个時候神经元的个数已经够少的了,后面我们就可以直接利用全连接神经网络进行这120个神经元的后续处理,后面具体要怎么搞只要懂哆层感知器的都懂了,不解释

上面的结构,只是一种参考在现实使用中,每一层特征图需要多少个卷积核大小选择,还有池化的时候采样率要多少等这些都是变化的,这就是所谓的CNN调参我们需要学会灵活多变。

比如我们可以把上面的结构改为:C1层卷积核大小为7*7然後把C3层卷积核大小改为3*3等,然后特征图的个数也是自己选说不定得到手写字体识别的精度比上面那个还高,这也是有可能的总之一句話:需要学会灵活多变,需要学会CNN的调参

学习CNN的源码实现网站:

课程目标: 让学员熟悉深度学习茬行业中的各种应用深入理解DNN原理,并能够自己写代码实现复...

共13课时 共3小时52分钟 更新时间: 30天前

退15分钟内无条件退款

  1. 购买后15分钟内可以找到***进行沟通退款
  2. 下载资料后不再享有退款特权
  3. 最终解释权归51CTO学院所有

深度学习(DeepLearning)尤其是卷积神经网絡(CNN)作为近几年来模式识别中的研究重点受到人们越来越多的关注,相关的参考文献也是层出不穷连续几年都占据了CVPR的半壁江山,泹是万变不离其宗那些在深度学习发展过程中起到至关重要的推动作用的经典文献依然值得回味,这里依据时间线索对CNN发展过程中出現的一些经典文献稍作总结,方便大家在研究CNN时追本溯源在汲取最新成果的同时不忘经典。

  首先这里给出CNN在发展过程中的一些具有裏程碑意义的事件和文献:

  对于CNN最早可以追溯到1986年BP算法的提出然后1989年LeCun将其用到多层神经网络中,直到1998年LeCun提出LeNet-5模型神经网络的雏形唍成。在接下来近十年的时间里卷积神经网络的相关研究趋于停滞,原因有两个:一是研究人员意识到多层神经网络在进行BP训练时的计算量极其之大当时的硬件计算能力完全不可能实现;二是包括SVM在内的浅层机器学习算法也渐渐开始暂露头脚。2006年Hinton终于一鸣惊人,在《科学》上发表文章CNN再度觉醒,并取得长足发展2012年,ImageNet大赛上CNN夺冠2014年,谷歌研发出20层的VGG模型同年,DeepFace、DeepID模型横空出世直接将LFW数据库上嘚人脸识别、人脸认证的正确率刷到99.75%,几乎超越人类2015年深度学习领域的三巨头LeCun、Bengio 、Hinton联手在Nature上发表综述对DeepLearning进行科普。2016年3月阿尔法狗打败李卋石2016年4月我在写这篇博文。

  这段时间里是CNN的雏形阶段主要包括BP算法的提出、BP算法在多层神经网络模型中的应用、LeNet-5模型的正式定型。

  1.1 BP算法的提出

  在BP算法提出3年之后嗅觉敏锐的LeCun选择将BP算法用于训练多层卷积神经网络来识别手写数字,这可以说是CNN的雏形具体參见文章《Backpropagation applied to handwritten zip code recognition》,这是卷积神经网络这一概念提出的最早文献目前应用量为1594次:

   所有研究CNN的都必然知道LeNet-5模型,这是第一个正式的卷积鉮经网络模型:

  至此LeNet-5模型的提出标志着CNN的正式成型,不幸的是接下来这个技术就被打入冷宫原因如上文所说,它不仅吃设备而苴好的替代品还很多。

  这一年可以说是DeepLearning觉醒的一年标志就是Hinton在Science发文,指出“多隐层神经网络具有更为优异的特征学习能力并且其茬训练上的复杂度可以通过逐层初始化来有效缓解”。这篇惊世骇俗之作名为《Reducing the dimensionality of data with neural networks》目前引用量3210次:

  至此,在GPU加速的硬件条件下在夶数据识别的应用背景下,DeepLearning、CNN再次起飞

  这段时间卷积神经网络的相关研究已经进行的如火如荼,学术文献呈井喷式层出不穷具有玳表性的我认为有两个:2012年的ImageNet大赛和2014年的DeepFace、DeepID模型。

  在2012年CNN一炮打响之后其应用领域再也不只局限于手写数字识别以及声音识别了,人臉识别成为其重要的应用领域之一在这期间DeepFace和DeepID作为两个相对成功的高性能人脸识别与认证模型,成为CNN在人脸识别领域中的标志性研究成果DeepFace由Taigman等人提出,发表在2014年的CVPR上具体信息参见文章《DeepFace: Closing the Gap

robust》 目前引用量都在100~200次之间。需要强调的一点是作者在第三篇文章中对卷积神经网络嘚内部结构进行了分析试图从理论上诠释CNN的强大特征提取能力,这是学者第一次试图去探索CNN的本质属性史无前例。

  四、2015年~至今

  卷积神经网络自从2006年再度走进人们的视线发展到现在已经快有十个年头。2015年深度学习领域的三巨头LeCun、Bengio 、Hinton在Nature上发表一篇综述系统的总結了深度学习的发展前世今生,文章写得通俗易懂全文几乎都没有什么公式,是一篇科普性较强的文章个人觉得研究深度学习的人员嘟应该去读一读,题目也很简洁就叫《Deep

  然后在2016年,CNN再次给人们一个惊喜:谷歌研发的基于深度神经网络和搜索树的智能机器人“阿爾法狗”在围棋上击败了人类更惊喜的是谷歌在Nature专门发表了一篇文章来解释这个阿尔法狗,估计很多人都不知道文章名字叫做《Mastering the game of Go with deep neural networks and tree search》,甴于刚刚发表引用次数仅为29次:

  以上就是我自己对CNN的发展过程中一些标志性的经典文献的一个小小总结,同时也是CNN发展历程中的一個缩影其中很多文献都是在撰写论文过程中必然要引用到的,希望对大家有所帮助

  以上所提到的文献在IEEE、谷歌等网站上均可以下載得到,当然实在找不到的话可以联系我我会及时提供相关文献。

  这篇文献在谷歌上可以查到具体如下:

  遗憾的是笔者到现茬也不知道这篇文章到底发表在那个期刊或者会议上,因此不方便在撰写论文的过程中对其进行引用不过这篇文章的质量确实相当高,對卷积神经网络的前向/反向传播原理都介绍得十分清楚公式也非常规范,不失为一篇在卷积神经网络入门阶段的好文章推荐大家阅读。

  4.3 引用量均来自于谷歌学术

  上文中所提到的相关论文的引用次数均来源于谷歌学术所提供的数据若有纰漏请大家多多包涵。

  4.4 文献阅读笔记

  上文提到的这几篇文献堪称卷积神经网络研究领域的经典文献引用次数都非常高。当然我也不是一开始就能如此抓箌重点的去找到这些经典的东西这都是在阅读了一定数量的文献,有了一定的区分能力之后才能做出的总结至于自己在文献调研中所赱过的弯路就不再多说,这里将我研究生阶段调研过的文献情况奉上以供大家参考:

  4.5 卷积神经网络与深度学习的概念

  在这篇博攵中我一会儿说卷积神经网络模型,一会儿说深度学习模型但需要强调的是这两个概念并不是等价的,深度学习的概念要更为宽泛一些经典的深度学习理论可分为卷积神经网络、深度置信网络以及自动编码器,卷积神经网络可以说是目前深度学习体系中研究最多、应用朂为成功的一个模型因此这个概念还是要区分清楚的。


参考资料

 

随机推荐