深度学习概论

深度学习

 

一、深度学习出现的原因、时间及研究现状

机器学习是人工智能的一个分支,而在很多时候几乎成为人工智能的代名词。简单来说,机器学习就是通过算法使得机器能从大量历史数据中学习规律,从而对新的样本做智能识别或对未来做预测。从20世纪80年代末期以来,机器学习的发展大致经历了两次浪潮:浅层学习(shallow learning)和深度学习(deep learning)。

1.1深度学习兴起的渊源及时间

深度学习起源于对神经网络的研究,20世纪60年代,受神经科学对人脑结构研究的启发,为了让机器也具有类似人一样的智能,人工神经网络被提出用于模拟人脑处理数据的流程。最著名的学习算法称为感知机。但随后人们发现,两层结构的感知机模型不包含隐层单元,输入是人工预先选择好的特征,输出是预测的分类结果,因此只能用于学习固定特征的线性函数,而无法处理非线性分类问题。Minsky等指出了感知机的这一局限,由于当时其他人工智能研究学派的抵触等原因,使得对神经网络的研究遭受到巨大的打击,陷入低谷。直到20世纪80年代中期,反向传播算法(back propogation,BP)的提出,提供了一条如何学习含有多隐层结构的神经网络模型的途径,让神经网络研究得以复苏。

由于增加了隐层单元,多层神经网络比感知机具有更灵活且更丰富的表达力,可以用于建立更复杂的数学模型,但同时也增加了模型学习的难度,特别是当包含的隐层数量增加的时候,使用BP算法训练网络模型时,常常会陷入局部最小值,而在计算每层节点梯度时,在网络低层方向会出现梯度衰竭的现象。因此,训练含有许多隐层的深度神经网络一直存在困难,导致神经网络模型的深度受到限制,制约了其性能。

2006年之前,大多数机器学习仍然在探索浅层结构(Shallow- structured)架构,这种架构上包含了一层典型的非线性特征变换的单层,而缺乏自适应非线性特征的多层结构。如常规的隐马尔科夫模型(HMM),线性或非线性动态系统,条件随机域(CRFs),最大熵(Max-Entropy)模型,支持向量机(SVM),逻辑回归,内核回归和具有单层隐含层的多层感知器(MLP)神经网络。这些浅层学习模型有一个常见属性,就是由仅有的单层组成的简单架构负责转换原始输入信号或输入特征为特定问题特征空间时,其过程不可观察。以支持向量机为例,它是一种浅层线性独立模型,当使用内核技巧时具有一层特征转换层,否则具有零层特征转换层。浅层架构在许多简单或受限问题中,早已被证明卓有成效,但是由于它们的有限建模与表现能力,导致在处理涉及自然信号如人的讲话,自然的声音和语言,自然的图像和视觉场景等更为复杂的现实应用时,产生了困难。

在实际应用中,例如对象分类问题(对象可是文档、图像、音频等),人们不得不面对的一个是问题是如何用数据来表示这个对象,当然这里的数据并非初始的像素或者文字,也就是这些数据是比初始数据具有更为高层的含义,这里的数据往往指的是对象的特征。例如人们常常将文档、网页等数据用词的集合来表示,根据文档的词集合表示到一个词组短语的向量空间(vector space model, VSM模型)中,然后才能根据不同的学习方法设计出适用的分类器来对目标对象进行分类。因此,选取什么特征或者用什么特征来表示某一对象对于解决一个实际问题非常的重要。然而,人为地选取特征的时间代价是非常昂贵,另外劳动成本也高,而所谓的启发式的算法得到的结果往往不稳定,结果好坏经常是依靠经验和运气。于是,人们考虑到自动学习来完成特征抽取这一任务。深度学习(Deep Learning)[1]的产生就是缘于此任务,它又被称为无监督的特征学习(Unsupervised Feature Learning),从这个名称就可以知道这是一个没有人为参与的特征选取方法。

深度结构学习,或者通常更多人称之为深度学习(Deep Learning),从 2006 年开始作为一个新兴的领域出现在机器学习研究当中。深度学习(DeepLearning)的概念是2006年左右由GeoffreyHinton等人在《Science》上发表的一篇文章《Reducing the dimensionality of data with neural networks》提出来的,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2)深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。2006年的另外3篇论文[2-4]改变了训练深度架构失败的状况,由Hinton的革命性的在深度置信网(Deep Belief Networks,DBNs)上的工作所引领。

1.2国内外研究现状

尽管专家们研究了很多年深层神经网络算法分析,但进展并不十分顺利。研究者对于通常意义下的隐含层是二层或三层的实验结果有了比较好的进展,但是对于训练更深层隐含层的神经网络却得到了比较差的结果。

在无监督预训练出现之前,训练深度神经网络通常非常困难,而其中一个特例是卷积神经网络。卷积神经网络受视觉系统的结构启发而产生。第一个卷积神经网络计算模型是Fukushima[5]于1980年在神经认知机中提出的,基于神经元之间的局部连接和分层组织图像转换,将有相同参数的神经元应用于前一层神经网络的不同位置,得到一种平移不变神经网络结构形式。后来,LeCun等人[6,7]在该思想的基础上,分别在1989年和1998年用误差梯度设计并训练卷积神经网络,在一些模式识别任务上得到优越的性能。至今,基于卷积神经网络的模式识别系统是最好的实现系统之一,尤其在手写体字符识别任务上表现出非凡的性能。

1986年,Hinton,Sejnowsky, Rumelhart等人在Hopfield网络中加入随机机制,提出了玻尔兹曼机[8],这种模型与真实空间相对应,方便理解,但由于模型学习过程容易发散,因此算法往往并不收敛。同年,Hinton和Smolensk等人又提出了受限制玻尔兹曼机(Restricted Boltzmann Machine, RBM),这种模型仅有可见节点与隐藏节点的连接,相同节点彼此独立,因此,算法比较高效[9]

2000年,Hinton提出了对比散度(Contrastive Divergence, CD)的学习算法[10],它的优点就在于,该算法使用了一个近似概率分布的差异度量对比散度[11]。对比散度在进行学习时十分高效,比如,马尔可夫随机领域(MarkovRandom Fields, MRF)、RBM模型等[12]

