深度生成模型

王铁柱

深度生成模型概述

image-20210607141558843

自编码器

自编码器的应用主要有两个方面:

  • 重构样本输入并进行特征提取
  • 训练多层网络时,通过自编码器训练样本得到参数初始值

基本形式:

image-20210607142833600

自编码器的目的是尽可能重构输入x。

误差函数采用均方误差或者交叉熵损失。

分类:

  • 降噪自编码器:输入为带噪音的数据,重构数据为无噪声数据,使得网络可以起到降燥的作用。

  • 稀疏自编码器:稀疏自编码器的基本模型是一个三层的神经网络,在学习时让网络输出的目标值接近于输入的图像本身,从而学习图像中的特征。直接学习一个恒等函数的话没有什么意义,所以我们要对隐含层做出一些限制,比如减小神经元的个数,网络就会被迫压缩数据并尝试重建输入图像。当我们加入惩罚让神经元在大部分情况下都不激活的时候,网络能够学习到十分有趣的边缘特征。隐含层的神经元在观察到输入图像中某个特定角度的边缘特征时才会被激活。

    损失函数为:第一项为重构损失,第二项用于抑制部分神经元, ρ j \rho_{j} ρj为隐藏层第 j j j个神经元的平均激活度, ρ \rho ρ为激活度目标值,一般设备为0.05或者0.1,KL离散度等于0代表两者完全相等。因此可以使得大部分神经元激活度降低,使得模型可以学到一些边缘特征。
    E = ∑ n = 1 N ∥ x n − x ~ n ∥ 2 + β ∑ j = 1 M K L ( ρ ∥ ρ ^ j ) E=\sum_{n=1}^{N}\left\|x_{n}-\tilde{x}_{n}\right\|^{2}+\beta \sum_{j=1}^{M} K L\left(\rho \| \hat{\rho}_{j}\right) E=n=1Nxnx~n2+βj=1MKL(ρρ^j)

  • 栈式自编码器:在维度压缩时,一般只包含输入层和中间层,输入层和多个中间层叠加便构成了栈式自编码器。其训练方式采用逐层训练的方式。首先训练第一个自编码器,然后保存编码器部分,将第一个编码器的中间层作为第二个编码器的输入层进行训练,然后反复迭代训练。

Hopfiled网络

Hopfiled有离散型和连续型。下面只介绍离散型。

在离散型网络中,每一个神经元节点都与其他节点相连;并且神经元之间的权重 w i j w_{ij} wij w j i w_{ji} wji是相同的,神经元与自身无连接。如下图所示。

image-20210607145502472

image-20210607150328343

每个单元的状态采用随机异步更新方式,每次只有一个单元改变状态。

Hopfiled是由n个二值单元构成的二值神经网络,每个单元的输出只能是0或1的两个值。

联想记忆:当输入模式为某种状态时,输出端要给出与之相应的输出模式。如果输入模式与输出模式一致,称为自联想记忆,否则,称为异联想记忆。

Hopfiled可以用于记忆和联想。因为每个HopField的输入都有特定的稳定状态,就相当于该网络对这些状态具有了记忆。从一些相关的,不全的记忆,可以触发类似联想的过程,最终稳定到某个稳定状态。非常类似人类的记忆和联想过程。

可以记住一些模式,但是如果模式之间比较相似,或者模式太多的时候,网络就不能正确判别模式。这种情况叫做串扰。为了防止串扰,可以对模式进行正交化,但是依旧不能完全解决问题。(玻尔兹曼机解决了此问题)

玻尔兹曼机 BM

如果发生串扰或陷入局部最优解,Hopfield神经网络就不能正确的辨别模式。

玻尔兹曼机则可以通过让每个神经元按照一定的概率分布发生状态变化,来避免陷入局部最优解。

玻尔兹曼机保持了Hopfield神经网络的假设: 权重对称、自身无连接、二值输出。

