Deep Learning的学习实践 1 -- 基础介绍

【作者:吴斌】

【原文创作于2014年10月29日,作为基础介绍,仍有较高参考价值,但不排除部分信息需要更新。文中有很多引用,不一一列举出处了。】

Deep Learning概述:Deep Learning是指基于多层神经网络(大于3层)的机器学习模型。

深度神经网络的输入层一般是向量化的原始特征数据(这里向量化指特征数据是的度量方式统一的向量)。隐含层用于训练特征,可以包含1~N个隐含层,每个神经元的激活函数,一般是Tanh函数或Sigmod函数。输出层用于最终结果输出,主要用于分类问题,大多使用逻辑回归(二分类)或Softmax(多分类)的分类器模型做输出层。

简述图示:

 

Deep Learning这个领域有很多模型,核心模型是AutoEncoder,CNN ,DBN,后面会详细介绍,另一种RNN(递归神经网络),是一种基于时间序列进行递归的神经网络。但是这个领域不限于这4种模型,比如,2014年ACL的best paper,使用一种4层神经网络做机器翻译的训练。华为诺亚方舟实验室也有该领域的一些创新研究,比如“ADeep Architecture for Matching Short Texts”。

 

Deep Learning是非监督学习模型吗? 对于AutoEncoder,DBN模型,他的输出层都是个监督学习的分类器,常见的就是逻辑回归或Softmax多分类模型,所以,从结果上讲,他是有监督学习,但是DeepLearning的核心就是分两步去训练特征,第一步是Pretraining,第二步是Fineturning。而Pretraining又是关键步骤,需要花大量时间,使用的是无标注数据训练,本质上是基于神经网络,使用数据自身做学习目标,去学习一个更好的特征表达(可以认为是特征抽象),从而得到一个好的初始网络参数。这一步就是Deep Learning区别于传统人工神经网络或其他模型的核心内容。第二步Fineturning与传统人工神经网络类似,采用BP(反向传播)方法训练,是使用标注数据对神经网络的参数做微调,比较快,这一步是有监督的学习。 另外的CNN模型,是个有监督的学习模型,没有Pretraining这一步,不过中间层的训练有些“技巧”。

所以, DeepLearning的关键步骤Pretraining是非监督学习,但并不是全部是非监督学习。所以,不要简单地相信媒体的宣传,绝大多数Deep Learning的媒体宣传都很浮夸。

人们对非监督学习有很大兴趣,是因为,对于机器学习来说,标注数据是核心内容。因为机器学习的过程其实是数据建模的过程,目前的计算机本质上并不能自己创造或自己发现数据的含义。而现实中的标注数据很难获取,而绝大多数数据是没有标注的原始数据,这就需要无监督学习方法去训练,如果,这种技术发展的比较好的话,那就是说未来计算机可以自己发现数据的含义,所以人们对这个技术非常期待。(注意,我说的是“如果”,而且,什么是“含义”,也是个很难解释的东西。)由此,Deep Learning本质上的技术突破是在学习特征数据的内容抽象和高层表示,所以Bengio就直接把Deep Learning技术称作Representation Learning。特征抽象或表示学习,具体讲,就是从原始数据,把数据的关键信息逐层提取出来,比如以像素做原始输入数据,提取出图形边缘,再到物体的部件,再到物体的概貌,如下图所示:

 

另外一个事情,Bengio在论文中提到,只要有足够多的标注数据,传统的神经网络也可以训练出很好的结果。也就是是说,数据量大,特征足够丰富,对神经网络模型就可以有更好的训练结果。所以随着计算机技术的发展,分布式等大规模计算能力的发展,GPU计算应用,再加上Google这类公司拥有的“大数据”,使Deep Learning这样的模型可以有效训练和使用,这也是Deep Learning火起来的一个原因。

 

Deep Learning这个领域由3位大神开创,分别是Hinton,Yann LeCun,Bengio,前两位分别投入Google和Facebook,只有Bengio留守在高校,Bengio做的东西也是我很仰慕的。

Hinton和Jordan分别是机器学习中深度神经网络和统计机器学习的开山鼻祖,DeepLearning这个领域的一些核心人物的关系图如下:

 

