专栏首页企鹅号快讯深度学习概述与发展历史-花书第一章解读(上)

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

我的整理/学习计划,主要以NG的DL课程为蓝本,以DL花书为主要阅读材料,以其他网课与BLOG相关内容为参考。NG的DL课程与花书有如下对应关系:课程一《神经网络与深度学习》对应花书第六章,课程二《改善深层神经网络》对应花书第七、八两章,课程三《结构化机器学习项目》对应花书第十一章,课程四《卷积神经网络》对应花书第九、十二章,课程五《序列模型》对应花书第十、十二章。我们将按此计划依次进行,争取每周更新一次。

今天第一次分享,主要以花书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节

本文来自企鹅号 - DragonTartnes媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最新机器学习必备十大入门算法!都在这里了

    原文来源:KDnuggets 作者:Reena Shaw 「雷克世界」编译:BaymaxZ ? 我们向初学者介绍十大机器学习(ML)算法,并附上数字和示例,方便...

    企鹅号小编
  • 先搞懂这八大基础概念,再谈机器学习入门!

    翻译 | AI科技大本营 参与 |林椿眄 准备好开始AI了吗?可能你已经开始了在机器学习领域的实践学习,但是依然想要扩展你的知识并进一步了解那些你听过却没有时间...

    企鹅号小编
  • 机器学习的网络罪犯

    AiTechYun 编辑:nanan ? 机器学习正遭受来自网络安全方面的困扰。而最近的调查结果显示了网络犯罪分子如何利用机器学习来使攻击变得更好、更快。 本文...

    企鹅号小编
  • linux的特殊符号与正则表达式

    第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的。 1.1.2  * 通过find 命令找以 ...

    惨绿少年
  • 个性化推荐 101

    本文聚焦在如何做个性化推荐的流程,算法则采用常用的逻辑回归 LR,这里主要介绍怎么用 LR 这个工具来做推荐,并不涉及算法本身的研究和细节;本文主要讨论 4 个...

    窦融
  • 美国鹰派紧盯中国AI、半导体产业发展,国内专家:中国制造2025遭误解

    新智元
  • 业内推荐系统架构介绍

    学术界往往更加关注推荐算法的各项评估指标。从基本的协同过滤到点击率预估算法,从深度学习到强化学习,学术界都始终走在最前列。一个推荐算法从出现到在业界得到广泛应用...

    石晓文
  • 如何发布自己的项目到Maven中央仓库?

    在Maven项目中,90%以上的jar包是通过pom文件直接从开源仓库中获取依赖jar包文件,然后在项目中进行集成使用。

    用户1161110
  • CVPR:深度无监督跟踪

    本文提出了一种无监督的视觉跟踪方法。与使用大量带注释数据进行监督学习的现有方法不同,本文的CNN模型是在无监督的大规模无标签视频上进行训练的。动机是,强大的跟踪...

    用户2293520
  • printf格式控制符[备忘]

    (1)输出格式控制综述:     printf的格式控制的完整格式:%  -  0  m.n  l或h     ①%:格式说明的起始符号,不可缺少。   ...

    王亚昌

扫码关注云+社区

领取腾讯云代金券