变分自编码器 Variational AutoEncoders

  • Post author:
  • Post category:其他


变分自编码器(Variational AutoEncoders,VAEs)是一种深度潜变量表示学习模型。其已经被用于

图像生成

,并且在

半监督学习

上取得目前最好(state-of-the-art)的性能。

深度生成模型

考虑这样一个有向潜变量模型。







p


(


x


,


z




)


=


p


(


x




|




z




)


p


(


z




)










p

(

x

,

z

)

=

p

(

x

|

z

)

p

(

z

)


其中观测值







x







X














x

X



,而









X














X



可以是连续、离散变量,隐变量







z












R








k















z

R

k





举个例子,观测值







x










x



可以想象成一张图片(例如一张人脸),




z




是潜因子(训练过程中不可见),刻画人脸的特征。







z












z



的一个坐标可以编码这张脸是否高兴、是男是女等。

隐变量




z




可以有许多层,例如







p


(


x








z








1







)


p


(





z








2













z








3







)





p


(





z










m





1















z








m







)


p


(





z








m







)










p

(

x

z

1

)

p

(

z

2

z

3

)

p

(

z

m

1

z

m

)

p

(

z

m

)



。这就叫做

深度生成模型

,从潜变量的表示可以学习出层次关系,这里我们建设只有一个隐层。

深度生成模型的学习

假设我们有一个数据集







D


=


{






x






1







,





x






2







,


.


.


.


,





x






n







}










D

=

{

x

1

,

x

2

,

.

.

.

,

x

n

}



,我们需要关注的是模型的

推断



学习

  • 学习模型







    p










    p



    的参数




    θ










  • z












    z



    的近似后验推断:给定图片




    x




    的情况下,其潜变量







    z












    z



    是什么?





  • x




    的近似后验推断:给定部分缺失的图片







    x










    x



    ,怎样填补缺失部分?

我们在这些任务中有这些假设:

  • 难以积分 后验概率




    p


    (


    z



    |



    x


    )




    难以积分

  • 大数据 数据集







    D










    D



    大到内存中无法存放,一次只能处理




    D




    的一个小批量

变分自编码器就是处理这样情况的模型。

传统方法

EM算法能够完成潜变量模型的学习任务。然而,EM算法的E步骤要求计算近似后验







p


(


z






|




x


)










p

(

z

|

x

)



,我们已经假设其难以计算。M步骤中,模型参数







θ










θ



的更新是根据整个数据集的,这又违反了内存限制。

近似后验的推断可以使用平均场方法。回想一下,平均场近似的一步需要计算期望,这个计算的时间复杂度是目标变量马尔科夫毯规模的指数级别。

隐变量







z












z



的马尔科夫毯有几个变量?我们假设




x




中的至少一个分量由







z












z



的所有分量决定。这在模型的图结构里引入了一个V结构。这样,




z




中某一个分量










z








i















z

i



的马尔科夫毯包含了其余所有分量。这就使得平均场近似难以计算。简单地说,模型







p










p



包含了因子




p


(



x


i







z


1



,


.


.


.


,



z


k



)




,这些







z












z



分量都互相系在一起。

另外一个路径是使用基于采样的方法。在原始的VAE论文中,作者比较了这类方法,并指出其不使用于大规模数据集。此外,Metropolis-Hastings之类的方法要求手动指定一种分布,这往往难以确定。

自编码变分贝叶斯

现在讨论自编码变分贝叶斯(Auto-encoding variational Bayes,AEVB),一种能够有效解决上述三种推理、学习任务的算法;而变分自编码器就是AEVB的一个实例。

AEVB基于变分推断的思想。回想变分推断,我们试图在泛函





q


ϕ





中最大化证据下界(Evidence lower bound,ELBO)









L




(





p






θ







,





q








ϕ







)


=







E













q








ϕ







(


z






|




x


)











[




log







p






θ







(


x


,


z




)





log







q








ϕ







(


z






|




x


)




]












L

(

p

θ

,

q

ϕ

)

=

E

q

ϕ

(

z

|

x

)

[

log

p

θ

(

x

,

z

)

log

q

ϕ

(

z

|

x

)

]



而ELBO满足这个分解







log







p






θ







(


x


)


=


K




L


