Deep Learning 学习笔记(上):深度学习简介

什么是深度学习

Posted by Zouxy on August 3, 2017

本文转载自《Deep Learning(深度学习)学习笔记整理系列》,作者 Zouxy。版权归原作者所有,部分内容有修改。

1. 什么是深度学习

1.1 概述

Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生“自我”的意识。是的,在人类和大量现成数据的帮助下,电脑可以表现的十分强大,但是离开了这两者,它甚至都不能分辨一个喵星人和一个汪星人。

图灵(图灵,大家都知道吧。计算机和人工智能的鼻祖,分别对应于其著名的“图灵机”和“图灵测试”)在 1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。这不仅让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是“伪科学”。

但是自 2006 年以来,机器学习领域,取得了突破性的进展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不仅仅依赖于云计算对大数据的并行处理能力,而且依赖于算法。这个算法就是,Deep Learning。借助于 Deep Learning 算法,人类终于找到了如何处理“抽象概念”这个亘古难题的方法。

1

2012年6月,《纽约时报》披露了 Google Brain 项目,吸引了公众的广泛关注。这个项目是由著名的斯坦福大学的机器学习教授 Andrew Ng 和在大规模计算机系统方面的世界顶尖专家 Jeff Dean 共同主导,用 16000 个 CPU Core 的并行计算平台训练一种称为深度神经网络(DNN,Deep Neural Networks)的机器学习模型(内部共有 10 亿个节点。这一网络自然是不能跟人类的神经网络相提并论的。要知道,人脑中可是有 150 多亿个神经元,互相连接的节点也就是突触数更是如银河沙数。曾经有人估算过,如果将一个人的大脑中所有神经细胞的轴突和树突依次连接起来,并拉成一根直线,可从地球连到月亮,再从月亮返回地球),在语音识别和图像识别等领域获得了巨大的成功。

项目负责人之一 Andrew 称:“我们没有像通常做的那样自己框定边界,而是直接把海量数据投放到算法中,让数据自己说话,系统会自动从数据中学习。”另外一名负责人 Jeff 则说:“我们在训练的时候从来不会告诉机器说:‘这是一只猫。’系统其实是自己发明或者领悟了“猫”的概念。”

2

2012 年 11 月,微软在中国天津的一次活动上公开演示了一个全自动的同声传译系统,讲演者用英文演讲,后台的计算机一气呵成自动完成语音识别、英中机器翻译和中文语音合成,效果非常流畅。据报道,后面支撑的关键技术也是 DNN,或者深度学习(DL,DeepLearning)。

2013 年 1 月,在百度年会上,创始人兼 CEO 李彦宏高调宣布要成立百度研究院,其中第一个成立的就是“深度学习研究所”(IDL,Institue of Deep Learning)。

3

为什么拥有大数据的互联网公司争相投入大量资源研发深度学习技术。听起来感觉 deep learning 很牛那样。那什么是 deep learning?为什么有 deep learning?它是怎么来的?又能干什么呢?目前存在哪些困难呢?这些问题的简答都需要慢慢来。咱们先来了解下机器学习(人工智能的核心)的背景。

1.2 背景

机器学习(Machine Learning)是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。机器能否像人类一样能具有学习能力呢?1959 年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4 年后,这个程序战胜了设计者本人。又过了 3 年,这个程序战胜了美国一个保持 8 年之久的常胜不败的冠军。这个程序向人们展示了机器学习的能力,提出了许多令人深思的社会问题与哲学问题(呵呵,人工智能正常的轨道没有很大的发展,这些什么哲学伦理啊倒发展的挺快。什么未来机器越来越像人,人越来越像机器啊。什么机器会反人类啊,ATM 是开第一枪的啊等等。人类的思维无穷啊)。

机器学习虽然发展了几十年,但还是存在很多没有良好解决的问题:

4

例如图像识别、语音识别、自然语言理解、天气预测、基因表达、内容推荐等等。目前我们通过机器学习去解决这些问题的思路都是这样的(以视觉感知为例子):

5

从开始的通过传感器(例如 CMOS)来获得数据。然后经过预处理、特征提取、特征选择,再到推理、预测或者识别。最后一个部分,也就是机器学习的部分,绝大部分的工作是在这方面做的,也存在很多的 paper 和研究。

而中间的三部分,概括起来就是特征表达。良好的特征表达,对最终算法的准确性起了非常关键的作用,而且系统主要的计算和测试工作都耗在这一大部分。但,这块实际中一般都是人工完成的。靠人工提取特征。

6

截止现在,也出现了不少 NB 的特征(好的特征应具有不变性(大小、尺度和旋转等)和可区分性):例如 Sift 的出现,是局部图像特征描述子研究领域一项里程碑式的工作。由于 SIFT 对尺度、旋转以及一定视角和光照变化等图像变化都具有不变性,并且 SIFT 具有很强的可区分性,的确让很多问题的解决变为可能。但它也不是万能的。

7

然而,手工地选取特征是一件非常费力、启发式(需要专业知识)的方法,能不能选取好很大程度上靠经验和运气,而且它的调节需要大量的时间。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能!Deep Learning 就是用来干这个事情的,看它的一个别名 Unsupervised Feature Learning,就可以顾名思义了,Unsupervised 的意思就是不要人参与特征的选取过程。

那它是怎么学习的呢?怎么知道哪些特征好哪些不好呢?我们说机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为的学科。好,那我们人的视觉系统是怎么工作的呢?为什么在茫茫人海,芸芸众生,滚滚红尘中我们都可以找到另一个她(因为,你存在我深深的脑海里,我的梦里 我的心里 我的歌声里……)。人脑那么 NB,我们能不能参考人脑,模拟人脑呢?(好像和人脑扯上点关系的特征啊,算法啊,都不错,但不知道是不是人为强加的,为了使自己的作品变得神圣和高雅。)

近几十年以来,认知神经科学、生物学等等学科的发展,让我们对自己这个神秘的而又神奇的大脑不再那么的陌生。也给人工智能的发展推波助澜。

1.3 人脑视觉机理

1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和 Torsten Wiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”可视皮层是分级的:

8

我们看看他们做了什么。1958 年,DavidHubel 和 Torsten Wiesel 在 JohnHopkins University,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个 3 毫米的小洞,向洞里插入电极,测量神经元的活跃程度。

然后,他们在小猫的眼前,展现各种形状、各种亮度的物体。并且,在展现每一件物体时,还改变物体放置的位置和角度。他们期望通过这个办法,让小猫瞳孔感受不同类型、不同强弱的刺激。

之所以做这个试验,目的是去证明一个猜测。位于后脑皮层的不同视觉神经元,与瞳孔所受刺激之间,存在某种对应关系。一旦瞳孔受到某一种刺激,后脑皮层的某一部分神经元就会活跃。经历了很多天反复的枯燥的试验,同时牺牲了若干只可怜的小猫,David Hubel 和 Torsten Wiesel 发现了一种被称为方向选择性细胞(Orientation Selective Cell)的神经元细胞。当瞳孔发现了眼前的物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。

这个发现激发了人们对于神经系统的进一步思考。“神经-中枢-大脑”的工作过程,或许是一个不断迭代、不断抽象的过程。

这里的关键词有两个,一个是抽象,一个是迭代。从原始信号,做低级抽象,逐渐向高级抽象迭代。人类的逻辑思维,经常使用高度抽象的概念。

例如,从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。

9

这个生理学的发现,促成了计算机人工智能,在四十年后的突破性发展。

总的来说,人的视觉系统的信息处理是分级的。从低级的 V1 区提取边缘特征,再到 V2 区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,就越利于分类。例如,单词集合和句子的对应是多对一的,句子和语义的对应又是多对一的,语义和意图的对应还是多对一的,这是个层级体系。

敏感的人注意到关键词了:分层。而 Deep learning 的 deep 是不是就表示我存在多少层,也就是多深呢?没错。那 Deep learning 是如何借鉴这个过程的呢?毕竟是归于计算机来处理,面对的一个问题就是怎么对这个过程建模?

因为我们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,我们需要了解地更深入点。所以在说 Deep Learning 之前,我们有必要再啰嗦下特征。

2. 特征

特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度。那对于特征,我们需要考虑什么呢?

2.1 特征表示的粒度

学习算法在一个什么粒度上的特征表示,才有能发挥作用?就一个图片来说,像素级的特征根本没有价值。例如下面的摩托车,从像素级别,根本得不到任何信息,其无法进行摩托车和非摩托车的区分。而如果特征是一个具有结构性(或者说有含义)的时候,比如是否具有车把手(handle),是否具有车轮(wheel),就很容易把摩托车和非摩托车区分,学习算法才能发挥作用。

10

11

2.2 初级(浅层)特征表示

既然像素级的特征表示方法没有作用,那怎样的表示才有用呢?

1995 年前后,Bruno Olshausen 和 David Field 两位学者任职 Cornell University,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题。

他们收集了很多黑白风景照片,从这些照片中,提取出 400 个小碎片,每个照片碎片的尺寸均为 16 × 16 像素,不妨把这 400 个碎片标记为 $S[i], i = 0,\cdots,399$。接下来,再从这些黑白风景照片中,随机提取另一个碎片,尺寸也是 16 × 16 像素,不妨把这个碎片标记为 $T$。

他们提出的问题是,如何从这 400 个碎片中,选取一组碎片 $S[k]$, 通过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片 $T$,尽可能相似,同时,$S[k]$ 的数量尽可能少。用数学的语言来描述,就是:

其中 $a[k]$ 是在叠加碎片 $S[k]$ 时的权重系数。

为解决这个问题,Bruno Olshausen 和 David Field 发明了一个算法,稀疏编码(Sparse Coding)。稀疏编码是一个重复迭代的过程,每次迭代分两步:

  1. 选择一组 $S[k]$,然后调整 $a[k]$,使得 $Sum_k (a[k] * S[k])$ 最接近 $T$。
  2. 固定住 $a[k]$,在 400 个碎片中,选择其它更合适的碎片 $S’[k]$,替代原先的 $S[k]$,使得 $Sum_k (a[k] * S’[k])$ 最接近 $T$。

经过几次迭代后,最佳的 $S[k]$ 组合被遴选出来了。令人惊奇的是,被选中的 $S[k]$,基本上都是照片上不同物体的边缘线,这些线段形状相似,区别在于方向。

Bruno Olshausen 和 David Field 的算法结果,与 David Hubel 和 Torsten Wiesel 的生理发现,不谋而合!

也就是说,复杂图形,往往由一些基本结构组成。比如下图:一个图可以通过用 64 种正交的 edges(可以理解成正交的基本结构)来线性表示。比如样例的 $x$ 可以用 1-64 个 edges 中的三个按照 0.8,0.3,0.5 的权重调和而成。而其他基本 edge 没有贡献,因此均为 0 。

12

另外,大牛们还发现,不仅图像存在这个规律,声音也存在。他们从未标注的声音中发现了 20 种基本的声音结构,其余的声音可以由这 20 种基本结构合成。

13

14

2.3 结构性特征表示

小块的图形可以由基本 edge 构成,更结构化,更复杂的,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如 V2,V4。因此 V1 看像素级是像素级。V2 看 V1 是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是(basis)。V1 取提出的 basis 是边缘,然后 V2 层是 V1 层这些 basis 的组合,这时候 V2 区得到的又是高一层的 basis,即上一层的 basis 组合的结果,上上层又是上一层的组合 basis……(所以有大牛说 Deep learning 就是“搞基”,因为难听,所以美其名曰 Deep learning 或者 Unsupervised Feature Learning)。

15

直观上说,就是找到有用的小碎片再将其进行组合,就得到了上一层的特征,递归地向上学习特征。

在不同对象上做训练时,底部所得的 edge basis 是非常相似的,但高层的 object parts 和 object models 就完全不同了(那咱们分辨汽车或者人脸是不是容易多了):

16

从文本来说,一个文档表示什么意思?我们描述一件事情,用什么来表示比较合适?用一个一个字嘛,我看不是,字就是像素级别了,起码应该是短语,换句话说每个文档都由短语构成,但这样表示概念的能力就够了嘛,可能也不够,需要再上一步,达到主题级,有了主题,再到文档就合理。但每个层次的数量差距很大,比如主题表示的概念 -> 主题(千-万量级)-> 短语(10万量级)-> 字(百万量级)。

一个人在看一个文档的时候,眼睛看到的是字,由这些字在大脑里自动切词形成短语,在按照概念组织的方式,先验的学习,得到主题,然后再进行高层次的学习。

2.4 需要有多少个特征?

我们知道需要层次的特征构建,由浅入深,但每一层该有多少个特征呢?

任何一种方法,特征越多,给出的参考信息就越多,准确性会得到提升。但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。

17

好了,到了这一步,终于可以聊到 Deep learning 了。上面我们聊到为什么会有 Deep learning(让机器自动学习良好的特征,而免去人工选取过程。还有参考人的分层视觉处理系统),我们得到一个结论就是 Deep learning 需要多层来获得更抽象的特征表达。那么多少层才合适呢?用什么架构来建模呢?怎么进行非监督训练呢?

3. Deep Learning 的基本思想

假设我们有一个系统 $S$,它有 $n$ 层($S_1,\cdots,S_n$),它的输入是 $I$,输出是 $O$,形象地表示为:$I =>S_1=>S_2=>…..=>S_n => O$,如果输出 $O$ 等于输入 $I$,即输入 $I$ 经过这个系统变化之后没有任何的信息损失(呵呵,大牛说,这是不可能的。信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理 $a$ 信息得到 $b$,再对 $b$ 处理得到 $c$,那么可以证明:$a$ 和 $c$ 的互信息不会超过 $a$ 和 $b$ 的互信息。这表明信息处理不会增加信息,大部分处理会丢失信息。当然了,如果丢掉的是没用的信息那多好啊),保持了不变,这意味着输入 $I$ 经过每一层 $S_i$ 都没有任何的信息损失,即在任何一层 $S_i$,它都是原有信息(即输入 $I$)的另外一种表示。现在回到我们的主题 Deep Learning,我们需要自动地学习特征,假设我们有一堆输入 $I$(如一堆图像或者文本),假设我们设计了一个系统 $S$(有 $n$ 层),我们通过调整系统中参数,使得它的输出仍然是输入 $I$,那么我们就可以自动地获取得到输入I的一系列层次特征,即 $S_1,\cdots, S_n$。

对于深度学习来说,其思想就是堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。

另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的 Deep Learning 方法。上述就是 Deep Learning 的基本思想。

4. 浅层学习和深度学习

4.1 浅层学习(Shallow Learning)

浅层学习是机器学习的第一次浪潮。

20 世纪 80 年代末期,用于人工神经网络的反向传播算法(也叫 Back Propagation 算法或者 BP 算法)的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用 BP 算法可以让一个人工神经网络模型从大量训练样本中学习统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显出优越性。这个时候的人工神经网络,虽也被称作多层感知机(Multi-layer Perceptron),但实际是种只含有一层隐层节点的浅层模型。

20 世纪 90 年代,各种各样的浅层机器学习模型相继被提出,例如支持向量机(SVM)、 Boosting、最大熵方法(如 LR,Logistic Regression)等。这些模型的结构基本上可以看成带有一层隐层节点(如 SVM、Boosting),或没有隐层节点(如 LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。

4.2 深度学习(Deep Learning)

深度学习是机器学习的第二次浪潮。

2006年,加拿大多伦多大学教授、机器学习领域的泰斗 Geoffrey Hinton 和他的学生 Ruslan Salakhutdinov 在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:

  1. 多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;
  2. 深度神经网络在训练上的难度,可以通过逐层初始化(layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。

当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是可以用较少的参数表示复杂的函数)

18

深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:

  1. 强调了模型结构的深度,通常有 5 层、6 层,甚至 10 多层的隐层节点。
  2. 明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。

与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

本文转载自《Deep Learning(深度学习)学习笔记整理系列》,作者 Zouxy。版权归原作者所有,部分内容有修改。