本文是接着上一篇深度学习之 12 循环神经网络RNN 3_水w的博客-CSDN博客
目录
❑ 利用能量函数,可以给出全部状态(v, h)的联合概率分布:
❑ 给定可见层上所有神经元的状态时,隐藏层上的某个神经元被激活(即取值为1)的概率:𝑃(hk = 1|V)
❑ 给定隐藏层上所有神经元的状态时,可见层上的某个神经元被激活(即取值为1)的概率:𝑃(𝑣𝑘 = 1|𝐡)
❑ 给定训练样本编辑 ,调整参数θ 训练RBM编辑 , 它们是独立同分布的,训练RBM是最大化似然函数
❑ 作为判别模型使用时,需要在模型顶层添加一层Softmax实现分类
⚫ 无监督学习(Unsupervised Learning) 是指从无标签的数 据中学习出一些有用的模式。⚫ 无监督学习算法一般直接从原始数据中学习,不借助于任何人 工给出标签或者反馈等指导信息。➢ 监督学习是建立输入-输出之间的映射关系➢ 无监督学习是发现隐藏的数据中的有价值信息,包括有效的特征、类 别、结构以及概率分布等。⚫ 典型无监督问题:无监督特征学习、概率密度估计、聚类等。
1 Hopfield神经网络
一种基于神经动力学的联想记忆模型⚫ Hopfield 神经网络 是一种 单层 互相全连接 的 反馈型 神经网络。⚫ 每个神经元既是 输入 也是 输出⚫ 每个神经元都将自己的 输出 通过连接权传给所有其它神经元,同时又都 接收 所有其它神经元传递过来的信息。 (神经元在 t 时刻的输出状态间接地与自己 t -1时刻的输出状态有关)⚫ 属于一种循环神经网络⚫ 神经元之间互连接,所以 权重矩阵将是对称矩阵 。
![](https://img-blog.csdnimg.cn/39019264c18640219f2486bbf0aae79b.png)
❑ Hopfield网络的特点
✓ 神经元之间的连接权重对称( 𝑤 𝑖𝑗 = 𝑤 𝑗𝑖 )✓ 每个神经元没有到自身的连接( 𝑤 𝑖𝑖 =0)✓ 对于由 𝑀 个二值神经元组成的网络,每个神经元的输出只能是0或1✓ Hopfield网络的更新可以分为 异步 和 同步 两种方式⚫ 异步更新是指每次更新一个神经元,神经元的更新顺序可以是随机或事先固定的⚫ 同步更新是指一次更新所有的神经元,需要有一个时钟来进行同步
![](https://img-blog.csdnimg.cn/a87a3f947e5043268ebce5bc95605efa.png)
❑ 能量函数
◼ 给网络状态定义一个标量属性,称为“ 能量 ”, 能量函数 定义为:
◼ Hopfield网络的 经过迭代一定能达到一个稳定的收敛状态, 即为网络的 输出模式。◼ 给定一个外部输入,网络经过演化,会达到某个稳定状态,这些稳定状态称为吸引点(Attractor)。◼ 在一个Hopfield网络中通常有多个吸引点,每个吸引点为一个能量局部最优点。
❑ 联想记忆
◼ 每个吸引点 𝒖 都对应 一个“管辖”区域 ,若输入向量 𝒙 落入这个区域,网络最终会收敛到该吸引点;因此,可以把 吸引点 看作网络中存储的 模式(Pattern) 模式是由权重确定的◼ 将网络输入 𝒙 作为起始状态,随时间收敛到吸引点 𝒖 上的过程作为检索过程◼ 一个Hopfield网络可以存储大约 𝟎. 𝟏𝟒𝑴 个模式( 𝑀 为神经元个数)
❑ 信息存储(参数学习)
◼ 信息存储是指将一组向量存储在网络中的过程。◼ 存储过程主要是 调整神经元之间的连接权重 ,因此可以看作一种 学习过程◼ Hopfield网络的参数不是通过训练出来的,而是用 规则 计算出来的◼ 赫布规则(Hebbian Rule) :如果 𝑥 𝑖 和 𝑥 𝑗 在输入向量中相同的概率越大,则其对应的神经元之间的权重𝑤𝑖𝑗就应该越大。一种最简单的学习方式:![]()
⚫
当需要记忆的模式之间较为相似,或者需要记忆的模式太多时,Hopfield神经网络就不能完全正确地辨别模式。这种相互干扰、不能准确记忆的情况称为串扰(crosstalk)
。
![](https://img-blog.csdnimg.cn/0a6613f4fe8c49d6901189f09338fe10.png)
⚫
为了防止串扰,可以采用先把模式正交化再进行记忆等方法;
⚫
但是正交化方法并不能完全解决问题,可以使用
玻尔兹曼机
解决这一问题。
2 玻尔兹曼机
❑ 玻尔兹曼机也是相 互连接型 网络如果发生串扰或陷入局部最优解,Hopfield神经网络就不能正确地辨别模式 。而 玻尔兹曼机 (Boltzmann Machine)则可以通过让每个单元按照一定的 概率分布 发生状态变化,来避免陷入局部最优解。❑ 玻尔兹曼机 保持了Hopfield神经网络的假设:– 权重对称– 自身无连接– 所有神经元都是二值输出, 分为可观测变量𝑉和隐变量 𝐻
![](https://img-blog.csdnimg.cn/c6f6e0e2cf834353bdc9ff9f16ce1834.png)
❑ 模型定义
![](https://img-blog.csdnimg.cn/d347376892d7410caacf24b07e5293b0.png)
❑样本生成
给定网络权重
𝑊
,玻尔兹曼机可以用来生成样本
对于玻尔兹曼机中的某一个变量𝑋𝑖,其输出是由全条件概率分布决定的:
• 𝑇(> 0)
表示温度系数,
𝑘
是玻尔兹曼常数
• 当
𝑇
趋近于无穷时,无论
𝒙
\𝑖
取值如何,
𝑥
𝑖
等于1 或 0 的概率都接近1/2,系统很容易达到稳定状态
• 当
𝑇 = 0
时,
𝑥
𝑖
以接近1的概率取1或0,玻尔兹曼机退化为Hopfield网络
![](https://img-blog.csdnimg.cn/bc8dfb71128846b5b8dbf41c984b2ba4.png)
❑ 吉布斯采样
![](https://img-blog.csdnimg.cn/69c8d91707db4925ad521478e6a874f9.png)
❑ 全局能量最小化
⚫ 玻尔兹曼机使用 模拟退火 算法来使得系统达到热力平衡状态(系统能量最小点、全局最优点): 先采用较大的温度系数进行粗调,然 后逐渐减小温度系数进行微调 。⚫ 温度系数越大,跳出局部最优解的概率越高。但是温度系数增大时,获得能量函数极小值的概率就会降低。反之,温度系数减小时,虽然获得能量函数极小值的概率增加了,但是玻尔兹曼机需要经历较长时间才能达到稳定状态。
❑ 参数学习
因为玻尔兹曼机的目标是用神经网络来描述一组变量的联合概率分布,所以需要使用符合该分布的样本数据来训练模型参数。
![](https://img-blog.csdnimg.cn/4ed9b4fcacdc4691b842d91e9e905a6d.png)
3 受限玻尔兹曼机
❑ 由于玻尔兹曼机的是全连接网络,训练非常困难,所以 Hinton 等人提出了受限玻尔兹曼机(Restricted Boltzmann Machine )– 由可见层和隐藏层构成– 层内单元之间无连接⚫ n v 和 n h 分别表示可见层和隐藏层中包含的神经元数目,下标v 和 h 代表visible和hidden;⚫ v =( v 1 ; v 2 ; …; v nv ) :可见层的状态向量, v i 表示可见层中第i 个神经元的状态;⚫ h =( h 1 ; h 2 ; …; h nh ):隐藏层的状态向量, h j 表示隐藏层中第j 个神经元的状态;⚫ a =( a 1 ; a 2 ; …; a nh ):可见层的偏置向量, a i 表示可见层中第i 个神经元的偏置;⚫ b =( b 1 ; b 2 ; …; 𝑏 𝑛 ℎ ):隐藏层的偏置向量, b j 表示隐藏层中第j 个神经元的偏置;⚫ W =( w ij ) : 隐藏层和可见层之间的权值矩阵, w ij 表示隐藏层中第i 个神经元和可见层中第 j 个神经元之间的权重;
![](https://img-blog.csdnimg.cn/466748a7c8264f969103457d982f5796.png)
❑ 受限玻尔兹曼机的能量函数:
受限玻尔兹曼机的能量函数为
:
其中,𝑎𝑖是可见变量的偏置,𝑏𝑗是隐藏变量的偏置,𝑤𝑖𝑗是连接权重,𝜃
= (
𝑊
,
𝐚
,
𝐛
) 是表示所有连接权重和偏置的参数集合。
![](https://img-blog.csdnimg.cn/ad99ddb83a5b4146a7b71e16c5ecb600.png)
❑ 利用能量函数,可以给出全部状态(v, h)的联合概率分布:
![](https://img-blog.csdnimg.cn/c84a95fc11674fcdbf6057bf3b7ad739.png)
❑ 观测数据的概率分布, 也就是可见层状态变量的概率分布
![](https://img-blog.csdnimg.cn/d1adae669f6148788c2ab69fe58a0451.png)
❑ 类似地,隐藏层状态变量的概率分布
![](https://img-blog.csdnimg.cn/72bb41cba8b4493092ed5e8e181adcaa.png)
❑ 给定可见层上所有神经元的状态时,隐藏层上的某个神经元被激活(即取值为1)的概率:𝑃(hk = 1|V)
❑ 给定隐藏层上所有神经元的状态时,可见层上的某个神经元被激活(即取值为1)的概率:𝑃(𝑣𝑘 = 1|𝐡)
❑ 中间变量符号
![](https://img-blog.csdnimg.cn/bfeb0665dea84b4e854a04ba8d9df829.png)
❑ 能量函数可以表达为
❑ P(hk=1|v)的推导
![](https://img-blog.csdnimg.cn/58d182758f3049eb90bbfdd5dc0544fd.png)
❑ 给定训练样本
,调整参数θ 训练RBM
, 它们是独立同分布的,训练RBM是最大化似然函数
❑ 和玻尔兹曼机一样,计算时通常使用对数似然函数
❑ 最大化似然,采用梯度正方向更新
![](https://img-blog.csdnimg.cn/f526f3e8298b4af3977b9f3cc66a6dbb.png)
❑ 改良后的受限玻尔兹曼机依然在计算上存在着问题:是所有输入模式的总和,不可避免会产生庞大的计算量❑ 要想解决这个问题,可以使用常规蒙特卡罗MCMC采样估计(如吉布斯采样),进行迭代计算求近似解,但即使这样处理,迭代次数也仍然非常多。于是,人们提出了对比散度算法
对比散度算法
❑ 对比散度法
– 2002年Hinton提出, MCMC的状态以训练样本为起点,这样只需很少的状态转移(k 步)就可以 得到RBM的分布❑ 对比散度算法的训练过程
– 1. 训练准备:初始化连接权重和偏置– 2. 调整参数• 2.1 在可见层𝑣(0) 设置输入模式• 2.2 调整隐藏层中单元ℎ(0) 的值• 2.3 根据输出𝑥𝑖 和 𝑥 𝑗 的值,调整连接权重 𝑤 𝑖𝑗 、偏置 𝑎 𝑖 、偏置 𝑏 𝑗– 重复步骤2,直到满足终止判断条件
4 深度玻尔兹曼机
❑ 由受限玻尔兹曼机堆叠组成;❑ 深度玻尔兹曼机采用与多层神经网络不同的训练方法,在训练时采用对比散度算法, 逐层来调整连接权重和偏置 ;❑ 具体做法:– 首先训练输入层和第一个隐藏层之间的参数,并固定下来;– 把第一个隐藏层当成输入层,再训练其与第二个隐藏层之间的参数,并固定下来;– 然后逐层迭代,完成多层网络的训练;
![](https://img-blog.csdnimg.cn/7c5cf8a792e34ea3ac2ab90b53d7d4c2.png)
❑ 深度玻尔兹曼机既可以当作生成模型,也可以当作判别模型
– 作为生成模型使用时,网络会按照某种概率分布生成训练数据。概率分布可根据训练样本导出,但是覆盖全部数据模式的概率分布很难导出,所以通常选择最大似然估计法训练参数,得到最能覆盖训练样本的概率分布– 这种生成模型能够:去除输入数据中含有的噪声,得到新的数据,对输入数据压缩和特征表达
❑ 作为判别模型使用时,需要在模型顶层添加一层Softmax实现分类
– 进行分类时,需要
同时提供训练样本和期望输出
,在最顶层级联一个
𝑆𝑜𝑓𝑡𝑚𝑎𝑥
层
❑ 训练方法
– 最顶层的参数使用随机数进行初始化;
– 除最顶层外,其他各层都可以使用无监督学习进行训练。
– 把训练得到的参数作为初始值,使用误差反向传播算法对包含最顶层的神经网络进行训练;
![](https://img-blog.csdnimg.cn/b3dafa09946844f3811040761c146bc5.png)
5 深度信念网络
◼ 深度信念网络是一种深层的概率有向图模型,其图结构由多层 的节点构成。◼ 每层节点的内部没有连接,相邻两层的节点之间为全连接。◼ 网络的最底层为可观测变量,其他层节点都为隐变量。◼ 最顶部的两层间的连接是无向的,其他层之间的连接是有向的。
![](https://img-blog.csdnimg.cn/d1d85628163449079c0c1d0a193406b1.png)
![](https://img-blog.csdnimg.cn/322ee2351ffa4b17b43325abf937f419.png)
6 自编码器
⚫ 自编码器 (Auto-encoder,AE) :是通过无监督的方式来学习一组数据的有效编码(或表示);⚫ 假设有一组 𝐷 维的样本 𝒙 (𝑛) ∈ ℝ 𝐷 , 1 ≤ 𝑛 ≤ 𝑁 ,自编码器 将这组数据从 输 入空间 映射到 特征空间 得到每个样本的编码 𝒛 (𝑛) ∈ ℝ 𝑀 , 1 ≤ 𝑛 ≤ 𝑁 ,并且希望这组编码可以重构出原来的样本;⚫ 自编码器的结构可分为两部分:➢ 编码器,Encoder, 𝑓: ℝ 𝐷 ⟶ ℝ 𝑀 ;➢ 解码器,Decoder, g ∶ ℝ 𝑀 ⟶ ℝ 𝐷 ;⚫ 最简单的自编码器由两层神经网络组成➢ 输入层到隐藏层用来编;➢ 隐藏层到输出层用来解码;➢ 层与层之间互相全连接⚫ 编码过程:
⚫ 重构过程:![]()
⚫ 自编码器的学习目标是 最小化重构误差(Reconstruction Error):![]()
![](https://img-blog.csdnimg.cn/2e6767ca806448cfa20bba2cf6289f2c.png)
⚫ 如果 𝑀 < 𝐷 ,自编码器相当于是一种 降维 或 特征抽取方法 ;⚫ 如果 𝑀 ≥ 𝐷 , 一定可以找到一组或多组解使得 g(𝑓 𝑥 ) 为单位映射(Identity Function)并使得重构错误为 0;
7 自编码器变种、预训练
稀疏自编码器
⚫ 自编码器除了可以学习低维编码之外,也能够学习高维的稀疏编码;⚫ 如果 𝑀 ≥ 𝐷 ,并让 𝒛 尽量稀疏,这就是稀疏自编码器(Sparse Auto-Encoder);⚫ 优点:进行了隐式的特征选择;⚫ 学习目标:➢ 通过给自编码器中隐藏层单元 𝒛 加上稀疏性限制,自编码器可以学习到数据中一些有用的结构;
➢ 稀疏性度量函数:![]()
定义可以采用:范数、对数函数、指数函数,
![](https://img-blog.csdnimg.cn/50e48d9fae2d42cbb666f9f761bbb159.png)
➢ 给定
𝑁
个训练样本,隐藏层第
𝑗
个神经元平均活性值为:
![](https://img-blog.csdnimg.cn/59d1cbcefd9f45f3b6710dd182eac405.png)
➢ 通过KL散度来做概率分布之间的限制:
降噪自编码器
⚫ 降噪自编码器 ( Denoising Auto-encoder )就是一种通过引入噪声来增加编码鲁棒性的自编码器;⚫ 自编码器是把训练样本直接作为输入,而降噪自编码器则是先向 训练样本中加入随机噪声,然后将被扰动的数据作为输入;
⚫ 我们需要训练神经网络,使得 重构结果和不含噪声的样本之间的误差收敛于极小值;⚫ 误差函数会对不含噪声的输入样本进行计算,故降噪自编码器可以完成以下两项训练:➢ 保持输入样本不变的条件下,能够更好地反映样本的特征;➢ 消除输入样本中包含的噪声;
在MNIST数据集上应用降噪自编码器 :
堆叠自编码器
⚫ 对于很多数据来说,仅使用两层神经网络的自编码器还不足以获取一种好的数据表示;⚫ 为了获取更好的数据表示,我们可以使用更深层的神经网络;⚫ 网络层数加深,数据表示会更加抽象,更能捕获高层语义信息;⚫ 堆叠自编码器(Stacked Auto-Encoder,SAE):堆叠多层的自编码器模型;⚫ 堆叠自编码器一般可以采 用逐层训练(Layer-Wise Training)来学习网络参数:➢ 首先训练第一个自编码器,然后保留第一个自编码器的编码器部分;➢ 把第一个自编码器的中间层作为第二个自编码器的输入层进行训练;➢ 反复地把前一个自编码器的中间层作为后一个编码器的输入层,进行迭代训练 ;
在预训练中的应用
⚫ 堆叠自编码器每层都能得到有效的参数,可以把训练后的参数作为神经网络或卷积神经网络的参数初始值,这种方法叫 预训练(pre-training);⚫ 预训练属于无监督学习,接下来需要使用有监督学习来调整整个网络的参数,叫作 微调(fine tuning)。