1.7 深度学习
深度学习指的是用一种特定的方法来解决一些机器学习的问题。
这种方法的中心思想是:基于一系列的离散的层(layer)构建机器学习算法。如果将这些层垂直堆叠,就说这个结果是有深度(depth)的,或者说算法是有深度的。
构建深度网络的方法有很多种。在构建网络时,我们可以选择很多不同类型的层。在本书后续章节中,我们会用几个完整的章节来讨论不同类型的深度网络。
图1.21展示了一个简单的示例,这个网络有两层,每一层都用方框显示出来,在每一层中,都有一些称为人工神经元(artificial neuron)或感知器的计算块(见第10章)。这些人工神经元的基本操作是读取一串数字,以特定的方式将这些数字加以组合,然后再输出一个新的数字,并将输出传递到下一层。
这个示例只包含两个层,但神经网络是可以有几十层甚至更多的层的。同时,每一层也不是只有2~3个神经元,它可以包含成百上千个神经元,并以不同的方式排列。
深度学习架构的吸引力在于,我们可以通过调用深度学习库中的例程来构建完整的网络,这些例程将负责所有的构建工作。正如我们将在第23章和第24章中看到的那样,通常只需要短短的一行代码就可以实例化一个新的层,之后使它成为网络的一部分。深度学习库将为我们处理内部和外部的所有细节。
由于这种结构模式搭建方便,许多人将深度学习比作用乐高积木搭建东西。我们只是堆积想要的层,每个层由一些参数来标定,之后对一些选项进行命名,就可以开始训练了。
图1.21 一个两层的深度网络。每一层都用方框表示,方框里的是人工神经元,每一层的输出连接到下一层的输入。在本示例中,提供4个数字作为输入,而2个数字构成输出
当然,这并不容易,因为选择正确的层、选择它们的参数以及处理其他的选择都需要小心谨慎。能够很容易地构建一个网络固然好,但这也意味着我们做的每一个决定都可能会带来很大的影响。如果做错了,那么网络可能就无法运行。也有可能出现更常见的情况——网络不会学习,我们给它输入数据,而它会返回给我们无用的结果。
为了减少这种令人沮丧的情况的发生,在讨论深度学习时,我们会充分详细地研究关键的算法和技术,以便能以一种明智的方式做出所有决定。
我们已经在图1.10中看到了一个深度学习的例子,用了一个16层的深度网络来对这些照片进行分类,下面让我们更仔细地看看这个系统返回了什么。
图1.22展示了4张照片以及深度学习分类器对它们类别的预测,包括它们的相对可信度。系统非常完美地识别出了蜂鸟,但是对于那个船形的开瓶器不太确定;又因为它以前从来没有见过长柄勺或者耳机,所以得到了一个猜测的结果。
图1.22 4张照片以及深度学习分类器对它们类别的预测。这个系统没有经过长柄勺或耳机的训练,所以它正在尽最大努力将这些照片与它所知道的东西相匹配
让我们尝试另一个图像分类任务,这次我们将用手写数字0~9来训练系统,然后输入一些新的图,让系统对其进行分类。这是一个非常著名的数据集,称为MNIST,我们会在本书中多次提到它。图1.23展示了该系统对一些从未见过的新数字的预测。
图1.23 一个深度学习分类器对手写数字的分类
这个深度学习分类器做对了所有归类,就这些数据来说,现代分类器已经能够实现非常好的效果,并且能够达到99%的准确率。10000张图中,我们构建的小系统也能够正确地分类9905张,即分类结果与人类专家提供的标签只有95次不一致。
深度学习系统的一个妙处在于,它们在实现特征工程上表现得很好。回想一下上面的内容,这是一项去寻找让我们做出判断的规则的任务。比如,一个数字是1还是7,一张图是猫还是狗,或者一个演讲片段中的单词是“coffeeshop”还是“movie”。要为一项复杂的工作人工制订这样的规则,几乎是一项不可完成的任务,因为我们必须考虑到所有变化和特殊情况。
但是,深度学习系统可以隐式地学习如何独立自主地实现特征工程。它探索了大量可能的特征并对其进行评估,而后根据评估保留一些特征并丢弃其他特征。它完全是独立地进行这个过程的,没有我们的指导。系统的表征力越强(通常可以总结为拥有更多的层,每层都有更多的人工神经元),就越能发现好的特征,我们称之为特征学习。
我们每天都在使用这种类型的深度网络,将其应用于照片中的人脸识别、手机对语音命令的识别、股票交易、汽车驾驶、医学图像分析以及许许多多的其他任务。
只要系统是由一系列用于计算的某些类型层构成的(这些类型我们将在后面的章节中见到),它就可以被称为“深度学习”系统。因此,“深度学习”一词更多的是一种搭建机器学习程序的方法,而不是一种自主学习的技术。
当我们想要解决一些比较庞大的问题时(例如,在一张照片中识别1000个不同对象中的某一个),深度学习网络就会变得很庞大,涉及数千甚至数百万个参数。这样的系统就需要大量的数据进行训练,通常也需要更长的时间。图形处理单元(Graphics Processing Unit,GPU)的普及对这方面的工作起到了很好的辅助作用。
GPU是一种特殊的芯片,它位于中央处理单元(Central Processing Unit,CPU)旁边。CPU用于执行运行计算机所涉及的大多数任务,如与外围设备和网络的通信、内存管理、文件处理等。设计GPU的初衷是通过接管制作复杂图形(如三维游戏中渲染的场景)时的计算来减轻CPU的负担。训练深度学习系统所涉及的操作恰好与GPU执行的任务非常匹配,这也是这些训练操作可以快速执行的原因。此外,GPU的自身设计允许并行计算,即可以同时执行多个计算,专为加速深度学习计算而设计的新芯片也开始出现在市场上。
深度学习理念并不适用于所有机器学习任务,但是恰当地使用它们可以产生非常好的结果。在许多应用中,深度学习方法表现得比其他算法优越得多,从标记照片到用直白的语言与我们的智能手机“交谈”,它正在彻底改变我们可以用计算机来实现的东西。