(





q








ϕ







(


z






|




x


)




|






|




p


(


z






|




x


)


)


+




L




(





p






θ







,





q








ϕ







)










log

p

θ

(

x

)

=

K

L

(

q

ϕ

(

z

|

x

)

|

|

p

(

z

|

x

)

)

+

L

(

p

θ

,

q

ϕ

)



因为







x










x



是固定的,我们就可以定义




x




条件下的分布







q




(


z






|




x


)










q

(

z

|

x

)



。这使得我们可以对每个







x










x



选择不同的




q


(


z


)




,从而相比于相同的







q




(


z




)










q

(

z

)



,这有着更佳的后验近似。

怎样优化







q




(


z






|




x


)










q

(

z

|

x

)



?平均场近似的方法对我们的目标来说不够精确。平均场的假设将







q












q



完全因子化过于“强烈”,而坐标下降优化算法又过于简单。

黑盒变分推断

第一个AEVB用的思路是一个通用的优化




q




的方法,并且其适用于大规模数据集(比平均场更复杂)。我们稍后将这个算法与







q












q



的特定选择结合起来。

这个方法称作

黑盒变分推断

——使用对




ϕ




的梯度下降法最大化证据下界(而不是平均场中的坐标下降法)。故这里只假设










q








ϕ















q

ϕ



对其参数







ϕ










ϕ



是可微的。

此外,这个过程不仅仅是一个推断过程。我们同时对于







ϕ










ϕ











θ










θ



的联合梯度下降完成了学习。关于







ϕ










ϕ



的优化会保持ELBO关于







log




p


(


x


)










log

p

(

x

)



紧的下界。这个方法某种程度上与EM算法优化边缘似然上的下界类似。

评价函数梯度估计量

为了实现黑盒变分推断,需要计算梯度



















θ


,


ϕ














E













q








ϕ







(


z




)











[




log







p






θ







(


x


,


z




)





log







q








ϕ







(


z




)




]












θ

,

ϕ

E

q

ϕ

(

z

)

[

log

p

θ

(

x

,

z

)

log

q

ϕ

(

z

)

]



计算关于







q












q



期望的闭式解往往不可能。可以从




q




中使用Monte Carlo方法采样,估计这个梯度。这也可以轻易地计算出







p










p



的梯度。也可以交换求梯度和求期望的顺序,使用Monte Carlo估计






E





q


ϕ



(


z


)





[








θ




log






p


θ



(


x


,


z


)



]





然而这个式子关于







q












q



求梯度就更难了。注意在这里再次交换顺序是不可行的,因为这个分布的期望不一定是可微的。

估计这个梯度的一个方法使用评价函数估计量:









ϕ






E





q


ϕ



(


z


)





[



log






p


θ



(


x


,


z


)





log






q


ϕ



(


z


)



]



=




E





q


ϕ



(


z


)





[




(



log






p


θ



(


x


,


z


)





log






q


ϕ



(


z


)



)








ϕ




log






q


ϕ



(


z


)



]





这个式子的推导需要一些代数和微积分知识,完全的推导过程在

本文

的附录B。

上式将求梯度放在求期望内,这就使得可以使用Monte Carlo评估正确性。本文将其称为梯度估计量的

评价函数



不幸的是,评价函数估计量有一个重要的缺点:高方差。这是什么意思?假设用Monte Carlo估计一个均值为1的某个期望。如果采样过程中的估计量是0.9, 1.1, 0.96, 1.05,…这些接近1的量。再过不了几个采样,就可以得到真实期望的良好估计量。假如你对0采样了九十九次,对100采样了一次,这样仍然可以得到正确的期望,但是你必须要设定一个非常大的采样次数才能保证采样出的期望是1,这就称作高方差。

我们在使用评价函数估计量的时候经常遇到这类问题。事实上,其方差高到我们不能用其学习很多模型。

VAE论文的关键贡献是提出了另一个性质更好的估计量。其分为两步:1. 重写ELBO的形式以保证其部分拥有闭式解(不需要Monte Carlo采样);2. 使用基于“重参数化”技巧的另一个梯度估计量。

SGVB估计量

ELBO的重写形式如下







log




p


(


x


)










E













q








ϕ







(


z






|




x


)










