我是一名计算机相关专业的在读研究生,我会利用此号分享自己的学习读书笔记和心得。
相信很多人和我一样买过很多书,但是只有买回来的那些日子随便翻一翻,甚至压根就没看过变成压泡面工具。所以,我决定开始写作,通过这个专栏,帮助大家利用碎片化的时间了解专业书籍的相关内容。这个专栏的名称叫做《带你读》,旨在用精炼、易懂的文字解读专业著作。由于篇幅有限,在此仅介绍不太深入的内容,如需深入学习,还望阅读原作。另外,由于能力有限,可能存在一些错误理解,请大家批评指正。
《深度学习》是深度学习领域的经典教材,其中/英文版已开源,中文版地址为:
https://github.com/exacity/deeplearningbook-chinese
Chapter 1 引言
1. 相关概念
人工智能(artificial intelligence, AI)是旨在研究“计算机能否变得智能”而发展的、具有众多实际应用和活跃研究课题的领域。计算机能够很容易的解决可以通过一系列形式化的数学规则来描述的问题。因此,人工智能的挑战在于那些对人来说不难实现、但很难被形式化描述的任务,例如人脸识别。
针对上述问题,一种解决方案是:计算机从经验中学习(避免了人为形式化地指定知识),并根据层次化的概念体系来理解世界,而每个概念则通过与某些相对简单的概念之间的关系来定义(复杂的概念从简单的概念中提取)。如果绘制出表示计算机学习这些概念的流程图,我们会得到一张层次很多(深度)的图。因此,上述方法被称为深度学习(deep learning)。
相比于传统的机器学习,深度学习研究的模型涉及更多学到概念的组合,但它本质上还是一种机器学习算法。它和其它机器学习的关系是:
2. 深度如何度量
一个深度学习的深度度量(通俗理解即为层数)的方法有两种,但是目前的共识是深度模型计算图中从输入数据到输出的路径长度(经历的节点数目)。但是这里又存在了一种分歧:是一种基本运算为一个节点,还是某一种函数或者算法为一个节点呢?如下图是一个逻辑回归算法的两种表示图,如果将基本运算视为节点,那么其深度为3;如果将逻辑回归这一算法视为一个节点,那么其深度为1。在这里,许多资料中多选择前者,我个人也比较倾向于前者的表示方法。
2. 表示学习
前面提到深度学习依赖于经验,对于计算机而言,经验即是数据。可以说,数据的好坏和表示形式,决定了几个深度学习模型的性能。深度学习方法通过学习已有数据的特征来构造模型,然后用模型去处理新的数据。问题在于,如何表示数据特征,才能使计算机较好地获取和学习这些特征。一个常用的方法是向量化,把非结构化、具体的事物,映射到一个低维的向量空间中,用向量空间中的点表示一条数据,或者称为一个实例。
然而并不是所有的特征都能被很好地用向量表示出来,例如一个车辆检测的任务,我们会想到通过车轮检测图像中是否有车。但是,我们难以准确描述车轮在图片中是怎么样被表示的(根据像素值描述车轮像什么)。虽然车轮几何形状简单,但是会因所在场景而异,如遮挡、光照等。
解决上述问题的途径之一是利用机器自己学习表示数据,被称为表示学习(representation learning)。表示学习仅需要很少的人工干预,却能比人工表示数据获得更好的效果,同时降低了成本。
表示学习算法的典型例子是自编码器(autoencoder)。自编码器由一个编码器(encoder)函数和一个解码器(decoder)函数组合而成。编码器函数将输入数据转换为一种不同的表示,而解码器函数则将这个新的表示转换到原来的形式。我们期望当输入数据经过编码器和解码器之后尽可能多地保留信息,同时希望新的表示有各种好的特性,这也是自编码器的训练目标。
当设计特征或设计用于学习特征的算法时,我们的目标通常是分离出能解释观察数据的变差因素(factors of variation)。简单解释就是,这些因素通常是不能被直接观察到的量,且很难被人为地表示出来。例如当分析语音记录时,变差因素包括说话者的年龄、性别、他们的口音和他们正在说的词语。在许多现实的人工智能应用中,需要我们理清变差因素并忽略我们不关心的因素。
显然,从原始数据中提取如此高层次、抽象的特征是非常困难的。许多诸如说话口音这样的变差因素,只能通过对数据进行复杂的、接近人类水平的理解来辨识。这几乎与获得原问题的表示一样困难,因此,乍一看,表示学习似乎并不能帮助我们。
深度学习(deep learning)通过其他较简单的表示来表达复杂表示,解决了表示学习中的核心问题。下图解释了一个卷积神经网络是如何逐层地提取从低级到高级地特征的。这里有一点值得思考:卷积神经网究竟是一层层地学习并抽取特征,还是在一层一层地用更好地方式表示数据呢?
更多CNN可视化的内容,可以参考:https://github.com/poloclub/cnn-explainer
4. 分布式表示
前面说到表示学习,表示学习中一个很重要的方法被称为分布式表示(distributed representation)。对于每一个样本,都是由多个特征表示,并且每一个特征都应该参与到可能输入的表示。例如鸢尾花数据集包含以下特征:
对于上述数据,传统意义上是对每一个连续的数值作为一个特征进行学习,这样会使神经网络的参数十分巨大。利用分布式表示的思想,仅需要四个神经元分别学习表格中对应的四个特征,而不是仅仅从某一个特定的实例中学习。