1.1 什么是深度学习
在介绍深度学习之前,我们先来探究一下我们人类是如何进行学习的,这对理解深度学习是有益的。
先从科班的定义开始。《现代汉语词典》第6版是这样定义学习的:从阅读、听讲、研究、实践中获得知识或技能。
百度百科的定义更为详细些。学习,是指通过阅读、听讲、思考、研究、实践等途径获得知识或技能的过程。学习分为狭义与广义两种。
狭义:通过阅读、听讲、研究、观察、理解、探索、实验、实践等手段获得知识或技能的过程,是一种使个体可以得到持续变化(知识和技能,方法与过程,情感与价值的改善和升华)的行为方式。例如通过学校教育获得知识的过程。
广义:是人在生活过程中,通过获得经验而产生的行为或行为潜能的相对持久的行为方式。
这两种定义虽然各不相同,但是,其核心要义都可以抽象成以下描述:通过学习过程,使人类获得了新的知识或能力。
接下来需要理解的是,什么是机器学习?从本质上讲,机器学习就是计算机通过模拟人类的学习行为,使自己获取新的知识或技能。
可是,计算机再先进也只是机器,而机器是死的,计算机的各种运算都是按照人类事先设定的程序和即时的输入,通过计算得出结果的。如何让计算机与人类一样具有不断进步的学习能力呢?
计算机发展到今天,所谓人类事先设定的程序,不再是所有指令都已经设定的、如同“铁板一块”的程序,而是在程序中设置了很多可以调节的参数,这些参数可以根据以后的输入不断地自行修正。修正的过程大致是这样的:将每次输入得到的运算结果与预期的结果进行比对,如果发现两者的差距过大,机器就自动修正参数,然后再进行下一次同样的比对,直至输出结果与预期结果的差值满足预期标准(不大可能与预期结果完全一致)。
同样可以将上述计算机学习的过程抽象成:机器学习就是通过输入大量的数据,将实际输出与预期输出的比对,逐步修正模型中的各项参数值,使实际输出与预期输出逐步接近,最终达到预期效果,从而使计算机达到或超过人类的能力。
其中的关键,一是需要大量的输入数据,二是机器要有足够的运算能力,可以承担巨大的运算来完成众多参数值的修正确定。
如果至此还是觉得有些抽象,下面通过2个例子来说明机器学习的基本方法和过程。
【例1】预测降水量。图1-1是某市2019年月平均降水量。
图1-1 某市2019年月平均降水量
现在需要预测2020年的月平均降水量。如何预测会比较准?直接照搬2019年的数据肯定不行,必须找一个数学模型来预测。考虑到测量数据本身有误差,降水量也会因偶然因素出现偏离度较大的噪声数据,所以用一条平滑的曲线来拟合图1-1中在的折线,图1-2是根据2019年数据用四次多项式拟合出2020年月平均降水量的拟合曲线。
图1-2 预测某市2020年月平均降水量
这个四次多项式就是我们选用的数学模型,公式为:
其中x=1, 2, …, 12,通过公式(1.1)可以预测某个月的平均降水量,调整其中的5个参数w0~w4以得到不同的拟合曲线,下面的工作是选择拟合最佳的那条曲线。
现在我们已经选定了这5个参数的值,也就是确定了这个预测的数学模型。怎么评价这个模型预测数据的准确性呢?
我们有2019年的12个月的数据,记为r1, r2, …, r12λ,μ,将x=1, 2, …, 12代入公式(1.1)可以得到2020年12个月的预测数据y1, y2, …, y12,用下面的平方误差公式来求误差值:
如果误差太大,可以调整参数w0~w4的值,使误差更小,最终达到要求。公式(1.2)称为参数为w0~w4的误差函数。
这个例子说明,机器学习通常分以下三个步骤:
(1)基于样本数据,设计出预测模型,如公式(1.1);
(2)设计一个误差函数,如公式(1.2),用它可以判断所用参数是否最优;
(3)通过不断调试,找到使误差函数值最小的参数值w0~w4。
这三个步骤称为“机器学习模型三步骤”。
【例2】检测患者是否感染了病毒。为了简单起见,仅检测患者的2个指标x1, x2,根据这两个指标检测出的数值,求出患者感染病毒的概率。这个例子与第一个例子是不同的,第一个例子是预测数值,这个例子是对数据进行分类。
图1-3标出了患者检测的两个指标值散点图,以及后期检查确认患者是否已经感染病毒的分类标识。
图1-3 检测指标与感染结果散点图
我们希望能够根据这两个指标数值,找出是否感染病毒的计算公式,以便在后续检查之前可以预先给出是否感染病毒的初步判断。
可以发现,图1-3中的两类数据大致可以用一条直线将其分割开来,如图1-4所示。
图1-4 散布数据点的直线分类
这条直线可以用如下公式表示:
在这条直线的右上方,患者感染的概率很高,在直线的左下方感染的概率较低。沿着这条直线的法线方向,患者感染概率越来越高。
为了将这样的概率值表示出来,需要根据函数f(x1, x2)的值,计算一个感染概率值。在机器学习中,这样的转换函数选用sigmoid函数(见图1-5):
图1-5 直线分类转换为感染概率
公式(1.3)完成了“机器学习三步骤”的第一步,公式(1.4)是第二步,最后还有算出使误差函数取最小值的参数值w0~w2。
那么,机器是如何完成这些公式的运算呢?使用人工神经网络。
公式(1.3)(1.4)比较简单,如图1-6所示,用只含单个神经元的神经网络就可以完成。
图1-6 单个神经元的神经网络
在图1-6的神经网络中,首先将两个输入值x1, x2分别乘以其连接权重w1, w2,然后相加,再加上阈值w0,得到值f(x1, x2),也就是完成了公式(1.3)的计算。然后再将其输入sigmoid函数,得出最终一个0~1的值,即公式(1.4)。
如果公式复杂一点,可以增加神经网络的节点数和层数来完成。
图1-7是一个两层的神经网络,有3个神经元,可以完成下列运算:
图1-7 两层3个神经元的神经网络
f1(x1, x2)=w10+w11x1+w12x2
f2(x1, x2)=w20+w21x1+w22x2
f(f1, f2)=w0+w1f1+w2f2
这个稍微复杂一点的神经网络已经包含9个参数,可以想象,调整这些参数已经不容易了。现在所使用的神经网络具有更多的层数,每一层的节点数也更多,如图1-8所示,扩充神经网络都是从这两个维度来扩展的。
图1-8 扩充复杂的神经网络
作为输入层的节点数非常重要,如果要足够细致地区分输入数据的细节特征,就需要有足够多的节点数。理论上,只要增加这个节点数,就可以描述任何复杂的细节。这与黎曼积分精细分割积分区间的做法是一样的。
有了以上铺垫,理解深度学习应该比较容易了。
深度学习是在机器学习基础上发展起来的更为复杂的、能力更强的方法,它运用的网络结构层数和节点数比机器学习更多,训练的数据量更大,输入数据的特征提取实现了自动化。
深度学习自动提取特征是非常神奇的事,我们将在卷积神经网络中清楚地看到这一奇迹。
与机器学习相比较,深度学习至少在以下几个方面与之有明显的差别:
(1)数据依赖。深度学习必须要有大量数据来支撑完成人工神经网络的训练、测试,如果数据量不足,深度学习的效果通常还不如机器学习好;
(2)特征工程。在机器学习中,数据的特征需要人工完成设计、标注,工作量非常巨大,往往需要采取众包等方式投入大量的人力来完成,而且质量严重依赖参与者的经验和能力。在深度学习中,数据特征是由机器自动完成提取和标注的,所付出的代价是需要大量的数据以及较长的训练时间;
(3)神经网络结构。深度学习所采样的人工神经网络层数更多,节点数更多,因此网络所需的训练时间更长;
(4)硬件依赖。机器学习可以在较低端的机器上运行,但深度学习因为需要完成大量的计算任务,所以必须要有GPU的支持。
当然,深度学习并不是单纯地增加网络层数,而是根据所要处理的问题,对各层的连接处增加了更多的处理机制。深度学习也不是随意增加网络节点数,而是为每个节点赋予了更加细致的角色。
深度学习的快速发展正在向更多应用领域拓展。目前应用比较活跃的应用领域包括:无人驾驶汽车、自然语音翻译、语音识别、智能医疗、智能投顾(智能金融)、图片识别与分类、人脸识别、目标识别、情感识别、艺术创作(绘画、作曲、写诗)、智能法务、机器博弈、预测未来、仓储自动管控等。