美文网首页
自编码器AE,VAE

自编码器AE,VAE

作者: VanJordan | 来源:发表于2019-04-16 10:04 被阅读0次

从直觉的角度来阐述

  • 可以用于压缩数据,或从有noisy或者损坏的数据中重建原始数据。
  • 允许我们线性的差值,比如让一个人的脸变成另外一个人的脸。
  • 可以对data可以按照需求的进行操作,比如改变照片上人的头发的长度,或者不改变其他任何声音特性的情况下平滑的将一个男性的声音变为女性。
  • 甚至可以发现大量未标记数据中隐藏的概念和关系,因此可以用于无监督学习中。

Autoencoder

  • 用于压缩数据,但是没有泛化能力,因此不能作为生成模型。
  • A->BAB是队友),Asome kind of data,而这个dataB没有见过的,A必须要将data描述给B,以便B明白Adata是什么样的(重建data),有一个C(教练)能确切的知道Adata是什么,然后能够给B重建的data打个分数,说明重建的好或者坏。问题在于A和B不能直接交流而是通过一串数字code来传递信息的。
  • A 需要encoder data,为了简便我们使用表示成坐标系的两维code(x,y)
  • 假设要传递的信息是猫狗的图片,训练阶段有1百万的数据。
  • 对于一张照片,A将这个图片输到自己的machine中得到了(2.846, -5.049),然后将这个信息发给B,但是B对于图片是一无所知的,甚至对于猫和狗长什么样也是一无所知的,因此B画出来的图像可能是乱七八糟的,random paintings,而C拿到B所画的图像和原始的图像来比较给出一个相似性分数(loss function),并且C还告诉B哪些decisions是对scorecontribution的以及How(梯度下降).
  • B也可以告诉A如何improve Aencoding技术,以便能更好的表示信息
  • AB仅有的联系方式就是back-propagation,还要注意的一点就是不能一次调整图片过多,而是他们需要根据每个反馈对他们的过程进行小的更新,并希望随着时间的推移,这些小的调整将增加一个独特的过程,使他们在所有图像中获得良好的分数,而不仅仅是当前的图像(控制合适的学习率)。
  • 因此开始的时候B总是乱画,直到他从众多猫狗的训练数据中有一次他画出了动物的轮廓的话发现得到的分数变高了,虽然此时他还没有使用A的输入的code,因此当能画出猫狗的图像就会关注A输入,才不让自己的得分陷入停滞。

VAE

  • 原始的autoencoder有一个问题就是有编码器和解码器都会记住训练数据,这样泛化能力就很差。
  • 现在做的就是B不直接得到训练数据的编码,而是从A将数据编码的分布中进行随机采样,这在论文里面叫做reparametrization trick,就是为了更加的robust
  • 比如原来的autoencoder是非常笨的把一个图片编码成一个数字,现在的VAE将一个图像编码成一个分布(原来是一个点,现在是一坨),然后再从分布中采样出一个数值当成图像的编码,因此相当于提高的泛化能力。
  • 这样的就是autoencoder编码的code,数据之间有很大的gap,几乎没有泛化能力。
  • 是一个泛化能力比较强的编码结构
  • 但是如果分布像上面一样还是有问题的,因为泛化能力还是不够高,因此我们要求隐变量的分布越和多元的正太分布相似我们给的奖励就越多,这样就增大了隐变量分布的不确定性,因此A就更有可能将数据编码成下面的情况,这样也要求了A编码要有技巧性,比如157158编码重叠的可能性很高,为了避免B误会因此要求A将长得像的图像放在一起(要求157158),这样就提升了A的编码能力。
  • 比如下面的图像就是VAEMNIST数据集进行编码后的t-SNE图像,各个数字聚类了。
  • 这样的话就有了很好的特性,比如说得到的一个训练好的VAE我们,可以得到了两个图像的编码,如果取一个平均就是两个图像的特性各占一半。
  • 还有一个有意思的特性就是,每一个维度都是可解释的,比如我们固定其他维度的信息,只是改变隐变量的一个维度,发现decoder时候图像的胡子变长了,那么这一维度就是用来控制胡子长度的
  • 感觉VAE就是比AE多了一个训练encoder的机制,这种机制让encoder的编码更加的可泛化。

VAE在NLP中的应用

  • 现在的问题好比说是一个人有另外一种语言的词表但是却没有相关的解释(并不是说解释是一定有用的,毕竟解释也是一串这种语言的单词),需要明白这种语言句子的意思。

