Figure1. Deep learning导图
序言
深度学习(deep learning)的观点最早可以追溯到1940-1960年间的掌握论(cybernetics),之后在1980-1990年间发展为连接主义(connectionism),第三次发展浪潮便是2006年由人工神经网络(Artificial neural network)扩展开来并发展成为本日十分火热的深度学习(Figure 2)。实际上,深度学习的兴起和发展是非常自然的,人们在运用经典的机器学习方法时,须要对详细的问题或者数据相当地理解并从中人工地提取特色才能很好的办理问题,然而人工提取特色是非常繁芜耗时的。因此,能够自动从数据中学习特色的方法就具有非常大的发展潜力,这类方法也便是一类被称为表征学习(Representation learning)的方法。

紧接着,研究者们创造,深层次的表征学习模型可以从大略的特色中抽象出更为繁芜的特色并且更有利于终极的分类判别,由此便发展出了深度学习框架。当然,深度学习的发展也离不开BP等算法、打算硬件、数据规模等的发展。深度学习可以理解成是机器学习的一种框架,与经典的浅层学习(Shallow learning)如SVM,LR等相对应,可以认为是机器学习发展的第二大阶段。目前,深度学习在人工智能领域发挥着非常主要的浸染,乃至可以说人工智能的发展正是得益于深度学习的发展,由于它们之间有着密不可分的关系,非专业人士常常会将深度学习、人工智能、表示学习、机器学习等观点混为一谈。
其余,最近几年,由于人工智能、互联网等火速发展,它们背后的技能也备受学术界和业界职员的推崇,个中深度学习由于其强大的威力以及较低的门槛而受到最多的关注。本文致力于从模型、技能、优化方法、常用框架平台、运用、实例等多个方面来向读者先容深度学习,阐述深度学习到底有哪些威力,并且文末会给读者推举一些深度学习的学习资源。
Figure 2. Neural network发展进程
深度学习是什么?
如序言所述,深度学习是机器学习的一种框架,是人工智能的根本技能之一,其与人工智能、表示学习以及机器学习的关系由Figure 3可见,即机器学习是实现人工智能的一种方法,而表示学习又是一种机器学习的框架,深度学习包含在表示学习中。
Figure 3. Deep learning定位(图片来源:Ian Goodfellow et al. Deep learning.)
深度学习模型可以自动从输入数据中学习特色并用于演习,模型的浅层构造提取大略的特色,深层构造则基于浅层构造获取的特色提取更为抽象的特色,这是深度学习差异于传统机器学习以及普通表征学习模型的学习办法。Figure 4展示了不同机器学习方法的学习办法。
Figure 4. Deep learning特色学习过程(图片来源:Ian Goodfellow et al. Deep learning.)
那么,深度学习的深度到底表示在什么方面呢?对付这个问题,目前紧张有两种不雅观点:第一种不雅观点认为,深度学习的深度是由于打算图的长度决定的,也便是模型将输入映射到输出的过程中,打算的路径长度。对付该不雅观点,如何定义打算单元至关主要,而目前又没有统一的关于打算单元的定义;第二种不雅观点则认为深度学习的深度是由描述输入到输出之间观点关系图的深度决定的,也便是所定义模型的构造深度,然而这种构造上的深度每每与打算的深度不一致。以上两种不雅观点供应了两种理解深度学习的角度,我们既可以将其理解为模型构造的深度也可以理解为打算的深度,笔者认为这对付理解深度学习的实质并无影响。
常见模型
前面多次提到深度学习是一种机器学习框架,那么该框架下的详细的模型有哪些呢?下面为大家先容几种常见的深度学习模型。
MLP:
MLP (Multilayer perceptron)是一个范例的深度学习模型,也叫前向深度网络(Feedforward deep network),紧张由多层神经元构成的神经网络组成(Figure 5),包括输入层、中间层和输出层,层与层之间是全连接的,除了输入层,其他层每个神经元包含一个激活函数,因此,MLP可以算作是一个将输入映射到输出的函数,这个函数包括多层乘积运算和激活运算。MLP通过前向传播打算终极的丢失函数值,再通过反向传播算法(BP)打算梯度,利用梯度低落来对模型参数进行优化。MLP的涌现办理了感知器无法学习XOR函数的问题,使得人们对神经网络重拾信心。
DBN与DBM:
DBN(Deep belief network)也是一种比较经典的较早提出的深度学习模型。DBN是基于RBM(Restricted Boltzmann Machine)模型建立的,更详细地,DBN模型可以算作是由多个RBM构造和一个BP层组成的,其演习过程也是从前到后逐步演习每一个RBM构造,使得每一个RBM的隐层达到最优,从而最优化整体网络。值得把稳的是,在DBN的构造中,只有末了两层之间是无向连接的,别的层之间均具有方向性,这是DBN差异与后面DBM的一个主要特色。
DBM(Deep Boltzmann machine)模型也是一种基于RBM的深度模型,其与RBM的差异就在于它有多个隐层(RBM只有一个隐层)。DBM的演习办法也是将全体网络构造算作多个RBM,然后从前到后逐个演习每个RBM,从而优化整体模型。在DBM模型中,所有相邻层之间的连接是无向的。DBN与DBM模型中层间节点之间均无连接,且节点之间相互独立。
Figure 6. DBN与DBM模型示意图(Hinton et al. 2006)
CNN:
CNN(convolutional neural network)是一种前向人工神经网络模型,由Yann LeCun等人在1998年正式提出,其范例的网络构造包括卷积层、池化层和全连接层。下图(Figure 7)所示便是一种范例的CNN构造(LeNet-5),给定一张图片(一个演习样本)作为输入,通过多个卷积算子分别依次扫描输入图片,扫描结果经由激活函数激活得到特色图,然后再利用池化算子对特色图进行下采样,输出结果作为下一层的输入,经由所有的卷积和池化层之后,再利用全连接的神经网络进行进一步的运算,终极结果经输出层输出。
CNN模型强调的是中间的卷积过程,该过程通过权值共享大幅度降落了模型的参数数量,使得模型在不失落威力条件下可以更为高效地得到演习。CNN模型是非常灵巧的,其构造可以在合理的条件下任意设计,比如可以在多个卷积层之后加上池化层,正是由于这种灵巧性,CNN被广泛地运用在各种任务中并且效果非常显著,比如后面将要先容的AlexNet、GoogLeNet、VGGNet以及ResNet等。
当然,这种灵巧性使得CNN的构造本身也成为了一种超参,这就难以担保针对特界说务所采取的模型是否是最优模型。在现实的运用中,CNN更多的用于处理一些网格数据,例如图片,对付这类数据CNN的卷积过程能发挥的浸染相对更大。当然,CNN是可以完成多种类型的任务的,包括图片识别、自然措辞处理、视频剖析、药物挖掘以及游戏等。
Figure 7. CNN范例构造及运算过程(Yann LeCun et al. 1998)
RNN:
RNN(Recurrent neural network)是一类用于处理序列数据的神经网络模型。范例的RNN模型常日是由三类神经元组成,分别是输入、隐蔽和输出,个中输入单元只与隐蔽单元相连,隐蔽单元则与输出、上一个隐蔽单元以及下一个隐蔽单元相连,输出单元只接管隐蔽单元的输入。在RNN演习过程中,一样平常须要学习优化三种类参数,即输入映射到隐层的权重、隐层单元之间转换权重以及隐层映射到输出的权重。
如图(Figure 8)是范例的RNN构造以及打算过程。在RNN的打算过程中,序列数据前面部分的信息通过隐蔽单元通报到后面的部分,因此在后面部分的打算过程中,前面部分的信息也考虑进来,这就仿照了序列不同部分之间的依赖关系。显然,RNN模型更适用于序列性的数据,尤其是高下文干系的序列,这使得RNN在情绪剖析、图像标注、机器翻译等方面运用十分广泛。值得把稳的是在不同的任务中,RNN的构造有所差异,比如在图像标注的场景中RNN是一对多的构造,而在情绪剖析的场景中则是多对一的构造(Figure 9)。
Figure 8. RNN构造及打算过程(Ian Goodfellow \emph{et al.} \emph{Deep learning}.)
Figure 9. RNN在不同运用处景下的构造。从左至右依次对应图像分类、图像标注、感情剖析、机器翻译和视频分类。
LSTM:
LSTM(Long short-term memory)模型实质上也是一种RNN模型,它与RNN的差异在于它引入了元胞状态(Cell state)的观点,并且可以通过门(gate)来向元胞状态加入或者删除信息,其余,LSTM还可以通过门构成封闭的回路(Figure 10),这使得LSTM得以战胜RNN无法有效影象长程信息的弱点。如图(Figure 10)是一种常见的LSTM单元,个中包含输入、输入门、遗忘门、状态、输出门、输出等组成单元。
在LSTM模型中所谓的门实在便是一个函数运算,例如输入门可以是所有输入经由权重乘积运算之后的sigmoid函数运算。对付一个序列型数据样本,当前输入节点会综合上一个节点的隐层输出信息,分别通过多个不同门运算之后输出作为当前节点的隐层输出信息,并且同时与上一个节点的元胞状态信息进行综合输出作为当前节点的元胞状态信息输出(Figure 11)。LSTM既然是一种分外的RNN 模型,那么很多可以运用RNN的场景LSTM也适用,例如情绪剖析、图像标注等等。当然,LSTM也具有非常多的变种,它们在不同的任务中表现不同,这也须要运用的时候有一些理解。
Figure 10. LSTM构造示意图(Ian Goodfellow et al. Deep learning.)
Figure 11. LSTM数据流示意图(图片来自网络)
Deep autoencoder:
Autoencoder是一种神经网络,其输入层与输出层表示相同的含义并且具有相同数量的神经元。Autoencoder的学习过程便是将输入编码然后再解码重构输入作为输出的过程,将输入编码天生的中间表示的浸染类似于对输入进行降维,因此autoencoder常常用于特色提取、去噪等。
普通的autoencoder一样平常是指中间只有一层隐层的网络模型,而deep autoencoder则是中间有多层隐层的网络模型。Deep autoencoder的演习与DBM演习类似,每两层之间利用RBM进行预演习,终极通过BP来调度参数。同样地,deep autoencoder也有非常多的变种(例如sparse autoencoder,denoise autoencoder等),分别对应于不同的任务。
Figure 12. Deep autoencoder构造示意图
深度网络的优化方法
前面例举了一些深度学习比较常见的一些模型,那么这些模型都是如何进行优化的呢?本节将先容一些比较常用的深度网络优化的方法。
SGD:
SGD(Stochastic Gradient Descent)即随机梯度低落算法,是机器学习中最常用的优化方法之一。SGD的事情事理便是梯度低落,也便是以一定的步长(learning rate)沿着参数梯度的方向调度参数,只不过在SGD中是对随机抽取的一个样本通过梯度低落更新一次参数。在实际运用SGD的时候有多个参数可以调节,紧张包括学习率、权值衰减(weight decay)系数、动量以及学习率衰减系数,通过调度这几个参数,可以使得模型以较快的速率收敛且不易过拟合。SGD参数更新过程如下:
个中,θ表示参数,η表示学习率,J(θ)则表示优化目标函数,J(θ)对θ的梯度是在随机抽取的样本
上打算得到的。SGD的优点是一样平常会有比较好的优化效果,但是SGD的参数(学习率)难以调节,收敛速率慢,而且易于收敛到局部最优,有可能会困在鞍点。
Adagrad:
Adagrad的优化过程也是基于梯度的,该优化方法可以对每一个参数逐一自适应不同的学习速率,对付比较稀疏的特色以较大的学习率更新,对付非稀疏的特色则用较小的学习率更新。这种自适应的过程是通过利用累积梯度来归一化当前学习率的办法实现的,其优化参数的过程如下:
个中,
表示前t次迭代过程中参数θ梯度的平方和,ε则是一个很小的值,防止涌现分母为0的缺点。Adagrad的优点便是适宜处理梯度稀疏的情形,缺陷是仍旧须要认为设定一个全局的学习率η,须要打算参数梯度序列的平方和,增加了打算量,并且学习率衰减过快。
Adadelta:
Adadelta是Adagrad方法的扩展。前面提到在Adagrad中由于累积梯度增长过快会导致学习率衰减过快,Adadelta的涌现便是为理解决这一问题的。详细的实现办法是在之前的参数序列开一个窗口,只累加窗口中参数梯度,并且以平方的均值代替Adagrad中的平方和。其参数更新过程如下:
个中
表示对窗口内梯度g平方求均值。Adadelta具有自适应学习率的优点,优化速率较快,但在演习后期会涌现较明显的抖动。
RMSprop:
RMSprop优化方法本色上可以算作是Adadelta的一个特例,将Adadelta中的
部分更换成g的均方根(RMS)即变为RMSprop,参数更新:
个中,
表示对g的均方根。RMSprop的效果介于Adagrad和Adadelta之间,比较适用于非平稳目标,但是RMSprop仍旧依赖于全局的学习率参数。
Adam:
Adam(Adaptive Moment Estimation)同样也是一种参数学习率自适应的方法,它紧张是依据梯度的一阶矩和二阶矩来调度每个参数整学习率。详细的参数更新方法如下:
个中,分别近似梯度的一阶矩和二阶矩,而和则分别是的校正,使得
对矩的估计近似无偏。本色上,Adam是一种加了动量的RMSprop,因此它适用于处理特色稀疏和非平稳目标的数据。
Adamax:
Adamax是Adam的一种变体,它在学习率的限定上做了一些改动,即利用累积梯度和前一次梯度中的最大值来对学习率进行归一化。这样的限定在打算上相对大略。
Nadam:
Nadam也是Adam的一种变体,它的变动在于它带有Nesterov动量项。一样平常来说,Nadam的效果会比RMSprop和Adam要好,但是在打算上比较繁芜。
深度网络中常用的技能
在实际的运用中,深度学习模型在数据量不是足够大的条件下是非常随意马虎过拟合的,因此须要通过一些技能和技巧来掌握演习过程,减弱乃至防止严重的过拟合征象。那么,有哪些类似的常用的技能呢?接下来我们就先容一些比较有用的进一步优化模型演习的技能。
BP algorithm:
BP(Backpropagation)算法实在只是一种演习神经网络模型的方法,紧张是通过链式求导法则对目标函数求关于参数的导数,求导的过程从输出层一贯反向通报至输出层,根据求出的导数利用前一节先容的优化算法对参数进行更新,从而优化模型。在运用BP算法优化模型的过程中,常常会涌现梯度消逝、陷入局部最优以及梯度不稳定等问题,这些问题会导致模型收敛缓慢、泛化能力降落等后果。当然,这些问题的涌现也与模型中选择的激活函数有一定的关系,因此合理选择激活函数会一定程度上弱化以上问题。目前,运用比较多的激活函数紧张有sigmoid、tanh、ReLu、PReLu、RReLU、ELU、softmax等等,根据详细的问题选择激活函数有利于BP算法的高效实行。
Dropout:
前面提到深度学习模型是非常随意马虎过拟合的,紧张的缘故原由在于深度学习模型是非常繁芜的,具有大量的参数,在样本量不是足够多的情形下是很难担保模型的泛化能力的。因此,一种防止过拟合的方法dropout被提出,dropout的紧张思想是在演习的过程中随机使一些神经元失落活来降落模型的繁芜度,当然这个过程是并不影响BP的实行。Dropout的详细实行过程如图(Figure 13)所示,通过比较相同的网络在利用dropout前后的分类效果,创造在MNIST、CIFAR-10、CIFAR-100、ImageNet、TIMIT等数据集上利用dropout的预测效果更好。
Figure 13. Dropout过程示意图(Nitish Srivastava et al. 2014)
Batch Normalization:
深度学习网络在演习的过程中有一个很大问题是数据流经每层时分布会随着参数的变革而发生变革,也便是常说的内部协变量漂移征象(internal covariate shif),这种征象会导致模型的演习非常缓慢,并且对参数的初始化有较高的哀求。Batch Normalization的涌现则很大程度上办理了这一问题,其浸染的事理是直接在每层的输入上加上一层归一化层,先对输入进行归一化再通报至激活函数。经由Batch Normalization处理之后,就可以利用较大的学习率从而加快演习速率,并且降落初始化的哀求。加入Batch Normalization来演习深度网络的过程如图(Figure 14)。Sergey Ioffe et al.通过实验创造加入Batch Normalization的网络在ImageNet数据集上表现更好。
Figure 14. 加入Batch Normalization的网络的演习过程(Sergey Ioffe et al. 2015)
Early stopping:
Early stopping也是一项在实际运用深度学习模型时防止过拟合的技能,该技能紧张通过掌握演习的轮数(epoch)来防止过拟合,也便是在validation loss不再持续低落时自动停滞演习。实际上,early stopping可以运用在很多机器学习问题上,例如非参回归、boosting等。其余,early stopping也可以算作是一种正则化的形式。
Regularization:
这里所说的regularization是指狭义上像L1、L2等对掌握权重的正则化,不包括前面提及的Dropout和early stopping等。对网络的权重参数加上L1或L2正则项也是一种比较常用的防止过拟合的手段,L1/L2正则化的方法在机器学习中运用非常广泛,这里也不再赘述。
深度学习常见的实现平台和框架
深度学习模型由于其繁芜性对机器硬件以及平台均有一定的哀求,一个好的运用平台可以使得模型的演习事半功倍。那么,针对深度学习有哪些比较盛行好用的平台和框架呢?下面就向大家先容一些比较常用的深度学习平台以及它们的优缺陷。
Caffe:
Caffe是由美国加州伯克利分校视觉与学习中央在2013年开拓并掩护的机器学习库,它对卷积神经网络具有非常好的实现(http://caffe.berkeleyvision.org )。Caffe是基于C/C++开拓的,以是模型打算的速率相对较快,但是Caffe不太适宜文本、序列型的数据的处理,也便是在RNN的运用方面有很大的限定,其优缺陷可以大略的总结如下:
优点:适宜图像处理;版本稳定,打算速率较快
缺陷:不适宜RNN运用;不可扩展;不便于在大型网络中利用;C/C++编程难度较大,不足简洁;险些不再更新
Theano/Tensorflow:
Theano和Tensorflow都是比较底层的机器学习库,并且都是一种符号打算框架,它们都适用于基于卷积神经网络、循环神经网络以及贝叶斯网络的运用,它们都供应Python接口,Tensorflow还供应C++接口。Theano是在2008年由蒙特利尔理工学院LISA实验室开拓并掩护的(http://deeplearning.net/software/theano/ ),非常适宜数值打算优化,并且支持自动打算函数梯度,但它不支持多GPU的运用。Tensorflow是由Google Brain团队开拓的,目前已经开源,由Google Brain团队以及浩瀚利用者们共同掩护(https://www.tensorflow.org )。
Tensorflow通过预先定义好的数据流图,对张量(tensor)进行数值打算,使得神经网络模型的设计变得非常随意马虎。与Theano比较,Tensorflow支持分布式打算和多GPU的运用。就目前来看,Tensorflow是在深度学习模型的实现上运用最为广泛的库。
Keras:
Keras是一个基于Theano和Tensorflow的,高度封装的深度学习库(https://keras.io/ )。它是由是由谷歌软件工程师Francois Chollet开拓的,在开源之后由利用者共同掩护。Keras具有非常直不雅观的API,利用起来非常的简洁,一样平常只须要几行代码便可以构建出一个神经网络模型。目前,Keras已经发布2.0版本,支持利用者从底层自定义网络层,这很大程度上填补了之前版本在灵巧性上不足的毛病。
Torch/PyTorch:
Torch是基于Lua措辞开拓的一个打算框架(http://torch.ch/ ),可以非常好的支持卷积神经网络。在Torch中网络的定义因此图层的办法进行的,这导致它不支持新类型图层的扩展,但是新图层的定义相比拟较随意马虎。Torch运行在LuaJIT上,速率比较快,但是目前Lua并不是主流编程措辞。其余,值得把稳的是Facebook在2017年1月公布了Torch 的Python API,即PyTorch的源代码。PyTorch支持动态打算图,方便用户对变长的输入输出进行处理,其余,基于python的库将大幅度增加Torch的集成灵巧性。
Lasagne:
Lasagne是一个基于Theano打算框架(http://lasagne.readthedocs.io/en/latest/index.html ),它的封装程度不及Keras,但它供应小的接口,这也使得代码与底层的Theano/Tensorflow比较为简洁。Lasagne这种半封装的特性,平衡了利用上的便捷性和自定义的灵巧性。
DL4J:
DL4J(Deeplearning4j)是一个基于Java的深度学习库(https://deeplearning4j.org/ )。它是由Skymind公司在2014年发布并开源的,其包含的深度学习库是商业级运用的开源库,由于是基于Java的,以是可以与大数据处理平台Hadoop、Spark等集成利用。DL4J依赖ND4J进行根本的线性代数运算,打算速率较快,同时它可以自动化并行,因此十分适宜快速办理实际问题。
MxNet:
MxNet是一个由多种措辞开拓并且供应多种措辞接口的深度学习库(http://mxnet.io/ )。MxNet支持的措辞包括Python,R,C++,Julia,Matlab等,供应C++, Python, Julia, Matlab, JavaScript,R等接口。MxNet是一个快速灵巧的学习库,由华盛顿大学的Pedro Domingos及其研究团队开拓和掩护。目前,MxNet已被亚马逊云做事所采取。
CNTK:
CNTK是微软的开源深度学习框架(http://cntk.ai ),是基于C++开拓的,但是供应Python接口。CNTK的特点是支配大略,打算速率比较快,但是它不支持ARM架构。CNTK的学习库包括前馈DNN、卷积神经网络和循环神经网络。
Neon:
Neon是Nervana公司开拓的一个基于Python的深度学习库(http://neon.nervanasys.com/docs/latest/ )。该学习库支持卷积神经网络、循环神经网络、LSTM以及Autoencoder等运用,目前也是开源状态。有宣布称在某些测试中,Neon的表现要优于Caffe、Torch和Tensorflow。
深度学习网络实例
通过前面的先容,读者对付深度学习已经有了比较详细的理解,那么实际运用中深度学习网络究竟是怎么样设计的呢?本节我们向大家先容几种运用效果非常好的深度学习网络,从中我们可以体会到神经网络设计的一些技巧。
LeNet:
LeNet是由Yann LeCun等最早提出的一种卷积神经网络,我们在先容CNN的时候已经提到过该网络(Figure 7)。LeNet网络统共有7层(不包括输入层),分别是C1、S2、C3、S4、C5、F6以及OUTPUT层,个中C1、C3为卷积层,S2、S4为下采样层,C5、F6为全连接层。该网络的输入时32 X 32的图片,C1包含6个特色图(feature maps),C3包含16个特色图,两个全连接层的神经元数量分别是120和84,终极的输出层含有10个神经元,对应十个种别。这个网络在演习过程中统共须要优化大约12000个参数,在手写数字识别(MNIST数据集)的任务上效果远优于传统的机器学习方法。这一网络的提出供应了一个卷积神经网络运用的范例,也便是将卷积层与采样层(后来的池化层)交替连接,末了在展开连接全连接层。实践证明在很多任务中这一网络构造具有较好的表现。
AlexNet:
AlexNet是Alex和Hinton参加ILSVRC2012比赛时所利用的卷积神经网络,该网络可以说是更深层次的CNN在大数据集上运用的开山之作,随后诸多运用均是在此网络的根本上发展而来。AlexNet由5个卷积层和3个全连接层组成,个中第1,2,5卷积层后加入了池化过程(Figure 15),各层神经元的数目分别是253440、186624、64896、64896、43264、4096、4096和1000,总计涉及的参数达到6千万。该网络的演习集是来自ImageNet的140万包含1000个类别的高分辨率图片,个中有5万作为验证集,15万作为测试集。在演习该网络的过程中,采取ReLu作为激活函数,并且对图片数据通过水平翻转等方法进行了扩增,为了防止过拟合,该网络中还利用了dropout技能,网络的优化采取了批量梯度低落并加入了动量和权值衰减。全体演习过程在两个GTX 580的GPU上持续了5-6天。终极的结果是该网络在ILSVRC2012比赛中取得了最好的成绩,并且远远由于其他方法。
Figure 15. AlexNet的网络构造(Alex Krizhevsky et al. 2012)
ZF Net:
ZF Net是在ILSVRC2013比赛中由Zeiler和Fergus根据AlexNet提出的网络。实际上,该网络只是对AlexNet做了一些修正和调度,因此二者之间的网络构造差别不大(Figure 16)。紧张的改动表示在ZF Net中第一个卷积层利用了较小的卷积核并且将卷积步幅减少为原来的一半,这种改动保留了前两层中更多的图片特色信息。ZF Net末了的表现胜于AlexNet,在缺点率高下降了1.7个百分点。其余,通过ZF Net作者们提出了一种可视化卷积层特色的方法。
Figure 16. ZF Net的网络构造(Matthew D. Zeiler et al. 2013)
VGG Net:
VGG Net是ILSVRC2014比赛中表现非常突出的卷积神经网络模型,其特点便是小卷积核,更深的卷积层次。该网络统共有19层,16个卷积层,3个卷积层,所有卷积核的大小均为3,多个卷积层叠加再插入池化层(Figure 17; E)。比较于ZF Net,该网络分类缺点率低落了9%,分类效果显著提升。VGG Net的涌现具有主要意义,它为人们供应了一个高效设计和利用CNN的方向,即层次更大略更深更有利于深层次特色的挖掘。
Figure 17. VGG Net的网络构造(Karen Simonyan et al. 2014)
GooLeNet:
GooLeNet也是ILSVRC2014比赛中涌现的卷积神经网络模型,该模型在这次比赛取得最佳成绩。GooLeNet的层次比VGG Net更深,统共有22层,个中21个卷积层,1个softmax输出层(Figure 18)。值得把稳的是,该网络中运用了多个(9个)Inception(network in network)模块,也便是该网络并非是层与层之间按顺序依次叠加的,而是有很多并联的连接,并且模型的末了也没有运用全连接层。Inception模块的利用使得更多的特色信息被网络,去掉了全连接层减少了大量的参数,一定程度上降落了过拟合的可能。GooLeNet终极的分类结果比较于VGG Net提高了0.6%。GooLeNet的意义在于它供应了一种新的层间并联连接办法,这对往后CNN网络构造的设计具有非常大的启示浸染。
Figure 18. GooLeNet的网络拓扑构造(Christian Szegedy et al. 2015)
ResNet:
ResNet是ILSVRC2015比赛中的冠军模型,是由微软亚洲研究院的研究职员提出的,该网络深达152层,151个卷积层,1个softmax输出层,每隔两层加入残差(Figure 19)。该网络模型将分类缺点率降落至3.6%,其意义在于提出了一种新的网络构造,即残差神经网络。残差神经网络的提出一定程度上办理了深度网络无法演习的问题,为将来的运用供应非常好的改进方向。
Figure 19. ResNet的网络拓扑构造(Kaiming He et al. 2015)
深度学习的运用
打算机视觉:
打算机视觉是深度学习运用最为火热的领域之一,前面例举的几个网络构造都是运用在打算机视觉领域的图片分类问题上的,办理这类问题一样平常都会选择CNN模型。然而,对付打算机视觉领域有很多其他方面的问题,纯挚运用CNN模型效果每每并不佳,例如图像标注、图像天生等问题,还须要进一步设计针对特定类型问题的模型。
目前,打算机视觉领域前沿研究最为火热的问题紧张有:
图像分类,将不同类型的图像分开,类似于ILSVRC比赛的任务;
图像检测,把图像中不同的物体用框框出来;
图像分割,把图像中不同的物体边界描述出来;
图像标注,也便是看图说话,把对应的图像用笔墨描述出来;
图像天生,便是根据笔墨描述天生图像;
视频预测,推测下韶光图像中物体将会如何移动。
语音识别:
语音识别的目的便是将声音信息转化成笔墨,这一任务是人机交互的根本。对付这一任务,传统的办理方法一样平常是依赖序列模型来对语音序列建模,例如隐马尔可夫模型、高斯稠浊模型等,这些传统的方法单词识别的缺点率较高。语音识别的过程一样平常涉及语音特色提取和声学建模两个方面,研究者创造利用CNN来提取语音特色可以大幅降落(6%-10%)单词识别缺点率(Ossama Abdel-Hamid et al. 2014),而利用CNN进行声学建模同样具有更强的适应能力。随后,研究者们创造更深的卷积神经网络具有更好的表现,同时在解码搜索阶段将CNN、RNN以及LSTM联合起来利用会进一步提高语音识别的准确率。目前,IBM沃森研究中央宣布称将ResNet与多个LSTM结合起来会使得语音识别的单词缺点率降落至5.5%。实际上,苹果公司的Siri、微软的Cortana以及科大讯飞的语音识别技能都采取了最新的技能。
自然措辞处理:
自然措辞处理涵盖多种详细的运用,紧张包括:
词性标注,给定句子文本,标注出句子每个词的词性;
句法剖析,剖析句子文本的语法;
文本分类,把内容想靠近或者主题干系的文本归为相同的种别;
自动问答,人机交互的一种,人供应问题,机器反馈答案;
机器翻译,不同措辞之间相互转译;
自动择要,给定一个文档,自动天生该文章的内容梗概,即择要。
目前,深度学习网络已经被广泛运用在以上任务中,早在2014年Nal Kalchbrenner等人用一种动态卷积神经网络来对语句建模(Nal Kalchbrenner et al. 2014),Baotian Hu等人利用CNN来处理语义匹配的问题,Chenxi Zhu等人则利用双向LSTM模型来办理文本匹配问题。值得把稳的是,2014年ACL的最佳论文中,Devlin等人将神经网络模型引入机器翻译过程,随后便呈现出一大批办理机器翻译问题的深度学习模型,这使得机器翻译的准确率大幅提高。
推举系统:
推举系统是一类根据用户的历史数据来向用户推送用户可能感兴趣的信息。深度学习在推举系统中的运用紧张包括音乐推举、电影推举、广告投放以及新闻推送等。例如,Balazs Hidasi等人提出了一种基于RNN的推举系统,很好的办理了传统推举系统只能基于短期会话做推举的问题;2014年Google利用类似MLP的网络实现了音乐语音的排名,取得了很不错的效果;Spotify利用一种范例的CNN模型进行音乐推举。
深度学习延伸
深度学习的快速发展,不仅使得其在很多实际运用中脱颖而出,而且还带动了很多利用深度学习很随意马虎实现的运用或者机器学习模式的发展。深度学习在人工智能领域的影响是大家公认的,但是纯挚的只靠深度学习是无法让人工智能快速发展下去的。因此,新的机器学习办法和网络构造被提出,本节着重先容几种最近非常盛行的学习办法。
迁移学习:
迁移学习(transfer learning)是指利用已经演习好模型的参数来帮助演习须要演习的模型。当深度学习网络比较深的时候,演习模型就会相对很繁芜耗时,通过迁移学习就可以利用之前别人已经演习好的深度网络的参数来辅导自己模型的演习,这样可以提高大网络演习的效率。
如图(Figure 20)所示,Task A, B, C 是三个不同的任务,但是它们的数据存在一定的干系性,因此它们之间可以共用网络前面的几层,也便是说在任务A中演习好的前面几层网络的参数可以辅导B和C任务的演习。迁移学习范例例子便是谷歌公司DeepMind做的一篇文章(Andrei A. Rusu et al. 2016),文章中演习网络模型来玩三个游戏,Pong, Labyrinth 和Atari,然后利用个中一个游戏演习好的网络来玩其余两个游戏,创造结果表现很好。目前,基于深度学习的迁移学习运用已经非常广泛,例如,利用基于RBM和CNN稠浊模型的迁移学习框架来对图像进行分类,这种方法在Pascal VOC2007和Caltech101数据集上取得了较高的分类准确率。
Figure 20. 迁移学习示意图(Yoshua Bengio et al. 2014)
强化学习:
强化学习(reinforcement learning)是机器学习的一个主要分支,紧张思想是目标随着环境的改变而行动,担保终极最大化预期利益。一个强化学习模型一样平常包括环境、工具、动作和反馈几个基本组件,强化学习模型适宜用于掌握物理系统(例如无人机)、与用户交互(例如优化用户体验)、办理逻辑问题、学习序列性算法以及玩游戏等,最范例的强化学习的例子便是DeepMind开拓的AlphaGo,它通过自己与自己不断地的对弈的办法来强化自己的落子准确性。其余,还有一种将强化学习和深度学习结合起来的学习框架DQN,在自然措辞处理中已经运用得比较多,例如利用DQN学习对话策略、信息检索等。
对抗天生网络:
对抗天生网络(generative adversarial network, GAN)是2014年由Ian Goodfellow等人首次提出的机器学习模型,其紧张思想便是有G和D两个模型,G卖力学习产生数据的分布,D卖力判别数据是否来自真实的分布,G的目标便是只管即便天生可以瞒过D的数据,而D的目标是竭力将G天生的数据判别出来,这个对抗过程经由不断地迭代演习终极就会得到数据的天生模型G。GAN在最近两年被研究得非常火热,目前已经有各种各样变种涌现,例如基于CNN的DCGAN、基于LSTM的GAN(Fang Zhao et al. 2016)、基于autoencoder的GAN(Alireza Makhzani et al. 2015)以及基于RNN的C-RNN-GAN(Olof Mogren et al. 2016)等等。这些不同变种的GAN模型已经被广泛运用在各个领域,例如图像修复、超级分辨率、去遮挡、语义剖析、物体检测以及视频预测等。
学习资源
在文章的末了,我们列出一些深度学习干系的学习资源,希望对读者有帮助。
github资料:
深度学习干系资源,包含论文、模型、书、课程等等https://github.com/endymecy/awesome-deeplearning-resources
跟对抗网络模型干系的papers:https://github.com/zhangqianhui/AdversarialNetsPapers
Ian Goodfellow等编著的Deep learning书本:https://github.com/HFTrader/DeepLearningBook
LISA实验室供应的深度学习教程:
https://github.com/lisa-lab/DeepLearningTutorials
Udacity深度学习课程的代码:
https://github.com/udacity/deep-learning
另一个深度学习资源库:
https://github.com/chasingbob/deep-learning-resources
还有一个awesome深度学习资源库,也非常全面:https://github.com/ChristosChristofidis/awesome-deep-learning
非常全面的公开数据集:
https://github.com/XuanHeIIIS/awesome-public-datasets
在线课程:
斯坦福李飞飞CS231n:
http://cs231n.github.io
斯坦福Richard Socher关于NLP的课程CS224d:
http://cs224d.stanford.edu/
伯克利Sergey Levine等教授的深度强化学习课程CS294:
http://rll.berkeley.edu/deeprlcourse/
牛津大学Nando de Freitas的机器学习课程:
https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/
LeCun的深度学习课程:
http://cilvr.cs.nyu.edu/doku.php?id=courses:deeplearning2014:start
Hinton的神经网络课程:
https://www.coursera.org/learn/neural-networks
神经网络的有一个传授教化视频:
https://www.youtube.com/playlist?list=PL6Xpj9I5qXYEcOhn7TqghAJ6NAPrNmUBH
会议/期刊:
会议:ICLR, NIPS, ICML, CVPR, ICCV, ECCV, ACL
期刊:JMLR, MLJ, Neural Computation, JAIR, Artificial Intelligence
本文紧张参考资料:
[1]. Ian Goodfellow et al. Deep learning. 2016
[2]. Yoshua Bengio et al. Representation Learning: A Review and New Perspectives. 2014
[3]. Yann LeCun et al. Gradient-based learning applied to document recognition. 1998
[4]. Alex Krizhevsky et al. ImageNet Classification with Deep Convolutional Neural Networks. 2012
[5]. Matthew D Zeiler et al. Visualizing and Understanding Convolutional Networks. 2013
[6]. Nitish Srivastava et al. Dropout: A Simple Way to Prevent Neural Networks from overfitting. 2014
[7]. Sergey Ioffe et al. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. 2015
[8]. 侯一民,周慧琼,王政一. 深度学习在语音识别中的研究进展综述。2016
[9]. 刘树杰,董力,张家俊等. 深度学习在自然措辞处理中的运用。2015
[10]. Understanding LSTM Networks. colah's blog
作者:轩辕(笔名),数据派研究部志愿者,清华大学研究生,喜好机器学习、大数据干系话题。
更多精彩干货内容,敬请搜索关注清华-青岛数据科学研究院官方"大众平台“数据派THU”