什么是深度学习?
虽然很多人听说过深度学习,但却很少人真正理解什么是深度学习。有很多媒体吹捧深度学习是用来模拟人的大脑,从而实现所谓的人工智能(AI)。但事实上,人工智能才刚刚起步,离真正的AI还离得很远。即便深度学习跟大脑的工作机理有类似之处,把它说成模拟人脑过于夸张。事实上,即使神经科学家也未必清楚人的大脑是怎么运作的。
总而言之,深度学习是机器学习的一个大方向, 它并不是特指某种机器学习模型,而更像是一种方法论,思想和框架(Framework)。它主要是以构建深层结构(deep architecture) 来学习多层次的表示(multiplelevels of representation/abstraction)。 这种深层次结构提供几个重要的优点,这个我们会在后面讲到。
举个一个简单的例子,左边的图表示由一个隐式层构成的经典的神经网络, 右边的神经网络则拥有多层的隐式结构所以我们可以称它为是一种深度学习模型。除了神经网络,深度学习这种思想也可以应用在增强学习(Reinforcement Learning) , 高斯过程(Gaussian Process) 和 高斯混合模型(Gaussian Mixture Model)等其他机器学习模型上。
深度学习的发展
其实,构建多层次结构的想法在20多年前就已经有过。然而,由于种种原因,这种想法在当时未能取得理想的效果,反而比经典的神经网络在效果上要弱。直到几年前,深度学习才开始受到了广泛的关注。那究竟是什么原因使得这种“旧”思想重新找回它的地位呢? 归根结底,大致有三个原因:
- 硬件上的提高。 训练模型时需要的计算量非常之多,以前的硬件设备很难有效地训练复杂的深度学习模型。目前强大的GPU技术也有效地支撑着计算上的负担。
拥有更多的数据。 我们目前生活在大数据时代, 正是大数据有效地推动了深度学习的发展。比起其他机器学习模型,深度学习在大数据上表现地更好。
有了更好的训练方式。比如无监督预训练(unsupervised pre-training)和 dropout。 尤其,无监督预训练是在深度学习的发展史上一个里程碑似的发现,因为它,深度学习才有了卓越的表现也开始进入了人们的视野。
1. 无监督预训练(pre-training):
它的发现真正解决了深度模型的训练问题。它的主要思想是:对深度结构的每一层依次用RBM(Restricted Boltzmann Machine)或者Autoencoder做预训练。如下图所示,我们可以选择用RBM做无监督预训练。训练第一层的时候我们的输入是x (来自于给定的数据集)。等训练完第一层之后,我们就可以对每一个输入x得到它的隐式表达h1。在训练第二层的时候,我们就可以把所有之前得到的h1作为RBM的输入。这种训练过程继续持续下去,直到训练完最顶层。 从数学的角度来看,这种训练方式其实就是在不断地提高variational lower bounds. (我们会在后续的文章里解释这一点)。
无监督预训练[5]
可能会有的疑问是:我们为什么要做这种无监督预训练?反向传播(back-propgation)在多层次模型上到底有什么问题呢?其实反向传播算法的问题在于当我们对每一层做梯度计算(gradient computation)的时候,随着层次的深度,它的值会变得越来越小,我们称之为梯度消失问题(gradient vanishing problem). 所以,在一般情况下,当我们对深度模型的底层计算梯度的时候它的值已经变得非常小(或已接近于0)。类似的问题在训练RNN(Recurrent Neural Network)的时候也会存在,我们会在后面给予介绍。当然,也很容易想到,虽然梯度在底层上的变化很小,但如果有“足够多”的数据,我们也可以在无预训练的情况下训练出有效的模型。
2. Dropout:
简单介绍一下这个概念。Dropout是用来防止过拟合现象,我们也可以把它想象成是一种正规化(regularization)的方法。 通过dropout, 我们可以对每一层的unit做随机的丢弃(变成0)。通过简单的推导,我们不难发现加上dropout, 其实相当于对每一层的representation乘上一个随机矩阵,然后把它的结果当做是那一层的输入。因为这里引入了随机性,从贝叶斯理论的角度来看,这类似于在考虑无穷多(或非常多)的模型。这种基于Bayesian averaging的解释,也说明了dropout为什么能够防止过拟合。
深度学习的优势
深度学习比起其他的机器学习模型, 到底有什么优势? 或者可以说,有深层次结构的模型比起shallow模型有什么优势?总结如下:
分布式表示(distributed representation). 这是深度学习最重要的性质。举一个非常简单的例子,假设我们的词典上有16个词,如果用传统的bag-of-words 的表示方法,我们可以用16维的向量来表示每个词,向量的每一位代表某个词的出现与否。然而,如果我们用分布式表示的思想,我们也可以用四维的向量来代表每一个词,例如(0,0,0,1), (0,0,1,0),..., (1,1,1,1) 。 这个简单的例子其实用来说明:对同一个输入,我们可以有不同的配置(configuration)。
再举一个稍微复杂的例子。下面两幅图表示两种聚类的表达方式。 我们可以把左图看成是一般的聚类方式,右图看成是基于分布式表示的聚类方式。如左图所示,假设我们把整个的空间分成几个区域,那每一个区域可以由一组参数来描述(charaterize)。 比如在高斯混合模型(Gaussian Mixture Model)里,每一个混合模块(Mixture component)都由一组高斯分布的期望和协方差来(covariance)决定。相比之下,在右图中,每一个区域由三个子模块来表达。 这个时候我们只需要三组参数,而且每一个区域都会共享这三组参数,被称之为参数共享(parameter sharing)。 这个性质带来的一个重要的优点是 -- 非局部泛化(non-localgeneralization). 我们需要知道机器学习的目的就是要在测试级上(test set)得到更好的泛化(bettergeneralization)效果 。 在左图中,我们只能得到局部泛化(local generalization), 即便这样,为了达到局部泛化的目的,我们需要对每个区域有足够多的例子(training examples)。除此之外,分布式表示可以有效地应对curse of dimensionality问题 。
学习多层次的表示(learning multiple levels of abstraction/representation)。这类似于人的大脑:人们总是先学到简单的概念(concept), 然后以这个为基础,不断地学习更为复杂和具体(concrete)的概念。
如下图所示,当我们把深度学习应用在图像时,第一层学出来的是各种滤波器(filter), 第二层学出来的是脸部的某一个部位,最上层(第三层)就已经可以学出具体的人脸了。 整个过程,从下到上,就是在不断地学习更为复杂具体的特征。
自动学习特征:使用这种多层次结构可以帮助避免繁琐的人为特征设计(feature engineering)过程。 在传统的图像识别方法里,我们首先要做的就是对图片提取有效地特征(这些都是人为设计的),但问题是对不同类型的识别任务,我们需要人为设计不同类型的特征。然而,在深度学习框架下,我们的输入就是图片的每个像素,所以不需要做人为的特征提取 (当然,必要的预处理还是要做的)。
主要的深度学习模型及其应用
深度学习在语音识别,计算机视觉,自然语言处理领域里已经得到了突破性的进展。 在这里,我们大概地总结了一下比较常见的深度学习模型以及它的主要应用场景。
深度神经网络(Deep Neural Network)
这是最经典的深度学习模型, 也是对传统的神经网络最直接的扩展, 唯一的区别就是多加了几层隐式层。由于对每一层我们都使用非线性转换,这种模型可以表示非常复杂的输入和输出的关系 (其实,机器学习就是在寻找输入和输出之间的函数关系)。 它的应用基本上可以覆盖所有的分类和回归问题。
卷积神经网络(Convolutional Neural Network)
这种结构主要是为了图像识别而设计。基本上,它由卷积层(convolutional layer), pooling/subsampling层来构成, 每一层都有它特定的功能,比如通过pooling/subsampling来减少hidden units的数目,和提供局部不变性(local invariance)。 最经典的例子有GoogLeNet[1]。
卷积神经网络
循环神经网络(Recurrent Neural Network)
它类似于隐马尔科夫模型(hidden markov model), 区别在于它的隐式层是分布式表达(distributedrepresentation), 而在隐马尔科夫模型上每个隐式节点是离散变量(decrete variable). 对于循环神经网络,我们可以叠加多层的隐式层来构建深度模型。(不难看出,如果把循环神经网络按时间轴来展开,它其实就是个沿着时间上的深度模型)
循环神经网络 [4]
它的应用主要是针对跟时序或者自然语言处理相关的数据。然而,训练这种模型会遇到很大的难题,即所谓的gradient vanishing/exploding的问题。当我们计算梯度的时候,需要把模型按照时间轴来展开,这时候梯度的计算会包含雅克比行列式(Jacobian)的多次方。如果它的值小于1, 则会有gradient vanishsing(变成0)的问题。相反,如果它的值大于1,则会有gradient explode (变成很大的值)的问题。 为了解决此优化问题,人们提出了LSTM (long short term memory) 单元(cell). 这种单元内部由多种门(gate)来构成,每个门控制着相应的信息流动(information flow)。 左下图表示LSTM单元,右下图表示用LSTM单元来替代原有的隐式单元(hiddenunit)。
LSTM并不是新的发现,早在1997年Hochreiter发表的论文上已经提出过这个模型。但是直到最近才得到了业界的关注。 近两年,LSTM在自然语言处理上取得的成就可以说是非常了不起: LSTM网络既可以用来表示语义(semantic meaning), 也可以跟卷积网络(Convolutional Neural Net)结合在一起对给定的图片生成文字(image captioning), 还可以把两个LSTM网络拼在一起来构建高性能的语音识别系统[3]。
值得一提的是,上面所描述的LSTM单元内部结构(左上图)只是一种可行的方案。除此之外,还有很多不同的构造方案,但至于哪一种比较好,还没有较好的理论支持。
卷积神经网络+循环神经网络(CNN + RNN/LSTM)
这算是深度学习领域里比较令人兴奋的应用。它的思想很简单,CNN模块负责提取图像的特征,RNN/LSTM模块负责生成文字。 在两个模块之间会有两者共享的隐式表达(hidden representation), 我们可以认为它是用来表示图像的意思(semantic meaning).
CNN + LSTM [7]
给定一个图片,自动生成标题(image caption)是它一个最重要的应用。 下面的例子取自于[7].
如下图所示[6],CNN+LSTM/RNN 这种模型通过稍加改进就可以应用在视频数据上。视频数据是由每一个相连的 frame构成的。在这里,我们用CNN模块从每一个frame里提取相应的隐式特征,然后就可以同时放进LSTM网络模块, 从而实现类似的功能。
CNN + LSTM在视频上的应用.
循环神经网络 + 循环神经网络(RNN/LSTM + RNN/LSTM)
这种模型的思想跟上面有点类似,只不过这种组合可以应用在机器翻译上。这种模型其实就是把两个LSTM网络拼在一起,一个LSTM网络负责一种语言,另一个LSTM网络负责另一种语言。不难想象,连接这两个模块的隐式表达就是语义(semantic meaning).
Sequence to sequence learning [8]
参考文献
[1] Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., ... & Rabinovich, A. (2014). Going deeper with convolutions. arXiv preprintarXiv:1409.4842.
[2] Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.
[3] Graves, A., Mohamed, A. R., & Hinton, G. (2013, May). Speech recognition with deep recurrent neural networks. In Acoustics, Speech and SignalProcessing (ICASSP), 2013 IEEE International Conference on (pp. 6645-6649). IEEE.
[4] Graves, A. (2013). Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850.
[5] Bengio, Y., Lamblin, P., Popovici, D., & Larochelle, H. (2007). Greedy layer-wise training of deep networks. Advances in neural information processingsystems, 19, 153.
[6] Donahue, J., Hendricks, L. A., Guadarrama, S., Rohrbach, M., Venugopalan, S., Saenko, K., & Darrell, T. (2014). Long-term recurrent convolutionalnetworks for visual recognition and description. arXiv preprint arXiv:1411.4389.
[7] Karpathy, A., & Fei-Fei, L. (2014). Deep visual-semantic alignments for generating image descriptions. arXiv preprint arXiv:1412.2306.
[8] Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural networks. In Advances in neural information processingsystems(pp. 3104-3112)
[9] Socher, R., Bauer, J., Manning, C. D., & Ng, A. Y. (2013). Parsing with compositional vector grammars. In In Proceedings of the ACL conference.