zoukankan      html  css  js  c++  java
  • 变分自编码器(Variational auto-encoder,VAE)

    参考:

    https://www.cnblogs.com/huangshiyu13/p/6209016.html

    https://zhuanlan.zhihu.com/p/25401928

    https://blog.csdn.net/ustbfym/article/details/78870990

    https://blog.csdn.net/StreamRock/article/details/81258543

    https://blog.csdn.net/weixin_40955254/article/details/82315224

    https://blog.csdn.net/weixin_40955254/article/details/82315909

    Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013)

     

    简介:

    变分自编码器(Variational auto-encoder,VAE)是一类重要的生成模型(generative model),它于2013年由Diederik P.Kingma和Max Welling提出。

      这里有一些使用VAE好处,就是我们可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。 

      假设,给定一系列猫的照片,我希望你能够对应我随机输入的一个n维向量,生成一张新的猫的照片,你需要怎么去做?对于GAN就是典型的深度学习时代的逻辑,你不是不清楚这个n维向量与猫的图片之间的关系嘛,没关系,我直接拟合出来猫的图片对于n维向量的分布,通过对抗学习的方式获得较好的模型效果,这个方法虽然很暴力,但是却是有效的。

       VAE则不同,他通过说我希望生成一张新的猫脸,那么这个n维向量代表的就是n个决定最终猫脸模样的隐形因素。对于每个因素,都对应产生一种分布,从这些分布关系中进行采样,那么我就可以通过一个深度网络恢复出最终的猫脸。VAE相比较于GAN它的效果往往会略微模糊一点,但是也不失为一种良好的解决方案。

     

    问题背景:

      首先我们有一批数据样本 {x1,…,xn},其整体用 X 来描述,我们本想根据 {x1,…,xn} 得到 X 的分布 p(X),如果能得到的话,那我直接根据 p(X) 来采样,就可以得到所有可能的 X 了(包括 {x1,…,xn} 以外的),这是一个终极理想的生成模型了。但是,这个过程往往是很困难的。

      于是,我们退而求其次,就想到了上文中提到的隐形变量z,这个z就是决定最终x形态的因素向量。给定一个图片Xk,我们假定p(z|xk)是专属于xk的后验概率分布,这个概率分布服从正态分布。得到了这个概率,我们可以从分布中采样,并且通过最终的解码器将图片再恢复出来。

      由于上述所说,我们所假设的这些分布都是正态分布,那么我们就需要求得相应的方差和均值,所以在编码实现的过程中,不难看到encoder部分真实做的事情就是,对相应的输入数据,通过两个网络产生了均值和方差。

    是一个包含了N个连续或者离散样本x的数据集。

    假设数据是通过涉及到一个未观察到的连续随机变量z的过程产生的,这个过程包含了两步。

    (1)通过某个先验分布 产生一个

    (2)根据某个条件分布 产生样本

      假设 产生自分布如何得到 是一个未知的难题。文章中用 作为编码器/识别模型(encoder or recognition model),基于数据x产生一个关于数据x的编码值z的分布。作为解码器/生成模型(decoder or generative decoder),基于编码值z产生一个对应数据x的分布。其中φ和θ的值通过两者的联合学习得到。

     

    模型推导:

    等价于

    最大似然估计(maximum likelihood estimation, MLE):一种重要而普遍的求估计量的方法。MLE的目标是找出一组参数,使得模型产生出观测数据的概率最大。

     

    KL散度:相对熵(relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence)或信息散度(information divergence),是两个概率分布(probability distribution)间差异的非对称性度量。在在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值。

     

     

    蒙特卡罗估计(Monte Carlo estimate):

    证明:

     

    MLP(多层感知器):

     

    VAE的encoder和decoder都只用了一层隐含层。

     

    近似计算的证明:

    表示元素乘法;按照高斯分布求解KL散度即可得到结果。

    由上图可知,最后的loss可由蓝色的两项组成,前一项为KL散度(计算方式见最后),反应与真实分布的距离;后一项为重建损失,可由交叉熵体现。

    训练好了以后,生成样本采用下面的网络结构:

     

  • 相关阅读:
    面向对象(接口 ,多态)
    面向对象(继承,重写,this,super,抽象类)
    IO(字符流 字符缓冲流)
    ArrayList集合
    字符串常用API
    面向对象(类,封装,this,构造方法)
    不同类型问题代码训练
    java中的方法
    04慕课网《进击Node.js基础(一)》HTTP讲解
    《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数
  • 原文地址:https://www.cnblogs.com/lucifer1997/p/10650924.html
Copyright © 2011-2022 走看看