赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 图像处理与人工智能

首页 > 专业技术 > 图像处理与人工智能 > 深度学习神经网络
深度学习神经网络

深度学习模型是多隐藏层的神经网络,其中的层是由多段非线性数据变换构成的,多层神经网络包含了许多非线性变换,善于分辨出数据中的复杂模式,被用来解决机器视觉、自然语言处理、语音识别等方面的问题。深度学习能够以适当数目、并行、非线性步骤对非线性数据进行分类或者预测,一个深度学习模型对输入数据进行分层次学习,每一层从前一层的输出中提取特征。

一、深度神经网络DNN:
深度神经网络DNN(Deep Neural Network)经过几十年的研究,在目标检测、场景理解等应用方面表现出了优越性能。

1.DNN结构:

深度神经网络包括一个输入层,一个输出层,还有介于这两层之间的多个隐藏层,每个隐藏层都有多个相互连接的神经元,类似于多层感知器。DNN的多个隐藏层的优势在于能够逼近复杂的决策函数。
隐藏层的作用是实现复杂函数的转换,它们连接输入层,为输入值标记权重,并且结合权重产生一个数值,然后传递给输出层。输出层使用隐藏层计算得到的抽象特征进行分类或者预测。
DNN技术中,隐藏层神经元执行的非线性数据转换是核心,这些神经元互相连接,可以使输出的组合更加灵活,可以逼近任何函数。多层结构可以使用较少的参数表示复杂的函数。

2.学习方法:

神经网络中的神经元的连接需要用到权重,而这个权重需要通过学习来获得。神经网络可以使用有监督学习或无监督学习。在有监督学习中,如果训练样本足够覆盖未知样本,那么学到的多层权重可以很好地用来预测新的测试样本。但是,很多任务难以得到足够多的样本,而且对多层同时训练,复杂度会很高,而逐层训练误差则会逐层传递。
Hinton提出了无监督多层神经网络构建的有效方法,每次训练一层网络,然后微调。微调的目的是使原数据x向上生成x的高级表示r,该高级表示r向下生成的x'要尽可能与x一致。具体方法为:
⑴逐层构建单层神经元,每次都训练一个单层网络
⑵当所有层训练完毕,使用Wake-Sleep算法进行微调。将除最顶层的其他层间的权重变为双向,这样最顶层仍然是一个单层神经网络,而其它层则变为图模型。向上的权重用于认知,向下的权重用于生成,然后使用Wake-Sleep算法调整所有权重,让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确地复原底层的结点。
Wake-Sleep算法分为醒Wake和睡Sleep两个部分:
①Wake阶段:认知过程,通过外界的特征和向上的权重产生每一层的结点状态,并且使用梯度下降修改层间的下行权重。
②Sleep阶段:生成过程,通过顶层表示和向下权重,生成底层状态,同时修改层间向上的权重。
上面的算法也可以用于有监督学习。DNN训练时间复杂度较大,不易调试。

3. DNN的参数选择:

1)神经元数量:
DNN的潜力取决于每层神经元数量。一般的做法是每层使用更多的神经元来检测数据中的更精细结构,但使用的隐藏层神经元越多,过拟合风险就越高,即结果在样本中表现很好,但在非样本中却很差。
因此,构建DNN时应该使用尽可能少的神经元来解决问题。训练模式的数量越大,同时又要保持DNN的泛化能力,所使用的神经元数量也就越大。
2)最佳层数选择:
找到最佳层数的本质是一个模型选择问题,可以使用传统的模型选择技术,最常用的是反复试验法,也可以使用系统的全局搜索和选择标准。
如果将每个隐藏层视为一个特征检测器,那么层越多,就可以学习更复杂的特征检测器,函数越复杂使用的层就越多。
3)训练时间:
传统神经网络算法本质上是梯度下降法,而所要优化的目标函数往往非常复杂,会出现锯齿形现象,使得算法低效。目标函数复杂,会在神经元输出接近0或1情况下出现一些平坦区,其中权值误差改变很小,使训练过程几乎停顿。传统神经网络模型中,必须把步长的更新规则预先赋予网络。
4)过拟合:
一般情况下,训练能力差时,预测能力也差;随着训练能力提高,预测能力也提高。但这种趋势有个极限,当到达此极限时,随训练能力的提高,预测能力反而下降,即出现所谓过拟合。

4. DNN应用技巧:

1)Dropout:
随机忽略一部分隐藏层神经元的过程称为Dropout,也就是对于每个隐藏层的神经元,以概率p随机地从网络中省略。由于神经元是随机选择的,因此将为每个训练实例选择不同的神经元组合。
Dropout并不一定会影响未来的表现,但也不能绝对保证能提高性能。在非常大的DNN模型上,这种方式能展现好处。
2)反向传播算法:
正向传播计算DNN的所有层的每个结点的权重,反向传播计算所有训练样本的误差,并且调整权重。分块反向传播是加速神经网络计算的一种常用方法,涉及同时计算多个训练样本上的梯度,而不是在原始随机梯度下降算法中发生的针对单独样本的计算。
模型中的神经元越多,分块反向传播的潜在益处越大。而对于块的规模,可以通过尝试不同的值来试验效果。
3)早期停止:
样本一般被分为三组,训练集、验证集、测试集。训练集用于训练DNN,训练误差通常是单调函数,每次迭代都会减小,开始下降很快,后来则下降速率很慢,随后变成恒定值。
验证集用于评估模型的性能,验证误差常用在早期阶段急剧下降,同时网络快速学习出函数形式,但随后误差增加,表明模型开始过拟合。
当验证集上误差最低时停止训练,然后在测试样本上使用验证模型,对于减少过拟合非常有效。

二、卷积神经网络CNN:
卷积神经网络CNN(Convolutional Neural Networks)已经成为一个研究的热点,特别是在模式识别领域,避免了对图像的复杂前期处理,可以直接输入原始图像,因而得到广泛应用。

1. CNN结构:

一般地,CNN基本结构包括两层,一层为特征提取层,每个神经元的输入与前一层的局部感知域相连,并提取其特征;另一层为特征映射层,每个特征映射是一个平面,平面上的所有神经元的权值相等(权值共享)。特征映射结构采用Sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。由于一个映射面上的神经元共享权值,因为减少了网络自由参数的个数。
卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次特征提取的计算层,这种二次特征提取结构减小了特征分辨率。
CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以避免了显式的特征抽取,而隐式地从训练数据中进行学习。由于同一特征映射面上的神经元权值相同,降低了网络的复杂度,还可以并行学习。

2. 局部感知:

图像处理中,往往把图像表示为像素的向量,1000x1000的图像可表示为1000000的向量,如果隐藏层数目与输入层一样,也为1000000个神经元,那么输入层到隐藏层的参数数据为10的12次方,数量巨大,无法训练。
卷积神经网络有两种方法降低参数数目,第一种叫局部感知。图像空间联系是局部的像素联系较为紧密,而距离较远的像素相关性较弱。因此,每个神经元没有必要对全部图像进行感知,只需要对局部进行感知,然后在更高层将局部信息综合起来就得到了全局的信息。例如,每个神经元只和10x10个像素值相连,那么权值数据为1000000x100个,减少为原来的千分之一,而那10x10个像素值对应的10x10个参数,其实就相当于卷积操作。

3. 权值共享:

通过局部感知后参数仍然过多,可以采用第二种方法,即权值共享。在局部连接中,每个神经元都对应10x10个参数,一共1000000个神经元,如果1000000个神经元的100个参数都是相等的,那么参数数目就变为100个了。
可以把这100个参数看成是提取特征的方式,图像的一部分特征与其他部分是一样的,意味着在这一部分学习的特征也能用于另一部分上,所以对于这个图像上的所有位置,都能使用同样的学习特征。
当从一个大尺寸图像中随机选取一小块,比如8x8为样本,并且在这个小块样本中学习到了一些特征,这时可以把从这个8x8样本中学习到的特征作为探测器,应用到这个图像的任意地方,可以用从8x8样本中学到的特性与原来的大尺寸图像作卷积,从而对这个大尺寸图像上任意位置获得一个不同特征的激活值。
每个卷积都是一种特征提取,将图像中符合条件的部分筛选出来。

4. 多卷积核:

当只有100个参数时,如果只用1个100x100的卷积核,特征提取是不充分的,这时可以添加多个卷积核,比如32个卷积核,可以学习32种特征。每个卷积核都会将图像生成为另一幅图像,比如两个卷积核就可以生成两幅图像,这两幅图像可以看作是一张图像的不同通道。
如果在m-1层的4个通道上进行卷积操作,生成m层的2个通道,参数数目为4x2x2x2,其中4表示4通道,后面的2表示生成2个通道,最后的2x2表示卷积核大小。

5. 池化:

通过卷积获得特征后,下一步就要利用特征进行分类。如果使用所有提取的得到的特征去训练分类器,计算量非常庞大。
但对于图像,在一个图像区域有用的特征极有可能在另一个区域同样适用,为了描述大的图像,可对不同位置的特征进行聚合统计,例如计算图像一个区域上的某个特征的平均值(或最大值)。这些概要统计特征具有低的维度,而且还能改善结果,这种聚合操作称为池化Pooling,有时也称平均池化或者最大池化,取决于计算池化的方法。