2006 年,Hinton 提出了深度置信网络(Deep Belief Nets,DBN)模型及其无监督学习算法,即基于层叠的 RBM 深度信念网络的学习算法[2]。这种算法的过程就是,一个深度学习网络模型可以看成是由若干个 RBM 堆叠在一起,而训练学习的过程,就是由低层到高层,无监督地逐步训练这些 RBM,其中,每一个 RBM 都可以通过 CD 算法来进行快速训练。所以,整个深度学习网络的训练过程就转化为对多个 RBM 的训练学习的问题,而直接绕过了从整体上进行训练的高度复杂性。这种通过 RBM 算法而训练生成的网络在它的顶层是无方向连接的,然后在它下边的所有低层的方向全是向下的。在进行了分层的 RBM 算法之后,通过神经网络的学习算法再对网络进行参数的微调,从而使整个深度学习网络收敛到一个局部最优点上。这两种方法的结合,本质上即是,先通过逐层地通过 RBM 法使网络模型获得一个较优的初始值,再进行进一步地传统训练,这样做的优点就是,既解决了网络整体的时间复杂度低的问题,又避免了传统方法易陷入局部最优解的问题,同时,获得了不错的初始参数值和最终的效果较好的参数值[12]

2008 年,Tieleman 提出了随机极大似然(Stochastic Maximum Likelihood, SML)算法,即连续对比散度(Persistent Contrastive Divergence, PCD)算法[13],这个算法非常重要,因为它不仅修正了 CD 算法极大似然度的缺点,而且保证了极大似然数的学习,基于 PCD 的 RBM 算法比原来的 CD算法更加高效。

2009 年,Tieleman 提出了增加一组额外的参数来学习 PCD 的算法,即马尔可夫链蒙特卡罗(Markov chain MonteCarlo, MCMC)采样,为以后的基于 RBM 的改进算法开辟了框架基础[14]

2009 年到 2010 年,专家们提出了很多基于回火的马尔可夫链蒙特卡罗采样(Tempered MCMC)算法,包括模拟回火(Simulated Tempering)算法,回火转移(Tempered Transition)算法,并行回火(ParallelTempering)算法等,另外还有,模式跳转的 MCMC 方法[15]。不过这些算法的实质,都是基于回火的马尔可夫链蒙特卡罗采样算法的改进的 RBM 算法,都是基于Tieleman 在 2009 年的论文[16]

深度学习在实际应用过程中也得到了广泛的关注。孙志军等人[17]提出一种基于多层自动编码器的特征提取算法,该算法的深度学习网络模型的训练分为无监督训练以及基于边际Fisher准则的监督式精雕训练过程。针对如何将深度学习应用到网络入侵检测中以提高入侵检测准确率的问题,李春林等人[18]结合网络数据的特点给出一种深度学习网络的设计方法,并在此基础上提出一种基于深度学习的入侵检测方法。针对建立射线无损检测智能化信息处理平台的需要,余永维等人[19]提出一种基于深度学习网络的智能识别方法。王宪保等人[20]根据样本特征建立深度置信网络,同时训练获取网络的初始权值,并提出一种基于深度学习的太阳能电池片表面缺陷检测方法。Kim等人[21]运用支持向量机和类概率输出网络,提出一种新的深层结构模型为解决模式分类问题提供更好的泛化能力。实验表明,随着层数的增加,所提出的深层结构与理想的贝叶斯分类器更加接近。Shang等人[22]基于深层学习技术构建软传感器,并将其应用于工业领域,以评估重柴油95%点下调原油蒸馏装置。基于深层玻尔兹曼机,Leng等人[23]提出一种新颖的三维模型识别机制,这种机制可分为两部分:一是基于深层玻尔兹曼机特征检测,二是基于半监督学习的分类方法。

[1] Hinton G E and Salakhutdinov R R. Reducingthe dimensionality of data with neural networks [J]. Science, 2006, 28, 313:504-507.

[2] Hinton G E, Osindero S, Teh Y. A fastlearning algorithm for deep belief nets [J]. Neural Computation, 2006, 18(7):1527-1554.

[3] Bengio Y, Lamblin P, Popovici D andLarochelle H. Greedy Layer-Wise Training of Deep Networks, in J. Platt etal. (Eds), Advances in Neural Information Processing Systems 19 (NIPS 2006),pp. 153-160, MIT Press, 2007.

[4] Marc’AurelioRanzato, Christopher Poultney, Sumit Chopra and Yann LeCun. Efficient Learningof Sparse Representations with an Energy-Based Model, in J. Platt etal. (Eds), Advances in Neural Information Processing Systems (NIPS 2006), MITPress, 2007

[5] Fukushima K. Neocognitron: aself-organizing neural network model for a mechanism of pattern recognitionunaffected by shift in position [J]. Biological Cybernetics, 1980, 36(4):193-202.

[6] LeCun Y, Bottou L, Bengio Y, Haffner P.Gradient-based learning applied to document recognition [J].  Proceedings of the IEEE, 1998, 86(11):2278-2324.

[7] LeCun Y, Boser B, Denker J S, Henderson D,Howard R E, Hubbard W, Jackel L D. Backpropagation applied to handwritten zipcode recognition [J]. Neural Computation, 1989, 1(4): 541-551.

[8] Ackley H, Hinton E, Sejnowski J. ALearning Algorithm for Boltzmann Machines [J]. Cognitive Science, 1985:147–169.

[9] Smolensk P. Information Processing inDynamical Systems: Foundations of Harmony Theory [J]. Parallel DistributedProcessing, 1986(1): 194–281.

[10] Hinton G E. Training Products of Expertsby Minimizing Contrastive Divergence [J]. Neural Computation, 2000(14):1771–1800.

[11] Carreira M A, Hinton G E. On ContrastiveDivergence Learning [J]. Journal of Machine Learning Research, 2006.

[12] Sutskever I, Tieleman T. On theConvergence Properties of Contrastive Divergence[J]. Journal of MachineLearning Research Proceedings Track, 2010(9):789–795.

[13] Desjardins G, Carville A, Bengio Y, etal. Tempered Markov Chain Monte Carlo for Training of Restricted BoltzmannMachine[C]. Sardinia, Italy: Proceedings of Aistats, 2010:145–152.

