什么是深度学习

作者: 李宏毅

来源: 数理人文

发布日期: 2017-05-27

深度学习是机器学习的一种方法,旨在让机器根据训练资料自动找出有用的函数。深度学习通过类神经网络模拟人脑的运作方式,分为三个步骤:提供函数集、定义函数优劣、找出最佳函数。该技术在多个领域得到应用,但仍面临许多挑战。

机器学习的卷土重来原理

自从2016年3月AlphaGo以四比一击败李世乭以后,AlphaGo所使用的深度学习技术引起了各界的关注。事实上,早在AlphaGo问世之前,深度学习技术即已广泛应用在各个领域。

当我们对iPhone的语音助理软件Siri说一句话,Siri可以将声音讯号识别成文字,用的就是深度学习的技术;当我们上传一张相片到Facebook,Facebook可以自动找出相片中的人脸,用的也是深度学习的技术。其实人们早已享受深度学习所带来的便利很长一段时间了。

什么是深度学习?

深度学习是机器学习的一种方法,机器学习技术,就是让机器可以自我学习的技术。但实际上机器是如何学习的呢?

一言以蔽之,机器学习就是让机器根据一些训练资料,自动找出有用的函数。例如,如果将机器学习技术运用在语音识别系统,就是要机器根据一堆声音讯号和其对应的文字,找出如下的「语音识别函数」:输入一段声音讯号,输出就是该声音讯号所对应的文字。如果机器学习技术应用在影像识别系统,那就是要机器根据一堆图片和图片中物件名称的标注,找出「影像识别函数」:输入一张图片,输出是图片中的物件名称。

如果要机器下围棋,就是让机器根据一堆棋谱找出「下围棋的函数」:输入是棋盘上所有黑子和白子的位置,输出是下一步应该落子的位置。以上要找的函数,共通点是它们都复杂到人类绝对没有能力写出它们的数学式,只有靠机器才有办法找出来。那么,机器要如何根据训练资料找到函数呢?

一般机器学习方法要经过三个步骤:

1. 人类提供给机器一个由函数构成的集合(简称函数集);

2. 人类根据训练资料定义函数的优劣;

3. 机器自动从函数集内找出最佳的函数。深度学习也不例外。底下我们先介绍深度学习的基本架构,再分别就这三个步骤来介绍深度学习。

类神经网络与神经元

深度学习就是让机器模拟人脑的运作方式,进而和人类一样具备学习的能力。这个科普的说法,相信大家都已耳熟能详。会有这样的说法,是因为深度学习中,人类提供的函数集是由类神经网络的结构所定义。

类神经网络和人脑确实有几分相似之处,我们都知道人脑是由神经元所构成,类神经网络也是由「神经元」连接而成。每个神经元都是一个简单的函数,这些函数的输入是一组数值(也就是一个向量),输出是一个数值。以图1的神经元为例,该神经元的输入为左侧橘色框内的2、-1、1三个数值,输出为右侧蓝色框内的数值4。

那么,神经元是如何运作的呢?

每个输入都有一个对应的权重,图1中每个输入对应的权重,分别为灰色框内的1、-2、-1三个数值。先将每个输入数值和其对应权重相乘后加总,再加上绿色框内的阈值后,其总和便成为神经元中激活函数的输入。图1中激活函数的输入是4,也就是2 x 1 + (−1) x (−2) + 1 x (−1) + 1 = 4。激活函数是由人类事先定义好的非线性函数,其输入和输出都是一个数值,而其输出就是神经元的输出。

图1中的激活函数,其输入和输出的关系如蓝色圆域所示(横轴代表输入、纵轴代表输出),其中当输入小于0时,输出为0;当输入大于0时,输出等于输入。这种激活函数称为整流线性单元(ReLU),是目前常用的激活函数。图1中的激活函数输入为4,因为大于0,故神经元的输出就是4。神经元中的权重和阈值都称为参数,它们决定了神经元的运作方式。

步骤一:类神经网络就是函数集

了解神经元后,接着来看类神经网络。

类神经网络由很多神经元连接而成,人类只需要决定类神经网络的连结方式,机器可以自己根据训练资料找出每个神经元的参数。图2是一个类神经网络的例子,上方的类神经网络共有六个神经元,分别排成三排,橘色方块代表外界的输入,外界的输入可以是图片、声音讯号或棋盘上棋子的位置等等,只要能以向量(一组数字)表示即可。

以图片为例,一张28 × 28大小的黑白图片,可以视为一个784(= 28 × 28)维的向量,每一分量对应到图片中的一个像素,该分量的值表示像素颜色的深浅,接近黑色其值就接近1,反之就接近0。

来自外界的资讯被输入给第一排的蓝色神经元,蓝色神经元的输出是第二排黄色神经元的输入,黄色神经元的输出则是下一排绿色神经元的输入,因为绿色神经元的输出没有再转给其他神经元,故其输出就是整个类神经网络的输出。

这种类神经网络结构,称为完全连接前馈式网络(fully connected feedforward network)。在这种架构中,神经元排成一排一排,每排称为一「层」,每层神经元的输出为下一层各神经元的输入,最后一层称为「输出层」,其他层则称之为「隐藏层」。所谓深度学习的「深」,意味着有很多的隐藏层(至于要多少隐藏层才足以称之为「深」就见仁见智了)。