It is as if they were handed a dictionary, but without any explanations. Just a long list of all the words in the English language. (Not that the explanations would have helped, since those themselves are formed of the same words that have no meaning to our players yet.)

  • 因为直接生成句子太过困难了,现在是单词级别的监督信息。

Now on thr other hand he does not wait for Bob to finish the entire sentence. Instead he gives Bob a score and feedback after every single word he predicts.
Even more crucially, Charlie tells Bob what would have been the correct word.

  • 有一个很有意思的事情是,每个人都拥有不同的language model,只是因为他们所拥有的背景知识不同拥有不同的language model而已,遇到句子狗在追逐...大部分人会填,但是如果提前告诉你这是一部怪诞小说中的一句话,很多人就会填写其他东西,同样的模型训练数据就相当于condition(怪诞小说),得到了不同的语言模型。
  • 鉴于有限的信息流,仅仅编码令解码器吃惊的信息,剩下的部分让解码器的语言模型来完成,这一概念和信息熵十分的相似。

The trick, given the limited information flow allowed, lies in Alice encoding exactly the kind of information she thinks is surprising to Bob and letting him rely on his own language model for the rest, and also hoping that he actually uses her information in the first place.

  • 现在有个问题就是decoder可以学习到一个不错的语言模型仅仅通过对比生成的句子以及原始的句子(捕获了低阶的语法信息),这样encoder就学习不到任何东西,encoder几乎是随机的,这时候加入variational那么基本上就是随机+随机,没有什么用,此时优化陷入停滞。

So now with Bob being pretty decent all by himself and Alice having learned absolutely nothing yet, we risk being stuck at what is called a local maximum.

  • 主要的原因在于训练的时候是逐单词训练的,因此用不到hidden state,但是如果是逐句子训练的话对于decoder来说又是太难了,训练不起来,因此诀窍就是在两者之间找到一个平衡。
  • 一种比较成功的解决这个问题的方法就是给decoder增加学习障碍,这样就能让encoder的学习速度赶上decoder,一种方法是让decoder变得健忘,在语言模型中只能得到前面两个词的信息,比如...追逐...因此他必须使用encoder给的信息才能很好的预测下一个词,这样尽管训练的速度回慢一些,但是不会陷入学习停滞阶段。
  • 另外一种方法就叫KL cost annealing,就是仍然使用变分,但是在开始的时候判断的条件松一点,允许encoder提供具体的信息,但是随着训练的进行(当decoder的语言模型训练的比较好的时候),要求encoder提供更加"不确定性"的信息,也就是从Autoencoder 慢慢的进化成Variational Autoencoder
  • VAE可以只编码一些重要的信息比如语言是什么风格的,文本长度是多少,剩下的事情交给decoderlanguage model来做。

Even if they only figure out a simple code where certain code regions tell Bob that the text is a tweet, others a news article, and yet others restaurant reviews, can dramatically help Bob make better guesses about the next word.
Since Bob also doesn’t know when to actually stop his prediction, Alice might also learn to encode the length of the sentence.

  • 因此有些维度就代表写作风格,我们可以控制这一维度来得到想要的文本,这也更加的robust因为加入了变分机制会是的“I went to his house”“I went to his flat”的编码在隐空间上非常相近。
  • VAE也可以用于翻译中,比如encoderhidden state然后decoder成目标语言。
  • 也可以用于文本摘要任务中,将长句子解码成短句子。

Text summarisation is also a closely related discipline. Here Alice encodes a long text, and Bob has to decode it into a summary.

从模型的角度来理解(深度学习角度)

  • 模型整体,可以看到decoder生成30维的多元高斯分布,然后采样得到隐变量。
  • 隐变量的每一维都是一个高斯分布,通过reparametrization技巧让采样的部分变得是课导的,因此可以端到端的训练。
  • 我们需要的各个图像的隐变量的分布是图1的类型,因为很平滑可以随意差值来生成图像,而不是AE中的一个点表示一个图像,为了达成这个目的相比于AE的损失函数VAE的损失函数变为,加了一个KL项。

  • 加入kl散度强迫每一维都是一个正太分布,这样的直观感觉就是让每一维所表示的信息尽可能的都在均值0附近,也就是不能让hidden state 通过表示图像具体的一些信息(比如那些像素点的信息是多少)这样没有泛化能力的特征,而是应该保留单一的重要的特征,并且这样就强迫了每一维尽可能的表示单一的特征,因此完成了特征的解耦,所以在AE的重构损失函数中加入了KL散度那一项可以看成是正则项,就是为了让AE中一个点表示一个数据,变成VAE中的一个分布(上面一坨)的东西表示一个数据,因此泛化能力大大增强,下图是两项损失函数的物理解释。
  • 第二项KL散度loss的计算公式,当Q(z|x)的均值为0方差为1的时候第二项损失函数取最小值。
  • 最终趋向于聚集的重建损失和趋向于分散的KL散度达成了平衡,这是符合我们要求的,因为无论我们是从正太分布中随机采样来生成图像还是进行差值都是可以得到一个图像的(没有gap,而是得到一个平滑的mix的图像)。