[14] Salakhutdinov R. Learning in MarkovRandom Fields Using Tempered Transitions [C]// Advances in Neural InformationProcessing Systems, 2010.

[15] Andrieu C, Defreitas N, Doucette A, etal. An Introduction to MCMC for Machine Learning [J]. Machine Learning, 2003,50(1):5–43.

[16] Tieleman T. Training Restricted BoltzmannMachines Using Approximations to the Likelihood Gradient[C]//Proceedings of the25th international conference on Machine Learning. New York, NY, USA: ACM,ICML, 2008:1064–1071.

[17]孙志军,薛磊,许阳明。基于深度学习的编辑Fisher分析特征提取算法[J]。电子与信息学报,2013,35(4): 805-811。

[18]李春林,黄月江,王宏,牛长喜。一种基于深度学习的网络入侵检测方法[J]。信息安全与通信保密,2014,10:68-71。.

[19]余永维,殷国富,殷鹰,杜柳青。基于深度学习网络的射线图像缺陷识别方法[J]。仪器仪表学报,2014,35(9): 2012-2019。

[20] 王宪保,李 洁,姚明海,何文秀,钱沄涛。基于深度学习的太阳能电池片表面缺陷检测方法[J]。模式识别与人工智能,2014,27(6): 517-523。

[21] Sangwook Kim, Zhibin Yu, Rhee Man Kil,Minho Lee. Deep learning of support vector machines with class probability outputnetworks [J]. Neural Networks, In press, 2014.

[22] Chao Shang, Fan Yang, Dexian Huanga,Wenxiang Lyu. Data-driven soft sensor development based on deep learning technique[J]. Journal of Process Control, 2014, 24: 223-233.

[23] Biao Leng, Xiangyang Zhang, Ming Yao,Zhang Xiong. A 3D model recognition mechanism based on deep Boltzmann machines[J]. Neurocomputing, 2015, 151: 593-602.

 

二、深度学习的基本内容、理论基础及其代表性模型

2.1 深度学习的基本内容

深度学习是机器学习技术的其中之一,该领域主要是探讨包含多层结点的人工神经网络的建模和学习问题。为实现模式识别和无监督特征学习,深度学习在分层架构中的信息处理阶段建立多层结构。深度学习处于神经网络、图形化建模、优化、模式识别和信号处理多个研究领域的交集。两个重要的原因使得深度学习在当今研究应用中如此受到欢迎:一是为计算硬件显著降低了成本,二是大幅增加的芯片处理能力。

为了说明深度学习的主要研究内容和主要的研究方法,这里给出深度学习的比较常见的四种定义:

(1)深度学习是一类利用多层非线性信息处理方法来进行无监督或者有监督的特征提取或者变换,从而实现模式分析和分类的机器学习技术。

(2)深度学习是一个为了对数据间的复杂关系进行建模而学习多级表示的机器学习子门类。由于高级特征和概念是根据低级特征定义的,因而特征的层次结构被称为深度架构。这类模型中的多数基于表示的无监督学习。

(3)深度学习是指这样一个机器学习的子领域,即学习多级表示(这种多级表示对应特征或因子或者概念的层级结构),其中高级概念是由低级概念所定义的,同一级别中的概念有助于定义高级概念。观察量可以用很多方式来表示(如图像可以用像素的向量表示),但是有些表示能够使得从样例中对感兴趣的任务进行学习时更加简单(例如图像是否是人脸图像),该领域的研究试图定义如何更好地创造表示以及如何学习这些表示。

(4)深度学习是机器学习研究的新领域,是为了使机器学习更加靠近它最初的目标——人工智能而发展起来的。深度学习主要是关于学习多级表示和抽象,这些表示和抽象应该有助于使得诸如图像、声音和文本之类的数据更加有意义。

深度学习采用的训练过程是:

(1)自下上升的无监督学习。采用无标签数据分层训练各层参数,这是一个无监督训练的过程(也是一个特征学习的过程),是和传统神经网络区别最大的部分。

(2)自顶向下的监督学习。在预训练后,采用有标签的数据来对网络进行区分性训练,此时误差自顶向下传输。预训练类似传统神经网络的随机初始化,但由于深度学习的第一步不是随机初始化而是通过学习无标签数据得到的,因此这个初值比较接近全局最优,所以深度学习效果好很大程度上归功于第一步的特征学习过程。

随着 Hinton 在 DBN 上的研究不断的深入,使得他最终通过构建深度神经网络实现了系统学习效率的显著提升。深度学习算法因为使用了多层神经网络,因此它具备更强的表达能力,可以对复杂的客观事物进行描述。针对深度学习算法的这一特点,Hinton 设计了一种算法“greedy layer-wiseunsupervised learning algorithm”,通过这种算法来有效的对深度模型进行训练。

这种算法本质上是一种贪婪算法,它的基本原理是,首先构造一个拥有多层的人工神经网络,在这个多层模型中,所处在模型的层次越高则说明这一层对可见层输入样本的表示就越抽象,相反如果处于模型的较低层,那么它仅仅能够表示输入样本的低维特征。因此整体说来,这个算法的总体训练的过程就是首先对输入样本进行简单的表示,然后随着所在深度模型层次的不断提升,开始对输入样本进行越来越抽象的表示,最终得到对样本的本质表示的过程。

2.2 深度学习的理论基础

假设一个系统,它是一个层的结构,是系统的输入,是系统输出,形象地表示为:=>=>=>=> =>,如果输出等于输入,物理意义也就是表明在经过系统变化之后,输入I的信息量没有任何损失,和原始的输入保持了不变,这表明了输入经过每一层Si均没有丢失任何信息,即在任何一层Si,它都是输入也就是原始信息的另外一种表示。简单说,深度学习的精髓也就是,在一个n层的神经网络中,任何一层的输入和输出是“相等”的。学习过程中,我们希望它是不需要人为干预的,它能够自动地学习对象的特征。在给定一组原始的输入(可以是一堆图像或者文本、一段语音等等),经过一个包含n层的系统S时,我们通过调整系统中参数,使得输出与输入相等,即输出仍然是输入,这样,我们就获取了输入 (原始数据)的一系列的层次特征,记为。