BM的输出是按照某种概率分布决定的:
{ p ( x i = 1 ∣ u i ) = exp ⁡ ( x K T ) 1 + exp ⁡ ( x K T ) p ( x i = 0 ∣ u i ) = 1 1 + exp ⁡ ( x K T ) \left\{\begin{array}{l} p\left(x_{i}=1 \mid u_{i}\right)= & \frac{\exp \left(\frac{x}{K T}\right)}{1+\exp \left(\frac{x}{K T}\right)} \\ p\left(x_{i}=0 \mid u_{i}\right) & =\frac{1}{1+\exp \left(\frac{x}{K T}\right)} \end{array}\right. p(xi=1ui)=p(xi=0ui)1+exp(KTx)exp(KTx)=1+exp(KTx)1
其中T是温度系数,当T趋于无穷时,x取值为0/1的概率都是0.5,这个状态称为稳态。

温度系数越大,跳出局部最优解的概率越高,但是温度系数太大,获得能量函数极小值的概率也越低。

但是BM需要很长时间才可以达到稳态。

BM采样模拟退火算法,先采用较大温度系数进行粗调,然后减小温度系数微调。

训练过程如下:

  1. 初始化连接权重和阈值
  2. 调整参数
    • 随机选取一个节点i,和Hopfield一样求出 u i u_i ui x i x_i xi
    • 根据上述公式求出 x i x_i xi为1和0的概率,随机选择一个0-1的参数 λ \lambda λ,如果概率p大于 λ \lambda λ,则改变该节点状态,否则保持不变。(注意:这里节点状态的改变不是根据p来决定的)
    • 调整与节点i相连节点的权重 w i j w_{ij} wij
  3. 重复2,直到满足终止条件

在BM中,所有节点都是可见的,即都是输入节点,实际应用中可以使部分节点不可见。隐藏节点与输入虽然没有直接联系,但是会影响可见节点的概率。

受限玻尔兹曼机 RBM

由于含有隐藏节点的BM很难训练,因此提出RBM。

image-20210607153414092

RBM由可见层和隐藏层组成,层内部无连接,层之间信息相互流动。

RBM中输入一个n维的向量,可以在隐藏层得到一个m维的向量,可以认为从n维原始数据中抽取到了m维的特征。

隐藏节点第j个特征取值为1的概率为:
p ( h j = 1 ∣ v ) = Sigmoid ⁡ ( ∑ i = 1 n w j i v i + c j ) p\left(h_{j}=1 \mid v\right)=\operatorname{Sigmoid}\left(\sum_{i=1}^{n} w_{j i} v_{i}+c_{j}\right) p(hj=1v)=Sigmoid(i=1nwjivi+cj)
然后根据上述概率生成一个0-1的随机数,如果p大于这个随机数则该节点取值为1,否则为0。

同理,可以根据编码后的y以同样的上述过程来得到x。

RBM的能量函数为:
E ( v , h , θ ) = − ∑ i = 1 n b i v i − ∑ j = 1 m c j h j − ∑ i = 1 n ∑ j = 1 m w i j v i h j E(v, h, \theta)=-\sum_{i=1}^{n} b_{i} v_{i}-\sum_{j=1}^{m} c_{j} h_{j}-\sum_{i=1}^{n} \sum_{j=1}^{m} w_{i j} v_{i} h_{j} E(v,h,θ)=i=1nbivij=1mcjhji=1nj=1mwijvihj
状态(v,h)的联合概率分布为:
p ( v , h ∣ θ ) = 1 Z ( θ ) exp ⁡ { − E ( v , h , θ ) } Z ( θ ) = ∑ v , h exp ⁡ { − E ( v , h , θ ) } \begin{array}{c} p(v, h \mid \theta)=\frac{1}{Z(\theta)} \exp \{-E(v, h, \theta)\} \\ Z(\theta)=\sum_{v, h} \exp \{-E(v, h, \theta)\} \end{array} p(v,hθ)=Z(θ)1exp{E(v,h,θ)}Z(θ)=v,hexp{E(v,h,θ)}
在RBM训练中,需要估计参数b, c, w。与BM相同,采用极大似然估计 l o g L ( θ ∣ v ) log L(\theta | v) logL(θv)。估计给定数据v出现概率最大的参数。
log ⁡ L ( θ ∣ v ) = log ⁡ 1 Z ( θ ) ∑ h exp ⁡ { − E ( v , h , θ ) } = log ⁡ ∑ h exp ⁡ { − E ( v , h , θ ) } − log ⁡ ∑ v , h exp ⁡ { − E ( v , h , θ ) } \begin{array}{l} \log L(\theta \mid v)=\log \frac{1}{Z(\theta)} \sum_{h} \exp \{-E(v, h, \theta)\} \\ \quad=\log \sum_{h} \exp \{-E(v, h, \theta)\}-\log \sum_{v, h} \exp \{-E(v, h, \theta)\} \end{array} logL(θv)=logZ(θ)1hexp{E(v,h,θ)}=loghexp{E(v,h,θ)}logv,hexp{E(v,h,θ)}
但是在训练过程中,需要估计所有输入模式的总和,会导致庞大的计算量,可以采用吉布斯Gibbs采样来迭代求p(v)的近似(每一种输入出现的概率)。

Gibbs在RBM中的应用:先随机初始化一个可见层的状态 v 0 v_0 v0,交替采样。在采样步数足够多的时候,可以得到服从RBM所定义的分布的样本。
h 0 ∼ P ( h ∣ v 0 ) , v 1 ∼ P ( v ∣ h 0 ) , h 1 ∼ P ( h ∣ v 1 ) , v 2 ∼ P ( v ∣ h 1 ) , ⋯ ⋯   , v k + 1 ∼ P ( v ∣ h k ) . \begin{aligned} \mathbf{h}_{0} \sim P\left(\mathbf{h} \mid \mathbf{v}_{0}\right), & \mathbf{v}_{1} \sim P\left(\mathbf{v} \mid \mathbf{h}_{0}\right), \\ \mathbf{h}_{1} \sim P\left(\mathbf{h} \mid \mathbf{v}_{1}\right), & \mathbf{v}_{2} \sim P\left(\mathbf{v} \mid \mathbf{h}_{1}\right), \\ \cdots \cdots, & \mathbf{v}_{k+1} \sim P\left(\mathbf{v} \mid \mathbf{h}_{k}\right) . \end{aligned} h0P(hv0),h1P(hv1),,v1P(vh0),v2P(vh1),vk+1P(vhk).

其他用到的算法还有:对比散度。

深度信念网络 Deep Belief Network(DBN)

image-20210607160531331

图中双圈代表可见层。

DBN的思想是把多个受限玻尔兹曼机串联堆叠起来形成一个更深的网络,其顶部两层(靠近输出层的层)之间的连接是双向的,而其他所有层之间的连接是单向的。类似于堆栈自编码器,在对该模型进行训练时,也可以采用预训练的方式来避免陷入局部最优解。

DBN训练过程:

  1. 首先使用对比散度方法训练第一个RBM的权重和偏置,固定第一个RBM的参数,然后使用其隐藏层神经元的状态作为第二个RBM的输入
  2. 再训练第二个RBM的权重和偏置
  3. 逐次迭代,完成训练

DBM既可以做生成模型,也可以做判别模型。

作为生成模型时,使用已有数据,用极大似然法估计出数据的概率分布。这种模型可以用于去除数据中的噪声,得到新的数据,对输入数据进行压缩和特征表达。

作为判别模型时,可以在最上层接一层softmax层,用于分类。

深度玻尔兹曼机 Deep Boltzmann Machine(DBM)

深度玻尔兹曼机与深度信念网络类似,都是由多个受限玻尔兹曼机串联堆叠而形成的一个深层神经网络,与深度信念网络相区别的是DBM的任意两层之间都是双向连接的。

训练方式通DBN相同,逐层迭代训练。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值