1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。
跟往常一样(深度学习入门笔记(二):神经网络基础、深度学习入门笔记(六):浅层神经网络、深度学习入门笔记(七):深层神经网络),其实整个过程你应该大概了解过了,主要的两个部分就是前向传播和反向传播。
深度学习为啥被大家吹捧到这个地步,其实是因为我们大家都知道,深度神经网络能解决好多问题,其实并不需要很大的神经网络,但是得有深度,得有比较多的隐藏层,这是为什么呢?为什么必须得深层而不是大呢?
举几个例子,来帮助你理解这个问题——为什么深度神经网络会很好用。
首先,深度网络在计算什么?
其实早就在 深度学习入门笔记(二):神经网络基础 中我们就讲过了这个问题,这一次换个例子来看。
想象一下,如果你在建一个 人脸识别或是人脸检测系统,深度神经网络所做的事,或者你需要它做的事就是,当输入一张脸部的照片,可以把深度神经网络的第一层,当成一个特征探测器或者边缘探测器,来提取特征。在这个例子里,建一个大概有20个隐藏单元的深度神经网络,那么我们如何针对这张输入的人脸图像进行计算?
隐藏单元其实就是这些图里的小方块(第一张大图),举个例子,这个小方块(第一行第一列)就是一个隐藏单元,它会去找这张照片里 (/) 边缘的方向;那么这个隐藏单元(第四行第四列),可能是在找(—)水平向的边缘。
为什么小单元是这么表示的?
是不是很神奇?其实到目前为止,应该还没有比较准确的理论来阐述这些个不同维度的特征图所代表的真实含义,你可以把它们当成是你炼丹过程中,丹药的不同状态,可能是液态、固液混合、固态等等。。。
还有一个技术性的细节需要理解的是,边缘探测器其实相对来说都是针对照片中非常小块的面积。就像这块(第一行第一列),都是很小的区域。面部探测器就会针对于大一些的区域,但是主要的概念是,一般会从比较小的细节入手,比如边缘,然后再一步步到更大更复杂的区域,比如一只眼睛或是一个鼻子,再把眼睛鼻子装一块组成更复杂的部分。这也是人类观察的特点不是吗?
这种从简单到复杂的金字塔状表示方法或者组成方法,也可以应用在图像或者人脸识别以外的其他数据上。
比如当你想要建一个 语音识别系统 的时候,需要解决的就是如何可视化语音,假设输入了一个音频片段,那么神经网络的第一层可能就会去先开始试着探测比较低层次的音频波形的一些特征,比如音调是变高了还是低了,分辨白噪音,咝咝咝的声音,或者音调,可以选择这些相对程度比较低的波形特征,然后把这些波形组合在一起就能去探测声音的基本单元。在语言学中有个概念叫做 音位,比如说单词ca,c的发音,“嗑”就是一个音位,a的发音“啊”是个音位,t的发音“特”也是个音位,有了基本的声音单元以后,组合起来,你就能识别音频当中的单词,单词再组合起来就能识别词组,再到完整的句子。
所以深度神经网络的这许多隐藏层中:较早的前几层能学习一些 低层次的简单特征,等到后几层,就能把简单的特征结合起来,去探测更加复杂的东西。比如你录在音频里的单词、词组或是句子,然后就能运行语音识别了。同时计算的之前的几层,也就是相对简单的输入函数,比如图像单元的边缘什么的。到网络中的深层时,实际上就能做很多复杂的事,比如探测面部或是探测单词、短语或是句子。(这也是目前特别火的一个方向,你应该听说过科大讯飞,著名的输入法语音输入和识别)
有些人喜欢把深度神经网络和人类大脑做类比,这些神经科学家觉得人的大脑也是先探测简单的东西,比如眼睛看得到的边缘,然后组合起来才能探测复杂的物体,比如脸。这种深度学习和人类大脑的比较,有时候比较危险。但是不可否认的是,我们对大脑运作机制的认识很有价值,有可能大脑就是先从简单的东西,比如边缘着手,再组合成一个完整的复杂物体,这类简单到复杂的过程,同样也是其他一些深度学习的灵感来源。
另外一个,关于神经网络为何有效的理论,来源于电路理论。
根据不同的基本逻辑门,譬如与门、或门、非门等等。在非正式的情况下,这些函数都可以用相对较小,但很深的神经网络来计算,小的意思是隐藏单元的数量相对比较小,但是如果用浅一些的神经网络计算同样的函数,也就是说不用很多隐藏层时,你会需要成指数增长的单元数量才能达到同样的计算结果。
有同学可能看的比较蒙逼,简单地说,就是如果层数少就需要更多的神经元;如果层数多则可以更少的神经元。
再来举个例子,用没那么正式的语言介绍这个概念。
假设你想要对输入特征计算 异或(这个应该都知道是什么吧,数电),可以算:
x 1 X O R x 2 X O R x 3 X O R … … x n x_{1} XOR x_{2} XOR x_{3} XOR ……x_{n} x1XORx2XORx3XOR……xn
假设现在一共有 n n n 或者 n x n_{x} nx 个特征,如果画一个 异或 的树图,先要计算 x 1 x_{1} x1, x 2 x_{2} x2 的异或,然后是 x 3 x_{3} x3 和 x 4 x_{4} x4。技术上来说,如果只用或门,还有非门的话,你可能会需要几层才能计算 异或 函数,但是用相对小的电路,应该就可以计算 异或 了。然后继续建这样的一个 异或 树图(上图左),那么最后会得到这样的电路来输出结果 y y y,也就是输入特征的 异或。要计算 异或 关系,这种树图对应网络的深度应该是 O ( l o g ( n ) ) O(log(n)) O(log(n)),那么节点的数量和电路部件,或是门的数量并不会很大,你也不需要太多门去计算 异或。
但是 如果你不能使用多隐层的神经网络的话,在这个例子中隐层数为 O ( l o g ( n ) ) O(log(n)) O(log(n)),比如被迫只能用单隐藏层来计算的话,这里全部都指向从这些隐藏单元到后面这里,再输出 y y y,那么要计算 异或 关系函数,就需要这一隐层(上图右方框部分)的单元数呈指数增长才行,因为本质上来说,需要列举耗尽 2 n 2^{n} 2n 种可能的配置,或是 2 n 2^{n} 2n 种输入比特的配置。异或 运算的最终结果是1或0,那么最终就会需要一个隐藏层,其中单元数目随输入比特指数上升。精确的说应该是 2 n − 1 2^{n-1} 2n−1 个隐藏单元数,也就是 O ( 2 n ) O(2^{n}) O(2n),而 O ( 2 n ) > O ( l o g ( n ) ) O(2^{n}) > O(log(n)) O(2n)>O(log(n))。到这里了,你应该能意识到有很多数学函数用深度网络计算比浅网络要容易得多。
如果你学过这种电路理论的话,那么这个解对你来说就比较容易了;如果没有的话,也没关系,这种理论对训练直觉思维没那么有用,只是经常提到的用来解释为什么需要更深层的网络的方法之一。
到这里了,我们来闲聊几句,算是吐槽或者八卦之类的。说实话,讲道理,个人认为 深度学习 这个名字真的挺唬人的,不知道你们是什么感觉,反正我第一次听到这个名字,就觉得要多高大上就多高大上,要多牛就多牛,这名字起的太深奥了,就像一个尖端科技一样,震慑住了我。。。
其实这些概念以前都统称为 有很多隐藏层的神经网络,我记得之前知乎上还有过关于多层神经网络和深度学习的讨论,https://www.zhihu.com/question/26017374/answer/31868340,有兴趣的小伙伴可以看一下,其中这个回答让我印象深刻。
其实如果只是使用的话,这其中的区别是无所谓的,不必太过于担心,但是如果想研究的话,建议你还是研究一下,我更偏向于 深度学习是一种学习方式,是有别于人工网络学习的让网络自己挑选特征并学习的一种学习方式;而多层神经网络则是一种网络结构。 当然这只是我的个人看法,如果你有什么不同的观点,可以评论一下。
深度学习这个词流传出去以后,因为自身是神经网络的重新包装或是多隐藏层神经网络的重新包装,激发了大众的想象力。深度网络效果确实不错,然而过拟合起来也是让人头疼不已的。但还是有很多人会按照字面意思钻牛角尖,非要用很多隐层。尤其是近几年,随着网络结构的复杂化,有一些人会趋向于使用非常非常深邃的神经网络,比如好几打的层数,某些问题中只有这种网络才是最佳模型,VGG 论文中证明了这一点。但是这其中也是存在问题的,所以有了 ResNet,即残差网络,用残差结构解决网络深度带来的 退火,这些个网络的经典结构还是建议看一看,在 大话卷积神经网络CNN(干货满满) 我给出了论文资源,去找一下吧,这里就不在多说了。
深度学习和大脑有什么关联性吗?
这应该是很多人一直以来的疑问,我只能说有,但是关联不大。
那么为什么会说深度学习和大脑相关呢?
当你在实现一个神经网络的时候,那些公式是你在做的东西,你会做前向传播、反向传播、梯度下降法,其实很难表述这些公式具体做了什么,深度学习像大脑这样的类比其实是过度简化了大脑具体在做什么,但因为这种形式很简洁,也能让普通人更愿意公开讨论,也方便新闻报道并且吸引大众眼球,但这个类比是非常不准确的!!!
一个神经网络的逻辑单元可以看成是对一个生物神经元的过度简化,但迄今为止连神经科学家都很难解释究竟一个神经元能做什么,它可能是极其复杂的;它的一些功能可能真的类似 logistic 回归的运算,但单个神经元到底在做什么目前还没有人能够真正可以解释。
深度学习的确是个很好的工具,用来学习各种很灵活很复杂的函数,学习到从 x x x 到 y y y 的映射,在监督学习中学到输入到输出的映射。记得不久之前,还有个一个人评论怼了我一下,说深度学习不过就是一个映射函数罢了,其实这么说,不能说不对,只不过不准确而已,只是因为现在的过度捧杀(我称之为捧杀),让它展示在所有人面前,而其实它的理论还没有那么完全,自然有很多问题。
但这个类比还是很粗略的,上图中,左下边的是一个感知机,右边的是一个大脑中的神经元,图中这个生物神经元,也是你大脑中的一个细胞,它能接受来自其他神经元的电信号,比如 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3,或可能来自于其他神经元 a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3 。其中有一个简单的临界计算值,如果这个神经元突然激发了,它会让电脉冲沿着这条长长的轴突,或者说一条导线传到另一个神经元。
这是一个过度简化的对比,把一个神经网络的逻辑单元和右边的生物神经元对比。至今为止其实连神经科学家们都很难解释,究竟一个神经元能做什么?一个小小的神经元其实却是极其复杂的,以至于无法在神经科学的角度描述清楚,它的一些功能,可能真的是类似于一种运算,但单个神经元到底在做什么,目前还没有人能够真正解释,大脑中的神经元是怎么学习的,至今这仍是一个谜之过程。到底大脑是用类似于后向传播或是梯度下降的算法,或者人类大脑的学习过程用的是完全不同的原理。
所以虽然深度学习的确是个很好的工具,能学习到各种很灵活很复杂的函数来学习到从 x x x 到 y y y 的映射。在监督学习中,学到输入到输出的映射,但这种和人类大脑的类比,在这个领域的早期也许值得一提。但现在这种类比已经逐渐过时了。这就是神经网络和大脑的关系,我相信在计算机视觉,或其他的学科都曾受人类大脑启发,还有其他深度学习的领域也曾受人类大脑启发,但是这不代表着是一样的,要知道其中的区别!!!
在 大话卷积神经网络CNN(干货满满) 中我们提到过【人类视觉原理】,这就是一种启发,或者说最开始是类比于,但是后来发现并不是一样的。