另外,前面是假设输出严格地等于输入,即这个地方“相等”有两个含义在里面:第一个是说不是在绝对形式上的相等,而是在抽象意义上的相等;另外一点指的是限制的约束的程度,比如说是不会造成歧义的完全“相等”还是有适当宽松条件的“相等"。而绝对意义上的“相等”这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会形成另外一类不同的深度学习的方法。上述就是深度学习的基本思想,而上述中的两个思想也对应了深度学习中的两个经典的方法Auto Encoder和Sparse Coding,还有一个很常用的方法就是受限玻尔兹曼机(Restrict Boltzmann Machine , RBM)。

2.3 五种典型的深度学习代表性模型

典型的深度学习模型有卷积神经网络 (convolutional neuralnetwork, CNN) 模型、受限玻尔兹曼机(restricted Boltzmann machine,RBM)、深度置信网络 (deep belief network, DBN) 模型、栈式自动编码器(stacked auto-encoder, SAE)以及深度玻尔兹曼机(deep Boltzman machine, DBM)。

模型一:卷积神经网络 (convolutional neural network, CNN) 模型

LeCun的卷积神经网络由卷积层和子抽样层两种类型的神经网络层组成。每一层有一个拓扑图结构,即在接收域内,每个神经元与输入图像中某个位置对应的固定二维位置编码信息关联。在每层的各个位置分布着许多不同的神经元,每个神经元有一组输入权值,这些权值与前一层神经网络矩形块中的神经元关联;同一组权值和不同输入矩形块与不同位置的神经元关联。卷积神经网络是多层的感知器神经网络,每层由多个二维平面块组成,每个平面块由多个独立神经元组成为了使网络对平移旋转比例缩放以及其他形式的变换具有不变性,对网络的结构进行一些约束限制:

    (1)特征提取。每一个神经元从上一层的局部接收域得到输入,迫使其提取局部特征;

    (2)特征映射。网络的每一个计算层由多个特征映射组成,每个特征映射都以二维平面的形式存在,平面中的神经元在约束下共享相同的权值集;

    (3)子抽样。该计算层跟随在卷积层后,实现局部平均和子抽样,使特征映射的输出对平移等变换的敏感度下降。

卷积神经网络本质上实现一种输入到输出的映射关系,能够学习大量输入与输出之间的映射关系,不需要任何输入和输出之间的精确数学表达式,只要用已知的模式对卷积神经网络加以训练,就可以使网络具有输入输出之间的映射能力。卷积神经网络执行的是有监督训练,在开始训练前,用一些不同的小随机数对网络的所有权值进行初始化。

卷积神经网络的训练分为两个阶段:

(a)向前传播阶段。从样本集中抽取一个样本(X,YP),将X输入给网络,信息从输入层经过逐级变换传送到输出层,计算相应的实际输出:

(b)向后传播阶段,也称为误差传播阶段。计算实际输出与理想输出的差异:

并按最小化误差的方法调整权值矩阵。

卷积神经网络的特征检测层通过训练数据来进行学习,避免显式的特征提取,而是隐式地从训练数据中学习特征,而且同一特征映射面上的神经元权值相同,网络可以并行学习,这也是卷积神经网络相对于其他神经网络的一个优势。权值共享降低了网络的复杂性,特别是多维向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

卷积神经网络的成功依赖于两个假设:(a)每个神经元有非常少的输入,这有助于将梯度在尽可能多的层中进行传播;(b)分层局部连接结构是非常强的先验结构,特别适合计算机视觉任务,如果整个网络的参数处于合适的区域,基于梯度的优化算法能得到很好的学习效果卷积神经网络的网络结构更接近实际的生物神经网络,在语音识别和图像处理方面具有独特的优越性,尤其是在视觉图像处理领域进行的实验,得到了很好的结果。

模型二:受限玻尔兹曼机(restricted Boltzmann machine, RBM)

受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)从本质上可以看作—个二部图,也可看作一个马尔可夫随机场(Markov Random Field,MRF)。主要由可视层(v)和隐含层(h)所组成,h结点均为二值单元,V可以是二值单元也可以不是。同一层的单元之间没有连接,也就是说v层单元之间彼此独立,h层单元之间同样独立。v层单元和h层单元则是通过权值W全连接。

通常RBM模型的能量定义为

其中v为可视层单元,h为隐含层单元,W为可视层与隐含层之间的连接权值,b为隐含层的偏差,c为可视层的偏差,为系统参数。于是,再给定输入数据v下模型的概率为:

,

.

其中,为未规范化概率,是划分函数,即为模型中所有v和h的分布和。此时v和h的条件概率分别为:

这里为sigmoid函数。

    RBM的模型参数优化过程可以看成是最大对数似然下的模型估计,同时也等价于模型能量最小化的优化问题。对参数W的更新通常是基于所谓的对比散度(Contrastive Divergence, CD)来进行梯度上升以提高模型的对数似然。

模型三:深度置信网络 (deep belief network, DBN) 模型

    深度置信网络(DeepBelief Network, DBN)是一种有向图模型,其目标是在观察到数据的情况下,通过调整变量之间的权值,推导出隐含变量的状态。通常情况下,DBN的顶部两层可以看作是一个RBM,而最髙层以下的网络则可以看作是有向 sigmoid 置信网络(Sigmoid Belief Network)。

    一个典型的两隐含层DBN的联合概率分布可以表示为

其中是模型参数,表示可视层v和第一隐含层之间的连接权值,表示第一隐含层和第二隐含层之间的连接权值。是有向sigmoid置信网络的概率分布,是顶层RBM的联合概率分布。因此模型的目标是通过模型建立对输入数据的最大似然估计。

训练深度网络的难题之一就是如何初始化网络的权值,优化多隐含层的非线性深度网络通常是非常困难的,而只有初始化到较好的权值,网络才有可能避免陷入局部极小值。Hinton等提出通过无监督的贪婪逐层预训练(Greedy LayerwisePretraining)来初始化DBN的权值,即把相邻两层看作是一个RBM,自底向上依次训练网络

模型四:栈式自动编码器(stacked auto-encoder, SAE)

