深度学习概述与发展历史-花书第一章解读(上)

深度学习概述与发展历史-花书第一章解读(上)

今天第一次分享,主要以花书DL第一章为蓝本,包括深度学习简单概述与发展历史。但写完之后发现太长了,尤其是发展历史部分,故分为上下两部分。当然,这里所有描述都假设读者了解机器学习的基本知识。

既然是解读花书第一章,那就简略介绍下这本书的内容:这本DL圣经分为三部分,第一部分是必要的数学基础与机器学习基础,对有机器学习基础的同学,可以用于查漏补缺。第二部分是监督学习模型,利用各种网络结构来做函数拟合/近似,也是工业界主要使用的各种模型。第三部分是无监督学习,主要涉及直接拟合概率分布或生成样本(间接地表示概率分布),如大名鼎鼎的GAN/WGAN,但这属于前沿研究的范畴。

1 机器智能中的挑战

如果一个问题可以形式化地用数学描述,那么对计算机来说,是相对简单的,比如求阶乘123456!,但对人来说却是非常挑战的。相反,有些任务对人来说是非常简单且自然的,比如认人脸、与人对话等,但对计算机来说却是非常挑战的。原因在于这些问题不易被形式化地有效地表示,比如怎么用像素来表示人眼呢。故挑战之一是,如何将这些非形式化的知识,以计算机能理解的方式传递给它。在历史上,大致经历了知识库、机器学习、表示学习、深度学习几个阶段。

2 知识库方法-将知识硬编码

一种最直接的方法就是,把系统需要的知识直接用形式化的语言来表达,再定义一些逻辑进行推演/预测。但对于复杂的情形,总会有这样那样的意外情况。如此这般,规则会越来越多,甚至无法全部列举出来。我们常用的语言就是这样,词在不同的上下文中有不同的意义。若想用规则把这些表达出来,会非常挑战,甚至无法完成。后来,人们想,是否可以让机器从众多具体例子中发现知识/规则?这就是机器学习。

3 机器学习-特征工程

在机器学习系统中,除了模型(特征与预测值的关系),我们还需要根据业务设计出合适的特征变量,这就是特征工程。给定特征组,在特征空间中,样本就有了具体的表示。同一个样本,在不同的特征组构成的特征空间中,它的表示是不同的。对于给定的问题,选择合适的特征,会得到更好的表示。这样,简单的线性模型也能解决问题。

深度学习概述与发展历史-花书第一章解读(上)

在左图的笛卡尔坐标系中,需要非线性模型(曲线)才能将两个类别分开;而在右图的极坐标系中,线性模型(直线)就能分开。这也就意味着,不同的表示,直接影响模型的复杂程度。好的表示,简单模型就可以解决问题;不好的表示,需要用复杂模型,甚至复杂模型都无法解决。 在这里,坐标轴x与y,r与Θ代表不同的特征组,它们构成了不同的特征空间。样本的表示对应特征空间中点的坐标。同一个样本,在不同的特征空间中表示不同,即坐标不同,如(1,1)和(1.414,0.787)。

表示的重要性对程序员来讲是非常熟悉的。例如从无序列表中查找元素,时间复杂度是线性的,而在有序列表中查找的话,时间复杂度是对数的,查找速度获得了指数级别地加速。在这里,数据结构对应问题的表示,查找算法对应机器学习里的模型。

既然表示这么重要,那我们除了通过特征工程得到好的表示,还有没有更好的办法呢?让我们再来回顾下上图例子,这里的特征工程即为坐标系间的变换。新特征组(r,Θ)是旧特征组(x,y)经过变换得到的。注意,这个变换是人肉发现并执行的,所以这种能力更多是经验的积累。那有没有可能,只给定先验结构/模型,特征变换的细节也由数据来一起训练确定呢?有,这个过程称之为表示学习/特征学习。基于样本在原始特征空间中的表示,经过(训练得到的)特征变换,我们就得到了样本在新特征空间中的新表示。

4 表示学习-浅层模型

在深度学习被广泛应用之前,我们的机器学习工具箱里也有几款表示学习相关的模型,如PCA、浅层神经网络等。PCA是一种基于线性变换的特征转换器。在新特征空间中,由于丢掉了部分不重要的特征分量,新的表示得到了很大程度的压缩。浅层神经网络是包含少数几个隐藏层的神经网络。隐藏层可以理解为非线性特征变换器,样本经过隐藏层的变换后,得到了新的表示。输出层通常是基于新表示的线性分类器。

PCA是一种无监督模型,主要目的是得到更有效的表示。而浅层神经网络通常是监督模型,在解决监督问题的同时,得到了非线性特征转换器与更好的表示。由此看来,无论监督学习还是无监督学习,表示学习都是它们的基础。这也是将来遇到的迁移学习、多任务模型、fine-tuning、pre-training的基础。原因是相似问题的更好表示可以通过相似的特征转换得到,即特征变换器是可以共享的,至少部分共享。

表示学习就是寻找特征变换,样本经过这样的变换后得到的新表示是更好的表示。在下面的分析中,我们重点关注变换的性质(线性变换/非线性变换)与变换前后新旧特征的特点与它们之间的关系。在PCA中,变换是线性的,对应原特征空间中的转动。变换后的特征空间维度变小,新特征间是线性无关的。新特征是原特征的线性组合。如下图,变换后舍弃Z2维度,特征空间的维度由2减少为1。显然,在未丢失太多信息的前提下,表示变得更简单了。

深度学习概述与发展历史-花书第一章解读(上)

4.1 浅层神经网络

