花书+吴恩达深度学习(二五)直面配分函数(CD, SML, SM, RM, NCE)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhq9695/article/details/86630744

如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

花书+吴恩达深度学习(二三)结构化概率模型(贝叶斯网络、马尔可夫网络)
花书+吴恩达深度学习(二四)蒙特卡罗方法(重要采样,MCMC)
花书+吴恩达深度学习(二五)直面配分函数(CD, SML, SM, RM, NCE)
花书+吴恩达深度学习(二六)近似推断(EM, 变分推断)

0. 前言

在基于概率的模型中,都需要计算如下概率分布:
p ( x ; θ ) = 1 Z ( θ ) p ~ ( x ; θ ) p(x;\theta)=\frac{1}{Z(\theta)}\tilde{p}(x;\theta)

对于一些不得不计算 p ( x ) p(x) 的模型,本章将介绍一些方法。

1. 对数似然梯度

通过最大似然学习无向模型的困难在于配分函数依赖于参数:
θ log p ( x ; θ ) = θ log p ~ ( x ; θ ) θ log Z ( θ ) \nabla_\theta \log p(x;\theta)=\nabla_\theta \log \tilde{p}(x;\theta)-\nabla_\theta \log Z(\theta)
当满足一些特定条件时,有:
θ log Z = E x p ( x ) θ log p ~ ( x ) \nabla_\theta \log Z=\mathbb{E}_{x\sim p(x)}\nabla_\theta \log \tilde{p}(x)
这将问题分为了正相负相。在正相中,我们增大从数据中采样得到的 log p ~ ( x ) \log \tilde{p}(x) 。在负相中,我们降低从模型分布中采样的 log p ~ ( x ) \log \tilde{p}(x)

1.1 朴素 MCMC 算法

算法如下图所示(图源:深度学习):

内循环中磨合马尔可夫链的计算代价过高,导致这个过程在实际中是不可行的。

1.2 对比散度算法 CD

算法如下图所示(图源:深度学习):

初始时,数据分布并不接近模型分布,因此负相并不是非常准确,但是正相可以准确的增加数据的模型概率,经过一段时间后,模型分布会接近数据分布,负相开始变得准确。

CD未能定性的实现真实负相的原因是,它不能抑制远离真实训练样本的高概率区域,这些区域在模型上具有高概率,但是在数据生成上具有低概率,称为虚假模态

基本上,除非 k k 非常大,模型分布中远离数据分布的峰值不会被使用训练数据初始化的马尔可夫链访问到。

1.3 随机最大似然 SML

又称为持续性对比散度 PCD,算法如下图所示(图源:深度学习):

基本思想是,只要随机梯度算法得到的步长很小,那么前一步骤的模型将类似于当前步骤的模型。因此,来自先前模型分布的样本将非常接近来自当前模型分布的客观样本,用这些样本初始化的马尔可夫链将不需要花费很多时间来完成混合。

2. 伪似然

蒙特卡罗近似配分函数及其梯度需要直接处理配分函数。而无向模型中很容易计算概率的比率:
p ( x ) p ( y ) = 1 Z p ~ ( x ) 1 Z p ~ ( y ) = p ~ ( x ) p ~ ( y ) \frac{p(x)}{p(y)}=\frac{\frac{1}{Z}\tilde{p}(x)}{\frac{1}{Z}\tilde{p}(y)}=\frac{\tilde{p}(x)}{\tilde{p}(y)}
假设我们将 x x 分为 a   b   c a\ b\ c ,其中 a a 包含我们想要的条件分布的变量, b b 包含我们想要的条件化变量, c c 包含除此之外的变量:
p ( a b ) = p ( a , b ) p ( b ) = p ( a , b ) a , c p ( a , b , c ) = p ~ ( a , b ) a , c p ~ ( a , b , c ) p(a\mid b)=\frac{p(a,b)}{p(b)}=\frac{p(a,b)}{\sum_{a,c}p(a,b,c)}=\frac{\tilde{p}(a,b)}{\sum_{a,c}\tilde{p}(a,b,c)}

不幸的是,为了计算对数似然,我们需要边缘化很多变量。如果我们将 c c 移到 b b 中减少计算代价,就产生了伪似然
i = 1 n log p ( x i x i ) \sum_{i=1}^n\log p(x_i\mid x_{-i})
如果每个随机变量有 k k 个不同的值,那么计算 p ~ ( x ) \tilde{p}(x) 需要 k × n k\times n 次估计,而计算配分函数需要 k n k^n 次估计。

伪似然的弱点是,它不能与仅在 p ~ ( x ) \tilde{p}(x) 上提供下界的其他近似一起使用

