一、单层感知机(perceptron)

  拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换到达输出层,在输出层得到分类结果;

  缺点:无法模拟稍复杂一些的函数(例如简单的异或计算)。

  解决办法:多层感知机。

二、多层感知机(multilayer perceptron)

  有多个隐含层的感知机。

  多层感知机解决了之前无法模拟异或逻辑的缺陷,同时,更多的层数使得神经网络可以模拟显示世界中更加复杂的情形。

  多层感知机给我们的启示是,神经网络的层数直接决定它的刻画能力——利用每层更少的神经元拟合更复杂的函数;

  缺点:网络层数越多,优化函数越来越容易陷入局部最优解;利用有限数据训练的深层网络,性能可能还不如浅层网络;“梯度消失”现象更加严重;

三、深度学习的起源及其与机器学习、神经网络的区别:

浅层学习:

  有限样本和计算单元,对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。
 

深度学习:

  可以通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据的分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力(多层的好处是可以用较少的参数表示复杂的函数); 
 
  深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型“是手段,”特征学习“是目的。
 

区别于传统的浅层学习,深度学习的不同:

(1)强调了模型结构的深度,通常有5、6层甚至10多层的隐层节点;
 
(2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息;
 

问题:

上面说深度学习一个优势就是可以从少量样本集中学习数据集本质特征;下面又说,它通过大数据来学习特征,那么到底是大数据才是深度学习的优势场景还是小数据呢?
 

deep learning(neural network)的缺点:

1、比较容易过拟合,参数比较难tune,而且需要不少trick;
 
2、训练速度比较慢,在层次比较少(小于等于3)的情况下,效果并不比其他方法更优;
 
 
  Deep learning的网络结构跟神经网络很相似(输入层、隐层、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型),但训练机制却与传统神经网络很不相同:

神经网络:

  采用back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。
 

deep learning:

  整体上是一个layer-wise的训练机制。因为,如果采用back propagation的机制,对于一个deep network,残差(网络预测结果与正确结果的偏差)传播到最前面的层已经变得太小,出现所谓的gradient diffusion(梯度扩散)。
 

四、Deep learning训练过程

难点:非凸目标函数中的局部极小值是训练困难的主要来源。

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过程。

五、深度学习具体模型及方法

一、基本结构——特征表示/学习

  Deep Learning最简单的一种应用就是进行特征表示。跟人工神经网络(ANN)一样,如果我们给定一个神经网络,假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入i的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。

  自动编码器:

  上图就是自动编码器的训练原理。

  这个auto-encoder还不能用来分类数据,因为它还没有学习如何去连接一个输入和一个类,它只是学会了如何去重构或者复现它的输入而已。但是在这个过程中,神经网络学会了一些抽象特征,我们最后只需要将输入,以及最后一层的特征code输入到最后的分类器(例如logistic regression,svm ……),通过有标签的样本,使用监督学习的方法进行微调。

  有两种方法:

  1、只调整分类器:

  

  2、通过有标签样本,微调整个系统:(如果有足够多的数据,这是最好的方法,端对端学习)

 
 

  研究发现,如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还好。

  注:

  Fine-tuning的目的,是使得整个网络系统达到全局的最优(end2end),而不是之前分段的局部最优。

二、其他模型结构及其演进版本

(1)稀疏自动编码器

  在auto-encoder的网络使用加上L1的Regularity限制,(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。

  如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分神经元是受到抑制的)。

  (2)降噪自动编码器

    Denoising auto-encoder (DA)是在自动编码器的基础上,训练数据加入噪声,所以自动编码器必须学习去去除这种噪声而获得真正的没有被噪音污染过的输入。因此,就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比一般编码器强的原因。DA可以通过梯度下降算法去训练。

  

    (3)sparse coding稀疏编码

    Reference

    简单来说,就是将输入向量表示为一组基向量的线性组合。

    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),这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。

 3、DBNs的缺点和不足

    1)没有考虑到图像的高维结构信息;其拓展卷积DBNs就考虑了这个问题,它利用邻域像素的空域关系,通过一个称为卷积RBMs的模型区达到生成模型的变换不变性,而且可以容易地变换到高维图像。

    2)DBNs并没有明确地处理对观察变量的时间联系的学习上;序列学习方法的研究和应用,给语音信号处理问题带来了一个让人激动的未来研究方向;

  4、应用

   堆叠自动编码器

  5、几种编码器的对比

  1)自动编码器

    使用判别模型;

  2)降噪自动编码器

    其训练方法和RBMs训练生成模型的过程一样;

  3)堆叠自动编码器

    它是通过用堆叠自动编码器来替换传统DBMs里面的RBMs;这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。