[



log







p






θ







(


x




|




z




)



]






K




L


(





q








ϕ







(


z






|




x


)




|






|




p


(


z




)


)










log

p

(

x

)

E

q

ϕ

(

z

|

x

)

[

log

p

θ

(

x

|

z

)

]

K

L

(

q

ϕ

(

z

|

x

)

|

|

p

(

z

)

)



从代数的角度出发很容易验证这是相同的ELBO。

重参数化有个很有趣的解释。首先,认为







x










x



是一个观测到的数据点,右侧由两部分组成,都包含了采样量




z





q


(


z





x


)




。而







z












z



可以解释成为描述




x




的“编码”,故







q












q



可以称为

编码器



第一项中,




log





p


(


x



|



z


)




是采样到的编码







z












z



关于观测量




x




对数似然。







p


(


x





z




)










p

(

x

z

)



对于原始数据







x










x



分配较高的概率时,该项此时最大。其试图从编码




z




中重建







x










x



。因此




p


(


x





z


)




称为

解码器

,该项称为

编码误差



第二项是







q




(


z







x


)










q

(

z

x

)



与后验







p


(


z




)










p

(

z

)



的KL散度,其中我们会令其为单位正态分布。这使得







z












z



向高斯分布的形态靠拢。我们称之为

正则

项。它避免了




q


(


z





x


)




是简单地对数据的同一映射编码,而是令其学习到一些有意义的表示(例如脸部特征)。

因此,我们的优化目标是拟合







q




(


z






|




x


)










q

(

z

|

x

)



,其映射







x










x



到有意义的隐空间




z




中,并且可以从







p


(


x




|




z




)










p

(

x

|

z

)



中重建







x










x



。这个目标与神经网络自编码器类似,也是AEVB名称的来源。

重参数化技巧

正如之前所提到的,优化我们的目标需要梯度的良好估计量。VAE论文的另一个主要贡献是提出了基于

重参数化

技巧的低方差梯度估计量。

在普通条件下,可以用以下两步的生成过程描述分布





q


ϕ



(


z





x


)





1. 首先,从一个类似于标准正态分布









N






(


0


,


1


)










N

(

0

,

1

)



的简单分布







p


(


ϵ


)










p

(

ϵ

)



采样一个随机噪声







ϵ










ϵ









ϵ





p


(


ϵ


)










ϵ

p

(

ϵ

)



2. 随后,使用一个确定性变换










g








ϕ







(


ϵ


,


x


)










g

ϕ

(

ϵ

,

x

)



将这个随机噪声映射到一个更加复杂的分布







z




=





g








ϕ







(


ϵ


,


x


)










z

=

g

ϕ

(

ϵ

,

x

)



若要获取有意义的分布族










q








ϕ















q

ϕ



,可以选择一个










g








ϕ







(


ϵ


,


x


)










g

ϕ

(

ϵ

,

x

)



,例如







z




=





g








ϕ







(


ϵ


,


x


)










z

=

g

ϕ

(

ϵ

,

x

)



,就可以得到分布










q








ϕ







(


z







x


)










q

ϕ

(

z

x

)





现在在高斯分布上提供一个重参数化的例子,这也是最简单的例子。考虑







z










q










μ


,


σ











(


z




)


=




N






(


μ


,


σ




)










z

q

μ

,

σ

(

z

)

=

N

(

μ

,

σ

)



,可以重写成







z




=





g










μ


,


σ











(


ϵ


)


=


μ


+


ϵ





σ












z

=

g

μ

,

σ

(

ϵ

)

=

μ

+

ϵ

σ



其中







ϵ







N






(


0


,


1


)










ϵ

N

(

0

,

1

)



。显然这两种写法都表示随机变量







z












z



具有相同的分布。

这种方法的最大好处就是可以写出




q


(


z


)




期望的梯度(对于任何







f












f



)为








ϕ





E




z





q


(


z





x


)





[



f


(


x


,


z


)



]



=






ϕ





E




ϵ





p


(


ϵ


)





[



f


(


x


,


g


(


ϵ


,


x


)


)



]



=




E




ϵ





p


(


ϵ


)





[







ϕ



f


(


x


,


g


(


ϵ


,


x


)


)



]





