0.概述
以下是Wiki上对深度学习的下的定义: Deep learning refers to a sub-field of machine learning that is based on learning several levels of representations, corresponding to a hierarchy of features or factors or concepts, where higher-level concepts are defined from lower-level ones, and the same lower-level concepts can help to define many higher-level concepts.
深度学习就是学习多个级别的表示和抽象,帮助理解数据,如图像、声音和文本。深度学习的概念源于人工神经网络的研究, 含多隐层的多层感知器就是一种深度学习结构。那些涉及从输入产生输出的计算,我们可以用流程图来表示, 流程图的一个特殊的概念就是它的深度: 从输入到输出的路径的最长长度。传统的前馈神经网络可以理解为 深度等于层数(隐层数+1)的网络。深度学习通过组合低层特征形成更加抽象的高层表示(属性类别或特征), 以发现数据的分布式特征表示。
1.深度学习产生的背景
1.1深度不够的缺陷
在很多情况下,深度为2就已足以在给定精度范围内表示任何函数了,例如逻辑门、正常 神经元、sigmoid-神经元、SVM中的RBF(Radial Basis Function)等,但这样也有一个代价: 那就是图中需要的节点数会很多,这也就意味着当我们学习目标函数时,需要更多的计算 单元和更多的参数。理论结果显示,对于某一类函数,需要的参数的个数与输入的大小是 成指数关系的,逻辑门、正常神经元、RBF单元就属于这类。后来Hastad发现,当深度为d时, 这类函数可以用O(n)个节点(输入为n个)的神经网络有效表示,但当深度被限制为d-1时, 则需要有O(n2)个节点来表示。
我们可以讲深层结构看做是因子分解。大多数随机选择的函数,无论是用深层的结构还是用浅层结构, 都是无法有效的表示的。但很多可以用深层结构有效表示的却无法用浅层的来有效表示(参见推荐 阅读[5]中的polynomials example)。这种深层表示的现象表明,对于一些需要表示的函数, 其中存在一些结构化的特性。如果其中没有结构化的东西,那么它将无法很好的泛化。
1.2大脑具有深层的结构
例如,被深入研究的视觉皮层(如下图(a)所示)包含一系列的区域,每个区域都有输入, 信号流从一个区域到下一个区域(也有跳过连接或在某种程度上的并行路径,所以情况更复杂)。 在这种功能层次结构中,每个层次上的输入代表了不同层次的抽象特征,越上层的特征, 又越底层的信息表征,抽象性越高,如下图(c)所示。
值得注意的是,大脑中的表示是介于密集分布和纯局部之间,也就意味着它们是稀疏的:大脑中大约1%的神经元是同时活动的。
1.3认知过程是深层次的
• 人们是使用层次化的方式来组织它们的想法和观念的; • 人们首先是学习简单的概念,然后将它们组合起来以表示更加抽象的概念; • 工程师们习惯于将解决问题的方案分解为多个层次的抽象和处理过程。
如果能够像人一样学习到这些概念,那将会是非常棒的。知识工程(Knowledge Engineering)在这方面是失败的, 但语言表达概念的内省的方法也表明了稀疏表示:对于一个特定的输入(就像一幅视觉的图像), 仅仅只有一小部分的单词或概念是相关的。
2.深度学习的巨大突破
2.1学术上的突破
在2006年以前,尝试训练一个深层的、监督的前馈神经网络往往会比浅层的(1~2个隐层)网络产生更糟糕的结果(无论是训练误差,还是测试误差)。 但在2006年,以Hinton为首的研究人员在深度置信网络(Deep Belief Networks,DBNs)方面的划时代性的工作,将此终结。其代表性的论文是: • Hinton, G. E., Osindero, S. and Teh, Y., A fast learning algorithm for deep belief nets. Neural Computation. 18:1527-1554, 2006 • Yoshua Bengio, Pascal Lamblin, Dan Popovici and Hugo Larochelle, Greedy Layer-Wise Training of Deep Networks, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems 19 (NIPS 2006), pp. 153-160, MIT Press, 2007 • Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra and Yann LeCun. Efficient Learning of Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems (NIPS 2006), MIT Press, 2007
在这些论文中提出了以下几个非常关键的原则: • 非监督学习被用来(预)训练各个层; • 非监督学习在之前学习到的层次之上,一次只学习一个层次,每个层次学习到的结果将作为下一个层次的输入; • 除了一些专门用于预测的层次外,用监督学习来调整层与层之间的权重。 这些DBNs用RBMs(Restricted Boltzmann Machines)来作为每个层的非监督学习, Bengio的paper研究并比较了RBMs和auto-encoders(通过瓶颈内部层的表示来预测它的输入的神经网络)。 Ranzato的paper将稀疏的auto-encoder(与sparse coding相似)用在传统的神经网络结构中。 关于auto-encoders和传统的神经网络结构将在后续的文章中讲解。
2.2学术中的研究和应用
(1)计算机视觉
·ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton, NIPS 2012. ·Learning Hierarchical Features for Scene Labeling, Clement Farabet, Camille Couprie, Laurent Najman and Yann LeCun, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013. ·Learning Convolutional Feature Hierachies for Visual Recognition, Koray Kavukcuoglu, Pierre Sermanet, Y-Lan Boureau, Karol Gregor, Michaël Mathieu and Yann LeCun, Advances in Neural Information Processing Systems (NIPS 2010), 23, 2010. ……
(2)语音识别
微软研究人员通过与hintion合作,首先将RBM和DBN引入到语音识别声学模型训练中,并且在大词汇量语音识别系统中获得巨大成功,使得语音识别的错误率相对减低30%。 但是,DNN还没有有效的并行快速算法,目前,很多研究机构都是在利用大规模数据语料通过GPU平台提高DNN声学模型的训练效率。 在国际上,IBM、google等公司都快速进行了DNN语音识别的研究,并且速度飞快。 国内方面,科大讯飞、百度、中科院自动化所等公司或研究单位,也在进行深度学习在语音识别上的研究。
(3)自然语言处理等其他领域
很多机构在开展研究,但目前深度学习在自然语言处理方面还没有产生系统性的突破。
2.3工程中的应用
• 微软:2009年,首先将深度学习应用到语音识别;如今,已将深度学习融入到实际的产品当中,如Xbox。 • 谷歌:“Google Brain”项目,用1.6万台机器,从1000万张图像中识别出猫,这是完全的非监督学习 (We never told it during the training, 'This is a cat,' ... It basically invented the concept of a cat.)。 • 百度:2012年夏开始从事深度学习方面的工作,在语音识别和图像识别中取得了巨大成功, 目前也已初步融入到百度的产品当中,如百度语音助手、百度寻人等产品。
3构建深度学习的方法
深度学习的概念和思想很简单,然而如果构建一个合理的深度网络拓扑结构,如何学习网络中的信号传递权值, 都是非常困难的问题。下面介绍几种非常perfect的方法。
3.1 Autoencoder[4]
最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统, 如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重, 自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征,在研究中可以发现, 如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度, 甚至在分类问题中比目前最好的分类算法效果还要好!这种方法称为AutoEncoder,如下图所示。
当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,例如在AutoEncoder的基础上 加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0, 这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder方法。
3.2 Sparse Coding[5]
Sparse Coding是一种利用非监督的方法来学习表示数据的过完备基的方法,它的目的就是为了找到一组基向量$\phi _{i}$, 进而将输入向量$\mathbf{x}$表示为这组基向量的线性组合:
主成分分析(Principal Component Analysis,PCA)是一种有效的学习一组完备的基向量的方法, 而Sparse Coding则希望学习一组过完备的基向量。这样做的好处在于,过完备的基向量能够更好 的捕获到输入数据当中的结构和模式。然而,使用过完备的基向量带来的一个问题是, 该组基向量表示输入向量的结果不唯一,也就是说系数$a _{i}$是不唯一的。因此,在Sparse Coding当中, 我们引入一些额外的准则,即稀疏性(sparsity),来解决这个问题。具体而言,这里的稀疏性是指, 系数$a _{i}$中大多数都为零或接近为零,从优化问题的角度来讲,就是要使得系数中尽可能少的系数是 尽可能的比零大,这样就可以得到输入的唯一标示。
3.3 Restricted Boltzmann Machine(RBM)
Boltzmann Machine其实是一种无向图,里面的节点是互相连接的,但不一定是全连接,也即不是每个节点都两两相连, 连接着的两个节点之间就有一个权值。为理解方便就假设节点只能取值为0或者1,有些节点值是已知的,有些是未知的, 把已知的节点集合记为V,未知的节点集合记为H,这样就把所有节点分成两个集合,其实集合V就可以认为是visible层, 集合H就可以认为是hidden层。如果hidden层中的节点都不互相连接,visible层中的节点也都不互相连接,那么就成为了RBM模型。
在神经网络中,两层神经网络(即一个hidden层和一个output层,visible层不算在内)的建模能力是很强的, 但要求hidden层的节点数够多,但节点数太多就会导致计算量的复杂,矩阵的维护会相当大。 一个很好想到的方法就是将层数加大,通过层数的增多来缓解单层中节点数过多的负担, 比如设置两个hidden层,每层100个节点,就相当于单个hidden层100×100个节点的建模能力, 同理三个hidden层,每层分别是100、200、300个节点,就相当于单层的100×200×300个节点的建模能力。 然而这样做的问题在于,当层数大于2时,经典的训练方法效果会较差,因为参数的局部极小值太多, 容易收敛到一个不好的极值。Hinton把RBM(Restricted Boltzmann Machine)层叠在一起,训练出权值, 然后把这个权值当成是下一个RBM层的输入作为权值的初始值,利用传统的梯度下降法去训练网络, 得到了更好的结果,也即在每个RBM层通过筛选得到较好的参数初始值,使得最后的结果更好。
4.小结
当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限, 针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近, 表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。
虽然距离深度学习的突破已经有六年多了,但它仍处于发展初期,大量工作还需要研究。 模型方面是否有其他更为有效且有理论依据的深度模型学习算法,探索新的特征提取模型是值得深入研究的内容。 此外有效的可并行训练算法也是值得研究的一个方向。当前基于最小批处理的随机梯度优化算法很难在多计算机中 进行并行训练。通常办法是利用图形处理单元加速学习过程,然而单个机器GPU对大规模数据识别或相似任务数据集 并不适用。在深度学习应用拓展方面, 如何充分合理地利用深度学习在增强传统学习算法的 性能仍是目前各领域的研究重点。
参考文献
[1]Introduction to Deep Learning Algorithms. [2]A tutorial on deep learning, Video. [3]A Brief Introduction to Deep Learning [4]Autoencoders and Sparsity [5]Sparse Coding [6]关于深度学习(deep learning) [7] 百度百科-深度学习 [8] 孙志军等,深度学习研究综述.
推荐阅读
[1] Chris Bishop, “Pattern Recognition and Machine Learning”, 2007 [2] Simon Haykin, “Neural Networks: a Comprehensive Foundation”, 2009 (3rd edition) [3] Richard O. Duda, Peter E. Hart and David G. Stork, “Pattern Classification”, 2001 (2nd edition) [4]Deep Learning Tutorial:http://deeplearning.net/tutorial/ [5]Yoshua Bengio, Learning Deep Architectures for AI, Foundations & Trends in ML, 2(1), 2009 [6] Unsupervised Feature Learning and Deep Learning:UFLDL Tutorial [7] http://deeplearning.net/ [8] 深度学习相关软件包(Matlab): https://github.com/rasmusbergpalm/DeepLearnToolbox