前面讲了那么多,都还是学习deep learning所需的基础知识。写的好累!(希望以后CSDN能支持写公式不要都贴图)
本节终于谈到了Deep Learning。看了不少的文章讲解Deep Learning,无论Deep Learning技术被吹捧的如何牛逼,例如引来大数据时代分析的浪潮等等,但是我想我们还是应该用辩证的眼光去看待它,毕竟一种技术都是有其局限性的(例如deep learning是需要提供足够多的训练样本的,但是在很多情况下都是无法实现的,因而其使用也是有一定局限性)。
终归起来Deep Learning是一种机器学习或机器理解的过程,都属于感知学习(Perception Learning)领域,因此可以从传统的感知学习的角度出发来理解Deep Learning。Deep Learning最早的成功应用是在语言理解,即语音识别上。所以这里我想从传统的模式识别系统入手来谈谈对Deep Learning的理解。以下将以传统的人脸识别系统为例,看看Deep Learning到底做了什么。
1、从传统人脸识别系统谈deep learning
传统的人脸识别系统由两个部分组成:1)人脸特征提取;2)人脸识别,如下图所示。这里我们以PCA作为人脸特征提取算法、传统ANN为人脸识别算法为例,进行描述。
图1 人脸识别系统
PCA算法获得了人脸的特征值p={p1,p2,...pm}和特征值向量A={A1,A2,...Am}。A中的每一个单位向量都构成一个特征脸。由这些特征脸所张成的空间称为特征脸子空间。如下图所示。
图2 1,2,10,50,70分量和平均脸
任意一个人的一副人脸图像X可以计算其在特征向量空间A所构成的特征空间上的系数Y。这里的系数Y则被用做该人脸图像的人脸特征。
Y=AX
通过Y和特征向量空间A,也可以恢复重构人脸图像X。通过特征Y已经可以进行人脸识别了,但是特征Y还没有高度抽象为类别信息,因此可以在PCA人脸特征后加上一个传统的ANN作为分类器,将特征Y进一步抽象为类别信息。加上分类器后,完整的识别过程可以描述为图3所示。这里假设输入人脸图像X={x1,x2,...xm}
图3人脸识别系统
这里的神经网络ANN起到了什么作用?其主要完成了对PCA生成的人脸特征Y的进一步高层抽象表征(这里为类别)。这里的神经网络由三层组成,分别是输入层、隐藏层和输出层。其通过以Y作为输入,进一步将人脸特征Y通过隐藏层的状态进行了抽象,获得了隐藏层的输出Z,最终隐藏层的输出Z通过顶层输出层抽象成了类别信息(class1 到classN),即识别结果。
因此我们可以看出传统的识别系统虽然可以分为两层,如图所示第一层为特征提取,第二层为分类,但是总结起来,其实第一层和第二层所做的工作都是一样的,统一起来都是对输入进行高度抽象化表征。其第一层将X抽象为了特征Y,第二层将特征Y进一步抽象成了特征Z,最终抽象得到了类别信息class。特征Y可以由特征Z反向恢复,图像X可以由特征Y反向恢复。因此形象化看,识别系统中第二层所采用的神经网络和PCA所起到的作用是一样的,都可以看成是特征提取的过程,只是这里的特征是抽象的无法以物理意义表达,最终的特征就是类别。如果将识别系统的第一和第二层统一起来看,识别系统的任务就是形成输入X到输出类别的多层抽象表征,或多次特征提取与约简过程。
除了人脸识别系统外,其它的模式识别系统也有如上同样的结论。我们看到以上识别系统中神经网络ANN即可实现特征的抽象,那是否可以用一个神经网取代原有的PCA实现第一层特征提取/抽象喃?Deep Learning的成功正好验证了这一想法的正确性,这也正是Deep Learning思想的由来。
2、用Deep Learning 实现人脸识别系统
如下图所示,我们可以构建多层神经网络来实现相同的识别过程。
图4 deep network 识别系统
这里通过用神经网络取代PCA构建了4层的Deep network实现了识别系统,Deep network同样实现了将输入X抽象为输出class类别的工作。其中每层hi都是其下层的特征或称为抽象,类似于PCA,hi+1层是hi层的另一种特征表征,理想情况,hi可以通过hi+1进行恢复重构。
以下是引用http://blog.csdn.net/zouxy09/article/details/8775518描述的的deep learning思想描述。
我想,通过以上我从模式识别系统的构建上描述deep learning思想的形成过程,希望有助于大家对deep learning的理解。
3、Deep Learning的基本思想
假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>…..=>Sn => O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失(呵呵,大牛说,这是不可能的。信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理a信息得到b,再对b处理得到c,那么可以证明:a和c的互信息不会超过a和b的互信息。这表明信息处理不会增加信息,大部分处理会丢失信息。当然了,如果丢掉的是没用的信息那多好啊),保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。现在回到我们的主题Deep Learning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,…, Sn。
对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。
另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的Deep Learning方法。上述就是Deep Learning的基本思想。
4、Deep Learning缺点分析
当然Deep Learning并不是万能的,其也有一些缺点。这里针对我的理解我列举一些。希望大家指正。
缺点:
1)需要充足的训练样本:为了能完成众多层状态的训练,必要的需要大量的训练样本,这对于一些只有小训练样本的情况是无法适用的。如只有1-3幅图像的情况下。
2)需要的输入向量较大:这也是deep learning的优点,其可以将整幅图像像素作为输入进行模型构建,例如在语音识别中可以一次输入十几帧语音。但是这也可能成为缺点,对于大的输入向量输入越大,输入的被污染的原始信息也就越多,这为系统如何提高鲁棒性,即对噪声的容忍性提出了更高的挑战。
3)训练量大,输入量大,可能会减少系统处理的灵活性。例如有些系统追求处理的灵活,可能采用单帧处理,单元数据处理(小数据片)或图像分块处理的方法,这些处理方法deep learning的应用尚需研究。
4)其全局最优化学习方法是一个挑战性问题,尚还在研究。
不过对于仅使用deep learning技术处理模式识别,数据挖掘的哥们们,我们用就是了,不用担心,现在大量的学者在研究deep learning技术,相信有天它能更加完善。
References
http://blog.csdn.net/zouxy09/article/details/8775518