版权归原作者所有,如有侵权,请联系我们

深度学习深几许?

CCF计算机科普
由中国计算机学会主办,提供优质的计算机科普内容。
收藏

相信你一定听说过“深度学习”,它总是和人工智能一同出现,好像各种难以置信的AI成果都因为它。那么,“深度学习”到底是何方神圣?它与AI有什么关系?

改编一句台词,或许可以这样说:AI有那么多分支,其中一个叫机器学习;机器学习有那么多分支,历史偏偏选中了深度学习。

什么是机器学习?

以图像识别为例,把许多张猫和狗的图片喂给电脑,希望它像人一样正确判断出是猫还是狗。这种人类易于完成的任务由于难以形式化、逻辑化,需要经验,是计算机很难做到的。

现在,我们在猫的图片上标注“猫”,在狗的图片上标注“狗”,我们就拥有了一批“已标注数据”。我们希望机器能从这些数据中自己找到规律,总结出区分猫狗图片的办法,这就是机器学习的思想。

我们把喂给计算机的东西叫做“输入”,计算机给出的结果叫“输出”,那么,机器学习就是要让计算机找到输入和输出之间的一座最佳桥梁,从而对于输入有较准确的输出,这座桥梁可以看成是一个“函数”。

机器学习除了可以学习已标注数据(即“有监督学习”),还可以学习没有标注的数据(即“无监督学习”),比如聚类,但我们先不谈这个。

机器学习有很多种算法,其中对深度学习有重要意义的是“人工神经网络”,其典型例子是“多层感知机”(MLP)。人工神经网络的灵感来自于人脑神经元,但它与复杂的人类大脑仍有很多不同。

什么是人工神经网络?

解决复杂问题往往需要复杂的、非线性的函数(函数图像不是直线),简单的线性函数(函数图像为直线)最容易运用,却不能直接解决复杂问题,能不能将复杂的、非线性的函数用线性函数表达呢?

人工神经网络与深度学习有同样的思想:复杂函数可以用多个简单函数表示,是简单函数套简单函数套……一直套多个,从而化繁为简,由简至繁。

但是线性函数套线性函数,总归是线性的,所以最后要套上非线性函数,再输出。

以单个神经元为例,一个神经元接收来自多个方向的信号,每个信号都是一个输入x,但这一串x不是“平等”的,而是有的重要,有的不重要。这就像有一大叠文件,不能一股脑儿都给老板,要分轻重缓急,重要的放上面,不重要的放下面。我们给每个x都乘上一个数w,重要的x就乘大些的w,不重要的x就乘小些的。把这一串乘积全加起来,重要的x就在总和中占据重要地位,不重要的则相反。这一串w叫“权重”。

对神经元来说,不是所有信号都会通过神经细胞传输到后面的,而是要达到一定的“阀值”才可以通过,信号就像一个跳高运动员,跳过了预定高度就晋级,否则止步。

所以,我们设定阀值b,让w乘x乘积的总和减去b,如果差大于零,则通过,否则输出零。

这个让信号“跳高”的函数叫“激活函数”,上面其实是举ReLU函数的例子,此外还有其他的激活函数。由于此前对x的操作都是线性的,再进行线性操作得到的还是x的线性函数,而不是我们想要的非线性函数,因此,激活函数一般是非线性的。

一般来说,人工神经网络会使用多个神经元完成任务,神经元会一层一层排列。一串x所处的层叫输入层,最后得到分类结果的层,叫输出层。对于已标注数据,我们只能知道输入层、输出层是什么样的,但在人工设计了需要多少层、每层几个神经元之后,中间各层的神经元上,w、b这些参数都要机器去学出最优值,我们一开始并不知道最终会是什么,于是这些神经元所在的层统称隐藏层。

一串输入x在经过一层神经元之后,终于鱼跃龙门,到达了下一层。人工神经网络要求神经元不可跨层连接,不可以让x在几个神经元间走循环路。

那么,设计好人工神经网络之后,怎么让机器学会区分猫狗呢?

把所有已标注图片分为两类,大类叫“训练集”,小类叫“测试集”。训练集用来学习,测试集用来考试。如果学习之后,面对没学过的数据(没做过的题),准确率在要求范围内(考得好),那么就算学习成功。

刚才说了,从输入到输出,每个神经元有一串w,一个b,整个网络就有几串w,一串b,这些参数不靠人教,要机器根据已标注数据学出来。学习的过程,就是求出最佳参数的过程,从而得到最好的函数,也就是个优化问题,求最值。主流方法是梯度下降法,大概意思是:二元函数好比凹凸不平的跳跳床,如果在床的某个点上,跳跳床凹得最深,这个点就是我们要找的最小值点。从某个点开始,沿着一个方向移动,在这个方向上床变深的速度最快,我们就会找到深凹的点,当有几个深凹点时,经过比较,可求出最小值。

人工神经网络在图像识别方面达到了一定水平,但准确率一直难以突破,直到深度学习出现。

什么是深度学习?

深度学习是机器学习的一种,但在图像、语音识别方面,准确率比其他机器学习算法高许多。它包括多种算法,如卷积神经网络、循环神经网络,本文主要谈深度学习算法的共同特性。

深度学习其实是对人工神经网络的继承和超越,它主要改进了两个方面:1.设置更多的隐藏层。2.让机器学习特征,而非人工设计。

在人工神经网络时代,如果想要获得较好的结果,则需提供大量数据进行训练,并用多层网络解决复杂问题,但当时的数据量、算力都无法支撑。后来,海量数据出现,算力大幅提升,才为多层网络的训练提供了可能。

此外,训练多层神经网络还要解决“梯度消失”问题,大致是指原有算法中从后向前对多层神经网络运用梯度下降法,会使前面的层难以更新参数,降低准确率。通过换用更好的激活函数等方法,人们终于解决了这个问题。

因此有人说,第三次人工智能浪潮是由算法、算力、数据三驾马车拉动的。

深度学习对以往机器学习最重要的超越,也是最重要的特性,是学习特征。在其他机器学习中,训练时输入的一串x,其实是特定领域专家设计的“特征”,而不是“原图”。比如要把西瓜分成“好瓜”“坏瓜”,则需了解相关知识的人告诉我们:要看色泽、根蒂、敲声,而这些就是西瓜的“特征”。机器通过对特征的描述(如:色泽:青绿;根蒂:蜷缩;敲声:沉浊),和标注的结果(好瓜),能学出怎样的瓜属于“好瓜”。特征的归纳对学习的效果有重要影响。

人工设计特征的不足在于:一、模型的框架难以通用,换个问题就要重新设计特征。二、解决复杂问题往往需要更多特征,特征多到一定程度时,训练数据量要极大增加才能保证准确率,而原有方法无法应对,这被称为“维数灾难”。

由机器提取特征,不仅是解决这些问题的重要方法,也是机器全自动分析数据的大势所趋。

2006年,辛顿等人提出了一种实现机器提取特征的方法,但更具实用性的例子是卷积神经网络(CNN)。基于CNN的算法达到的图像识别准确率已经超越了人类平均水平。在CNN中,用于提取特征的是“卷积”过程。一张图片在计算机眼中,其实是一张数字表,每个数字就是一个像素。数学上,“卷积”和神经元中对一串x和w的乘积求和类似。我们把图片分成很多小块,每块的全部像素是一串x,我们再给出一串w,然后每个x与w对应相乘,对这串乘积求和,替换原来的小块数表。对于图片的所有小块,我们都用同一串w进行同样操作。此时w叫卷积核。当我们对所有小块都这样操作之后,图片的尺寸缩小了,像素也被聚合了,再进行下一次卷积(本例对应单通道图片的简单情形)。简单说,卷积层的作用就是“聚沙成塔”。这一方法的灵感来自人脑对图片的感知过程,其实是从边缘到局部再到整体的,每一次卷积,就使散点聚为边缘,再聚为形状,最后,整张图片的特征就被勾勒出来了。

可以发现,卷积的核心在于卷积核的选取,采用梯度下降等方法,可以找出最好的卷积核,从而实现机器自主提取特征。

深度学习的未解之谜?

深度学习以其通用的框架和多种实用的算法,让机器直接从经验中学出规律,在图像识别、自然语言处理等方面取得了很多成果,但以下几个问题不容忽视:

1. 鲁棒性。如果对图像施加一些干扰,比如把猪的图片叠加一些黑白噪声点,人类看不出任何差别,却会导致算法误判。这实际上是抗干扰能力,不少科学家正在解决这一问题。

2. 可解释性。机器直接从数据学出规律,并以此进行新的决策。但它为什么会得出这样的结论,训练数据和规律之间有何逻辑联系,目前还不太清楚,因而被称为“黑箱”。

3. 对数据量和训练次数的依赖。当已标注数据较少、训练次数不多时,深度学习的效果不佳。在硬件算力增长速度下降(摩尔定律近期不断修改)、部分领域已标注数据不足的情况下,摆脱这一限制或成重要方向,目前已有相关成果,如迁移学习。

深度学习深几许?今年花胜去年红。

已知尽处是春山,行人更在春山外!

内容资源由项目单位提供