本篇简要介绍深度信念网络DBN,是一个不太常见的神经网络。

首先对深度信念网络(DBN)进行简要介绍,然后对其组成原件RBM的结构、原理和训练过程进行介绍。接着对DBN的训练过程进行介绍。

目录

一、DBN概述

二、首先玻尔兹曼机(RBM)

1. RBM基本结构

2. 神经元之间的条件独立性

3. 使用RBM的过程

三、深度信念网络DBN

1. DBN训练过程

2. 调优过程

四、将DBN用于分类任务

1. 用于BP网络分类

2. DBN的拓展

总结:


一、DBN概述

深度信念网络(Deep Belief Nets,DBN),既可用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器使用。

从非监督学习来讲,其目的是尽可能地保留原始特征的特点,同时降低特征的维度。从监督学习来讲,提高分类的准确率。二者都是对特征进行学习的过程,即如何得到更好的特征表达。

作为神经网络,DBN由若干神经元组成,组成原件是受限玻尔兹曼机(RBM)。训练DBN的过程是一层一层进行的,每一层中,用数据向量推断隐层,再把这一隐层当作下一层的数据向量

二、首先玻尔兹曼机(RBM)

1. RBM基本结构

RBM有两层神经元,一层叫做显层(visible layer),用于输入训练数据;一层叫做隐层(hidden layer),用于提取特征,也称特征检测器。

上图为RBM的结构。每一层都可以用一个向量表示,每一维表示一个神经元。层间是双向(兑成)全连接,层内不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。

2. 神经元之间的条件独立性

由于显层和隐层内部神经元没有互联,只有层间是对称全连接,这样的好处是:

(1)在给定所有显元的值的情况下,每一个隐元取值是互不相关的。同理,在给定所有隐元下,显元取值不相关

(2)这样,计算每个神经元取值就可以并行计算

3. 使用RBM的过程

假设我们已经得到一个训练好的RBM,隐元和显元之间的权重用矩阵W表示:

M代表显元个数,N代表隐元个数。

当我们将新来的数据赋给显层后,RBM依照权值W决定开启或关闭隐元,具体操作如下:

(1)首先,(并行)计算出每个隐元的激励值;’

(2)将每个隐元的激励值用S形函数进行标准化,变成它们处于开启状(用1表示)的概率值;

(3)由此我们得到每个隐元的开启和关闭概率,此时我们将开启的概率与从一个[0,1]均匀分布中的随机抽取值进行比较,决定每个神经元开启或者关闭的概率;

(4)给定隐层,显层的计算概率一样的。

这时我们就要进行训练RBM。它实际上是求一个最能产生训练样本的概率分布,也就是说,要求一个分布,在这个分布里,训练样本的概率最大。

G.Hitton提出了名为对比散度的学习算法,简述如下:

首先,对于训练集的每一条记录x,将其赋给显层,计算隐层神经元被开启的概率,然后从(隐层)计算出的概率中抽取一个样本,用来重构显层,再次使用重构过的显层计算隐层神经元概率,按公式更新权重矩阵W。

上述反复向上和向下的操作称为吉布斯采样(Gibbs)。隐层激活单元和可视层输入之间的相关性差别就作为权值更新的主要依据。

如此训练之后的RBM就能较为准确的提取显层的特征了,或者根据隐层所代表的特征还原显层。

三、深度信念网络DBN

1. DBN训练过程

DBN是由多层RBM组成的一个神经网络,它既可以被看作一个生成模型,也可以看作一个判别模型(最后一层加label进行BP算法输出训练)。

其训练过程是,使用非监督贪婪逐层方法预训练获得权值。训练过程如下:

(1)首先充分训练第一个RBM;

(2)固定第一个RBM的权重和偏移量,然后使用其隐性神经元的状态作为第二个RBM的输入向量;

(3)充分训练第二个RBM后,将第二个RBM堆叠在第一个RBM的上方;

(4)重复以上三个步骤任意多次;

(5)如果训练集中的数据有标签,那么在顶层的RBM训练时,这个RBM的显层中除了显性神经元,还需要有代表分类标签的神经元,一起进行训练:

——假设顶层 RBM 的显层有 500 个显性神经元,训练数据的分类一共分成了 10 类;

——那么顶层 RBM 的显层有 510 个显性神经元,对每一训练训练数据,相应的标签神经元被打开设为1,而其他的则被关闭设为0。

训练结果如下图:

2. 调优过程

生成模型使用Contrastive Wake-Sleep算法进行调优,其算法过程是:

(1)除了顶层RBM,其他层RBM的权重被分成向上的认知权重向下的生成权重

(2)Wake阶段:认知过程,通过外界的特征和向上的权重 (认知权重) 产生每一层的抽象表示 (结点状态) ,并且使用梯度下降修改层间的下行权重 (生成权重) ;

(3)Sleep阶段:生成过程,通过顶层表示 (醒时学得的概念) 和向下权重,生成底层的状态,同时修改层间向上的权重。

使用过程 :

(1)使用随机隐性神经元状态值,在顶层 RBM 中进行足够多次的吉布斯抽样;

(2)向下传播,得到每层的状态。

四、将DBN用于分类任务

1. 用于BP网络分类

RBM的训练特点导致训练时间显著减少,因为只需要单个步骤就可以接近最大似然学习。网络的每一层都可会改进训练数据的对数概率

在预训练后,DBN可以通过利用带标签数据用BP算法去对判别性能做调整。在这里,一个标签集将被附加到顶层(推广联想记忆),通过一个自下向上的,学习到的识别权值获得一个网络的分类面。