通常,有监督的神经网络模型会被分解为两部分来理解,一部分是隐藏层,另一部分是输出层。隐藏层作为一个特征转换器,意义在于得到更合适的表示,使得输出层仅需要使用简单模型就能达到很好的效果。以NG的DL课程一 1.2节为例,使用浅层神经网络来预测房屋的价格。如下图所示,在输入层如房屋大小、卧室数量、邮编、富裕程度等原特征的基础上,隐藏层构建了一组新特征,如家庭成员数量、交通便利程度、学校质量。对预测房屋价格,这三个新特征明显更合适。每个隐藏层的特征,都是在输入层特征线性组合的基础上,再经过非线性函数(如ReLU)作用得到的。

深度学习概述与发展历史-花书第一章解读(上)

在上面两个例子中,新特征是由原特征组合而成,如可容纳家庭成员数量是由卧室数量与房屋大小组合而成的。这种组合(composition)特性,无论在软件开发还是在生活中都是很常见的。在软件开发的重用思想中,除了继承多态,就属组合最灵活,常常又是多层组合。在生活中,汽车是由车架、发动机、轮胎等组合,而发动机又是由众多零件组合而成。

但对于有些任务,如识别图片中是否有车,即便使用浅层神经网络,得到的效果也并不理想。其原因在于,在输入层特征为像素的基础上,经过简单组合无法直接得到像车轮之类的特征。而只有基于这类高度抽象的特征,输出层使用简单模型才会奏效。那么,会不会加多几层会好些呢?下面举两个例子来说明深度/层数的重要性。

4.2 程序开发的启示

编写程序时,在main函数中只允许调用函数subroutine1、subroutine2等。 在subroutineX中只允许使用语言提供的基础功能,不允许调用第三方库。可想而知,即使开发一个简单功能,如写一条数据到数据库,也需要开发大量subroutineX,且代码几乎没有被重用。这段程序质量差且开发效率低的原因是,只允许一层调用或嵌套。若这样,代码的表达能力被大大地削弱。

深度学习概述与发展历史-花书第一章解读(上)

而在通常的程序开发中,人们会不停地嵌套/调用各种模块,这样就非常大地提升了程序的表达能力。这也是程序员已习以为常而不自觉的,就像人们能轻松地辨识出图片中是猫还是狗那样,而不自知。

深度学习概述与发展历史-花书第一章解读(上)

4.3 大自然的启示

在自然界中,质子和中子组成原子核,他们又是由更基本的各种夸克粒子组成。原子核与电子组成原子。多个的原子组成分子。更多的分子组成气体、液体、固体等等。显而易见,自然界的物质组成是有着非常深的层级结构。 同时,对于同一物体,如空气,在不同层级(尺度)上有不同的表示。面对不同的问题时,人们会选择更合适的层级表示(抽象表示)。如研究压强等属性时,空气被看成均匀的气体较合适;而研究空气的成分时,使用分子层面的表示更合适。

这两个例子是人类在面对复杂的软件工程与神秘的大自然时,所采取的表示方法与思考逻辑。其中不断重复出现了两个重要特性:组合(composition)与多层(multiple levels),这正是深度学习中最基本的假设。

5 深度学习-深层模型

深度学习是表示学习中的一种深层模型。它的基本假设是,问题的原始特征通过多层组合(multiple levels of composition)能逐步得到更好的特征表示。从目前的实践效果来看,机器智能中很多挑战问题都符合这个假设,如物体识别。接下来,我们以识别图片中的物体是人、车、还是动物,来解释下其中的关键概念。

深度学习概述与发展历史-花书第一章解读(上)

输入层是像素级的RGB三通道特征,基于这些原始特征,需要经过非常复杂的变换才能得到高级抽象特征,如人脸,车轮等。虽然无法直接得到这个复杂的变换,但它可以通过多步简单的非线性变换得到。在第一个隐藏层中,特征是边(edges)。由于边有不同角度,如水平/垂直等,所以该隐藏层包含多个分解(disentangle)得到的边特征 。而这层中的边(edges)特征的是由输入层局部多个明暗相间的像素经过组合变换得到。依次类推,两条边交叉后组成了角(corner),多条边交叉后组成了contour,而多个corner或contour又组成了物体轮廓,如轮子、身体等。每一层中的特征都是由前一层局部多个特征组合而成。图片经过隐藏层的变换后,在每个隐藏层的特征空间中都得到了新表示。基于图片在第三个隐藏层中的抽象表示,简单线性分类器就能准确地预测出图片中物体的类别。

注意,上图只是示意图,并不是每层只有三个神经元,也不是仅需要三层就能提取出合适的表示。实际应用中数量都会非常大,如几十上百。 所以,在实际中,第一层的特征不一定为边,第二层也不一定为角。但每一层的特征都是由前一层多个特征组合而成,且新特征更加抽象。

深度学习除了可以学习输入层的多层抽象表示,还可以学习序列输入中不同输入间的依赖关系, 这就是循环神经网络RNN,在NG的DL课程五中会详细介绍。

6 总结

在解决机器智能问题的过程中,大致经历了知识库、机器学习、表示学习、深度学习几个阶段。见下图,图中灰色框代表利用数据训练学习实现的,而不是人肉完成的。由此可见,一个显著的发展趋势是,系统中越来越多步骤转换为由训练学习实现。

深度学习概述与发展历史-花书第一章解读(上)

上述只是今天回头看,对相关知识的梳理与理解。而在知识发现的历史过程中,其实是非常曲折的。在下节中,我们将分享神经网络的发展历史。

参考资料

Deep learning 第一章,第五章5.8节

相关推荐