参考:

https://www.cnblogs.com/sxron/articles/5836000.html

神经网络系列学习笔记(二)——神经网络之DNN学习笔记的更多相关文章

  1. spring cloud 学习(二)关于 Eureka 的学习笔记

    关于 Eureka 的学习笔记 个人博客地址 : https://zggdczfr.cn/ ,欢迎光临~ 前言 Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Sprin ...

  2. [基础]斯坦福cs231n课程视频笔记(二) 神经网络的介绍

    目录 Introduction to Neural Networks BP Nerual Network Convolutional Neural Network Introduction to Ne ...

  3. DNN学习笔记 最简单的皮肤制作

    说明: 在学习DNN时,使用的版本为 DNN8.参考资料:http://www.dnnsoftware.com/docs/designers/creating-themes/index.html 制作 ...

  4. Go语言核心36讲(Go语言实战与应用二十四)--学习笔记

    46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...

  5. <二>ELK-6.5.3学习笔记–使用rsyslog传输管理nginx日志

    http://www.eryajf.net/2362.html 转载于 本文预计阅读时间 28 分钟 文章目录[隐藏] 1,nginx日志json化. 2,发送端配置. 3,接收端配置. 4,配置lo ...

  6. 二叉搜索树(BST)学习笔记

    BST调了一天,最后遍历参数错了,没药救了-- 本文所有代码均使用数组+结构体,不使用指针! 前言--BFS是啥 BST 二叉搜索树是基于二叉树的一种树,一种特殊的二叉树. 二叉搜索树要么是一颗空树, ...

  7. JDBC二查询(web基础学习笔记八)

    一.建立数据库 --创建news表空间 CREATE TABLESPACE tbs_news DATAFILE 'F:\ORACLE\news.dbf' SIZE 10M AUTOEXTEND ON; ...

  8. android学习笔记二、Activity深入学习

    一.创建和使用: 1.Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用.没有声明则报错. 2.启动Activity是通过Intent,有两种方式: ...

  9. Go语言核心36讲(Go语言实战与应用二十五)--学习笔记

    47 | 基于HTTP协议的网络服务 我们在上一篇文章中简单地讨论了网络编程和 socket,并由此提及了 Go 语言标准库中的syscall代码包和net代码包. 我还重点讲述了net.Dial函数 ...

随机推荐

  1. 配置HEXO

    软件介绍 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 使用版本和操作系统 官网最新版 Windo ...

  2. javaweb项目导入myecplise出错

    项目导入出错:移动项目的时候.classpath .project不要删 build path -> use for source floder 把某一文件夹当作源码文件夹 bulid path ...

  3. php面试题分享

    1.nginx使用哪种网络协议? nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程 2. <? echo 'hello tush ...

  4. PHP的Undefined variable错误怎么解决?

    在调试程序时,有可能会出现Undefined variable错误,一般情况下php是不需要定义变量的,但如果服务器什么都报错的,就会出现错误,我们经常接收表单POST过来的数据时报Undefined ...

  5. swift 2特性记录

    swift 团队一直在优化,让大家准备在秋天的时候,迁移到swift2做准备. 一.错误处理 异常处理,不是NSError对象和双指针. 可以使用 throws   来指定方法来抛出一个错误. 调用d ...

  6. Django--对表的操作

    一丶多表创建 1.创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之 ...

  7. Browser Screen

    Screen对象 Screen对象包含有关客户端显示屏幕的信息. 注释:没有应用于screen对象的公开标准,不过所有浏览器都支持该对象. Screen对象属性 availHeight 返回显示屏幕的 ...

  8. Life here can be a dream come true!

    Life here can be a dream come true!美梦迟早会成真的!

  9. python基础-数据运算

             *按位取反运算规则(按位取反再加1)   详解http://blog.csdn.net/wenxinwukui234/article/details/42119265  详细内容ht ...

  10. pysnmp使用

    install yum install python-pysnmp yum install python-pyasn1 or pip install pysnmp pip install pyasn1 ...