这个性能会比单纯的BP算法训练的网络好。这可以很直观的解释,DBNs的BP算法只需要对权值参数空间进行一个局部的搜索,这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。

2. DBN的拓展

(1)用于二维数据的卷积DBNs

DBNs并没有考虑到图像的2维结构信息,因为输入是简单的从一个图像矩阵一维向量化的。而CDBNs就是考虑到了这个问题,它利用邻域像素的空域关系,通过一个称为卷积RBMs的模型区达到生成模型的变换不变性,而且可以容易得变换到高维图像。

(2)用于时间序列的堆叠时间RBMs

(3)DBN中RBM的替换

目前,和DBNs有关的研究包括堆叠自动编码器,它是通过用堆叠自动编码器来替换传统DBNs里面的RBMs。

这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。与DBNs不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。

但是,降噪自动编码器却能很好的避免这个问题,并且比传统的DBNs更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程一样。

总结:

(1)注意RBM层间的双向全连接层内无连接,由此有概率独立性和并行计算的特点;

(2)熟悉单个RBM的训练算法流程,即对比散度算法;简单来说就是根据显层的初始值计算隐层,用隐层的样本重构显层,再用显层计算一遍隐层,将两遍计算隐层的结果结合起来,得到权值矩阵W;

(3)同时,重构后的显层也可以向下传播,被随机选择后去重构原始的输入信号(因为它既是本层的显层,也是下层的隐层)。上面这种反复过程称为吉布斯采样(Gibbs)

(3)了解DBN的训练过程,即逐层训练;简单来说就是训练好一个RBM,将这个隐层作为下一个RBM的显层,训练好第二个,如此循环,一直训练好整个网络;

(4)如果要做分类器使用的话,就在顶层的RBM显层加上分类概率神经元即可;

(5)了解一些DBN的拓展。

【学习笔记】【DBN】十九——深度信念网络DBN相关推荐

  1. 【theano-windows】学习笔记十六——深度信念网络DBN

    前言 前面学习了受限玻尔兹曼机(RBM)的理论和搭建方法, 如果稍微了解过的人, 肯定知道利用RBM可以堆叠构成深度信念网络(deep belief network, DBN)和深度玻尔兹曼机(dee ...

  2. 深度学习笔记(46) 深度卷积网络学习

    深度学习笔记(46) 深度卷积网络学习 1. 学习内容 2. 第一层 3. 第二层 4. 第三层 5. 第四层 6. 第五层 1. 学习内容 深度卷积网络到底在学什么? 来看一个例子,假如训练了一个卷 ...

  3. python数据挖掘学习笔记】十九.鸢尾花数据集可视化、线性回归、决策树花样分析

    #2018-04-05 16:57:26 April Thursday the 14 week, the 095 day SZ SSMR python数据挖掘学习笔记]十九.鸢尾花数据集可视化.线性回 ...

  4. Python学习笔记(十九)面向对象 - 继承

    Python学习笔记(十九)面向对象 - 继承 一.继承的概念 # 继承:子类继承父类的所有方法和属性# 1. 子类 class A(object):def __init__(self):self.n ...

  5. 深度学习:自编码器、深度信念网络和深度玻尔兹曼机

    最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github. 本文主要讲解有关自编码器.深度信念网络和深度玻尔兹曼机的相关知识. 一.自编码器 1. ...

  6. SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...

  7. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  8. htmlcss实例小项目_HTMLCSS学习笔记(十九)-- 媒体查询

    媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于检测的媒体 ...

  9. es6 数组合并_JavaScript学习笔记(十九)-- ES6

    ES6新增的内容 之前的都是 ES5 的内容 接下来我们聊一下 ES6 的内容 let 和 const 关键字 我们以前都是使用 var 关键字来声明变量的 在 ES6 的时候,多了两个关键字 let ...

最新文章

  1. 自制青蛙跳台阶小游戏~
  2. 简单的梯度下降算法,你真的懂了吗?
  3. nrf51822蓝牙芯片ble_app_proximity程序总结
  4. 长假后第一天不想工作,这病咋治?
  5. Hark的数据结构与算法练习之图书馆排序
  6. 清华大学保研笔试题目及解答
  7. 操作系统 :银行家算法的实现(C++)
  8. linux下su和sudo的区别 (/libtool: arm-linux-gcc command not found )
  9. tensorflow2.0 图像处理项目_游戏爱好者应该看看这个开源项目
  10. Category:UITextField添加点击事件
  11. java项目连接Oracle配置文件
  12. Atitit 研发体系 codelib 代码库的建设 目录 1. 概念与组成 2 1.1. Java代码 2 1.2. Js代码 2 1.3. H5 代码 js+css+htm+txt 2 1.4.
  13. Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范推荐标准
  14. 微信点餐系统要服务器吗,微信点餐系统,钉钉点餐系统
  15. VBS 文本歌词粤语拼音翻译
  16. English 900
  17. 一键制作三维真实地形DEM
  18. JS 中文编码格式转换
  19. CKEditor编辑器的用法
  20. wrl转换pcd格式Python实现

热门文章

  1. C++编程思想 第2卷 第11章 并发 线程间协作 用队列解决线程处理的问题 适当地进行烘烤
  2. Flink 清理过期 Checkpoint 目录的正确姿势
  3. 浅谈游戏服务端开发-架构
  4. 将Windows下字体安装到Linux系统下
  5. 一篇对大数据深度思考的文章,让你认识并读懂大数据
  6. String中intern()方法
  7. AM Best确认中国再保险(集团)股份有限公司及其子公司的信用评级
  8. 如何在腾讯云上开启ES集群的跨进群复制功能(CCR)
  9. 制作windows10系统盘
  10. Android studio 新版本查看R文件内容ID