变分自编码器的一些思考

最近在看vae的异常检测,对VAE有些地方不是很懂。所以去找了一些文章,查明和解答了这些问题。

(1)vae的作用是什么?

vae的主要作用是使AE中的潜变量变为潜变量分布,提高了生成能力,生成的向量更加丰富、也更加连续。本质上,和AE没有优劣之分,需要根据特定任务进行选择。

(2)变分自编码器的重参数化技巧是什么意义?

简单来说,就是VAE的编码器只输出了潜变量的均值以及方差,但是我们需要把一个分布送入解码器。通过重参数技巧,就可以生成一个服从这个均值和方差的随机变量,把这个随机变量送入解码器就行了。

(3)为什么推到过程中的损失函数中的第二部分是重构损失呢?

详细请看:理解变分自编码器(VAE) - 知乎 (zhihu.com)

抛开数学,轻松学懂 VAE(附 PyTorch 实现) - 知乎 (zhihu.com)

 这部分损失可以理解为对应的z,模型能够生成正确的x,这样p才能为1,负对数极大似然损失才能最小。

(4)VAE很难训练,潜变量有可能倾向于一个常数,该怎么解决?也就是KL-vanishing或后验坍塌

详细请看:如何避免VAE后验坍塌?(总) - 知乎 (zhihu.com)

这个问题是由于VAE本身的架构问题。decoder如果过于强大,会直接从噪音采样,也能拟合出一个很好的信号x。另一方面,由于KL项太强大,会直接使得后验p(z|x)就会失效,潜变量分布z就等同于先验分布q(z)(这个先验分布一般是正态分布,也就是潜变量分布变成了一个固定的正态分布)。

最简单的解决该问题的方法是,减小KL权重,但是有可能会使VAE变成AE。

大多方法是围绕KL权重进行的,目的就是为了让KL项不要太强,或者不要一直很强。

另一些方法是,decoder的rec项不要过于强大,让他多依赖后验的z,但是感觉不大靠谱,比较扯。

posted @ 2023-03-09 16:27  澳大利亚树袋熊  阅读(646)  评论(0)    收藏  举报