深度学习技术白皮书118文档格式.docx
《深度学习技术白皮书118文档格式.docx》由会员分享,可在线阅读,更多相关《深度学习技术白皮书118文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
可以自动生成数据模型,用较少的参数表示复杂的函数。
在分层训练的过程中,本应用于修正模型参数的误差随着层数的增加指数递减,这导致了模型训练的效率低下。
◆浅层:
有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。
需要依靠人工来抽取样本的特征,手工选取特征是一件非常费力的事情,能不能选取好很大程度上靠经验和运气。
2、深度学习的框架
2.1卷积神经网络
卷积神经网络更改了神经网络的结构,不再是全连接的结构了,大量的减少了网络的参数;
同时,通过参数共享进一步减少了网络参数。
它考虑到了空间结构和局部特征,非常适用于图像处理领域。
◆优点:
具有位移、缩放以及其他形式扭曲不变性
隐式地从训练数据中进行学习,避免了显式的特征抽取
同一特征映射面上的神经元权值相同,所以网络可以并行学习
布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度,在语音识别和图像处理方面有着独特的优越性
2.2循环神经网络
鉴于深度学习在现实任务中的广泛适用性,它已经吸引了众多技术专家、投资者和非专业人员的关注。
尽管深度学习最著名的成果是使用前馈卷积神经网络来解决计算机视觉问题,少数公众的注意力已经投入到使用递归神经网络来对时间关系进行建模。
在普通的全连接网络或者循环神经网络中,每层神经元的信号只能向上传播,样本的处理在各个时刻独立,因此又称为前馈神经网络。
而在循环神经网络中,神经元的输出可以在下一个时间戳直接作用到自身;
即第i层的神经元在m时刻的输入包含i-1层在该时刻的输出以及其自身在m-1时刻的输出。
在此基础上发展出了长短期记忆网络。
可以对时间序列上的变化建模,适用于处理语音、自然语言等领域
2.3长短期记忆网络
长短期记忆人工神经网络是一种时间递归神经网络,是为了解决长期以来问题而专门设计出来的,所有的循环神经网络都具有一种重复神经网络模块的链式形式。
在标准循环神经网络中,这个重复的结构模块只有一个非常简单的结构层。
二、卷积神经网络
1、卷积神经网络基本原理
卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积或相关计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习的代表算法之一。
由于卷积神经网络能够进行平移不变分类(shift-invariantclassification),因此在文献中也被称为“平移不变人工神经网络(Shift-InvariantArtificialNeuralNetworks,SIANN)”。
,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。
一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;
其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。
特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。
此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。
卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。
由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显示的特征抽取,而隐式地从训练数据中进行学习;
再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。
卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
卷积神经网络是我认为非常好用的一类神经网络结构,当数据具有局部相关性时是一种比较好选择,在图像、自然语言处理、棋类竞技、新药配方研制等方面有广泛应用。
CNN的最大特点就是稀疏连接(局部感受)和权值共享。
上面左为稀疏连接,右为权值共享。
稀疏连接和权值共享可以减少所要训练的参数,减少计算复杂度。
比如,经典的LeNet-5网络结构:
1.1激活函数
(1)Sigmoid函数
(2)Tanh函数:
1.2输入层
CNN的输入层一般为一个n维矩阵,可以是图像、向量化后的文本等等。
比如一幅彩色图像:
1.3卷积层
卷积操作在数学上的定义如下:
卷积层的作用:
当数据及其周边有局部关联性时可以起到滤波、去噪、找特征的作用;
每一个卷积核做特征提取得到结果称为featuremap,利用不同卷积核做卷积会得到一系列featuremap,这些featuremap大小为长宽深度(卷积核的个数)并作为下一层的输入。
以图像处理为例,卷积可以有至少3种理解:
a.平滑
当设置一个平滑窗口后(如3*3),除了边缘外,图像中每个像素点都是以某个点为中心的窗口中各个像素点的加权平均值,这样由于每个点都考虑了周围若干点的特征,所以本质上它是对像素点的平滑。
b.滤波
将信号中特定波段频率过滤的操作,是防干扰的一类方法,如果滤波模板(卷积核)是均匀分布,那么滤波就是等权滑动平均,如果模板是高斯分布,那么滤波就是权重分布为钟形的加权滑动平均,不同的模板能得到图像的不同滤波后特征。
c.投影
卷积是个内积操作,如果把模板(卷积核)拉直后看做一个基向量,那么滑动窗口每滑动一次就会产生一个向量,把这个向量往基向量上做投影就得到featuremap,如果模板有多个,则组成一组基,投影后得到一组featuremap。
卷积和权重共享可以在保证效果的基础上大大降低模型复杂度,说明如下:
输入层为5*5矩阵,卷积核为3*3矩阵,隐藏层为:
3*3矩阵:
1.4Zero-Padding
Zero-Padding是一种影响输出层构建的方法,思路比较简单:
把输入层边界外围用0填充,当我们希望输出空间维度和输入空间维度大小一样时可以用此方法,例如下图:
当输入为4*4,卷积核为3*3时,利用Zero-Padding可以让输出矩阵也是4*4。
Zero-Padding一方面让你的网络结构设计更灵活,一方面还可以保留边界信息,不至于随着卷积的过程信息衰减的太快。
大家如果使用Tenserflow会知道它的padding参数有两个值:
SAME,代表做类似上图的Zeropadding,使得输入的featuremap和输出的featuremap有相同的大小;
VALID,代表不做padding操作。
卷积时有很多种填充图像的方法,以下主要介绍两种,一种是相同填充,一种是有效填充。
第一种是以3x3的网格在5x5的图像上进行有效填充的卷积过程:
第二种是使用3x3的网格在5x5图像上进行相同填充的卷积过程,
回顾整个过程,就是一层一层地增加网络深度,最终得到一个又深又窄的表示,然后把其连接到全连接层,然后训练分类器。
1.5采样层(pooling)
通过卷积后。
模型的参数规模大幅下降,但对于复杂网络参数个数依然很多,且容易造成过拟合,所以一种自然的方式就是做下采样,采样依然采用滑动窗口方式,常用采样有Max-Pooling(将Pooling窗口中的最大值作为采样值)和Mean-Pooling(将Pooling窗口中的所有值相加取平均,用平均值作为采样值),一个例子如下:
实际上也有人尝试抛弃Pooling层而采用Stride大于1的卷积层,例如,以下例子中Stride=2,效果类似:
另外,如果卷积层的下一层是pooling层,那么每个featuremap都会做pooling,与人类行为相比,pooling可以看做是观察图像某个特征区域是否有某种特性,对这个区域而言不关心这个特性具体表现在哪个位置(比如:
看一个人脸上某个局部区域是否有个痘痘)。
通过卷积后,为了引入不变性,同时防止过拟合问题或欠拟合问题、降低计算量,我们常进行池化处理。
池化过程如上图所示。
因此池化过后,通常图像的宽度和高度会变成原来的1/2。
其中包括了Maxpooling、Meanpooling和Stochasticpooling三种池化方法。
两种较为常用的是:
Maxpooling和Meanpooling。
Maxpooling是选择kernel范围之内的最大值;
Meanpooling则是选择kernel范围之内的平均值。
1.1.6全连接样层
全连接层一般是CNN的最后一层,它是输出层和前面若干层的过渡层,用来组织生成特定节点数的输出层。
1.7参数求解
在图像处理中,往往把图像表示为像素的向量,比如一个1000×
1000的图像,可以表示为一个1000000的向量。
在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×
1000000=10^12,这样就太多了,基本没法训练。
所以要想使用神经网络进行图像处理,必须先减少参数加快速度。
(1)局部感知
卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。
一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。
因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。
网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。
视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。
如下图所示:
左图为全连接,右图为局部连接。
在上右图中,假如每个神经元只和10×
10个像素值相连,那么权值数据为1000000×
100个参数,减少为原来的千分之一。
而那10×
10个像素值对应的10×
10个参数,其实就相当于卷积操作。
(2)参数共享
但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。
在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。
怎么理解权值共享呢?
我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。
这其中隐含的原理则是:
图像的一部分的统计特性与其他部分是一样的。
这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。
更直观一些,当从一个大尺寸图像中随机选取一小块,比如说8×
8作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个8×
8样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。
特别是,我们可以用从8×
8样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。
如下图所示,展示了一个33的卷积核在55的图像上做卷积的过程。
每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
(3)多卷积核
上面所述只有100个参数时,表明只有1个100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。
在有多个卷积核时,如下图所示:
上图右,不同颜色表明不同的卷积核。
每个卷积核都会将图像生成为另一幅图像。
比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。
如下图所示,下图有个小错误,即将w1改为w0,w2改为w1即可。
下文中仍以w1和w2称呼它们。
下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。
其中需要注意的是,四个通道上每个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。
所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×
2×
2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×
2表示卷积核大小。
(4)Down-pooling
在通过卷积获得了特征(features)之后,下一步我们希望利用这些特征去做分类。
理论上讲,人们可以用所有提取得到的特征去训练分类器,例如softmax分类器,但这样做面临计算量的挑战。
例如:
对于一个96X96像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个(96−8+1)×
(96−8+1)=7921维的卷积特征,由于有400个特征,所以每个样例(example)都会得到一个892×
400=3,168,400维的卷积特征向量。
学习一个拥有超过3百万特征输入的分类器十分不便,并且容易出现过拟合(over-fitting)。
为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。
因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值(或最大值)。
这些概要统计特征不仅具有低得多的维度(相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。
这种聚合的操作就叫做池化(pooling),有时也称为平均池化或者最大池化(取决于计算池化的方法)。
至此,卷积神经网络的基本结构和原理已经阐述完毕。
(5)多层卷积
在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。
2、卷积神经网络LeNet-5
最初的网络结构来源于论文:
《Gradient-basedlearningappliedtodocumentrecognition》(论文里使用原始未做规范化的数据时,INPUT是32×
32的),我用以下结构做说明:
LeNet-5一共有8层:
1个输入层+3个卷积层(C1、C3、C5)+2个下采样层(S2、S4)+1个全连接层(F6)+1个输出层,每层有多个featuremap(自动提取的多组特征)。
在LeNet-5中,输入层是32x32的尺寸。
在第一次卷积中,使用了6个卷积核,得到了C1:
6张28x28的特征图。
然后进行下采样,得到S2:
特征图宽、高变为原来的1/2,即28/2=14,特征图尺寸变为14x14,特征图张数不变。
再进行第二次卷积,使用了16个卷积核,得到了C3:
16张10x10的特征图。
然后进行下采样,得到S4:
特征图宽、高变为原来的1/2,即10/2=5,特征图尺寸变为5x5,特征图张数不变。
之后进入卷积层C5,120张1x1全连接后的特征图,与S4全连接。
2.1输入层
采用keras自带的MNIST数据集,输入像素矩阵为28×
28的单通道图像数据。
2.2C1卷积层
由6个featuremap组成,每个featuremap由5×
5卷积核生成(featuremap中每个神经元与输入层的5×
5区域像素相连),考虑每个卷积核的bias,该层需要学习的参数个数为:
(5×
5+1)×
6=156个,神经元连接数为:
156×
24×
24=89856个。
2.3S2下采样层
该层每个featuremap一一对应上一层的featuremap,由于每个单元的2×
2感受野采用不重叠方式移动,所以会产生6个大小为12×
12的下采样featuremap,如果采用MaxPooling/MeanPooling,则该层需要学习的参数个数为0个(如果采用非等权下采样——即采样核有权重,则该层需要学习的参数个数为:
(2×
2+1)×
6=30个),神经元连接数为:
30×
12×
12=4320个。
2.4C3卷积层
这层略微复杂,S2神经元与C3是多对多的关系,比如最简单方式:
用S3的所有featuremap与C3的所有featuremap做全连接(也可以对S3抽样几个featuremap出来与C3某个featuremap连接),这种全连接方式下:
6个S2的featuremap使用6个独立的5×
5卷积核得到C3中1个featuremap(生成每个featuremap时对应一个bias),C3中共有16个featuremap,所以该层需要学习的参数个数为:
5×
6+1)×
16=2416个,神经元连接数为:
2416×
8×
8=154624个。
2.5S4下采样层
同S2,如果采用MaxPooling/MeanPooling,则该层需要学习的参数个数为0个,神经元连接数为:
16×
4×
4=1280个。
2.6C5卷积层
类似C3,用S4的所有featuremap与C5的所有featuremap做全连接,这种全连接方式下:
16个S4的featuremap使用16个独立的1×
1卷积核得到C5中1个featuremap(生成每个featuremap时对应一个bias),C5中共有120个featuremap,所以该层需要学习的参数个数为:
(1×
1×
16+1)×
120=2040个,神经元连接数为:
2040个。
2.7F6全连接层
将C5层展开得到4×
120=1920个节点,并接一个全连接层,考虑bias,该层需要学习的参数和连接个数为:
(1920+1)*84=161364个。
2.8输出层
该问题是个10分类问题,所以有10个输出单元,通过softmax做概率归一化,每个分类的输出单元对应84个输入。
三、循环神经网络
1、循环神经网络
循环神经网络(RecurrentNeuralNetwork,RNN)是一种节点定向连接成环的人工神经网络。
这种网络的内部状态可以展示动态时序行为。
不同于前馈神经网络的是,RNN可以利用它内部的记忆来处理任意时序的输入序列,这让它可以更容易处理如不分段的写作文本、语音识别等。
它包含循环的网络,允许信息的持久化,RNN循环结构如下:
在上面的示例图中,神经网络的模块“A”正在读取某个输入x_i,并输出一个值h_i。
循环可以使得信息可以从当前步传递到下一步。
RNN可以被看做是同一神经网络的多次赋值,每个神经网络模块会把消息传递给下一个。
所以,如果我们将这个循环展开:
展开的RNN
链式的特征揭示了RNN本质上是与序列和列表相关的。
2、RNN的长期依赖(Long-TermDependencies)问题
有时候,我们仅仅需要知道先前的信息来执行当前的任务。
例如,我们有一个语言模型用来基于先前的词来预测下一个词。
如果我们试着预测“thecloudsareinthesky”最后的词,我们并不需要任何其他的上下文——因此下一个词很显然就应该是sky。
在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN可以学会使用先前的信息。
不太长的相关信息和位置间隔
但是同样会有一些更加复杂的场景,假设我们试着去预测“IgrewupinFrance…IspeakfluentFrench”最后的词。
当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的France的上下文的。
这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。
不幸的是,在这个间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力。
在深度学习领域,传统的多层感知机(MLP)具有出色的表现,取得了许多成功,它曾在许多不同的任务上——包括手写数字识别和目标分类上创造了记录。
甚至到了今天,MLP在解决分类任务上始终都比其他方法要略胜一筹。
尽管如此,大多数专家还是会达成共识:
MLP可以实现的功能仍然相当有限。
究其原因,人类的大脑有着惊人的计算功能,而“分类”任务仅仅是其中很小的一个组成部分。
我们不仅能够识别个体案例,更能分析输入信息之间的整体逻辑序列。
这些信息序列富含有大量的内容,信息彼此间有着复杂的时间关联性,并且信息长度各种各样。
这是传统的MLP所无法解决的,RNN正式为了解决这种序列问题应运而生,其关键之处在于当前网络的隐藏状态会保留先前的输入信息,用来当前网络的输出。
许多任务需要处理序列数据,比如Imagecaptioning,speechsynthesis,andmusicgeneration均需要模型生成序列数据,其他领域比如
timeseriesprediction,videoanalysis,andmusicalinformationretrieval等要求模型的输入为序列数据,其他任务比如机器翻译,人机对话,controllingarobot的模型要求输入输出均为序列数据。
RNN模型可以用来处理序列数据,RNN包含了大量参数,且难于训练(时间维度的vanishing/exploding),所以出现一系列对RNN优化,比如网络结构、求解算法与并行化。
今年来bidirectionalRNN(BRNN)与LSTM
在
imagecaptioning,languagetranslation,andhand