6. 多层卷积:

实际应用中,往往使用多层卷积,然后再使用全连接层进行训练。使用多层卷积是因为一层卷积学到的特征往往是局部的,层数越高,学到的特征越全局化。

7. AlexNet网络结构:

ImageNet LSVRC是一个图片分类比赛,其训练集包括127万多张照片,验证集有5万张照片,测试集有15万张照片。2010年,Alex Krizhevsky的结构取得冠军,top-5错误率为15.3%;2016年的冠军GoogNet已经达到top-5错误率6.67%。
Alex的CNN采用了2个GPU并行结构,即5个卷积层都是将模型参数分为2部分进行训练。
·输入层:224x224大小的图片,3通道
·第一层卷积:5x5大小的卷积核96个,每个GPU上48个
·第一层Max-pooling:2x2的核
·第二层卷积:3x3卷积核256个,每个GPU上128个
·第二层Max-pooling:2x2的核
·第三次卷积:与上一层是全连接,3x3的卷积核384个,每个GPU192个
·第四层卷积:3x3的卷积核383个,两个GPU各192个,该层与上一层没经过pooling层
·第五层卷积:3x3的卷积核256个,两个GPU上各128个
·第五层Max-pooling:2x2的核
·全连接层:4096维,将第5层Max-pooling的输出连接成一个一维向量,作为该层输入
·全连接层:4096维
·输出层:Softmax层,1000维,每一维是图片属于该类别的概率

8. DeepID网络结构:

DeepID网络结构是香港中文大学Sun Yi开发出来用来学习人脸特征的卷积神经网络。每张输入的人脸被表示为160维向量,学习到的向量经过其他模型进行分类,在人脸验证试验上得到97.45%的正确率,经过改进后得到99.15%的正确率。
DeepID网络结构与AlexNet参数类似,但最后只有一个全连接层,然后就是Softmax层。在全连接层,以第四层卷积和第三层Max-pooling的输出作为全连接层的输入,这样可以学习到局部的和全局的特征。
MATLAB中有conv2包用来计算。

三、自编码网络AE:
自动编码AE(Auto Encoder)网络是一种无监督学习的神经网络,试图通过复制其输入,通过在训练中的输出与输入信号比较的误差来调整各层参数。

1. AE基本结构:

AE网络一种无监督学习三层前向神经网络,包括一个输入层、隐藏层和输出层,输入层的神经元和输出层的神经元数目相同,隐藏层神经元的数目少于或多于输入神经元的数目。
AE的输入层到隐藏层的映射称为编码器,隐藏层到输出层的映射称为解码器。输入向量经过编码器,通过在隐藏层激活函数转化为特征,然后解码器将这些特征转换回原来的属性。
AE网络隐藏层使用的神经元一般少于输入神经元,本质上是压缩输入属性,以更低维度属性来表示,扮演了特征提取的作用。AE可以实现多种降维技术,一个线性AE可以学习数据的特征向量,相当于主成分分析运用到输入上;而非线性AE能够发现更复杂的主成分。在涉及笔迹和人脸识别的降维任务中,非线性AE优于主成分分析。
著名的降维技术是主成分分析PCA(Principal Component Analysis),用来把多指标转化为少数几个综合指标,即主成分,其中每个主成分都能够反映原始变量的大部分信息,且所含信息互不重复。主成分分析使用数学变换,把给定的一组相关变量通过线性变换转换成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排列。数学变换中保持变量的总方差不变,使第一变量具有最大的方差,称为第一主成分;第二变量的方差次大,并且与第一变量不相关,称为第二主成分;以此类推,I个变量就有I个主成分。
如果输入的属性是完全随机的,那么降维是不可行的,有效的降维需要属性是相关的或者在某些程度上是有联系的。
AE通过输入属性到隐藏层结点的映射来使用一个编码功能:
深度学习
其中,x是属性的输入向量;f表示sigmoid函数,bh是隐藏层神经元的偏置向量;W是隐藏层权值矩阵。数据通过一个线性解码重构:
深度学习
隐藏层的输出通过解码函数重构输入x的近似值x^。
编码器和解码器最常用的函数是非线性sigmoid函数,通过梯度下降算法使用反向传播来最小化平方重建误差,从而完成训练。

2. 稀疏自动编码网络SAE:

稀疏自动编码SAE(Sparse Auto Encoder)是在AE上加上限制,约束每一层中的结点大部分都为0,只有少数不为零,即表达特征尽量稀疏。
通过设置隐藏层神经元数量远远大于输入神经元的数量,建立输入向量x的一个非线性映射,然后对它们实施一个稀疏约束。最常用的稀疏约束是KL(Kullback-Leibler)散度。
实际中,使用SAE应用更多,因为SAE网络在训练期间可以学习更多类型的模型,稀疏矩阵表示的特征能更好地为原始输入数据编码,使其有识别能力。