栈式自动编码器(Stacked Auto-Ecoder, SAE)于2006年由Hinton等人提出,是一种包含多隐含层神经元的神经网络模型[53]。栈式自动编码器可以看作是由多个自动编码器首尾相连而成,因此先介绍自动编码器。

    自编码模型是一个两层的神经网络,第一层称为编码层,第二层称为解码层。自动编码器的输入x为d维的二值向量,输出为d’维的隐含层表示y。将X看成是信号,y看成是编码,则自动编码器的工作过程可以看成是两个阶段,即编码阶段和解码阶段。

    在编码阶段,x和y之间通过函数S来映射,即

其中,s为非线性函数。在解码阶段,使用编码y通过相似的非线性函数来将输入信号y进行重建,

重建信号记为z, z也可以看作自动编码器对x的预测值。模型参数W、b和b’可以通过最小化平均重建误差来进行优化。平均重建误差可以通过多种方式来进行定义,具体形式取决于在给定编码的情况下对重建数据分布的假设。

最终目标是希望y是描述数据变化的主因子方向的坐标的分布式表示。由于隐含层都是非线性激活的,因此自动编码器和PCA的描述能力不同,它能够描述输入分布当中的多模式,这使得将多个自动编码器进行组合的SA具有描述高阶非线性统计特征的能力。在Hinton提出的SAE模型中,为了加快权值学习速度,也为了将权值初始化到较好的初值以获得接近全局最优的局部最优值,SAE必须进行预训练。在预训练的过程中,从输入层开始,把相邻两层看作是单独的受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)来进行训练,以更低一层的输出作为更高一层的输入,从而完成对权值的初始化。而在训练的过程中,由于使用向后传递算法依然存在梯度耗散的问题,所以将SAE展开,此时自底向上传播的过程可以看作是对输入数据进行编码,而自顶向下传播的过程可看作是解码的过程。同时为了防止SAE对数据产生过拟合而影响推广能力,在微调时会对权值添加一定的噪声。

近年来,随着对自动编码器研究的深入,消噪S动编码器(denoising Auto-Encoder, dAE)己经成为一种被广泛应用的自动编码器模型,常见的SAE模型都采用这一模型作为基本模块。

模型五:深度玻尔兹曼机(deep Boltzman machine, DBM)

    深度玻尔兹曼机(DeepBoltzman Machine, DBM)是一种无向图模型,具备学习抽象级别不断提高的内部表示的能力。DBM可以通过无监督学习的方式从数据本身学习高层表示,然后通过有监督学习的方式使用少量标注数据来对模型进行微调。和DBN不同的是,DBM的估计推导过程包含自上而下的反馈,需要均值长算法进行学习,因而能够更好的传递和处理输入数据的不确定性和歧义。

同样考虑一个没有层内连接的两隐含层DBM,忽略掉可视层和隐含层中的偏差值,则模型的能量可以定义为

其中是模型参数,表示可视层v和第一隐含层之间的连接权值,表示第一隐含层和第二隐含层之间的连接权值。那么。分配到某个可视层状态v的概率为:

则可视层单元、第一隐含层单元和第二隐含层单元的条件概率分别为:

和DBN仅有顶层是REM不同的是,DBM中相邻两层均构成一个RBM。对于RBM,在将它训练好之后,整个生成式模型可以表示为

其中是由参数定义的关于的隐式先验。

DBM的结构决定了它的预训练和训练算法与DBN不同,DBM的预训练算法主要是对权值进行调整,以弥补一开始仅有自底向上而没有自顶向下的信号流的问题。DBM的训练过程对比DBN更加复杂,由于DBM属于无向图模型,中间层和上下层直接相连,因此通常采用均值算法。

 

三、深度学习的实际应用成功案例

3.1语音识别

在国际上,IBM、Google等公司都快速进行了DNN语音识别的研究,并且速度飞快。国内方面,阿里巴巴、科大讯飞、百度、中科院自动化所等公司或研究单位,也在进行深度学习在语音识别上的研究。

语音识别系统长期以来,在描述每个建模单元的统计概率模型时,大多采用的是混合高斯模型(GMM)。这种模型由于估计简单,适合海量数据训练,同时有成熟的区分度训练技术支持,长期以来,一直在语音识别应用中占有垄断性地位。但这种混合高斯模型本质上是一种浅层网络建模,不能充分描述特征的状态空间分布。另外,GMM建模的特征维数一般是几十维,不能充分描述特征之间的相关性。最后,GMM建模本质上是一种似然概率建模,虽然区分度训练能够模拟一些模式类之间的区分性,但能力有限。

微软研究院语音识别专家邓立和俞栋从2009年开始和深度学习专家Geoffery Hinton合作。2011年微软宣布基于深度神经网络的识别系统取得成果并推出产品,彻底改变了语音识别原有的技术框架。采用深度神经网络后,可以充分描述特征之间的相关性,可以把连续多帧的语音特征并在一起,构成一个高维特征。最终的深度神经网络可以采用高维特征训练来模拟。由于深度神经网络采用模拟人脑的多层结果,可以逐级地进行信息特征抽取,最终形成适合模式分类的较理想特征。这种多层结构和人脑处理语音图像信息时,是有很大的相似性。深度神经网络的建模技术,在实际线上服务时,能够无缝地和传统的语音识别技术相结合,在不引起任何系统额外耗费情况下,大幅度提升了语音识别系统的识别率。其在线的使用方法具体如下:在实际解码过程中,声学模型仍然是采用传统的HMM模型,语音模型仍然是采用传统的统计语言模型,解码器仍然是采用传统的动态WFST解码器。但在声学模型的输出分布计算时,完全用神经网络的输出后验概率乘以一个先验概率来代替传统HMM模型中的GMM的输出似然概率。百度在实践中发现,采用深层神经网络(DNN)进行声音建模的语音识别系统相比于传统的GMM语音识别系统而言,相对误识别率能降低25%。最终在2012年11月,百度上线了第一款基于DNN的语音搜索系统,成为最早采用DNN技术进行商业语音服务的公司之一。

国际上,Google也采用了深层神经网络进行声音建模,是最早突破深层神经网络工业化应用的企业之一。但Google产品中采用的深度神经网络只有4-5层,而百度采用的深度神经网络多达9层。这种结构差异的核心其实是百度更好地解决了深度神经网络在线计算的技术难题,因此百度线上产品可以采用更复杂的网络模型。这将对于未来拓展海量语料的DNN模型训练有更大的优势。

3.2图像识别