求梯度现在位于求期望的内部,因此可以使用Monte Carlo估计右项。这种方法的方差比评价函数估计量的方差低得多,使得之前不能学习的许多模型可以学习。

选择







q












q








p




到此为止,我们没有明确







p










p








q




的形式,除了它们可以是任意函数之外。怎样参数化这些分布?最佳的







q




(


z







x


)










q

(

z

x

)



应当是能能够近似真实后验







p


(


z







x


)










p

(

z

x

)



。相似地,







p


(


x


)










p

(

x

)



应当具有足够的灵活度,以足够表示任意复杂度的数据。

因为这些原因,我们可以使用

神经网络

参数化







q












q








p




。神经网络是极具表现力的函数逼近器,可以在大型数据集上进行高效的优化。这个选择为经典机器学习方法(近似贝叶斯推断)和现代深度学习之间架起了一座桥梁。

然而怎么用神经网络参数化一个概率分布呢?假设







q




(


x





z




)










q

(

x

z

)











p


(


x





z




)










p

(

x

z

)



都是正态分布,可以写成







q




(


z







x


)


=




N






(


z




;







μ






















(


x


)


,







σ
























(


x


)





I




)










q

(

z

x

)

=

N

(

z

;

μ

(

x

)

,

σ

(

x

)

I

)



其中












μ






















(


x


)


,







σ
























(


x


)










μ

(

x

)

,

σ

(

x

)



都是







x










x



的确定性向量值函数,被任意复杂度的神经网络参数化。

跟一般地,同样的参数化方法可以应用在任何指数族分布上——用一个关于




x




的函数参数化其充分统计量。

变分自编码器

现在我们可以将AEVB应用到变分自编码器上了。

AEVB包含了以下三项方法:1. 自编码ELBO重写形式;2. 黑盒变分推断;3. 重参数化的低方差梯度估计量。其使用重参数化的梯度估计量、黑盒变分推断优化自编码ELBO。这个算法可以适用于任何深度生成潜变量模型










p






θ















p

θ



(需要关于







θ










θ



可微分)。

变分自编码器使用AEVB、一个特定的编码器







q












q



学习模型




p




。模型







p










p



的参数化形式是







p


(


x





z


)






=



N



(


x


;




μ







(


z


)


,




σ







(


z


)





I


)






p


(


z


)






=



N



(


z


;


0


,


I


)







其中












μ






















(


z




)


,







σ
























(


z




)










μ

(

z

)

,

σ

(

z

)



各自由神经网络参数化(通常是2隐层、500个神经元每层)。模型







q












q



的参数化形式




q


(


z





x


)


=



N



(


z


;




μ







(


x


)


,




σ







(


x


)





I


)











p










p








q




的神经网络参数化形式更进一步简化了自编码ELBO。特别地我们使用一个闭式解计算正则化项。Monte Carlo估计仅用于重建项。这些式子的具体形式已经在文中给出。

我们可以将变分自编码器解释成一个有向潜变量概率图模型。我们也可以将其视为一个特殊的神经网络神经网络自编码器优化目标。不像之前的神经网络自编码器,VAEs的重建项和正则项更具有贝叶斯学习的视角。

实验结果

VAE能够应用到图像







x










x


<script type=”math/tex” id=”MathJax-Element-243″>x</script>上,学习有意义的潜变量表示。原论文包含了VAE的几个例子,Frey人脸数据集和MNIST数据集。在人脸数据集上,在不同潜变量之间,表情逐渐变化(例如在“惊讶”和“生气”两种表情中间有着平滑的过度表情)。在MNIST数据及上,也有平滑的“插值”数字显现。

作者把他的方法同另外三种方法做了比较:wake-sleep算法、Monte-Carlo EM和hybrid Monte-Carlo。后两种是基于采样的方法,它们都很精确,但是难以扩展到大数据集上。Wake-Sleep算法是一种变分推断算法,拥有较好的可扩展性,然而其没有使用ELBO的精确梯度(用一个近似替代),因此不如AEVB精确。文章中还绘图予以说明。

参考文献

The variational auto-encoder,

https://ermongroup.github.io/cs228-notes/extras/vae/


Auto-Encoding Variational Bayes,

https://arxiv.org/abs/1312.6114