1.4.3 机器学习和深度学习的关系和对比
如图1-2所示,深度学习属于机器学习的子类。它的灵感来源于人类大脑的工作方式,是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非一个全新的概念,可以理解为包含多个隐藏层的神经网络结构。为了提高深度神经网络的训练效果,人们对神经元的连接方法以及激活函数(Activation Function)等方面做出了调整。其目的在于建立模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释或“理解”数据,如文本、图像、声音等。
图1-2
如果是传统的机器学习的方法,我们会首先定义一些特征,比如有没有胡须、耳朵、鼻子、嘴巴的模样等。总之,我们首先要确定相应的“面部特征”作为机器学习的特征,以此来对我们的对象进行分类识别。
现在,深度学习的方法则更进一步。深度学习会自动地找出这个分类问题所需要的重要特征!传统机器学习则需要我们人工地给出特征!
那么,深度学习是如何做到这一点的呢?还是以识别猫和狗的例子来说明,按照以下步骤:
步骤01 首先确定出有哪些边和角与识别出猫和狗的关系最大。
步骤02 然后根据上一步找出的很多小元素(边、角等)构建层级网络,找出它们之间的各种组合。
步骤03 在构建层级网络之后,就可以确定哪些组合可以识别出猫和狗。
深度学习的“深”是因为它通常会有较多的隐藏层,正是因为有那么多隐藏层存在,深度学习网络才拥有表达更复杂函数的能力,也才能够识别更复杂的特征,继而完成更复杂的任务。有关机器学习与深度学习,我们从如下几个方面进行比较。
1.数据依赖
机器学习能够适应各种规模的数据量,特别是数据量较小的场景。如果数据量迅速增加,那么深度学习的效果将更加突出,如图1-3所示。这是因为深度学习算法需要大量数据才能完美理解。随着数据量的增加,二者的表现有很大区别。
图1-3
从数据量对不同方法的影响来看,我们可以发现深度学习适合处理大数据,而数据量比较小的时候,用传统的机器学习的方法也许更合适,结果更好。为了实现高性能,深层网络需要非常大的数据集,之前提到的预先训练过的神经网络用了120万幅图像进行训练。对于许多应用来说,这样的大数据集并不容易获得,并且花费昂贵且非常耗时。对于较小的数据集,传统的机器学习算法通常优于深度学习网络。
2.硬件依赖
深度学习十分地依赖高端的硬件设施,因为计算量实在太大了!深度学习中涉及很多的矩阵运算,因此很多深度学习都要求有GPU参与运算,因为GPU就是专门为矩阵运算而设计的。相反,机器学习随便给一台普通的计算机就可以运行,物美价廉。深度学习网络需要高端GPU辅助大数据集的训练,这些GPU非常昂贵,但是深层网络的训练过程离不开高性能的GPU,此外,还需要快速的CPU、SSD存储以及快速且大容量的RAM。
传统的机器学习算法只需要一个“体面”的CPU就可以训练得很好,对硬件的要求不高。由于它们在计算上并不昂贵,可以更快地迭代,因此在更短的时间内可以尝试更多不同的技术。
3.特征工程
特征工程就是指我们在训练一个模型的时候,首先需要确定有哪些特征。在机器学习方法中,几乎所有的特征都需要通过行业专家来确定,然后手工就特征进行编码。而深度学习算法试图自己从数据中学习特征,这也是深度学习十分引人注目的一点,毕竟特征工程是一项十分烦琐、耗费很多人力物力的工作,深度学习的出现大大减少了发现特征的成本。
经典的机器学习算法通常需要复杂的特征工程。首先在数据集上执行深度探索性数据分析,然后做一个简单的降低维数的处理,最后必须仔细选择最佳功能以传递给机器算法。当使用深度网络时,不需要这样做,因为只需将数据直接传递给网络,通常就可以实现良好的性能。这完全消除了原有的大型和具有挑战性的特征工程阶段。
4.运行时间
运行时间是指训练算法所需要的时间量。一般来说,深度学习算法需要花大量时间来进行训练,因为该算法包含有很多参数,因此训练时间更长。顶级的深度学习算法需要花几周的时间来完成训练。相对而言,普通机器学习算法的执行时间较短,一般几秒钟、最多几小时就可以训练好。不过,深度学习花费这么大力气训练出模型肯定不会白费力气的,其优势就在于模型一旦训练好,在预测任务上会运行得更快、更准确。
5.可理解性
最后一点,也是深度学习的一个缺点(其实也说不上是缺点),那就是在很多时候我们难以理解深度学习。一个深层的神经网络,每一层都代表一个特征,而层数多了,我们也许根本就不知道它们代表的是什么特征,也就没法把训练出来的模型用于对预测任务进行解释。例如,我们用深度学习方法来批改论文,也许训练出来的模型对论文评分都十分准确,但是我们无法理解模型到底是什么规则,于是那些拿了低分的同学找你质问“凭什么我的分这么低啊?”你也哑口无言,因为深度学习模型太复杂,内部的规则很难理解。
但是传统机器学习算法不一样,比如决策树算法,就可以明确地把规则列出来,每一个规则,每一个特征,我们都可以理解。此外,调整超参数并更改模型设计也很简单,因为我们对数据和底层算法都有了更全面的了解。相比较而言,深度学习网络是个“黑匣子”,研究人员无法完全了解深层网络的“内部”。