虽然伪似然估计没有显式的最小化 log Z \log Z ,但我们仍认为它具有类似负相的效果。

3. 得分匹配 SM

对数密度关于参数的导数 x log p ( x ) \nabla_x \log p(x) 被称为得分

策略是:最小化模型对数密度和数据对数密度关于输入的导数之间的平方差期望:
L ( x ; θ ) = 1 2 x log p m o d e l ( x ; θ ) x log p d a t a ( x ) 2 2 J ( θ ) = 1 2 E p d a t a ( x ) L ( x ; θ ) θ = min θ   J ( θ ) L(x;\theta)=\frac{1}{2}\left\|\nabla_x\log p_{model}(x;\theta)- \nabla_x\log p_{data}(x)\right\|_2^2\\ J(\theta)=\frac{1}{2}\mathbb{E}_{p_{data}(x)}L(x;\theta)\\ \theta^*=\min_\theta\ J(\theta)
但是,计算数据分布的得分需要知道生成训练数据的真实分布,所以等价于最小化下式:
L ~ ( x , θ ) = j = 1 n ( 2 x j 2 log p m o d e l ( x ; θ ) + 1 2 ( x j log p m o d e l ( x ; θ ) ) 2 ) \tilde{L}(x,\theta)=\sum_{j=1}^n(\frac{\partial^2}{\partial x_j^2}\log p_{model}(x;\theta)+\frac{1}{2}(\frac{\partial}{\partial x_j}\log p_{model}(x;\theta))^2)

类似于伪似然,得分匹配只有在我们能够直接估计 log p ~ ( x ) \log \tilde{p}(x) 及其导数的时候才有效。

广义得分匹配 GSM(generalized score matching)在许多样本观测概率为0的高维离散空间中不起作用。

4. 比率匹配 RM

比率匹配特别适用于二值数据,通过最小化以下目标函数在样本上的均值:
L ( x , θ ) = j = 1 n ( 1 1 + p m o d e l ( x ; θ ) p m o d e l ( f ( x ) , j ; θ ) ) 2 L(x,\theta)=\sum_{j=1}^n(\frac{1}{1+\frac{p_{model}(x;\theta)}{p_{model}(f(x),j;\theta)}})^2
其中, f ( x , j ) f(x,j) 返回 j j 处位值取反的 x x

5. 去噪得分匹配

可以拟合以下分布来正则化得分匹配:
p s m o o t h e d ( x ) = p d a t a ( y ) q ( x y ) d y p_{smoothed}(x)=\int p_{data}(y)q(x\mid y)dy
其中,分布 q ( x y ) q(x\mid y) 是一个损坏过程,通常在形成 x x 的过程中会向 y y 中添加少量噪声。

去噪得分匹配有用,因为通常我们不能获取真实的 p d a t a p_{data} ,而只能得到其样本确定的经验分布。

6. 噪声对比估计 NCE

噪声对比估计(noise-contrastive estimation)中,模型估计的概率分布表示为:
log p m o d e l ( x ) = log p ~ m o d e l ( x ; θ ) + c \log p_{model}(x)=\log \tilde{p}_{model}(x;\theta)+c
其中, c c log Z ( θ ) -\log Z(\theta) 的近似,NCE将 c c 视为另一参数。

NCE将估计 p ( x ) p(x) 的无监督学习转换为学习一个概率二元分类器。

构造一个联合 x x 和新二值变量 y y 的模型:
p j o i n t ( y = 1 ) = 1 2 p j o i n t ( x y = 1 ) = p m o d e l ( x ) p j o i n t ( x y = 0 ) = p n o i s e ( x ) p_{joint}(y=1)=\frac{1}{2}\\ p_{joint}(x\mid y=1)=p_{model}(x)\\ p_{joint}(x\mid y=0)=p_{noise}(x)
其中,开关变量决定是从数据还是从噪声分布中抽取 x x

我们应用最大似然学习拟合以下的监督学习问题:
θ , c = arg max θ , c E x , y p t r a i n log p j o i n t ( y x ) p j o i n t ( y = 1 x ) = σ ( log p m o d e l ( x ) log p n o i s e ( x ) ) \theta ,c=\arg \max_{\theta,c}\mathbb{E}_{x,y\sim p_{train}}\log p_{joint}(y\mid x)\\ p_{joint}(y=1\mid x)=\sigma(\log p_{model}(x)-\log p_{noise}(x))

NCE能够非常成功的应用于随机变量较少的问题,但随机变量有很多取值时,也很有效。

噪声对比估计是基于良好的生成模型应该能够区分数据和噪声的想法


如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

猜你喜欢

转载自blog.csdn.net/zhq9695/article/details/86630744
rm