图像是深度学习最早尝试的应用领域。早在1989年,Yann LeCun和他的同事们就发表了卷积神经网络(ConvolutionNeural Networks, 简称CNN)的工作。CNN是一种带有卷积结构的深度神经网络,通常至少有两个非线性可训练的卷积层,两个非线性的固定卷积层和一个全连接层,一共至少5个隐含层。CNN的结构受到著名的Hubel-Wiesel生物视觉模型的启发,尤其是模拟视觉皮层V1和V2层中Simple Cell和Complex Cell的行为。在很长时间里,CNN虽然在小规模的问题上,如手写数字,取得过当时世界最好结果,但一直没有取得巨大成功。这主要原因是,CNN在大规模图像上效果不好,比如像素很多的自然图片内容理解,所以没有得到计算机视觉领域的足够重视。这个情况一直持续到2012年10月,Geoffrey Hinton和他的两个学生在著名的Image Net问题上用更深的CNN取得世界最好结果,使得图像识别大踏步前进。在Hinton的模型里,输入就是图像的像素,没有用到任何的人工特征。

这个惊人的结果在之前没有发生的原因当然包括算法的提升,比如dropout等防止过拟合技术,但最重要的是,GPU带来的计算能力提升和更多的训练数据。百度在2012年底将深度学习技术成功应用于自然图像OCR识别和人脸识别等问题,并推出相应的桌面和移动搜索产品,2013年,深度学习模型被成功应用于一般图片的识别和理解。从百度的经验来看,深度学习应用于图像识别不但大大提升了准确性,而且避免了人工特征抽取的时间消耗,从而大大提高了在线计算效率。可以很有把握地说,从现在开始,深度学习将取代“人工特征+机器学习”的方法而逐渐成为主流图像识别方法。

3.3自然语言处理

除了语音和图像,深度学习的另一个应用领域问题是自然语言处理(NLP)。经过几十年的发展,基于统计的模型已经成为NLP的主流,但作为统计方法之一的人工神经网络在NLP领域几乎没有受到重视。最早应用神经网络的NLP问题是语言模型。加拿大蒙特利尔大学教授Yoshua Bengio等人于2003年提出用embedding的方法将词映射到一个矢量表示空间,然后用非线性神经网络来表示N-Gram模型。世界上最早的深度学习用于NLP的研究工作诞生于NEC美国研究院,其研究员Ronan Collobert和Jason Weston从2008年开始采用embedding和多层一维卷积的结构,用于POS Tagging、Chunking、Named Entity Recognition、Semantic Role Labeling等四个典型NLP问题。值得注意的是,他们将同一个模型用于不同任务,都能取得与业界最前沿相当的准确率。最近以来,斯坦福大学教授Chris Manning等人在将深度学习用于NLP的工作也值得关注。

总的来说,深度学习在NLP上取得的进展没有在语音图像上那么令人影响深刻。一个很有意思的悖论是:相比于声音和图像,语言是唯一的非自然信号,是完全由人类大脑产生和处理的符号系统,但模仿人脑结构的人工神经网络却似乎在处理自然语言上没有显现明显优势?我们相信,深度学习在NLP方面有很大的探索空间。从2006年图像深度学习成为学术界热门课题到2012年10月GeofferyHinton在Image Net上的重大突破,经历了6年时间。

3.4搜索广告CTR(Click-Through-Rate)预估

搜索广告是搜索引擎的主要变现方式,而按点击付费(Cost Per Click,CPC)又是其中被最广泛应用的计费模式。在CPC模式下,预估的CTR(p-CTR)越准确,点击率就会越高,收益就越大。通常,搜索广告的p-CTR是通过机器学习模型预估得到。提高p-CTR的准确性,是提升搜索公司、广告主、搜索用户三方利益的最佳途径。

传统上,Google、百度等搜索引擎公司以LogisticRegression(LR)作为预估模型。而从2012年开始,百度开始意识到模型的结构对广告CTR预估的重要性:使用扁平结构的LR严重限制了模型学习与抽象特征的能力。为了突破这样的限制,百度尝试将DNN作用于搜索广告,而这其中最大的挑战在于当前的计算能力还无法接受级别的原始广告特征作为输入。作为解决,在百度的DNN系统里,特征数从数量级被降到了,从而能被DNN正常地学习。这套深度学习系统已于2013年5月开始服务于百度搜索广告系统,每天为数亿网民使用。

DNN在搜索广告系统中的应用还远远没有成熟,其中DNN与迁移学习的结合将可能是一个令人振奋的方向。使用DNN,未来的搜索广告将可能借助网页搜索的结果优化特征的学习与提取;亦可能通过DNN将不同的产品线联系起来,使得不同的变现产品不管数据多少,都能互相优化。未来的DNN一定会在搜索广告中起到更重要的作用。

 

四、深度学习面临的问题、未来发展趋势和研究方向

4.1 深度学习面临的问题

问题一:深度学习理论方面

理论方面的问题主要体现在两个方面,一个是统计学习方面的,另一个是计算方面的。深度模型相对于浅层模型有更好的对非线性函数的表示能力。具体来说,对于任意一个非线性函数,根据神经网络的Universal Approximation Theory,一定能找到一个浅层网络和一个深度网络来足够好地表示。但深度网络只需要少得多的参数。但可表示性不代表可学习性。人们需要了解深度学习的样本复杂度,也就是需要多少训练样本才能学习到足够好的深度模型。从另一方面来说,不知道需要多少计算资源才能通过训练得到更好的模型,有什么理想的计算优化方法等等。由于深度模型都是非凸函数,这方面的理论研究极其困难。

问题二:深度学习数学建模方面

在推进深度学习的学习理论和计算理论的同时,是否可以提出新的分层模型,使其不但具有传统深度模型所具有的强大表示能力,还具有其他的好处,比如更容易做理论分析。另外,针对具体应用问题,如何设计一个最适合的深度模型来解决问题?研究发现,无论在图像深度模型,还是语言深度模型,似乎都存在深度和卷积等共同的信息处理结构。甚至对于语音声学模型,研究人员也在探索卷积深度网络。那么一个更有意思的问题是,是否存在可能建立一个通用的深度模型或深度模型的建模语言,作为统一的框架来处理语音、图像和语言。

问题三:深度学习应用实践方面

