精彩词条

什么是深度学习?(下篇)

作者:Kaggle实战机器学习 / 关注公众号:AIKaggle  发布:2019-11-01

微信公众号:AIKaggle欢迎建议和拍砖,若需要资源,请公众号留言;如果你觉得AIKaggle对你有帮助,欢迎赞赏什么是深度学习?(下篇)
本文作者是中科大的刘利刚老师,刘老师用通俗的语言,从函数逼近论的角度阐释深度神经网络(本文指的是狭义概念下的深度学习,即基于DNN的深度学习)的本质,带领非人工智能领域的同学深入理解深度神经网络,了解深度神经网络的能力和局限,并介绍一下各种基于深度神经网络的学习方法的实际技巧。如果对机器学习算法和实战案例感兴趣,也可关注公众号:AIKaggle,获取算法动态。
目录(编号接上篇)8. 深入理解深度神经网络9. 实战深度神经网络学习10. 深度神经网络的能力与局限11. 三维几何数据12. 智能图形处理:三维数据的深度学习后记相关文章往期精彩文章获取学习资源
8. 深入理解深度神经网络
8.1.激活函数
由上篇7.4节中的万能逼近定理可知,激活函数的选择可以很多种。常用的激活函数如图16所示。
图16.常用的激活函数。
在早期,Sigmoid函数和tanh函数是人们经常使用的激活函数。近年来,随着神经网络的隐层不断增加后,人们偏向于使用ReLU函数作为激活函数,这是因为ReLU函数的在x轴正向的导数是1,不容易产生梯度消失问题(见8.3节)。这里值得一提的是,如果使用ReLU函数作为激活函数,则最后生成的拟合函数为分片线性函数。
关于激活函数的理解和讨论,机器学习领域及互联网上有很多文章进行过解释,都是解释为“激活函数的主要作用是提供网络的非线性建模能力,提供了分层的非线性映射学习能力”等等。我们从逼近论的角度,将非线性激活函数理解为拟合函数的“基函数”生成器(如果激活函数为线性的,则无法生成表达非线性函数的基!),训练神经网络就是在学习这些基函数,这是一种全新的观点,也是非常容易理解的。
8.2.反向传播算法(BP优化算法)
从数学上看,深度神经网络就是一个多层复合函数。在机器学习中,这个复合函数的好坏依赖于对目标函数最大化或者最小化的过程,我们常常把最小化的目标函数称为损失函数(Loss function),它主要用于衡量机器学习模型(此处为深度神经网络)的预测能力。常见的损失函数有均方误差(L2误差)、平均绝对误差(L1误差)、分位数损失、交叉熵、对比损失等。损失函数的选取依赖于参数的数量、异常值、机器学习算法、梯度下降的效率、导数求取的难易和预测的置信度等若干方面。这里就不展开讨论。
给定了一批训练数据,计算神经网络的问题就是通过极小化损失函数来找到网络中的所有权值参数(包括偏置参数)。这个过程本质上就是利用这个神经网络函数来拟合这些数据,这个过程也称为“训练”或“学习”。
误差反向传播算法(Error Back Propagation,BP)是神经网络训练时采用的一种通用方法。本质是随机梯度下降法。最早见于如下论文:
[8-1] David E. Rumelhart, Geoffrey E. Hinton, and Ronald J. Williams. Learning internal representations by back-propagating errors. Nature, 323(99): 533-536, 1986.
由于整个网络是一个复合函数,因此,训练的过程就是不断地应用“复合函数求导”(链式法则)及“梯度下降法”。反向传播算法从神经网络的输出层开始,利用递推公式根据后一层的误差计算本层的误差,通过误差计算本层参数的梯度值,然后将差项传播到前一层。然后根据这些误差来更新这些系数参数。
值得一提的是,梯度下降法并不是唯一的优化方法。也有不少人使用其他优化方法,比如ADMM方法,来作为优化器优化深度神经网络的求解。
8.3.什么是好的激活函数?
由万能逼近定理可知,只要网络规模设计得当,使用非线性函数作为激活函数(比如8.1节中常用的激活函数)的逼近能力都能够得到保证。
然后,由上一节的反向传播算法可知,算法过程中计算误差项时每一层都要乘以本层激活函数的导数,因此,会发生很多次的导数连乘。如果激活函数的导数的绝对值小于1,多次连乘之后误差项很快会衰减到接近于0;而参数的梯度值由误差项计算得到,从而导致前面层的权重梯度接近于0,参数不能得到有效更新,这称为“梯度消失”问题。与之相反,如果激活函数导数的绝对值大于1,多次连乘后权重值会趋向于非常大的数,这称为“梯度爆炸”。长期以来,这两个问题一直困扰神经网络层次无法变得很深。
最近几年,ReLU函数被经常使用作为深度神经网络的激活函数。有两个主要理由:
该函数的导数为sgn(忽略在0处不可导的情形),计算简单,在正半轴导数为1,有效的缓解了梯度消失问题;
虽然它是一个分段线性函数,但它具有非线性逼近能力;使用ReLU激活函数的深度网络的本质是用分段(分片)线性函数(超平面)去逼近目标。
后来,人们在ReLU的基础上又改进得到各种其他形式的激活函数,包括ELU、PReLU等。
8.4.多个隐层的几何意义
现在我们已经理解了深度神经网络的本质,就是一个复杂的多层复合函数。训练的过程就是在求激活函数变换得到的“基函数”,因此,训练神经网络的本质就是在“学习基函数”。这跟稀疏学习中的“字典学习”非常类似。殊途同归!
我们来看一下深度神经网络所表达的拟合函数与传统所用的拟合函数(2.1节)的类比与区别:
传统的拟合函数是在某一函数类(由某些具有良好性质的基函数所张成的函数空间)中进行选择。基函数是预先给定的,个数也是预先设定的(或者稀疏选择的)。系统的求解变量是基函数组合系数;
神经网络所表达的拟合函数是由某一激活函数对变量的平移和伸缩变换而来,个数是预先设定的(神经元个数)。系统的求解变量是基函数的变换,因此可以看成是在学习基函数;
传统的拟合函数也是一种神经网络(见第6节),因此也可以拓展成深度网络(复合函数),但问题是次数或阶数经过复合后会变得非常高,更易造成过拟合;
多层神经网络中的不同层所用的激活函数也可以使用传统的基函数。因此,还可推广为更一般的深度神经网络。
那么为何要用多个隐层呢?事实上,通过6.3节的内容就不难理解了。每个隐层就是将前一层的数据作为输入(当然也包括输入层数据)在当前这个维数的空间中的一种映射,本质上就是在做“参数化”!
如果当前层的维数小于上一层的维数,就相当于将上一层的数据参数化到低维空间中。当然也可以参数化到高维空间,以提高自由度。
在6.3节中,对于三维曲面,我们已知它是二维流形,因此,我们知道将其映射到二维作为参数域就很自然了。因此有了图11这样的网络结构。
但对于一般的数据(比如人脸数据),是在背景空间(ambient space)上观测的,可能数据的维数非常高(比如1000x1000的图像按照像素个数的维数达到100万维)。但这些数据并不会充满整个高维空间,会具有低维的结构(称为本征维数),即数据落在一个低维子空间(或低维流形)上,并呈现一定的概率分布。从数据的角度来看,一个嵌入到高维空间的低维流形本质上就是一个参数曲面,参数域是那个低维空间。因此,将高维数据参数化到低维的空间是可行的。
这里也出现了两个纠结的问题。
第一,对于一个实际数据拟合问题,应该设置多少个隐层?
第二,每个隐层应该设置多少个节点(该隐层的维数)?
在机器学习领域,隐层的层数称为网络的深度,隐层的维数成为网络的宽度。对于基于深度神经网络的学习,到底是越深越好,还是越宽越好?
从数学上来看,网络越深,表示一个复杂的函数可以经过多次参数化的变换,映射到最终的目标。这个是合理的。举个例子,比如我们想将一个三维网格曲面参数化到一个平面,如果这个输入的曲面比较复杂,开口(参数化边界)很小,则要将曲面一次性展开(的映射)比较困难。此时,可以多进行几次从的映射,将曲面先在慢慢张开,每次张开的映射比较容易表达和计算。最后再映射到上就相对容易了,当然还可进行多次从的映射,生成更好的参数化。注意其中任何一个映射都可以是用一个神经网络来表达。
图17.带有特征的曲面的拟合。(a)原始输入三维数据;(b)为(a)的简单参数化(Floater参数化);(c)为优化过后的参数化;(d)最后的拟合曲面。
如图17所示,(a)为一个带有尖锐特征的输入点云,如果将其简单参数化为(b),在其上构建的拟合曲面很难表现曲面的尖锐特征。这时我们对(b)中的参数化再做一个映射(优化)为(c),这时在其上做的拟合曲面则能很好地表现出尖锐特征。
这里顺便提一下,在计算机图形学中,最近一些年有不少工作在做曲面参数化的优化工作(比如满足无翻转、低扭曲等约束)。从机器学习的观点来看,就是在做更多的参数映射的优化计算。当然,这些工作并不能简单地看成一个深度神经网络来做。这是因为,对参数化的问题,我们是知道曲面(所有数据)的整体结构的,而不只是一些离散的采样点。因此,我们在做参数化优化的时候,我们可以充分利用曲面的整体结构来得到一些几何度量来满足各种约束,而这些是神经网络优化所做不到的!
总之,对于第一个问题,隐层越多,表示网络越深,确实会使得最后的映射带来更好的表现。其数学本质是将输入数据不断在不同的空间中进行参数化映射。最后得到的映射(可能非常复杂的映射)表达为若干个相对简单映射的复合。对于多隐层的解释和讨论,机器学习领域及网上有很多文章进行过解释,大部分都解释为“提取数据的特征”等等。我们从逼近论的角度(结合三维曲面拟合的例子),将多隐层优化看成数据在不同维数空间的参数化,是非常容易直观理解的。
对第二个问题,每个隐层的具体的节点数或维数,该如何设置呢?对于一般的数据这个就很难直观确定了,一般要根据经验。当然,也有一些办法来进行指导,我们将在下一节中理解。
8.5.流形学习(数据降维)简介
对于一般的数据,我们并不知道其本征维数(即参数域空间),那么映射(参数化)到多少维空间是合适的呢?
事实上,这个也是个非常纠结的问题!这个问题就是寻求高维数据的本征维数,在机器学习领域称为流形学习(Manifold learning),或降维问题(Dimension reduction)。如图18所示,数据是在三维空间给出的(B),每个点是3个坐标,看起来是三维数据;但其本质上位于三维空间的一张曲面上,即二维流形曲面上(A),其本征维数是2。因此,可以将其一一映射到平面上(C)。
图18. 流形学习。
提到流形学习,不能不提到如下的两篇开山之作(同时发在Science 2000的文章):
[8-1] Roweis, Sam T and Saul, Lawrence K. Nonlinear dimensionality reduction by locally linear embedding. Science, 290(5500). 2000: 2323-2326.
[8-2] Tenenbaum, Joshua B and De Silva, Vin and Langford, John C. A global geometric framework for nonlinear dimensionality reduction. Science, 290(5500). 2000: 2319-2323.
流形学习在本世纪初的前一个十年是一个研究热点(由上面两篇Science论文带起来的)。至今已发展出了许多方法,从简单的线性方法,比如PCA;到后面的非线性方法,比如局部线性嵌入(LLE),等距映射法(Isomap),Laplace特征映射,局部保投影法(LPP)等。这里不详细介绍。
需要指出的是,正如第6节所讲的三维曲面参数化的计算,我们计算数据的本征维数的时候,是需要利用所有数据的信息及其几何或拓扑结构一起来分析的,而不能像神经网络训练那样,仅仅将数据灌到神经网络中去更新权系数。
8.6.端对端学习(End-to-end learning)
在传统的机器学习中,很多任务的输入数据的维数都非常大,不易直接处理。往往需要先降到合适的维数,然后再选择合适的预测模型来做拟合。
传统机器学习的流程一般由两个主要的模块组成。第一个模块称为特征工程,将原始输入数据(高维向量)变换为一个低维向量,即,用这个低维向量来作为表达输入数据的特征(或描述子,feature or descriptor)。不同的人有不同的方法来计算这个低维特征,称为特征抽取(Feature extraction),如图19显示了不同的图像特征抽取方法。各种计算的特征都有一定的实用范围,因此,有人就提出如何选择或组合各种特征得到更好的特征,这是特征工程的另一个子问题,称为特征选择(Feature selection)。
图19.图像的各种特征抽取方法。
由于这种特征是通过人为设计的算法来得到的,因此这种特征称为人工特征(Hand-crafted features)。人工特征的抽取需要人们对输入数据的认知或者领域知识(Domain knowledge),因此在很多情况下会局限于人的经验和认知。
第二个模块称为预测模型,即选用什么样的预测方法来拟合给定的数据,我们前面所讲的拟合就是指这个过程。预测模型的目标就是希望学习到的模型在预测未知目标时越精确越好。一般要考虑模型的复杂度及精确度等因素。在机器学习领域有非常多的方法,这里不一一介绍。
上述两个模块中的每个模块都是一个独立的任务,其结果的好坏会影响到下一步骤,从而影响整个训练的结果,这是非端到端的,如图20(上)所示。
特征提取的好坏异常关键,甚至比预测模型还重要。举个例子,对一系列人的数据分类,分类结果是性别(男或女),如果你提取的特征是头发的颜色,无论分类算法如何,分类效果都不会好;如果你提取的特征是头发的长短,这个特征就会好很多,但是还是会有错误;如果你提取了一个超强特征,比如染色体的数据,那你的分类基本就不会错了。
这就意味着,特征需要足够的经验去设计,这在数据量越来越大的情况下也越来越困难。于是就出现了端到端的网络,特征可以自己去学习。所以特征提取这一步也就融入到算法当中,不需要人来干预了。即不需要将任务分为多个步骤分步去解决,而是从输入端的数据直接得到输出端的结果。前面介绍的深度神经网络就是一个端到端的学习方法。如图20(下)所示。
端到端学习的好处在于,使学习模型从原始输入到最终输出,直接让数据“说话”,不需人工设计的模块;给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
图20.非端到端的学习(上)与端到端的学习(下)。
但端到端学习也有不足。第一,端到端的深度神经网络需要大量的样本数据才能工作得很好,因此很多公司都在花费大量的人力物力去生成标注数据(一般通过人工标注,催生了很多专门做数据标注的外包公司);第二,人工设计的特征并不是都不能用的,有些人工特征还是能代表着人类智能的,是可以用来作为合理的特征的,而端到端的学习无法用这些特征。当然,通过适当的改造和结合,也可以集成人工特征到深度神经网络中,这里就不展开讨论。
8.7.深度学习成功的原因
基于深度神经网络的端到端学习在最近几年取得很大的成功,被大量应用与计算机视觉、语音识别、自然语音处理、医学图像处理等领域中。从数学本质上来看,神经网络就是一个映射函数而已,在上世纪50年代就有了感知机,但为什么以前没有火呢?主要有以下的两方面的原因。
第一,之前没有那么大规模的数据量;
第二,以前的工程技术(先进优化算法及支持大规模并行计算的GPU硬件)无法求解的很深的神经网络。
因此,在上个世纪90年代,各种浅层模型大行其道,比如只有一层隐层的支撑向量机(Support Vector Machine,SVM)以及没有隐层的逻辑回归方法(Logistic Regression,LR)等。
直到最近几年,随着各种传感器的大量使用以及移动互联网的广泛应用,能够获取和产生海量(PB级甚至ZB级)的数据(比如文本、图像、语音等)。特别是ImageNet图像数据库的诞生以及基于该数据库的各种竞赛,直接将计算机视觉领域中的深度学习的研究与应用推向了“落地”,催生了大量的计算机视觉的人工智能公司。
8.8.过拟合
自从深度学习火了后,各种深度神经网络(或CNN网络)随之产生了,比如2012年的AlexNet有8层;2014年的VGG-19有19层;2014年的GoogleNet有22层;2015年的ResNet有152层!甚至还出现了上千层的深度神经网络!
从数学上可知,拟合函数所带的参数的个数与样本数据的个数之间的差代表着这个拟合函数的“自由度”。网络越来越“深”后,拟合模型中的可调整参数的数量就非常大,通常能达到百万计甚至几十亿级。因此,层数很大的深度网络(模型过于复杂)能够表达一个自由度非常大的函数空间,甚至远高于目标函数空间(过完备空间),即自由度远大于0。这样就很容易导致过拟合(Overfitting),如前面所讨论过的图2(右)所示。
过拟合可以使得拟合模型能够插值所有样本数据(拟合误差为0!)。但拟合误差为0不代表模型就是好的,因为模型只在训练集上表现好;由于模型拟合了训练样本数据中的噪声,使得它在测试集上表现可能不好,泛化性能差。为此,人们采取了不同的方法来缓解过拟合(无法完全避免),比如正则化、数据增广、Dropout、网络剪枝等。
在使用深度神经网络来做深度学习的应用中,很多工作都是直接使用现有的深度神经网络,或者改造现有的深度神经网络。如果网络设计不够好,大部分结果都可能有过拟合的现象。
在实际应用中,我们可以挑选样本数据中的一部分作为训练数据集,其他的作为测试数据集。如果网络在训练数据集上表现好(即损失函数很小),而在测试数据集上表现不够好,那么就可能发生了过拟合,此时就适当减少网络的层数或者节点数。这个过程是需要有耐心,可能需要花费很长时间才能调到一个合适的网络。需要靠感觉、经验和运气。因此,有人戏称调试深度神经网络的过程为“炼丹”。
8.9.类比神经科学的解释
我们已从函数逼近论的角度来理解了人工神经网络本质是传统逼近函数的一个推广,由人工选取基函数到自动学习基函数,由人工提取特征到自动计算特征(参数化),能够较容易理解人工神经网络学习是如何工作的。
在机器学习领域,人们从生物神经网络的角度来解释和理解人工神经网络的工作原理,将人工神经网络看成为一个可以模拟人脑工作行为的函数。
在生物神经科学(Neuroscience,包括脑科学、认知神经科学等)的研究中,人们发现,人体的神经元通过树突接受信号。这些信息或信号随后被传递到脑细胞或细胞体。在细胞体内部,所有的信息将被加工生成一个输出。当该输出结果达到某一阈值时,神经元就会兴奋,并通过轴突传递信息,然后通过突触传递到其他相连的神经元。神经元间传输的信号量取决于连接的强度。如图21(左)。
我们来类比人工神经网络:如果把树突想象成人工智能网络中基于突触感知器的被赋予了权重的输入。然后,该输入在人工智能网络的“细胞体”(神经元)中相加。如果得出的输出值大于阈值单元,那么神经元就会“兴奋”(激活),并将输出传递到其它神经元,如图21(右)。
图21.左:人脑神经元结构;右:从生物神经网络类比得出的人工神经元结构。
在计算机视觉领域,人们也从视觉神经科学(Visual Neuroscience)中类比来解释了在计算机视觉领域用得最多的卷积神经网络(CNN)的工作机理。
图22.视觉皮层结构。(图片来自互联网)
由视觉机理的研究发现,动物大脑的视觉皮层具有分层结构。眼睛将看到的景象成像在视网膜上,视网膜把光学信号转换成电信号,传递到大脑的视觉皮层(Visual cortex),视觉皮层是大脑中负责处理视觉信号的部分。1959年,有科学家进行了一次实验,他们在猫的大脑初级视觉皮层内插入电极,在猫的眼前展示各种形状、空间位置、角度的光带,然后测量猫大脑神经元放出的电信号。实验发现,当光带处于某一位置和角度时,电信号最为强烈;不同的神经元对各种空间位置和方向偏好不同。这一成果后来让他们获得了诺贝尔奖。
目前已经证明,视觉皮层具有层次结构。从视网膜传来的信号首先到达初级视觉皮层(primary visual cortex),即V1皮层。V1皮层简单神经元对一些细节、特定方向的图像信号敏感。V1皮层处理之后,将信号传导到V2皮层。V2皮层将边缘和轮廓信息表示成简单形状,然后由V4皮层中的神经元进行处理,它颜色信息敏感。复杂物体最终在IT皮层(inferior temporal cortex)被表示出来。
卷积神经网络可以看成是上面这种机制的简单模仿。它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示(由底层到高层的特征表达),如图23所示。
图23.基于卷积神经网络的深度学习所得到的人脸图像的分层特征。
(图片来自于Stanford大学的论文)
本文的观点是,利用神经科学的神经元或神经网络来解释深度学习中的人工神经网络,这仅仅是类比而已。从我们的分析可知,深度学习中的人工神经网络并没有真正的认知和学习!如果我们人类对自己的认知系统无法完全了解的话,我们是很难发展出真正的人工智能技术。
8.10.深度人工神经网络的局限:保持结构的映射
我们从数学上理解了深度人工神经网络本质上是表达不同维数空间之间的一个映射(函数)。给了一些样本点后,通过调整网络的参数权系数,不断极小化损失函数,从而达到最好的拟合结果得到了拟合函数。
这个拟合过程只极小化了逐点的误差或者累积逐点误差,而无法考虑点与周围点之间的其他信息(比如邻域几何结构、局部几何度量、流形的整体拓扑结构等)。如果要考虑点之间的几何与拓扑的结构信息,则深度人工神经网络就无能为力(当然一定要改造也是可以的),这时就需要其他的数学方法了。有点像数学分析中,逐点收敛和一致收敛,逐点连续和一致连续的区别。
例如,前面介绍的流形学习中,LLE方法保持每个样本点与它相邻的多个点的线性组合(体现了局部线性)来重构低维空间的点的分布,相当于用分段的线性面片近似代替复杂的几何形状,样本投影到低维空间保持这种线性重构关系,如图24(上)所示。Isomap方法希望保持数据在低维空间的映射之后能够保持流形上的测地线距离,即全局的几何结构,如图24(下)所示。
图24.流形学习。上:保持局部的几何信息(LLE);下:保持全局的距离信息(Isomap)。
再如,在计算机图形学和几何处理领域,我们做的很多映射(比如三维网格曲面的参数化),也需要保持曲面上的某些几何性质(保角度、保面积、保形等),也发展出许多不同的求解映射的方法和技巧。
在计算机图形学中,有时我们也需要将三维空间的二维流形曲面映射到另一个规则二维流形曲面,比如球面上,这时称为球面参数化。
另外,在计算机图形学及计算机辅助几何设计领域,我们还有独特的曲线和函数的构造方法,如通过Bernstein基函数构造的Bezier曲线曲面,通过B样条基构造的B样条曲线曲面(分段Bezier曲线曲面),以及更一般的非均有有理B样条曲线曲面,通过控制顶点就能很直观控制曲线曲面的形状,而且发展出非常完备的理论及设计方法,如图25所示。这些独特的曲线曲面的构造方法也是我们领域独特的,已成为现代工业中产品曲面造型的工业标准(标准数学表达)。
图25. NURBS曲线曲面:产品曲面造型的工业标准。
9. 实战深度神经网络学习
由于本文是面向非机器学习专业介绍深度学习的,因此,在这里只是大致介绍一下各种基于深度神经网络的学习方法的实际技巧,不详细展开讨论,有兴趣的读者可查阅更专业的书籍或论文。
9.1.看懂各种深度神经网络结构
从数学上来看,深度神经网络仅仅是一种函数的表达形式,是复杂的多层复合函数。由于它有大量的可调参数,而且近年来随着大数据、优化算法和并行计算GPU硬件的发展,使得用大规模的神经网络来逼近和拟合大数据成为可能。至今,不同领域的研究工作者及产业界工作者已将深度神经网络应用到各行各业的各个问题,而且提出了各种形式、各种结构的深度网络结构,使人眼花缭乱,似乎难以捉摸。但事实并非如此!
万变不离其宗,神经网络就是一个多层复合函数。网络结构发生改变,就是说函数的复合形式发生了变化。因此,只要掌握了这条原则,各种复杂的神经网络你就能轻松看懂。亦可参考互联网上的“一文看懂25个神经网络模型”一文。
图26.多层神经网络所表达的函数:可以看成前面的若干层网络所表达的函数(蓝色)与后面若干层网络所表达的函数(红色)的复合。
简单地说,看懂各种神经网络结构只需看懂如下3个要素(具体解释就不详细展开了):
(1)神经元与激活函数:神经元接收什么数据,通过什么样的激活函数输出数据。人们发明了许多不同种类的神经元,比如,池化神经元和插值神经元(Pooling and interpolating cells)、概率神经元(Mean and standard deviation cells)、循环神经元(Recurrent cells)、长短期记忆神经元(Long short term memory cells)、门控循环神经元(Gated recurrent cells)等。不管什么样形式和名称的神经元,我们只要搞明白神经元是通过什么样的函数来将接收数据变为输出数据,不同之处就在接收数据和激活函数不同而已,如图21(右)所示。
(2)神经网络结构:不同的神经网络就是不同的多层复合形式的函数。比如,卷积神经网络(Convolutional Neural Network,CNN)就是一种限于局部感受野来改造的神经网络(线性组合特殊化为局部区域的卷积操作,且增加了池化(Pooling)层),特别适合于文本、图像及视频类数据的深度学习。再比如,残差神经网络(Residual Neural Network,ResNet)有一种特殊的连接,可以把数据从某一隐层传至后面几层(通常是2到5层)。该网络的目的不是要找输入数据与输出数据之间的映射,而是致力于构建输入数据与输出数据+输入数据之间的映射函数。本质上,ResNet是在学习映射函数的一阶差分(一阶导数),能够有效抑制优化过程中的梯度消失。类似地,DenseNet (CVPR 2017)实质上是在学习映射函数的高阶差分,因此也能有效抑制梯度消失现象。同样地,其他的各种神经网络结构也很容易看懂的,比如AutoEncoder,GAN,Variational GAN等。
(3)神经网络的组合:一个多层的神经网络就是一个多次复合的函数。中间的任何一层的输出都可以看成为原始输入数据的一个特征。如图26所示,一个多层神经网络所表达的函数:可以看成前面的若干层网络所表达的函数(蓝色)与后面若干层网络所表达的函数(红色)的复合。因此,在任何的一个中间层,可以修改输出的特征向量、可以插入一个其他的神经网络(将该特征向量作为输入,或与其他网络的特征向量进行叠加、运算等)等等。如果将神经网络看成为积木,整个组合过程就像在“搭积木”。这样就可以发明和产生无穷无尽的网络结构(比如,并行网络、累加网络等等很多网络名称)。在实际应用中,需要根据问题本身的特点来合理设计网络的结构。具体哪种网络结构合理,有无最好,都是组要根据问题本身思考和试验的,主要是要看损失函数的误差以及在应用中的效果来决定的。这个我们在后面还会进一步讨论。
9.2.如何调试深度神经网络?
一个深度神经网络所表达的函数具有成千上万个参数,为了让损失函数在训练数据上达到最小,就需要设计合理的网络来拟合这些数据。在优化的过程中,要保证迭代收敛也是必要的。
一般地,调试较大的深度神经网络所花费的时间和劳力比调试传统程序要多,而且要有耐心!因为如果最后的结果不好(损失函数很大或者不收敛),如果确认你的代码无bug,那么原因只有一个,就是你所调的网络还不够好(orz)!
在调试神经网络的过程中,有太多不确定的因素需要你去仔细思考并小心翼翼地去调试,而这些大部分都需要靠直觉、经验和少许运气来调试决定的,比如:
(1)需要选取多大的神经网络(也就是选用什么样的拟合函数)?具体地,网络要多少层?每层多少节点?这个只能凭直觉或经验了。简单点的话,就套用现成的网络结构,或者再经过一些修改即可。从函数的自由度来看,网络的参数个数与数据大小不应相差太大。
(2)初始化。对于高度非线性的函数的最优化,一个非常重要的因素就是如何挑选一个好的初始化?
(3)在优化过程中,如何判断优化过程是否收敛?
(4)是否发生了过拟合?
(5)… ….
以下有些简单的小经验分享下:
(1)一定要可视化你的结果!这样有助于你在训练过程中发现问题。你应该明确的看到这些数据:损失函数的变化曲线、权重直方图、变量的梯度等。不能只看数值,一定要可视化!
(2)网络不是越深越好!不要一上来就用VGG19, ResNet50等标准的大网络,可能你的问题只要几层就能解决问题。
(3)先建立一个较小的网络来解决核心问题,然后一步一步扩展到全局问题。
(4)先用小样本做训练,有了感觉后,再调试大的训练数据。
(5)如果在几百次迭代后,迭代还没开始收敛,那么就要终止迭代,不要傻等了!要考虑修改你的网络了。
(6)注意避免梯度消失或梯度爆炸。
(7)另外,在互联网上还能找到许多网友们分(tu3)享(cao2)的实用调网络的经验,读者可自行去查找学习。
值得提醒的是,上述分享的各个经验没有绝对的对与错,须将它们当作经验去学习和使用即可。需要根据你自己的实际问题来设计和调试你的深度神经网络。
即便对于行家来说,调试较大的神经网络也是一项艰巨的任务。数百万个参数在一起决定的函数,一个微小的变化就能毁掉所有辛勤工作的成果。然而不进行调试以及可视化,一切就只能靠运气,最后可能浪费掉大把的青春岁月。
正因为这些原因,调试深度神经网络被认为是个不可解释的“黑箱子”,优化网络的过程成为“调参”,也被戏称为“炼丹”,是个需要丰富经验的“技术活”。
9.3.深度学习开发工具
要学习和使用基于深度神经网络的深度学习,门槛并不高。你大不必从头开始自己搭建神经网络系统和实现优化算法。近几年来,很多大公司和科研机构都在研究自己的深度学习框架,且推出了不少深度学习开发平台(如图27),深度学习的开发框架和工具也越来越多,使得应用深度学习的入门门槛越来越低。使用好的开发工具,可让使用者减少底层开发的工作量,而将重点关注于深度学习应用逻辑的开发及模型的优化上,提高开发效率。
图27.基于深度神经网络的深度学习的开发工具。
这里简单介绍几款大家常用的深度学习开发工具包,基本都是开源的。
(1)TensorFlow,由Google公司发布。支持多CPU及多GPU并行化运行,并支持CNN,RNN等主要的深度学习模型。Github社区人气最火的深度学习开源项目。
(2)Caffe,由加拿大Berkeley BVLC实验室发布。使用最广泛的深度学习工具之一,提供C++,Python,Matlab等语言接口。
(3)Torch,基于Lua脚本语言的工具,支持iOS、Android等嵌入式平台。
(4)Theano,基于Python语言开发的深度学习开源仿真平台。
(5)Keras,基于Python语言开发的,底层库使用Theano或TensorFlow。其模块化特性非常适合刚入门的初学者快速实验并测试深度学习网络的性能,同时也开放提供对底层的修改。
关于这些开发工具包的使用,互联网上(包括Github)有非常丰富的教材和使用文档,读者有兴趣可以自行查阅学习。
9.4.深度神经网络专用芯片
深度神经网络专用芯片(使用GPU+DNN的专用芯片)是一种特殊用途的处理器,它能够使得深度神经网络的训练更快,具有更高的性能和更低的功耗。DNN专用芯片在性能和能源消耗方面的好处是显著的,DNN专用芯片的广泛使用还需要神经网络体系结构的标准化和对不同DNN框架的支持。国外的一些公司,包括Google、Nvidia、Intel等公司,已经开发和部署了DNN专用芯片,为基于DNN的应用程序提供了极高的性能。国内也有不少公司(如寒武纪、阿里巴巴等)在从事DNN专用芯片的研发,也已经达到国际前沿水平。
10. 深度神经网络的能力与局限
深度学习真有智能吗?遗憾的是,没有!
10.1.基于深度神经网络的深度学习的本质再回顾
本文从函数逼近论的角度已详细剖析了基于深度神经网络的深度学习,归纳为以下4个基本点:
(1)深度神经网络(DNN)是一个复合函数。对于任何单变量函数,只要神经元足够多,神经网络函数就能任意逼近它;对于任何多变量函数,一定可以被多个单变量函数的复合来逼近,因此就能被深度神经网络函数进行逼近;上述两点为神经网络函数的表达能力提供了理论基础;
(2)基于DNN的深度学习是个数据拟合(最小二乘回归)的过程;
(3)拟合过程是在学习基函数;
(4)多层映射是在做多次变换(或参数化)。
因此,基于DNN的深度学习是可以很清楚被理解的!具体的应用过程中,选多少层、选多少基的问题在逼近论中就是没有很好的解决方案,这是逼近论中就存在的问题,并不是深度网络带来的问题!
从数学本质来看,深度学习是在做最小二乘回归;其他的机器学习方法也是基于最小二乘回归的其他回归方法或者统计方法。
从应用性来看,还有以下一些对基于深度神经网络的深度学习的本质的说明:
(1)基于DNN的深度学习实际上在做拟合和统计,网络结构设计需要靠直觉、技巧和经验以及运气;
(2)激活函数和损失函数的选择也很重要;
(3)DNN的层数、各层的神经元个数决定了该函数的参数;一般的DNN都具有非常多的参数;
(4)DNN适合拟合大规模数据;对小规模数据,不建议用DNN;
(5)任何一个中间隐层的输出向量都可以作为输入数据的特征(在该维数上的),也是输入数据的参数化;
(6)DNN可以任意拼装、组合成各种复杂的网络结构;
(7)大部分论文中的DNN结果都可能是过拟合;因此,很容易出现误判的情况(输入的轻微变化,比如给图片加少量噪声,结果就相差很大),容易犯大错;
(8)DNN是以成败论英雄的,需要在实际应用中好才是真的好,而这个永远不知道。
需要再提一下的是,本文所讨论的基于DNN的深度学习只是深度学习的一种方法而已。还有其他的深度学习,比如南京大学周志华老师团队所提的深度森林等方法。
10.2.深度神经网络具有“智能”吗?
从上面的剖析来看,基于DNN的深度学习实质上就是对样本数据集的拟合而已!显而易见,它仅仅是一个由数据驱动的产生的拟合器或分类器,根本不是一个“认知系统”!我们并没有看出来它有任何“智能”(即对数据所呈现的规律、知识的理解)的存在!对人工神经网络的研究可能仍然是几十年前的进展,只不过现在网络的规模变大了(数据大了,优化强了)而已!
从逼近论的角度来看,如果数据足够大,多到足以(稠密)覆盖整个目标函数,那么简单的最近邻查找或者局部线性插值的性能就足够好了。此时,本文猜测,深度学习的性能与最近邻查找的性能可能相差无几!
举个例子,市面上出现了许多种类的所谓的“智能机器人”,声称可以与人进行自由对话。建议读者去测试一下这些对话机器人,你们就会发现,这些机器人的问答系统基本没有理解(只有少数有少量简单的理解)。如果对于在其数据库中存在的问题或类似的问题,机器人能够回答得比较合理;如果遇上需要逻辑推理的问题,这些机器人基本就答非所问,或者王顾左右而言他,甚至开始“卖萌”了。有空去逗逗这些对话机器人也是蛮有意思的事。
对于自动翻译等机器人,只要有足够的两种语言的对应词条或句子(比如有些公司的词库数据库非常庞大,达到亿级),就能“翻译”(拟合)得还不错,达到一定的实用水准。但从本质上来讲,这些翻译算法并没有真正理解语言本身!
关于深度学习,我们要有清醒的认识:
1)深度学习模型需要大量的训练数据,才能有较好的效果;因为这些学习模型都在做数据拟合或回归,或者是在做统计;
2)实际问题中,往往会遇到小样本问题,采用传统的简单的机器学习方法,则可以很好地解决了,没必要非得用复杂的深度学习方法;
3)神经网络看起来来源于人脑神经元的启发,但绝不是人脑的模拟!它只是一个复合函数!举个例子,给一个三四岁的小孩看过几只猫之后,他就能识别其他的猫。也就是说,人类的学习过程往往不需要大规模的训练数据,而现在的深度神经网络的学习方法显然不是对人脑的模拟。
这几年各种媒体的大量夸张的报道和宣传(即使是战胜人类的围棋算法AlphaGo,也并不是真正的人工智能,而仅仅是机器在一定的游戏规则下的策略计算能力),极度夸大了人工智能的进展,让很多大众误认为“强人工智能”已经来临,甚至产生不必要的恐慌。
事实上,现在的人工智能的进展仍然很小,正如清华大学人工智能研究院院长张钹院士在2018年全球人工智能与机器人峰会(CCF-GAIR)上的报告上所指出的:“人工智能刚刚起步,离真正的人工智能还很遥远…我们必须走向具有理解的人工智能,这才是真正的人工智能。”
10.3.深度学习在工业界的应用
虽然近几年发展起来的基于DNN的深度学习并未产生真正的智能。但由于现在有大量的数据,基于数据驱动的深度学习方法可以在很多领域确实得到了落地的应用。特别是在计算机视觉领域,比如人脸识别、图像分割与识别等,该领域做了很多年的一些问题的研究工作,瞬间就被深度学习所击败!深度学习取得了巨大的成功!因此,我们仍能使用深度学习解决不少问题。
近几年,催生了大量的人工智能公司,分布在安防、医疗、金融、智能机器人、自动驾驶、智能芯片、智能家居等领域;各高校也纷纷构建了人工智能研究院或大数据学院等;各学会成立了人工智能相关的专业委员会;国家也纷纷出台了有关人工智能的政策与文件,包括《新一代人工智能发展规划》,鼓励人工智能方面的人才培养(从娃娃抓起)和产业落地。在科研领域,大量的研究工作者和学生都涌进到人工智能领域,在一些人工智能或计算机视觉领域的会议的投稿量迅速增加,参加会议的人数达到历史新高。
但残酷的事实是,绝大部分的人工智能公司都是“伪人工智能”,他们或者仅仅在做着数据标注的工作,因为标注数据的多少决定着拟合函数的“智能”!另外,已经有些公司因未能找到合适的盈利模式而倒闭。前几年对深度学习及智能的期望并未达到人们及投资者的预期目标。今年年初,李开复曾指出:“2018年是AI泡沫破裂之年”。
从两年前人工智能热潮的爆发,到现在热潮逐渐退去,人们也越来越趋于冷静来认识人工智能,对其研究与应用逐渐趋于务实。也希望人工智能能真正快速发展,让人类的生活变得越来越美好!
10.4.深度学习与人工智能的关系
1956年,几个计算机科学家相聚在达特茅斯会议,提出了“人工智能”(Artificial Intelligence,AI)的概念,梦想着用计算机来构造复杂的、拥有与人类智慧同样本质特性的机器。人工智能研究领域范围很广,包括专家系统、机器学习、进化计算、模糊逻辑、计算机视觉、自然语言处理、推荐系统等,如图28(上)。
机器学习(Machine Learning, ML)是一种实现人工智能的方法。其基本做法是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。传统的机器学习算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习等。
深度学习(Deep Learning, DL)是一种实现机器学习的技术,是解决特征表达的一种学习过程。现在常指利用深度神经网络的深度学习。在很早就有人提过,但由于当时训练数据量不足、计算能力落后,因此深度学习的效果不尽如人意;直到近几年,深度学习才较好地实现了各种任务。事实上,除了基于深度神经网络的深度学习,还有其他形式(比如深度森林)的深度学习方法。
因此,机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术,而深度神经网络是实现深度学习的一种具体的实现工具,如图28(下)所示。简而言之,从范畴来讲,他们的关系如下:
深度神经网络<深度学习<机器学习<人工智能
图28.上:人工智能的研究范畴;下:人工智能、机器学习和深度学习的关系。
但残酷的事实是,近几年流行的基于深度神经网络的深度学习仅仅是一个数据拟合器,并不存在着分析与理解等智能的能力。现有的技术和方法离真正的人工智能还非常遥远!
11.三维几何数据
在计算机图形学中,我们研究的对象是三维(3D)形状对象,即虚拟空间中的数字化的物理实体。表达3D对象的3D几何数据是继声音、图像、视频之后的第四代数字可视媒体(如图29),已逐渐具有越来越广泛的应用。
29.四代可视媒体的发展:声音、图像、视频、3D几何。
11.1.3D数据的重要性
地球上的人及所有动物都有两只眼睛,每只眼睛类似于一台照相机,看到的是场景在视网膜(成像平面)上的投影图像,如图30(上)。两只眼睛位置不同,就产生对同一场景的视差,从而在大脑生成了场景的立体和3D信息(双目立体视觉原理),如图30(下)。
图30. 上:单眼看到的是图像,为三维世界在成像平面上的投影影像;
下:人类及动物的两只眼睛通过双眼的视差产生了对场景物体的立体和三维的信息。
因此,人类及动物的视觉感知系统是具有立体的特性。世界是三维的,3D模型提供了世界及所有物体的全方位、全息的表达,能提供比二维图像更丰富、更全面的空间信息(比如猎鹰能在几公里外判断草地上一只兔子的远近和方位,以便做出下一步的飞行行为)。而单眼(如果以前存在的话)动物则因无法分辨物体的远近,而无情地被自然法则所淘汰。
计算机视觉通过对图像的理解和分析已经能够解决非常多的任务(比如物体检测、分割、识别、检索等)。但在很多实际应用中,如果涉及到空间关系分析以及与3D环境和物体的理解、交互和创造,则光靠2D图像信息是不够的,此时必须依赖场景的3D信息,比如数字城市中的空间关系分析、机器人抓取3D物体、虚拟和增强现实、物联网数据的空间关联等,如图31所示。在这些应用中,仅仅靠图像信息是无法很快完成各项任务的。
图31.三维数据在很多实际应用场景中是必不可少的信息。
11.2.3D数据集
随着3D物体的扫描与采集手段的日益增多(特别是近几年快速发展的深度相机,比如Microsoft Kinect、Intel RealSense、Google Project Tango、Apple Primesense、Asus Xtion等)、未来可采集3D信息的移动终端(去年iPhoneX上已有深度相机)的普及、以及互联网上3D模型的创造与分享,3D数据(包括RGB-D数据)将日益丰富。
至今,已有许多研究机构构建并公布了一些3D数据集,比如:
ShapeNet数据集:包含了约300多万个3D模型(3000多类物体),每个模型有语义注释。这是当前最大的一个三维模型数据集;其子集ShapeNetCore具有一些手工的标注;
ModelNet数据集:包含了12多个3D模型(662类),包含两个子集Model10和ModelNet40;
ShapeGoogle数据集:包含了近600个非刚性3D模型,用于检索测试;
SHREC数据集:包含了上千个非刚性3D模型,包括不少人的模型和合成数据集;
Watch-N-Patch数据集:由Cornell大学和Stanford大学公布,主要是人体3D模型数据。
还有一些高校和研究机构公开了一些RGB-D数据集,包括Princeton大学(415个室内场景,990万个标记图像),纽约大学(464个室内场景),Cornell大学(24个办公室场景,28个居家室内场景),Washington大学(14个室内场景)等。
另外,瑞士苏黎世大学发布了一个使用LiDAR(激光3D扫描)扫描的40个办公室场景的高精度3D场景模型数据集。
11.3.3D形状描述子
类似于2D图像,人们也需要对3D模型数据进行分类与识别、分割与建模、匹配与检索等。完成这些任务的关键就是如何定义和计算3D模型的形状描述子(Shape descriptors)或特征(Features)。
至今,人们已提出了各种基于全局和局部的形状几何属性的空间分布或统计信息的3D形状描述子(如图32所示)。这些形状描述子都是针对某种特定的应用或某些特定的3D模型类型而提出的,同时满足所有应用及所有模型类型的3D形状描述子还没有。在实际应用中,应根据物体类型和具体应用来选择合适的形状描述子(特征选择)。
11.4.3D几何数据的深度学习的挑战
随着3D数据(包括单个模型以及场景模型)的日益流行和丰富,如何利用上述丰富的3D数据集来完成分析和处理3D形状数据,已成为研究工作者及产业工作者的关注焦点和研究热点。因此,3D形状的特征提取方法也逐步从上述的人工定义特征方法到基于深度学习的特征学习方法的发展。
相对于图像与视频处理,3D几何数据的深度学习方法在近几年才开始有了一些工作和进展,但仍面临着一些挑战。
(1)3D数据集较小
相比于ImageNet等千万级数据量的2D图像数据集,现在的3D模型数据集的数量很少,仍未达到“大数据”的规模。另外,3D数据的标注也是较为困难的。
(2)3D数据是非结构化的
图像和视频都是结构化数据,是线性结构的,可以表达为一个向量或矩阵。但3D模型数据是非结构化的(如图33所示),每个顶点的邻域数是非固定的,从拓扑上看是一个图(Graph),无法直接使用深度神经网络。
(3)3D数据的复杂性
相对于图像和视频,3D模型还有其他一些复杂性,包括:
(a)正向姿态性:图像基本都是正向拍摄的,但是3D模型的姿态可以是任意的,如何消除姿态的影响仍有挑战。为了方便,一般会预先将数据集中的模型统一正朝向;
(b)表达不统一:图像就是一个矩阵结构,表达非常统一;但是3D模型有不同的表达方式,比如点云、网格、体素、隐函数、CSG树等(如图34),使得需要对不同表达的数据进行不同的处理;
(c)数据不完整:由于采集设备的精度问题,有些3D数据(比如RGBD数据)中存在着大量的噪声和游离点;由于遮挡关系,有些3D数据不够完全,存在着空洞;还有些3D数据的采样密度不均匀,造成不同部位的信息不对称。
32.各种人工3D形状描述子。
图33.二维图像与三维网格的数据结构的区别。
图34.三维几何数据的不同表达。
12. 智能图形处理:三维数据的深度学习
3D图形作为一种新型的可视媒体数据类型,同样可以利用人工智能和深度学习的方法来进行分析和处理,融合大数据、并行计算及人工智能技术的最新进展以提高计算机图形学算法及系统易用性及效率,称为智能图形处理。
近几年,已有越来越多的研究工作将机器学习和深度学习的方法应用于3D数据。本节仅就3D形状描述子方面做一个简略的介绍。
应用深度学习来自动抽取3D形状特征主要有以下3种方法:第一种,基于传统的人工特征(维数一致了)来进行更抽象的形状特征的学习和抽取;这种方法是非端到端的;第二种,将3D数据转化为规整结构数据(欧氏区域),然后再应用深度学习方法抽取形状特征,称为显式方法;第三种,将深度神经网络改造成能够处理非欧氏区域数据,称为隐式方法。下面分别从方法论上进行简单介绍。
12.1.基于人工特征的特征学习方法
由于传统卷积无法直接作用于3D形状,早期的方法避开了直接以3D形状作为输入的训练,而是先从3D模型中提取一些人工特征(称为低级特征,如图32),再把这些特征输入到神经网络中进行学习,获得新的抽象特征(称为高级特征),如图35所示。
图35.基于人工特征的特征学习方法。
人工定义的特征很大程度上取决于人的经验。因此,基于人工特征的特征学习方法并不是端到端的深度学习方法。另外,各种人工特征向量的排列也会改变特征矩阵及其卷积后的结果,对结果产生如何的影响也不清楚。
12.2.非本征方法
这种方法是将3D数据进行合适的变换,将其变换到一个欧氏空间的规则区域,以便适用于深度神经网络。此类方法改变了3D网格模型的形态,本质上也改变了数据分布空间,是为了适应传统CNN或MLP对拓扑的要求而提出的折衷解决方法,因此成为基于欧氏空间的学习方法或非本征方法,如图36所示。
图36.非本征深度学习方法。
变换的区域和方法主要有以下几种。
(1)图像区域。最简单的方法就是将3D模型数据投影到平面形成图像。
(a)多视图图像:将3D模型往多个视角方向投影生成多幅图像;
(b)全景图像:将3D模型往平面投影生成一幅全景图;
(c)参数化图像:将3D模型的2D参数化看成为一幅图像。
(2)体素区域。
(a)类比于图像中的像素,将3D形状看作三维体素网格的0,1分布。由于体素的个数是三次方增长,因此,体素的分辨率无法太大,一般连128x128x128的分辨率做起来都很困难。
(b)只将模型表面用体素来表达,而省去内部体素的存储,并且利用八叉树的形式来存储,可以有效地提高体素的分辨率及模型的表达精度。
(3)基元组合。三维形状还可以表示成一些基本单元的组合,如矩形块、圆柱、圆锥、球等,然后利用网络来学习这些基本体块的参数。
(4)点云。直接将3D数据看成点的集合。将每个点看作一个神经元节点,节点包含点的坐标或法向等信息,然后利用深度神经网络提取点的特征。这里要克服点及点邻域的顺序无关性等。
12.3.本征方法
本征方法直接将三维形状看成二维流形(Manifold)或由点组成的图(Graph),顶点之间的距离不再是欧氏距离,然后直接将卷积定义在这样的数据结构上,称为非欧氏空间学习的方法或本征方法,如图37。两种典型的网络为测地卷积网络(Geodesic CNN, GCNN)和图卷积网络(Graph-based CNN),如图38,可参考[12-1, 12-2, 12-3, 12-4]。
[12-1] Masci, J. and Boscaini, D. et al. (2015). Geodesic convolutional neural networks on Riemannian manifolds. ICCV.
[12-2] Monti, F. and Boscaini, D., Masci. (2016). Geometric deep learning on graphs and manifolds using mixture model CNNs. arXiv preprint arXiv:1611.08402.
[12-3] Boscaini, D. and Masci, J. et al. (2016). Learning shape correspondence with anisotropic convolutional neural networks. NIPS.
[12-4] Yi, L. and Su, H. et al. (2017). Syncspeccnn: Synchronized spectral CNN for 3d shape segmentation. CVPR.
图37.本征深度学习方法。
图38.本征深度学习的具体方法。左:测地卷积;右:图卷积网络。
12.4.端到端的生成模型
在上面的工作中,深度学习用于解决3D形状的识别、分割、匹配和对应等问题。近年来,越来越多的工作致力于3D模型的构建和生成(大部分都是使用生成-对抗网络GAN)。由于可以自动生成大量的3D模型,对于扩充3D模型数据集具有重要的意义,非常值得大家关注。
这里简略介绍一下端到端的3D模型生成的一些工作。所谓端到端的生成模型,就是输入是简单易获得的,输出是三维模型,中间无需其他操作。例如,可以从输入的一张照片输出三维体素模型[12-5, 12-6]、点云模型[12-7]、或者网格模型及其参数化[12-8];[12-9]利用级联的图卷积网络由粗到精逐渐细化网格模型;[12-10]由手绘草图生成参数化的夸张人脸模型。
[12-5] J. Wu et al. l
Learning a probabilistic latent space of object shapes via 3D generative-adversarial modeling. Advances in Neural Information Processing Systems, 82-90, 2016.
[12-6] J. Li et al.
Grass: Generative recursive autoencoders for shape structures. Siggraph 2017.
[12-7] H. Fan et al.
A point set generation network for 3D object reconstruction from a single image. CVPR 2017.
[12-8] T. Groueix et al.
AltasNet: A papier approach to learning 3D surface generation. arXiv: 1802.05384, 2018.
[12-9] N. Wang et al.
Pixel2Mesh: Generating 3D mesh models form single RGB iamges. arXiv: 1804.01654.
[12-10]X. Han et al.
DeepSketch2Face: A deep learning based sketching systems for 3D face and caricature modeling. Siggraph 2017.
后记
此文分享了刘利刚老师对基于深度神经网络的深度学习的理解,从逼近论的角度深入浅出地理解了深度学习的原理,了解了整个调试深度网络的“炼丹”过程,是个需要丰富经验的“技术活”。机器学习还有很多其他重要的方法,比如非监督学习和强化学习等,本文就不一一进行介绍了。
从本文的分析可知,基于深度神经网络的深度学习背后的运行原理主要基于数据驱动的函数拟合,采用的是“经验主义”的实用方法(比如数学中的最小二乘方法及统计学中的统计回归方法等);它离真正的人工智能,即能通过图灵测试(Turing Testing)的智能机器还很远。从数学本质上来看,现在基于数据的深度学习方法实质上只有“记忆”能力,并没有对问题的“理解”能力,更没有所谓的“智能”。
六年前(2013年4月),《麻省理工学院技术评论》杂志将深度学习列为2013年十大突破性技术(Breakthrough Technology)之首。经过前几年的高速发展,根据Gartner在7月刚发布的2018人工智能技术成熟度曲线(如图39),深度神经网络及深度学习已从前几年的爬坡阶段到达顶部。未来,相信人们将会更冷静地来看待及发展相关的技术和应用。
最近,有人提出“可微编程(Differentiable Programming)”的概念,就是将神经网络当成一种语言(而不是一个简单的机器学习的方法),来描述我们客观世界的规律。甚至Yann LeCun曾在Facebook的文章中说道:
“DeepLearning is Dead.Long Live Differentiable Programming!”
(深度学习已死,可微编程永生)这个概念的提出又将神经网络提高了一个层次。
本文完稿核对时,文中有些数学符号(比如等)存在着重复定义与使用,但根据上下文并不影响阅读和理解,因此就不花时间去修正了,在此说明下。
相关文章
什么是深度学习?(上篇)
往期精彩文章
Boosting算法的前世今生(上篇)
Boosting算法的前世今生(中篇)
Boosting算法的前世今生(下篇)
新闻预测股价
福利
回复"深度学习"四个字,可获取有深度学习圣经之称的Deep Learning的PDF版哦。编者:Ian Goodfellow, Yoshua Bengio and Aaron Courville。
关注AIKaggle 赞赏Kaggle实战机器学习赞赏码
有帮助的话,点个在看支持一下哦~~


本文作者 :Kaggle实战机器学习

关注Ta的微信公众号获取更多图文精彩内容...