当类神经网络中每个神经元参数都确定时,该类神经网络就是一个非常复杂的函数。同样的网络结构,若参数不同将形成不同的函数。

步骤二:定义函数的优劣

有了类神经网络结构作为函数集后,接下来就要定义函数的优劣,以便在下一步骤让机器挑选出最佳函数,但什么叫作好的函数呢?让我们举个具体的例子来说明。假设任务是手写数字识别,也就是让机器检视图片,每张图中有手写数字,机器必须辨认出这个数字。

执行手写数字识别的类神经网络,其输出层有10个神经元,分别对应到从0到9的数码,而每个神经元的输出值则分别表示对应数码的信心分数,机器会把信心分数最高的数码当作最终的输出。在手写数字识别中,训练资料是一堆图片和每张图片中的数码(数码需由人工标注)。这些训练资料告诉机器,当训练资料中某张图片输入时,要识别出哪个数码才正确。

步骤三:找出最佳函数

根据训练资料可以决定一个函数的优劣,接下来就要从类神经网络所定义的函数集中,找到最佳的函数,也就是最佳的参数组合。我们可以把找出最佳函数的过程,想像成是机器在「学习」。如何找出最佳的类神经网络参数呢?最无脑的方法就是暴力穷举类神经网络中的所有可能参数值。然而,为了让机器完成复杂的任务,现在的类神经网络往往非常庞大,其中可能包括数十个隐藏层,每个隐藏层有上千个神经元,因此参数数目可能动辄千万以上。

要穷举这上千万的参数组合,再根据训练资料计算每个参数组合(函数)的优劣来找出最佳函数,就算是电脑也办不到,因此暴力穷举法是不切实际的。目前最常才用的「学习」方法称为「梯度下降法」。在此法中,机器先随机指定第一组参数,再稍为调整第一组参数,找出比第一组参数略佳的第二组参数,接下来再稍为调整第二组参数,找出比第二组参数略佳的第三组参数,以此类推,让这个步骤反复进行,直到找不出更佳的参数时就停止。

参数的调整次数可能多达上万次,这就是经常听说「深度学习需要耗用大量运算资源」的原因。因为类神经网络中有大量参数,所以还会使用名为「反向传递法」的演算法,来提高参数调整的效率。虽然用梯度下降法可以训练出厉害的AlphaGo,但这个方法本身其实不怎么厉害。它无法保证一定能从函数集中挑出最佳函数,而仅能从类神经网络定义的函数集中,找出局部最好的函数。

更糟的是,这个演算法有随机性,每次找出来的函数可能都不一样,因此能找出多好的函数要靠点运气。

深度学习是新的突破吗?

其实,上述的类神经网络技术在1980年代前就已经发展成熟,只是当时并不用「深度学习」这个词汇,而称为「多层次感知器」。许多人把深度学习近年的走红,归功于辛腾在2006年提出,以限制波兹曼机初始化参数的方法。

因此曾有一度,深度学习和多层次感知器的差异在于,随机初始化参数的叫作多层次感知器;用限制波兹曼机初始化的称为深度学习。不过实际上,只要给予适当的激活函数、足够的训练资料,限制波兹曼机法所带来的帮助并不显著,故此方法已不能算是深度学习的同义词。今日深度学习所应用的类神经网络,和1980年代的多层次感知器虽然本质上非常相似,但还是有些不同。

首先,80年代的网络通常不超过三层,但现在的网络往往比三层深得多,例如语音识别需要七、八层,影像识别需要20余层,微软用来识别影像的「深度残留网络」,甚至深达152层。另一个不同是,过去比较流行用S型函数作为激活函数,但S型函数在网络很深时,难以训练出好的结果,故近年较流行用前述整流线性单元,在训练很深的网络时,整流线性单元的效果远优于S型函数。此外,现在还有技术可以让机器自己决定激活函数。

结语

随着深度学习如今蓬勃发展,人工智慧的能力已越来越强,但我相信这仍只是个起步。虽然机器号称在电玩和围棋上可以痛宰人类,或者在识别影像中,识别物件的正确率已经高过人类,但如果追问机器根据图片回答问题的能力,可能还不如四岁小孩,离科幻电影中人类想像的人工智慧仍有很大的差距。目前我们看到的深度学习技术就好比寒武纪的生物大爆发。寒武纪之后,生物还要经历多次演化才成为今日的样貌。

现今的深度学习技术可能不是人工智慧的最终形态,在前面所述深度学习的三个步骤中─如何选择函数集、如何定义优劣、如何挑选函数,每一步都有很多尚未解决的问问题,等着人们来挑战。

UUID: 94784a52-5986-4e53-923d-9931c32477cd

原始文件名: /home/andie/dev/tudou/annot/AI语料库-20240917-V2/AI语料库/原理公众号-pdf2txt/2017年/2017-05-27_什么是深度学习——机器学习的卷土重来.txt

是否为广告: 否

处理费用: 0.0229 元