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