def vae_loss(input_img, output):
    # compute the average MSE error, then scale it up, ie. simply sum on all axes
    reconstruction_loss = K.sum(K.square(output-input_img))
    # compute the KL loss
    kl_loss = - 0.5 * K.sum(1 + log_stddev - K.square(mean) - K.square(K.exp(log_stddev)), axis=-1)
    # return the average loss over all images in batch
    total_loss = K.mean(reconstruction_loss + kl_loss)    
    return total_loss

从数学的角度来理解(概率模型角度理解)

  • 首先写出生成模型的联合概率分布p(x,z)=p(x∣z)p(z),生成的过程可以看成是对于每一个数据点:
  • 求数据的隐变量即求解p(z∣x),其中的p(x)被称为evidence就是我们的数据分布,p(x)=∫p(x∣z)p(z)dz可以通过边缘求积来得到,但是由于要枚举所有的z是不可求的,因此必须通过变分推断(variational inference)的方法近似这个后验分布,具体方法是通过
    qλ(z∣x)分布族来近似,λ 指示是哪一个族分布,比如如果q是一个高斯分布,
  • 因为上面的后验分布是不可求的因此我们使用变分推断的方法来近似这个后验分布


  • 使用KL散度来衡量这个近似的好不好,所以说用高斯近似后验和用强制每一维是正太分布是同样的粗粒度


  • 由于近似推断中还有X,也是很难求的,因此还要做转换
  • 根据log p(x)的公式我们知道最小化KL于最大化ELBO是等价的,因此我们的优化目标变成了最大化ELBO
  • 上面的log p(x)公式推导
  • ELBO展开(其实花书里面对ELBO的推导直接就是这个公式)。
  • 得到了最终的目标函数,从数学角度我们明白了为什么要加入这样一个正则项(是为了尽可能逼近的使用一个合适的高斯分布近似原来的后验p(z|x)

其他一些零零碎碎的东西

  • 重建损失一般使用均方误差。
  • X生成Z的分布是使用高斯来进行近似的。
  • 两项损失函数的物理意义
  • 如果去掉第二项损失函数KL散度那么VAE就退化成了AE,因为编码就是一个点而不是一个分布。

    引用,感谢!

相关文章

  • 自编码器AE,VAE

    从直觉的角度来阐述 可以用于压缩数据,或从有noisy或者损坏的数据中重建原始数据。 允许我们线性的差值,比如让一...

  • CS20si 第10课: 变分自编码器(VAE)

    第10课: 变分自编码器(VAE) CS20si课程资料和代码Github地址 第10课: 变分自编码器(VAE)...

  • 代码详解:一文读懂自动编码器的前世今生

    全文共5718字,预计学习时长20分钟或更长 变分自动编码器(VAE)可以说是最实用的自动编码器,但是在讨论VAE...

  • 论文解读It takes only two

    1.介绍生成式学习领域的两大主流方法是AE(AE与VAE)和GAN,VAE可以学习到数据分布与先验分布的双重映射,...

  • 变分自编码器的理解

    1、变分自编码器(VAE)的定义   VAE,希望构建一个由隐变量生成目标数据的模型,它们假设服从某种常见分布(正...

  • Variational Auto-encoder(VAE)变分自

    介绍 ​ Variational Auto-encoder(VAE)变分自编码器,是无监督复杂概率分布学习的最...

  • VAE—变分自编码器

    变分自编码器———VAE 1.概述 2.基本数学公式 (1) 条件概率 (2) 推论 (3) 边缘概率公式 (4)...

  • 变分自编码器(variational autoencoder,V

    计算机视觉课程的阅读作业,要求提交slides。 参考资料: 1 从零上手变分自编码器(VAE) 2Tutoria...

  • 自判 vae

    人与人之间,比悲欢更难相通的,是审美。有人给我力荐所谓很火的影视剧,我半集也没法看得完。所以我也不敢一对一的推荐人...

  • DL之AE&SAE

    一个自动编码器AutoEncoder(AE) 原理:自编码器可以理解为一个试图去还原其原始输入的系统 图中,虚线蓝...

网友评论

      本文标题:自编码器AE,VAE

      本文链接:https://www.haomeiwen.com/subject/fyjmwqtx.html