拥有输入层、输出层和一个隐含层。输入的特征向量经过隐含层变换到达输出层,在输出层获得分类结果;php
缺点:没法模拟稍复杂一些的函数(例如简单的异或计算)。html
解决办法:多层感知机。算法
有多个隐含层的感知机。网络
多层感知机解决了以前没法模拟异或逻辑的缺陷,同时,更多的层数使得神经网络能够模拟显示世界中更加复杂的情形。架构
多层感知机给咱们的启示是,神经网络的层数直接决定它的刻画能力——利用每层更少的神经元拟合更复杂的函数;机器学习
缺点:网络层数越多,优化函数愈来愈容易陷入局部最优解;利用有限数据训练的深层网络,性能可能还不如浅层网络;“梯度消失”现象更加严重;分布式
难点:非凸目标函数中的局部极小值是训练困难的主要来源。函数
BP算法存在的问题:性能
(1)梯度愈来愈稀疏;学习
(2)收敛到局部最小值;
(3)只能用有标签的数据来训练;
deep learning 训练过程:
hinton提出在非监督数据上创建多层神经网络:step1.layer-wise learning;step2.tuning;使得原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽量一致。
wake-sleep算法:
1)wake阶段:认知过程,经过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),而且使用梯度降低修改层间的下行权重(生成权重)。也就是“若是现实跟我想象的不同,改变个人权重使我想象的东西就是这样的”。
2)sleep阶段:生成过程,经过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“若是梦中的景象不是我脑中的相应概念,改变个人认知权重使得这种景象在我看来就是这个概念”。
deep learning 具体训练过程:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
采用无标定数据(有标定数据也可)分层训练各层参数,这一步能够看做是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程能够看做是feature learning过程):
*问题:无标定数据怎么训练第一层?
*答:这层可看做是获得一个使得输出和输入差异最小的三层神经网络的隐层,训练时只要保证训练样本的输出和输入差异最小,以此获得参数的权重;
因为模型容量的限制以及稀疏性约束,使得获得的模型可以学习到数据自己的结构,从而获得比输入更具备表示能力的特征;在学习获得第n-1层后,将n-1层的输出做为第n层的输入,训练第n层,由此分别获得各层的参数;
2)自顶向下的监督学习(就是经过带标签的数据去训练,偏差自顶向下传输,对网络进行微调):
基于第一步获得的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步相似神经网络的随机初始化初值过程,因为deep learning的第一步不是随机初始化(也就是说,神经网络训练时,迭代的第一步是随机初始化参数),而是经过学习输入数据的结构获得的,于是这个初值更接近全局最优,从而可以取得更好的效果;因此deep learning效果好很大程度上归功于第一步的feature learning过程。
1、基本结构——特征表示/学习
Deep Learning最简单的一种应用就是进行特征表示。跟人工神经网络(ANN)同样,若是咱们给定一个神经网络,假设其输出与输入是相同的,而后训练调整其参数,获得每一层中的权重。天然地,咱们就获得了输入i的几种不一样表示(每一层表明一种表示),这些表示就是特征。自动编码器就是一种尽量复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉能够表明输入数据的最重要的因素,就像PCA那样,找到能够表明原信息的主要成分。
自动编码器:
上图就是自动编码器的训练原理。
这个auto-encoder还不能用来分类数据,由于它尚未学习如何去链接一个输入和一个类,它只是学会了如何去重构或者复现它的输入而已。可是在这个过程当中,神经网络学会了一些抽象特征,咱们最后只须要将输入,以及最后一层的特征code输入到最后的分类器(例如logistic regression,svm ……),经过有标签的样本,使用监督学习的方法进行微调。
有两种方法:
一、只调整分类器:
二、经过有标签样本,微调整个系统:(若是有足够多的数据,这是最好的方法,端对端学习)
研究发现,若是在原有的特征中加入这些自动学习获得的特征能够大大提升精确度,甚至在分类问题中比目前最好的分类算法效果还好。
注:
Fine-tuning的目的,是使得整个网络系统达到全局的最优(end2end),而不是以前分段的局部最优。
2、其余模型结构及其演进版本
(1)稀疏自动编码器
在auto-encoder的网络使用加上L1的Regularity限制,(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),咱们就能够获得Sparse AutoEncoder法。
如上图,其实就是限制每次获得的表达code尽可能稀疏。由于稀疏的表达每每比其余的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其余的大部分神经元是受到抑制的)。
(2)降噪自动编码器
Denoising auto-encoder (DA)是在自动编码器的基础上,训练数据加入噪声,因此自动编码器必须学习去去除这种噪声而得到真正的没有被噪音污染过的输入。所以,就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比通常编码器强的缘由。DA能够经过梯度降低算法去训练。
(3)sparse coding稀疏编码
简单来讲,就是将输入向量表示为一组基向量的线性组合。
Sparse coding:超完备基(基向量的个数比输入向量的维数要大)
PCA:完备基 (降维)
Deep learning:Unsupervised Feature Learning
Image: pixcel -> basis -> high level basis -> learning
Doc: word -> term -> topic -> learning
特征表示的粒度:
a.不是特征越底层,粒度越细,学习算法的效果越好;
b.不是特征越多越好,探索的空间大,计算复杂,能够用来训练的数据在每一个特征上就会稀疏,带来各类问题。
稀疏编码算法:
稀疏编码是一个重复迭代的过程,每次迭代分两步:
1)选择一组 S[k] (“基”),而后调整 a[k] (系数权重),使得Sum_k (a[k] * S[k]) 最接近 T(输入)。
2)固定住 a[k],在 400 个碎片中,选择其它更合适的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。
通过几回迭代后,最佳的 S[k] 组合,被遴选出来了。使人惊奇的是,被选中的 S[k],基本上都是照片上不一样物体的边缘线,这些线段形状类似,区别在于方向。
缺点:
稀疏编码是有一个明显的局限性的,这就是即便已经学习获得一组基向量,若是为了对新的数据样本进行“编码”,咱们必须再次执行优化过程来获得所需的系数。这个显著的“实时”消耗意味着,即便是在测试中,实现稀疏编码也须要高昂的计算成本,尤为是与典型的前馈结构算法相比。
(4)限制玻耳兹曼机
a.二部图:无向图G为二分图的充分必要条件是,G至少有两个顶点,且其全部回路的长度均为偶数。
b.Restricted BoltzmannMachine(RBM) 玻耳兹曼机的定义:假设全部的节点都是随机二值变量节点(只能取0或者1值),同时假设其全几率分布p(v,h)知足Boltzmann分布;(Restricted在这里是指:这些网络被“限制”为一个可视层和一个隐层,层间存在链接,但层内的单元间不存在链接),隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
c.为何说它是一个deep learning?
由于输入层v(visible variables)和隐藏层h(hidden layer)都知足Boltzmann分布,在二部图模型中,经过调整参数,使得从隐藏层获得的可视层v1与原来的可视层v同样,那么这时候获得的隐藏层就是可视层的另一种表达,也就是隐藏层能够做为输入层(可视层)输入数据的特征表示,因此它就是一种deep learning方法。
d.训练 (也就是肯定可视层节点和隐藏层节点之间的权值)
定义:
:假设函数 (联合组态的能量) (1)
Boltzmann:参数所服从的分布 (2)
:假设函数(1)的分布 (几率生成模型的联合分布) (3)
将(2)带入(3),定义
最优化函数Loss (4)
观测样本集 (5)
由(4)和(5),即可以学习到参数W.
若是把隐藏层的层数增长,咱们能够获得Deep Boltzmann Machine(DBM);若是咱们在靠近可视层的部分使用贝叶斯信念网络(即有向图模型,固然这里依然限制层中节点之间没有连接),而在最远离可视层的部分使用Restricted BoltzmannMachine,咱们能够获得DeepBelief Net(DBN)。
(5)深信度网络(Deep Belief Network)
1. Deep Belief Network网络结构
DBNs是一个几率生成模型,与传统的判别模型的神经网络相对,生成模型是创建一个观察数据和标签之间的联合分布,对P(Observation|Label)和P(Lable|Observation)都作了评估,而判别模型仅仅评估了后者。
DBNs在使用传统的BP算法进行训练的时候,遇到了以下问题:
1.1 须要为训练提供一个有标签的样本集;
1.2 学习过程较慢;
1.3 不适当的参数选择会致使学习收敛于局部最优解;
Figure 1.DBN的网络结构
2. 训练方法
2.1 预训练
首先,经过一个非监督贪婪逐层方法去预训练得到生成模型的权值,非监督贪婪逐层方法被Hinton证实是有效的,并被其称为对比分歧(contrastive divergence)。
具体过程参加Figure 2 。
Figure 2.DBN的训练过程
a.训练时间会显著的减小,由于只须要单个步骤就能够接近最似然学习,而不是像BP训练那样须要反复迭代直到收敛。b.增长进网络的每一层都会改进训练数据的对数几率,咱们能够理解为愈来愈接近能量的真实表达。这些优势,以及c.无标签数据的使用,是深度学习被应用的决定性因素。
Figure 3. Illustration of the Deep Belief Network framework
在最高两层,权值被链接到一块儿,这样更底层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而咱们最关心的,是其最后的判别性能,例如分类任务里面。
2.2 fine-tuning
在预训练后,DBN能够经过利用带标签数据用BP算法去对判别性能作调整(即fine tuning)。在这里,一个标签集将被附加到顶层(推广联想记忆),经过一个自下向上的,学习到的识别权值得到一个网络的分类面。这个分类器的性能会比单纯的使用BP算法训练的网络好。这能够很直观的解释,DBNs预训练后再加BP算法的方法,只须要对权值参数空间进行一个局部的搜索(就是局部fine-tune),这相比前向神经网络来讲,训练是要快的,并且收敛的时间也少。
三、DBNs的缺点和不足
1)没有考虑到图像的高维结构信息;其拓展卷积DBNs就考虑了这个问题,它利用邻域像素的空域关系,经过一个称为卷积RBMs的模型区达到生成模型的变换不变性,并且能够容易地变换到高维图像。
2)DBNs并无明确地处理对观察变量的时间联系的学习上;序列学习方法的研究和应用,给语音信号处理问题带来了一个让人激动的将来研究方向;
四、应用
堆叠自动编码器
五、几种编码器的对比
1)自动编码器
使用判别模型;
2)降噪自动编码器
其训练方法和RBMs训练生成模型的过程同样;
3)堆叠自动编码器
它是经过用堆叠自动编码器来替换传统DBMs里面的RBMs;这就使得能够经过一样的规则来训练产生深度多层神经网络架构,但它缺乏层的参数化的严格要求。
参考: