转自科学网:
深度学习:像人脑一样深层次地思考
从上一篇我们可以看出,个性化推荐系统确实很会“察言观色”,针对不同的用户,主动推送不同的3D打印内容。但如果你认为它真正有了“人工智能”,那你就错了。其实,这些推荐系统背后的运行原理主要基于概率统计、矩阵或图模型,计算机对这些数值运算确实很擅长,但由于采用的只是“经验主义”的实用方法(也即管用就行),而非以“理性主义”的原则真正探求智能产生的原理,所以距离真正的人工智能还很远。AI(Artificial Intelligence),也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台计算机能产生“自我”的意识。
提示:图灵测试(Turing Testing),是计算机是否真正具有人工智能的试金石。“计算机科学之父”及“人工智能之父”英国数学家阿兰·图灵(1912—1954)在1950年的一篇著名论文《机器会思考吗?》里,提出图灵测试的设想。即把一个人和一台计算机分别隔离在两间屋子,然后让屋外的一个提问者对两者进行问答测试。如果提问者无法判断哪边是人,哪边是机器,那就证明计算机已具备人的智能。
直到深度学习(Deep Learning)的出现,让人们看到了一丝曙光,至少,(表象意义下的)图灵测试已不再是那么遥不可及了。2013年4月,《麻省理工学院技术评论》杂志将深度学习列为2013年十大突破性技术(Breakthrough Technology)之首。有了深度学习,推荐系统可以更加深度地挖掘你内心的需求,并从海量的3D模型库中挑选出最合适的供你打印。
让我们先来看看人类的大脑是如何工作的。1981年的诺贝尔医学奖,颁发给了David Hubel和Torsten Wiesel,以及Roger Sperry。前两位的主要贡献是,发现了人的视觉系统的信息处理是分级的。如图4-45所示,从视网膜(Retina)出发,经过低级的V1区提取边缘特征,到V2区的基本形状或目标的局部,再到高层的整个目标(如判定为一张人脸),以及到更高层的PFC(前额叶皮层)进行分类判断等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表达越来越抽象和概念化,也即越来越能表现语义或者意图。
图4-45 人脑的视觉处理系统 (图片来源:Simon Thorpe)
这个发现激发了人们对于神经系统的进一步思考。大脑的工作过程,或许是一个不断迭代、不断抽象概念化的过程,如图4-46所示。例如,从原始信号摄入开始(瞳孔摄入像素),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定眼前物体的形状,比如是椭圆形的),然后进一步抽象(大脑进一步判定该物体是张人脸),最后识别眼前的这个人──正是大明星刘德华。这个过程其实和我们的常识是相吻合的,因为复杂的图形,往往就是由一些基本结构组合而成的。同时我们还可以看出:大脑是一个深度架构,认知过程也是深度的。
图4-46 视觉的分层处理结构 (图片来源:Stanford)
而深度学习(Deep Learning),恰恰就是通过组合低层特征形成更加抽象的高层特征(或属性类别)。例如,在计算机视觉领域,深度学习算法从原始图像去学习得到一个低层次表达,例如边缘检测器、小波滤波器等,然后在这些低层次表达的基础上,通过线性或者非线性组合,来获得一个高层次的表达。此外,不仅图像存在这个规律,声音也是类似的。比如,研究人员从某个声音库中通过算法自动发现了20种基本的声音结构,其余的声音都可以由这20种基本结构来合成!
在进一步阐述深度学习之前,我们需要了解什么是机器学习(Machine Learning)。机器学习是人工智能的一个分支,而在很多时候,几乎成为人工智能的代名词。简单来说,机器学习就是通过算法,使得机器能从大量历史数据中学习规律,从而对新的样本做智能识别或对未来做预测。
而深度学习又是机器学习研究中的一个新的领域,其动机在于建立可以模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如,图像、声音和文本。深度学习之所以被称为“深度”,是因为之前的机器学习方法都是浅层学习。深度学习可以简单理解为传统神经网络(Neural Network)的发展。大约二三十年前,神经网络曾经是机器学习领域特别热门的一个方向,这种基于统计的机器学习方法比起过去基于人工规则的专家系统,在很多方面显示出优越性。如图4-47所示,深度学习与传统的神经网络之间有相同的地方,采用了与神经网络相似的分层结构:系统是一个包括输入层、隐层(可单层、可多层)、输出层的多层网络,只有相邻层节点(单元)之间有连接,而同一层以及跨层节点之间相互无连接。这种分层结构,比较接近人类大脑的结构(但不得不说,实际上相差还是很远的,考虑到人脑是个异常复杂的结构,很多机理我们目前都是未知的)。
图4-47 传统的神经网络与深度神经网络
提示:人类大脑由千亿个神经元组成,同时每个神经元平均连接到其它几千个神经元,这样形成一个庞大的神经元网络。通过这种连接方式,神经元可以收发不同数量的能量,但它们对能量的接受并不是立即作出响应,而是先累加起来,只有当累加的总和达到某个临界阈值时才把能量发送给其它的神经元。而人工神经网络(Artificial Neural Networks, ANN)将人类神经网络作了数学上的抽象,如图4-47所示,将其抽象为输入层、输出层以及中间的若干隐层(Hidden Layer,用于层次化地对内在特征进行降维和抽象表达,相当于特征检测器),其中每层都有若干结点及连接这些点的边,通过在训练数据集上学习出边的权重(Weight)来建立模型。边所表征的函数(通常为非线性函数)的不同,对应于不同的神经网络。例如,第6章6.4.1节所介绍的感知机就是一种最简单的、不含任何隐层的前向(Feedforward)人工神经网络,其中的函数被称为传递函数(Transfer Function)、而门限截止函数
则被用作激活函数(Activation Function)。在上世纪七八十年代,这种在人工智能领域被称为联结主义学派(Connectionism)的方法曾盛极一时。
但是后来,因为理论分析的难度,加上训练方法需要很多经验和技巧,以及巨大的计算量和优化求解难度,神经网络慢慢淡出了科研领域的主流方向。值得指出的是,神经网络(如采用误差反向传播算法:Back Propagation,简称BP算法,通过梯度下降方法在训练过程中修正权重使得网络误差最小)在层次深的情况下性能变得很不理想(传播时容易出现所谓的梯度弥散Gradient Diffusion或称之为梯度消失,根源在于非凸目标代价函数导致求解陷入局部最优,且这种情况随着网络层数的增加而更加严重,即随着梯度的逐层不断消散导致其对网络权重调整的作用越来越小),所以只能转而处理浅层结构(小于等于3),从而限制了性能。于是,20世纪90年代,有更多各式各样的浅层模型相继被提出,比如只有一层隐层节点的支撑向量机(SVM,Support Vector Machine)和Boosting,以及没有隐层节点的最大熵方法(例如LR,Logistic Regression)等,在很多应用领域取代了传统的神经网络。
显然,这些浅层结构算法有很多局限性:在有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定的制约。更重要的是,浅层模型有一个特点,就是需要依靠人工来抽取样本的特征。然而,手工地选取特征是一件非常费力的事情,能不能选取好很大程度上靠经验和运气。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?
提示:实际生活中,人们为了实现对象的分类,首先必须做的事情是如何来表达一个对象,即必须抽取一些特征来表示一个对象。例如,区分人和猴子的一个重要特征是是否有尾巴。特征选取的好坏对最终结果的影响非常大。
此外,我们希望提取到的特征能代表输入数据的最重要部分,就像PCA(Principal Component Analysis,主成分分析,请参见第6章的6.2.2节)那样,找到可以代表原信息的主要成分。以自动编码器(AutoEncoder)为例,这是一种尽可能复现输入信号的神经网络:即输出要尽可能与输入
相同,表示为
。我们可通过训练调整这个神经网络的参数,来得到每一层中的权值系数,这样就可得到输入
的一个层次化的表示。这个可代表原信息主要成分的表示就是所谓的特征。
进一步地,我们还可用来表示输出
,其中
称为字典。类似于PCA,
可理解为基,
可理解为系数。同时,我们不仅希望将信号表示为一组层次化基的线性组合,而且要求只需较少的几个基就可以将信号表示出来,这就是所谓的稀疏编码(Sparse Coding)。“稀疏性”定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。也即,我们希望求得一组最佳的系数
,满足:
注意上式右边对系数采用了L1范式/正则化/约束以满足稀疏性,上式实际上是对Lasso(The Least Absolute Shrinkage and Selectionator operator)估计的求解。
之所以希望“稀疏性”是科学依据的,因为绝大多数的感官数据,比如自然图像,都可以被表示成“少量”基本元素的叠加,比如基本线/面的叠加。稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量(基向量的个数比输入向量的维数要大)以更高效地表示样本数据,以找出隐含在输入数据内部的结构与模式。
答案是能!深度学习框架将特征和分类器结合到一个框架中,自动地从海量大数据中去学习特征,在使用中减少了手工设计特征的巨大工作量。看它的一个别名:无监督特征学习(Unsupervised Feature Learning),就可以顾名思义了。无监督(Unsupervised)学习的意思就是不需要通过人工方式进行样本类别的标注来完成学习。因此,深度学习是一种可以自动地学习特征的方法。
提示:准确地说,深度学习首先利用无监督学习对每一层进行逐层预训练(Layerwise Pre-Training)去学习特征;每次单独训练一层,并将训练结果作为更高一层的输入;然后到最上层改用监督学习从上到下进行微调(Fine-Tune)去学习模型。
深度学习通过学习一种深层非线性网络结构,只需简单的网络结构即可实现复杂函数的逼近,并展现了强大的从大量无标注样本集中学习数据集本质特征的能力。深度学习能够获得可更好地表示数据的特征,同时由于模型的层次深(通常有5层、6层,甚至10多层的隐层节点,“深”的好处是可以控制隐层节点的数目为输入节点数目的多项式倍而非多达指数倍)、表达能力强,因此有能力表示大规模数据。对于图像、语音这种特征不明显(需要手工设计且很多没有直观的物理含义)的问题,深度模型能够在大规模训练数据上取得更好的效果。尤其是在语音识别方面,深度学习使得错误率下降了大约30%,取得了显著的进步。相比于传统的神经网络,深度神经网络作出了重大的改进,在训练上的难度(如梯度弥散问题)可以通过“逐层预训练”来有效降低。注意,深度学习不是万金油,像很多其他方法一样,它需要结合特定领域的先验知识,需要和其他模型结合才能得到最好的结果。当然,还少不了需要针对自己的项目去仔细地调参数,这也往往令人诟病。此外,类似于神经网络,深度学习的另一局限性是可解释性不强,像个“黑箱子”一样不知为什么能取得好的效果,以及不知如何有针对性地去具体改进,而这有可能成为产品升级过程中的阻碍。
深度学习通过很多数学和工程技巧增加(堆栈叠加:Stack)隐层的层数,如果隐层足够多(也就是深),选择适当的连接函数和架构,就能获得很强的表达能力。深度学习的一个主要优势在于可以利用海量训练数据(即大数据),但是常用的模型训练算法反向传播(Back Propagation)仍然对计算量有很高的要求。而近年来,得益于计算机速度的提升、基于MapReduce的大规模集群技术的兴起、GPU的应用以及众多优化算法的出现,耗时数月的训练过程可缩短为数天甚至数小时,深度学习才在实践中有了用武之地。
值得一提的是,深度学习的诞生并非一帆风顺。虽然Yahn Lecun在1993年提出的卷积神经网络(Convolutional Neural Network:CNN)是第一个真正成功训练多层网络结构的学习算法,但应用效果一直欠佳。直到2006年,Geoffrey Hinton基于深度置信网(Deep Belief Net:DBN)——其由一系列受限波尔兹曼机(Restricted Boltzmann Machine:RBM)组成,提出非监督贪心逐层训练(Layerwise Pre-Training)算法,应用效果才取得突破性进展,其与之后Ruslan Salakhutdinov提出的深度波尔兹曼机(Deep Boltzmann Machine:DBM)重新点燃了人工智能领域对于神经网络(Neural Network)和波尔兹曼机(Boltzmann Machine)的热情,才由此掀起了深度学习的浪潮。从目前的最新研究进展来看,只要数据足够大、隐层足够深,即便不加“Pre-Training”预处理,深度学习也可以取得很好的结果,反映了大数据和深度学习相辅相成的内在联系。此外,虽说非监督(如DBM方法)是深度学习的一个优势,深度学习当然也可用于带监督的情况(也即给予了用户手动标注的机会),实际上带监督的CNN方法目前就应用得越来越多,乃至正在超越DBM。
提示:与前向神经网络不同,RBM(受限波尔兹曼机)中的可见层和隐含层之间的连接是无方向性且全连接的。对比差异无监督训练是RBM的一个重要算法,包含了正向过程、反向过程和权值更新三个步骤,主要目标是使生成的数据与原数据尽可能相似,并通过对比两者的差异来调整权值更新:
其中,是学习速率。这样的网络可具备感知对输入数据表达程度的能力,而且尝试通过这个感知能力重建数据。如果重建出来的数据与原数据差异很大,那么进行调整并再次重建。
2012年6月,《纽约时报》披露了Google Brain项目,吸引了公众的广泛关注。这个项目是由著名的斯坦福大学的机器学习教授Andrew Ng和在大规模计算机系统方面的世界顶尖专家Jeff Dean共同主导,用16,000个CPU Core的并行计算平台去训练含有10亿个节点的深度神经网络(DNN,Deep Neural Networks),使其能够自我训练,对2万个不同物体的1,400万张图片进行辨识。在开始分析数据前,并不需要向系统手工输入任何诸如“脸、肢体、猫的长相是什么样子”这类特征。Jeff Dean说:“我们在训练的时候从来不会告诉机器:‘这是一只猫’(即无标注样本)。系统其实是自己发明或领悟了‘猫’的概念。”
2014年3月,同样也是基于深度学习方法,Facebook的 DeepFace 项目使得人脸识别技术的识别率已经达到了 97.25%,只比人类识别 97.5% 的正确率略低那么一点点,准确率几乎可媲美人类。该项目利用了 9 层的神经网络来获得脸部表征,神经网络处理的参数高达 1.2亿。
最后我们再回到大数据这个时代背景上来。当坐拥海量的大数据,我们无论是做推荐系统还是3D模型检索(见第6章的6.4节“众里寻她千百度──海量3D模型的检索”),以前用简单的线性数学模型,一般也能获得还不错的结果。因此我们沾沾自喜起来,认为还是大数据更重要,而智能算法用简单直接的就OK了,不需要也没必要弄得很复杂。而当深度学习出现后,它的一系列辉煌战绩让我们意识到:也许是时候该“鸟枪换炮”了。简而言之,在大数据情况下,也许只有比较复杂的模型,或者说表达能力强的模型,才能充分发掘海量数据中蕴藏的有价值信息。更重要的是,深度学习可以自动学习特征,而不必像以前那样还要请专家手工构造特征,极大地推进了智能自动化。
深度学习(即所谓“深度”)应大数据(即所谓“广度”)而生,给大数据提供了一个深度思考的大脑,而3D打印(即所谓“力度”)给了智能数字化一个强健的躯体,三者共同引发了“大数据+深度模型+3D打印”浪潮的来临。