对于Deep Learning被广泛关注,得说一下Google的猫脸识别这件事。

这件事来源是这个论文:“Building High-level Features UsingLarge Scale Unsupervised Learning”(见附件),之后随着Andew Ng被采访,这个东西被各种媒体炒作。

大家可以仔细看一下这个论文,Google的图像识别,主要的模型是Sparse Autoencoder + local receptive field,  这两个是Deep Learning中核心模型的前两个,(local receptivefield技术来自CNN模型,由Yann LeCun首创,但这里的用法有点区别,not convolutional)。整个网络有3部分,每个部分有3个子层,总共9层网络。整个网络有1000万的参数(神经元很多),是当时最大的人工神经网络,而且使用了asynchronous SGD,即异步的随机梯度下降算法(分布式机器学习的常用算法),这个神经网络结构后来演变为有名的DistBelief架构,后面还会提到。模型的训练数据来自YouTube的视频数据,1000万张200*200的图像。使用了1000台机器,(16000个核),训练了3天的模型。然后,用这个模型测试人脸识别,人的身体识别,猫脸识别,(基于ImageNet数据集,输出层是个逻辑回归的2分类模型,判断是或不是)。准确率,人脸识别达到81.7%,传统方法在74%左右,人的身体识别,准确率是76.7%,传统方法在69%左右,猫脸识别,准确率在74.8%,传统方法在68%左右。同时,对于多分类的图像识别,比如9百万张图像,10000个类别,准确率在19.2%,以前方法在16.7%,1400万张图像,22000个类别,准确率在15.8%, 以前方法在9.3%

OK,结果已经很清楚了,这个技术有很大的提高,但是,离你的想象可能还差很远。

对于下面这个在媒体上宣传的猫脸图,论文上没有,我看主要是做Deep Learning模型的说明示意,不过理论上多层网络应该可以训练出这样很抽象的“高级”特征。

 

下面这个漫画很有意思,说的是就是猫脸识别的论文:


另外,还要说说2012年的一件事,华人教授李菲菲牵头搞了一个巨大的数据库ImageNet2012Image Net1400多万张图片。对每张图片,由人来手工记录图片中物体的名字(2万多个类别),并向业界宣布,大家来测试验证你的图像识别算法。于是2012年,就有了这个LSVRC – Large Scale VisualRecognition Challenge. 最终比赛结果在2012年底的NIPS会议上公布。当时,大多数的研究小组还都在用传统computer vision算法的时候,多伦多大学的Hinton给出deep net这样一个惊人之作。差距是这样的:

第一名Deepnet的错误率是0.16422  (使用了外部数据做训练,错误率达到了0.15315

第二名日本东京大学的错误率是0.26172

第三名牛津大学的错误率是0.26979

 

具体结果参见:ImageNet LargeScale Visual Recognition Competition 2012 (ILSVRC2012)

(注意,这里是任选一张图片,扔给算法,算法返回5个结果。如果5个结果中,有一个猜对了物体类别,就算正确,也就是说算法有5次机会。)

计算机视觉领域1%的进步就是很好了,而当年超过10%的进步,震惊了世界,所以Deep Learning突然变得如此火爆,确实是有实际效果体现的,不是写写文章就算数的。

有一点需要说明,Hinton小组2012年LSVRC比赛用的是一个9层的CNN网络(起源于YannLeCun),不是他自己擅长的DBN网络。详细说明的论文见附件《ImageNet Classification with Deep Convolutional Neural Networks》。

不过,Deep Learning与传统方法有没有那么大的差距,后面还有些故事,不细说了。在工业界的应用,也有很多“故事”。现在,Google、华为、百度,IBM等公司的Deep Learning神经网络正在向Bigger than Bigger发展,新的研究成果也在不断涌现。

 

以上基础内容介绍,非常简略,网上有很多Deep Learning的详细说明材料,建议先阅读以下材料:

入门学习:http://blog.csdn.net/zouxy09/article/details/8775360

该系列文章,讲的比较清晰,容易理解。

细节学习:

http://deeplearning.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C#.E6.A6.82.E8.BF.B0

英文:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

该系列文章是斯坦福大学的教学课程,很详细,带Matlab实践说明和例子代码,很适合学生学习。

这是DeepLearning领域内的大神Bengio自己写的论文,详细说明DeepLearning领域的发展和各种模型的原理,重点推荐认真看该文章。

研究学习:http://www.cs.toronto.edu/~hinton/

这是Hinton的主页,有很多论文,慢慢看吧。

里面还有Hinton自己讲解Deep BeliefNets的视频:http://videolectures.net/jul09_hinton_deeplearn/

这里有很多相关教材:

http://www.ipam.ucla.edu/programs/summer-schools/graduate-summer-school-deep-learning-feature-learning/?tab=schedule

 

DeepLearning的应用展现了很好的成果,目前主要是在视频图像,声音,自然语言处理等方面。因为这种技术足够复杂(这是一系列可扩展的模型算法,不是一个单一技术),而且神经网络本身就是个非线性模型(传统模型有些是把非线性问题转化为线性问题去处理),理论上,多层神经网络理论上可以逼近任何一个函数,所以它可以处理绝大多数机器学习的问题,但是,由于其本身的复杂度高,理论解释还未完善,并不能说,某个新的应用场景,用这种模型就会取得更好的结果。从我初步的测试经验来看,很多不成熟的领域(缺乏研究的领域),使用这种模型,结果不一定比简单模型效果好,而且,样本数据量小(10万以内),特征维度不多的情况,这种模型用起来可能也很难体现效果,因为该模型中的训练参数很多,如果数据量不够大,这么多参数得不到充分训练,模型过于复杂,容易过拟合,在测试集上就达不过预期效果。我的想法是:基于某个不成熟领域的数据集(特征比较杂,种类多),如果基于全量的原始特征去测试,Deep Learning模型的结果(AUC)会稍好于简单模型(比如LR),但是,在人工选择特征后(比如用importance排序,对比测试等方法),基于人工筛选的特征再使用简单模型(比如LR),结果却会好于Deep Learning模型。也就是说DeepLearning具有一定的特征自动选择功能,减少了人工选择特征的工作。但是,人的经验知识,很多时候,是更好的方法,所以在工业界,更多的情况,是使用大量的数据+简单的模型+人工特征工程,去解决问题。不过,这里的问题也就在于,选择好的特征,是一件很重要,又是很困难的事情,而经验知识也很难适应不同的应用场景,所以人们希望计算机能自动完成这件事,所以Deep Learning的技术是很吸引人的,这种技术在未来会有很高的价值。另外,原始特征数据,基本含义一致,才能体现Deep Learning的优势,如果特征基本含义不同,Deep Learning的优势不明显,这也是Deep Learning的模型在图像,声音等领域应用效果好的原因,因为这些领域原始特征数据基本含义是一致的,原始特征经过多层抽象后的高层特征是容易理解的,比如,从像素,到边缘,到形状,到类别特征,到物体的概貌,这种逐层抽象的“深度”特征抽象是可以理解,也就是可以“人工地”去设计这种深层抽象模型结构。但是,在其他领域就有点困难了,比如,身高和体重,两个特征放到一起,也许在一层特征抽象后可以解释,但是在多层抽象后的“深度模型”中的高层特征是什么含义呢?因为Deep Learning的特征学习,抽象方式缺乏理论解释,所以在理解上会有有些麻烦,由此,有些场景下,是不那么容易做模型优化的。同时,图像,声音识别的应用领域,特征数据基本是充分的,原始数据基本可以描述需要表达的信息,所以才有条件去做原始数据的自动化的特征学习(或者叫“端到端的机器学习”)。而现实中,很多机器学习的应用场景中的数据,本身的信息就不能完整表达应用诉求,比如,个性化推荐,我们是很难获取全面有效的数据取描述个人的兴趣爱好,而且兴趣爱好本身也是动态可变的,也是隐私性很高的,所以,你很难获取全面的特征数据,所以,也就很难去做端到端的自动化的机器学习,不过,在一些局部领域做模型优化,也是可以的。 总之,Deep Learning,是个重量级的利器,但也不是银弹

     

DeepLearning在工业界的具体应用方法详细说明,建议看这本书:《Deep Learning Methods andApplications

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值