2014.4.4,余凯在清华FIT楼做了“Deep Learning Unfolds the Big Data Era”的讲座。感觉这个讲座还是比较high-level的,毕竟90分钟也很难把这么大的问题讲清楚。
根据我的理解,讲座主要分成4部分:
1. Deep Learning怎样被工业界看重并火得一塌糊涂;
2. 分析了一下shallow model和deep model的区别;
3. 介绍了百度在DL方面的研究和产品;
4. DL的发展趋势,百度可能的发展方向。
余凯首先以百度为例讲了深度学习的重要性:百度的商业模式是搜索引擎+卖广告,而机器学习算法能够将广告与潜在用户进行精准匹配,帮百度赚钱,turn data into value。在这方面百度需要解决的问题包括:自然图像中的光学字符识别(OCR in natural images)、语音识别(speech recognition and understanding)、基于内容的图像检索(content-based image retrieval)。尤其是鉴于最近可穿戴设备的快速发展,语音识别可能在未来扮演非常重要的角色。
随后他又画了那张很出名的技术发展的曲线,即先升后降再稳步提升。现在处于第一个上升期的代表包括3D打印、自动驾驶等等,第二个上升期的则是虹膜识别等等。
现在DL为什么这么火呢?06年Hinton的文章通过pre-training较好地解决了多层网络难以训练的问题,重新唤起了人们对于neural network的兴趣。但更重要的是在随后的几年里,人们利用DL模型在语音识别和图像分类上获得了突破性的进展。之所以说是突破性的,是因为其性能提升之大是以往小修小补远不能及的。尤其是在图像领域,DL算法甚至不需要human engineered feature,直接以原始像素作为输入就行。这改变了以往人们对于特征提取的认识。套用邓侃的一句话就是:这个领域离钱太近了。(这里还讲了一个小八卦:最早用DL在语音上取得学术成果的是微软,但最先将其产品化的却是谷歌,随后是百度。)
余凯将机器学习的模型归为三类:shallow model,包括linear regression、logistic regression等;shallow model with one hidden layer,包括SVM、boosting、MLP等;还有就是deep model。
其中shallow model with one hidden layer,其实都可以认为(是余凯认为)是将数据用某种方法投影到隐含的特征空间中。学习过程就是学习这种映射关系,对隐层的不同假设就形成了不同的模型。余凯将manifold learning和semi-supervised learning也归为这一类,我可以理解;但是他将PCA也归为这一类,我没太明白为什么。
浅层的线性模型在以往获得了很大的成功(我记得Andrew Ng在Machine Learning课上讲完linear regression和logistic regression之后说:OK,你们现在已经比硅谷大部分工程师都牛逼了),不过说白了,浅层模型研究的问题是:已经有了好的特征我们怎么分类。问题是好的特征哪里来?过去人们靠专家拍脑袋想特征,比如SIFT。但是当数据变得更复杂、数据量更大的时候这种办法就不行了,所以要让模型自动提取特征。
余凯给了一幅图像处理的流程图,从左到右依次为:low-levelsensing -> pre-processing -> featureextraction -> featureselection -> prediction/classification etc.。前面的4个环节都属于dirty work,但这些工作又对最后的结果影响极大。实践中这些环节是最耗费时间的,且往往是通过人工选取的方式,典型的例子就是SIFT和MFCC。正如前面所说,在图像领域我们已经能让模型自动地选取特征,但是在语音领域我们还没到这个程度。
DL能够自动习得从信号到语义的层次化的数据表示(参考谷歌的猫脸),这就是最吸引人的部分。
这块比较有意思,有研究也有产品。余凯非常自豪得说,现在用户在百度上的每一个query、每一次点击都会用NN处理。成果方面,百度把语音识别的相对出错率降低了25%,OCR的相对错误率降低了30%,图像检索则是世界最好的,“way better than Google”。从给出的几个例子上来看确实是这样。
然后讲了一点怎样把DL 应用于文本检索,这块也是我一直比较好奇的。大致结构是(在网上没找到图,读者脑补一下吧……):先将query和document映射成向量,要求这个向量可以反映出语义上的相关性(有没有参考谷歌的word2vec?);分别对两个向量做pooling;将pooling后的向量送入DNN进行打分,得到query和doc的相关度。对于有标记的训练集,我们可以知道类似score( query, doc1 ) > score( query, doc2 )这样的数据,所以只要定义一个合适的cost function就可以愉快地训练了。
作为搜索服务提供者,百度当然不缺数据。据余凯说,百度使用的图片大概有100 million,用于OCR的数据也差不多,语音是10 billion,CTR(点击预估)甚至达到100 billion。怪不得去百度实习过的同学都看不上学术圈这点玩具一样的数据集……
之后的东西就很水了,提了一下百度的分布式学习框架PADDLE,强调他们最看重的就是scalability。
讲到这里余凯又总结了一下为什么DL现在会这么成功,包括:
○ Big data解决了vanishing gradient的问题,一定程度上缓解了local optimal的问题(能fit这么多数据说明这个local optimal还是足够好的)
○ GPU
○ Large scale parallel computation
○ pre-training(现在不重要,如第一条所述,数据足够就行了)
○ RELU,drop out,normalization等等trick
从生物学的角度分析,高等动物相比低等动物,在神经元连接稠密程度上增长不大,但神经元数量要多得多。因此DL下一步的发展方向也许还是更大规模的网络。
从技术角度讲,需要解决的问题包括:1. 大规模海量数据并行训练平台;2. 对于结构和非结构数据的深度学习建模技术;3. 对于语言、语义、知识的建模、学习、表示、集成;4. 线上模型压缩加速技术,软件+硬件。这些不光要靠算法的改进,也依赖于高性能计算、脑科学的发展。
从研究哲学的角度,余凯强调了两点:1. DL不是一个blackbox;2. DL不是AI。在他看来,DL是一种语言、一种框架,就像graphical model。我们只有在先验知识的指导下才能更好的设计网络的结构,以期反映问题的本质。与过去不同的是,过去我们将先验知识应用于feature engineering,现在则是用于model structure。同时需要认识到,一个完整的AI应该包括四方面的能力:利用知识,学习,解决问题,创造。机器学习仅仅是学习的一部分,而DL也只是机器学习的一部分。
只有一个比较有意思的问题,是一个不知道是研究生还是老师的漂亮姐姐问的:对于一个已经训练好的模型,如果出现了一个新的需要识别的类别,怎样将其快速加入到模型中?余凯给出的解决方法是保留下面几层,只重新训练接近输出层的几层。这也是可以理解的,输入的底层特征都差不多,应该避免重复劳动。
以上就是我梳理的笔记。这么写一遍感觉又加深了自己的理解,以后多来几次。