需要指出的是,对于互联网公司而言,如何在工程上利用大规模的并行计算平台来实现海量数据训练,是各家公司从事深度学习技术研发首先要解决的问题。传统的大数据平台如Hadoop,由于数据处理的Latency太高,显然不适合需要频繁迭代的深度学习。现有成熟的DNN训练技术大都是采用随机梯度法(SGD)方法训练的。这种方法本身不可能在多个计算机之间并行。即使是采用GPU进行传统的DNN模型进行训练,其训练时间也是非常漫长的,一般训练几千小时的声学模型所需要几个月的时间。而随着互联网服务的深入,海量数据训练越来越重要,DNN这种缓慢的训练速度必然不能满足互联网服务应用的需要。Google搭建的DistBelief,是一个采用普通服务器的深度学习并行计算平台,采用异步算法,由很多计算单元独立地更新同一个参数服务器的模型参数,实现了随机梯度下降算法的并行化,加快了模型训练速度。与Google采用普通服务器不同,百度的多GPU并行计算平台,克服了传统SGD训练的不能并行的技术难题,神经网络的训练已经可以在海量语料上并行展开。可以预期,未来随着海量数据训练的DNN技术的发展,语音图像系统的识别率还会持续提升。

目前最大的深度模型所包含的参数大约在100亿的数量级还不及人脑的万分之一。而由于计算成本的限制实际运用于产品中的深度模型更是远远低于这个水平。而深度模型的一个巨大优势在于在有海量数据的情况下很容易通过增大模型来达到更高的准确率。因此发展适合深度模型的更高速的硬件也将是提高深度模型的识别率的重要方向。

4.2深度学习的发展趋势

4.2.1大数据与深度学习

机器学习理论研究主要关注的问题是模型的泛化(generalization)能力与模型容量(capacity)之间的关系。模型的泛化能力说明该模型对训练集外的新数据是否能产生满意的预测或分类效果;模型容量是对模型灵活性的一个评估标准,标明了为使得模型具有更强的泛化性能所需提供的必要训练数据量。因此,用于模型训练的数据集规模是决定该模型是否具有泛化能力的重要条件。

深度结构模型由多级非线性变换构成,是典型的高复杂度模型,其模型容量比浅层模型显著增加。不充足的训练数据集通常导致模型过拟合、泛化能力差,这也是早期训练深度神经网络模型效果不佳的原因之一。

在当前的大数据环境下,训练数据不充足的瓶颈已突破;另一方面,大数据内部隐藏的复杂多变的高阶统计特性也正需要深度结构这样的高容量模型来有效捕获。因此,大数据与深度学习是必然的契合,互为助力,推动各自的发展。

在工业界一直有个很流行的观点:在大数据条件下,简单的机器学习模型会比复杂模型更加有效。例如,在很多的大数据应用中,最简单的线性模型得到大量使用。而最近深度学习的惊人进展,促使我们也许到了要重新思考这个观点的时候。简而言之,在大数据情况下,也许只有比较复杂的模型,或者说表达能力强的模型,才能充分发掘海量数据中蕴藏的丰富信息。运用更强大的深度模型,也许我们能从大数据中发掘出更多有价值的信息和知识。

浅层模型有一个重要特点,就是假设靠人工经验来抽取样本的特征,而强调模型主要是负责分类或预测。在模型的运用不出差错的前提下(如假设互联网公司聘请的是机器学习的专家),特征的好坏就成为整个系统性能的瓶颈。因此,通常一个开发团队中更多的人力是投入到发掘更好的特征上去的。要发现一个好的特征,就要求开发人员对待解决的问题要有很深入的理解。而达到这个程度,往往需要反复地摸索,甚至是数年磨一剑。因此,人工设计样本特征,不是一个可扩展的途径。

深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。所以“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1、强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2、明确突出了特征学习的重要性:通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,使分类或预测更加容易。

与人工规则构造特征的方法相比,利用大数据来学习特征,更能刻画数据丰富的内在信息。所以,在未来的几年里,深度模型将应用于大数据,而不是浅层的线性模型。

4.2.2互联网与深度学习

互联网作为一个数据平台、数据集散地,聚集了海量的数据,因此完全可以借助新的大数据理论和技术,分析其中蕴含的丰富内容和信息,发现其中存在的系统规律,以便互联网提供更好的服务和应用,为互联网行业实现更好、更快的持续发展提供定量化依据。目前,最典型、最主要的互联网服务和应用包括搜索引擎、网络新闻、电子商务、社交网络、网络游戏等,大数据新理论、新技术对其中的许多服务和应用都有实用价值,将助推互联网服务与应用得到更好的发展。

一方面,互联网与大数据的发展相辅相成,主要表现在:首先,互联网的发展为大数据的发展提供了更多数据、信息与资源;其次,大数据的发展为互联网的发展提供了更多的支撑、服务于应用。

另一方面,在当前的大数据环境下,训练数据问题已经逐渐被解决,同时,大数据内部隐藏的复杂多变的高阶统计特性也正需要深度结构这样的高容量模型来有效捕获。因此,大数据与深度学习是必然的契合,互为助力,推动各自的发展。

因此,互联网的发展为深度学习的迅速发展和应用提供了海量的数据信息资源和训练数据,同时,深度学习能够从互联网产生的数据中自动的提取多层特征表示,通过数据驱动的方式,采用一系列的非线性变换,从互联网原始数据中提取由低层到高层、由具体到抽象、由一般到特定语义的特征。

例如,传统的搜索,其交互方式是人工提炼出关键词输入,才返回答案。所以使用搜索引擎其实是一种技术,考验的是人能否准确观察问题、恰当提炼主题词,做到这些才有可能得到自己想要的信息。这就与一切搜索引擎“公平地为每个人提供信息”的初衷相悖了。而深度学习的技术配合上大数据的储备,语音搜索、图像搜索等新兴技术就不再仅仅是技术的噱头,而是将互联网搜索用户从数亿拓展到数十亿的大生意。这也是Google、苹果和百度纷纷在语音搜索上推出新产品的原因。

4.2.3深度学习的理论分析和数据表示