3. 堆栈自编码网络SA:

可以利用AE来构建深度网络,堆栈自编码SA(Stacked Autoencoder)网络,或层叠自编码网络,就是一种利用AE来构建深度网络的策略,其中每一层都是一个编码器,为了紧凑表示,中间层中的单元数量往往越来越小。
第一层得到一个特征,如果重构误差小于给定的阈值,可以确定这个特征就是原输入信号的良好表述;第二层的训练方法与第一层没有差别,将第一层的输出特征作为第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的特征;其他层采用同样的方法。
为了实现分类,可以在最顶的编码层添加一个分类器,然后通过标准的多层神经网络的监督训练方法去训练。这时候,将最后层特征输入到分类器,通过有标签样本和监督学习进行微调,可以只调整分类器,也可以通过有标签样本微调整个系统。
一旦监督训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后用一个更好性能的分类器去取代它。

4. 降噪自编码网络DAE:

降噪自动编码DAE(Denoising AutoEncoders)网络是在自动编码网络的基础上,对训练数据加入噪声,是AE的变体,自动编码网络必须学习去除这种噪声而获得没有噪声污染的输入。DAE可以通过梯度下降算法训练。
给定输入属性x,降噪自编码网络会产生一个新的嘈杂的属性向量,引入噪声的方法最常用的是随机掩蔽,就是在每轮的训练中随机地忽略一些神经元。通常是随机强制将x的一小部分转化成0或1,称为椒盐噪声;另一种方法是向属性向量x附加高斯噪声。
DAE网络需要对输入属性向量x进行编码,还要去除噪声属性向量内的错误造成的影响。只要DAE网络捕获输入属性之间的统计特征,上述任务就能完成。

5. 堆栈降噪自编码网络SDA:

DAE可以通过堆栈形成深度学习网络,比如有4个隐藏层的堆栈降噪自编码网络SDA。如堆栈自编码网络一样,在堆栈降噪自编码网络中,一次只在一层用同样的方式进行预训练。在反向传播阶段,预训练经常激励网络去发掘更好的参数空间。
在预训练阶段,通过最小化重建的错误来将每一层训练成一个降噪自编码网络。对于每一层来说,用将要输入到下一个隐藏层的权重表示提取的特征。在最后一个预训练之后,通过用Softmax激励函数将结果向量传递到输出层来对最后一个隐藏层进行分类。
一旦所有的层都进行了预训练,网络就进入第二个阶段的训练,即有监督的学习,通常称为微调。在这一阶段,通过反向传播,将整个网络像训练所得的多层感知器那样最小化预测误差。

四、受限玻尔兹曼机RBM:
玻尔兹曼机BM(Boltzmann Machine)是一种基于能量函数的建模方法,能够描述变量之间的高阶相互作用。BM的学习算法比较复杂,但所建模型和学习算法有比较完备的物理解释和严格的数理统计理论为基础。
受限玻尔兹曼机RBM(Restricted Boltzmann Machine)是一种无监督学习模型,近似于样本数据的概率密度函数,受限的含义是相同层的单元之间没有连接。

1. RBM结构:

受限玻尔兹曼机由两层构成,可见层和隐藏层,层之间的连接是对称和双向的,允许两个方向传递信息。受限玻尔兹曼机是一个基于能量的概率模型,可见层和隐藏层单元的配置概率与能量函数的负幂次方成正比。对于一组可见向量和不可见向量来说,概率定义为:
深度学习
其中分母是标准化常数,称为赋值函数。
对成对的可见和隐藏变量求和的赋值函数计算为:
深度学习
因此,它是P(v,h)对所有v和h定义的一个概率分布。

2. 深度置信网络DBN:

深度置信网络DBN(Deep Belief Networks)是由多个堆栈RBM构成的概率生成多层神经网络。在DBN中,每两个相邻隐层构成一个RBM,RBM的输出是输入的特征,每一个RBM实际上是一个非线性变换,RBM的输出是下一个RBM的输入。
与多层神经网络一样,可以通过一层的激活概率作为下一层的新浪数据来有效第训练DBN。因为预训练是无监督的,所以这个过程不需要类标签。分块方法通常被用来加速预训练过程,用RBM权重修改每一个块。
多个隐藏层产生的多个特征层变得越来越复杂,预训练易于捕获数据的高层特征。在微调阶段,采用标准的BP算法,自上而下调整预训练网络每一层的权重,使权重更适合分类。

 

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659