自编码器 Autoencoder

﹥>﹥吖頭↗ 提交于 2019-11-28 18:55:51
自监督模型
训练一个ae的encoder,就能把code和object对应起来,获得code。给定一个code,decoder就能输出对应的object。
Autoencoder存在什么问题?
  因为作为训练数据的object是有限的,导致decoder实际上只能把训练过程中见过的code给还原成对应的object。如果随机给一些code,它不会生成训练集中没有见过的object。
 
如何解决?
  VAE:训练decoder的时候给code加点噪声,就能让decoder在生成的时候可以克服一些带噪声的code,即使没有在训练中见过,也能生成比较合理的object(直觉上的理解,训练的时候希望一定范围内的code都能重构输入)。
 
 
因此在VAE中,encoder输出的不直接是code,而是一组mean和一组variance,而向量c才是真正的code,其中ci = exp(σi) x e+ mi。训练过程中的优化目标也不仅是重构误差,还有一项 Σ (exp(σi) - (ei) + (mi)2),要强迫variance不能太小(因为是模型学习的参数,如果不做限制,为了能重构的更好variance会越更新越接近0)。
 
理论上分析 VAE:
  对 p(x) 的建模通过 p(x | z) * p(z) 来实现,很容易就想到GMM。如何从GMM 中采样数据?先根据多项式分布p(m)决定要从哪个高斯分布中采样,然后就根据对应的那组mean和variance决定的高斯pdf来采样x。

而VAE实际上就是GMM的 distributed representation 的版本,先从一个高斯分布中采样出一个向量z,再根据z来决定mean和variance。那由于 z 是连续的,所以有无穷多个z,就有无穷多个高斯的mean和variance(在GMM中有几个高斯就是固定的)。在z的空间中,每个点都可能被sample到,而每一个点都对应到一个高斯分布。那么如何得到 z 和高斯的mean、variance的对应关系呢?干脆就用一个NN。

所以在整个 VAE 模型中,关键不是使用 p(z)(先验分布)是正态分布的假设(z服从别的分布也可以),而是假设 p(z | x)(后验分布)是正态分布。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!