深度学习模型的一个开放性问题是为何深度学习的训练非常困难。一个可能的答案是深度结构神经网络有许多层,每一层由多个非线性神经元组成,使得整个深度结构神经网络的非线性程度更强,减弱了基于梯度的寻优方法的有效性;另一个可能的答案是局部极值的数量和结构随着深度结构神经网络深度的增加而发生定性改变,使得训练模型变得更加困难。造成深度学习训练困难的原因究竟是由于用于深度学习模型的监督训练准则大量存在不好的局部极值,还是因为训练准则对优化算法来说过于复杂,这是值得探讨的问题。此外,对堆栈自编码网络学习中的模型是否有合适的概率解释,能否得到深度学习模型中似然函数梯度的小方差和低偏差估计,能否同时训练所有的深度结构神经网络层,除了重构误差外,是否还存在其他更合适的可供选择的误差指标来控制深度结构神经网络的训练过程,是否存在容易求解的RBM配分函数的近似函数,这些问题还有待未来研究。是否可以考虑引入退火重要性抽样来解决局部极值问题,不依赖于配分函数的学习算法也值得尝试等等问题,都有待于我们进行研究。

数据的表示方式对学习性能具有很大的影响,除了局部表示、分布表示和稀疏分布表示外,可以充分利用表示理论研究成果。是否还存在其他形式的数据表示方式,是否可以通过在学习的表示上施加一些形式的稀疏罚,从而对RBM和自编码模型的训练性能起到改进作用,以及如何改进。是否可以用便于提取好的表示并且包含更简单优化问题的凸模型代替RBM和自编码模型;不增加隐单元的数量,用非参数形式的能量函数能否提高RBM的容量等,未来还需要进一步探讨这些问题。此外,除了卷积神经网络DBN和堆栈自编码网络之外,是否还存在其他可以用于有效训练的深度学习模型,有没有可能改变所用的概率模型使训练变得更容易,是否存在其他有效的或者理论上有效的方法学习深度学习模型,这也是未来需要进一步研究的问题。现有的方法,如DBN-HMM和DBN-CRF,在利用DBN的能力方面只是简单的堆栈叠加基本模型,还没有充分发掘出DBN的优势,需要研究DBN的结构特点,充分利用DBN的潜在优势,找到更好的方法建立数据的深度学习模型,可以考虑将现有的社会网络基因调控网络结构化建模理论以及稀疏化建模等理论运用其中。

4.2.4深度学习的特征提取

除了高斯-伯努利模型之外,还有哪些模型能用来从特征中提取重要的判别信息,未来需要提出有效的理论指导在每层搜索更加合适的特征提取模型。自编码模型保持了输入的信息,这些信息在后续的训练过程中可能会起到重要作用,未来需要研究用对比散度算法(Contrastive Divergence, CD)训练的RBM 是否保持了输入的信息,在没有保持输入信息的情况下如何进行修正。树和图等结构的数据由于大小和结构可变而不容易用向量表示其中包含的信息,如何泛化深度学习模型来表示这些信息,也是未来需要研究的问题。尽管当前的产生式预训练加判别式微调学习策略看起来对许多任务都运行良好,但是在某些语言识别等其他任务中却失败了,对这些任务,产生式预训练阶段的特征提取似乎能很好地描述语音变化,但是包含的信息不足以区分不同的语言,未来需要提出新的学习策略,对这些学习任务提取合适的特征,这可以在很大程度上减小当前深度学习系统所需模型的大小。

4.2.5深度学习的预训练算法

由于随机初始化的深度结构神经网络采用基于梯度的算法训练总是不能成功,而产生式预训练方法却有效,因此未来需要研究训练深度结构神经网络的贪婪逐层预训练算法在最小化训练数据的似然函数方面结果,是否过于贪婪,以及除了贪婪逐层预训练的许多变形和半监督嵌入算法之外,还有什么其他形式的算法能得到深度结构神经网络的局部训练信息。同时,无监督逐层训练过程对训练深度学习模型起到帮助作用,但有实验表明训练仍会陷入局部极值并且无法有效利用数据集中的所有信息,能否提出用于深度学习的更有效的优化策略来突破这种限制,基于连续优化的策略能否用于有效改进深度学习的训练过程,这些问题还需要继续研究。二阶梯度方法和自然梯度方法在理论研究中可证明对训练求解深度学习模型有效,但是这些算法还不是深度结构神经网络优化的标准算法,未来还需要进一步验证和改进这些算法,研究其能否代替微批次随机梯度下降类算法。当前的基于微批次随机梯度优化算法难以在计算机上并行处理,目前最好的解决方法是用GPU来加速学习过程,但是单个机器的GPU无法用于处理大规模语音识别和类似的大型数据集的学习,因此未来需要提出理论上可行的并行学习算法来训练深度学习模型。

4.3深度学习的未来

目前,深度学习仍有大量工作需要研究。当前的关注点还是从机器学习的领域借鉴一些可以在深度学习使用的方法,特别是降维领域。例如:目前一个工作就是稀疏编码,通过压缩感知理论对高维数据进行降维,使得非常少的元素的向量就可以精确的代表原来的高维信号。另一个例子就是半监督流行学习,通过测量训练样本的相似性,将高维数据的这种相似性投影到低维空间。另外一个比较鼓舞人心的方向就是evolutionary programming approaches(遗传编程方法),它可以通过最小化工程能量去进行概念性自适应学习和改变核心架构。

深度学习还有很多核心的问题需要解决:

(1)对于一个特定的框架,到底对于多少维的输入它可以表现得较优(如果是图像,可能是上百万维);

(2)对捕捉短时或者长时间的时间依赖,探寻哪种架构才是有效的;

(3)如何对于一个给定的深度学习架构,融合多种感知的信息;

(4)有什么正确的机理可以去增强一个给定的深度学习架构,以改进其鲁棒性和对扭曲和数据丢失的不变性;

(5)模型方面是否有其他更为有效且有理论依据的深度模型学习算法。

探索新的特征提取模型是值得深入研究的内容。此外有效的可并行训练算法也是值得研究的一个方向。当前基于最小批处理的随机梯度优化算法很难在多计算机中进行并行训练。通常办法是利用图形处理单元加速学习过程。然而单个机器GPU对大规模数据识别或相似任务数据集并不适用。在深度学习应用拓展方面,如何合理充分利用深度学习在增强传统学习算法的性能仍是目前各领域的研究重点。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值