变分贝叶斯自编码器(VAE) 汇总 详解机器学习中的熵、条件熵、相对熵和交叉熵(基础知识)

时间:2024-03-07 22:37:34

 

前言阅读:

一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉(基础知识)

——————————

对变分一词最好的解释:“变分(variation)求极值之于泛函,正如微分求极值之于函数。 ”

 

读论文《Auto-Encoding Variational Bayes》(加精)

VAE(1)——从KL说起(比较容易理解,但是不够深入,同理下面3个)

VAE(2)——基本思想

VAE(3)——公式与实现

VAE(4)——实现

变分自编码器(VAEs)

【Learning Notes】变分自编码器(Variational Auto-Encoder,VAE)(次加精,公式部分推导的不太容易理解)

变分推断(次加精,刚开始的推导比较好理解,到后面涉及概念比较多,不容易理解,整体讲的比较全面)(还需要反复阅读,里面有些感念理解不清楚;有一种醉拳的感觉,讲的比较散,但好像又都围绕一个核心在讲,只是自己还体会不到

变分自编码器VAE:原来是这么一回事 | 附开源代码(加精,这篇有很多作者的思考,与以往直推公式不同)

推导变分自编码VAE损失函数(Youtube视频)(最好)

 

基础知识:

 

一个例子搞清楚(先验分布/后验分布/似然估计)

对Auto-Encoding Variational Bayes的解读:

深度学习(五十一)变分贝叶斯自编码器(上)(加精,理论知识点和技术细节都有)(侧重公式推导,忽略了背后原因)

深度学习(五十二)变分贝叶斯自编码器(下)(加精,理论知识点和技术细节都有)  (侧重公式实现,忽略了背后原因)

Auto-Encoding Variational Bayes(公式推导比较完整,细)

《Auto-encoding Variational Bayes》阅读笔记(精简扼要)(其中,不可计算问题部分,隐约说了为什么不用EM,而用VAE)

Auto-Encoding Variational Bayes学习笔记(也不错)

变分自编码器(一):原来是这么一回事

从自编码器到变分自编码器(其一)

从自编码器到变分自编码器(其二)(比较生动)

 

变分推断与变分自编码器(VAE)  作者用自己的思考来理解VAE(加精),看完前面的之后,再看这个,会豁然开朗

 

VAE对于很多刚接触的人来说,印象有如下:

1)生成模型;知道其叫:变分自编码器,属于自编码器,即一个生成模型;可以用来不断生成新的符合条件的变量。

2)公式复杂;VAE, 来自于变分推断(variational inference)和贝叶斯公式(这篇文章深度学习(五十二)变分贝叶斯自编码器(下)可以用来打基础,补补概率知识),其中,变分又属于泛函(即函数的函数),因此,VAE里面包括复杂的公式推导,例如ELBO, re-parameter tricks, KL散度(也叫相对熵,具体参考详解机器学习中的熵、条件熵、相对熵和交叉熵,其中这句话很经典“最小化相对熵等价于最小化交叉熵也等价于最大化似然估计), 比较头大。

3)深度学习模型;里面比较复杂的公式,通过具有模拟非线性特征的深层网络来拟合。 

 

除了以上列的3点,如果想进一步深入研究就比较困难,以下是最近看了这么多博客后的总结。因为每家博客都有自己看待VAE的角度(如有的从$L(\theta)$来推导公式,有的从$KL(Q(z|z)||p(z|x))$来推导),看的多了的话,会感觉每家说的都有道理(公式推导的很流利),但真到自己来梳理(讲出每一步那样做的原因)却又理不出个头绪,所以经过反复琢磨各个博客,选择了一个最容易入手的角度梳理下VAE,顺便根据各个博客讲解的特点将其放在合适的地方,方便读者进一步理解:

VAE像很多机器学习方法一样,其最原始的目标是为了得到可观察到的事件X的概率分布,即$P(X)$;因为有了这个分布后,VAE作为一个生成模型,就可以产生出各式各样符合需要的x;

=>而X的分布往往含有分布模型的参数$\theta$, 因此需要估计的X分布为$p(X;\theta)$.

=>同时,更进一步,因为很多事件中含有隐藏变量$z$, 所以需要估计的分布为$p(x,z;\theta)$, 即$p(x;\theta)=\int p(x,z;\theta)dz$. 

=>那么为了计算这个具体的分布,需要估算其中的$\theta$,利用基于这个概率分布$\prod_{i=0}^n \int p(x_i,z;\theta)dz$的对数似然估计最大化$\sum_{i=0}^n \ln \int p(x_i,z;\theta)dz$,通过求导$\sum_{i=0}^n \frac{\int \nabla_{\theta}p(x_i,z;\theta) dz }{ \int p(x_i,z;\theta) dz} $,并令导数为0,可计算其中的$\theta$.

=> 但是在上面的求导计算中,需要对概率积分,通常采用蒙特卡洛采样;由于,采样效率比较低,即采样z的分布与$p(z|x)$不一致造成(具体参考变分推断与变分自编码器),所以希望有一个与$p(z|x)$相一致的分布来采样z,从而提高采样的效率。

=> 由此,问题转化为求一个与$p(z|x)$近似的分布$Q(z|x)$,此后的详细步骤可以参考系列文章(VAE(1-4))。 

=>以上都是理论推导,如何真正用代码进行实现,可以参考(深度学习(五十二)变分贝叶斯自编码器(下)

 

 将VAE 用在推荐:

(讲解的比较好的一个博客)

Variational Autoencoders for Collaborative Filtering