VAE, 全称Variational Autoencoder, 可以看出它是autoencoder的一种.
autoencoder主要用来提取特征, 重构出和原来的数据.
这里VAE是变分自编码器, 变在哪里呢?下面举个例子.
假如目前天上有一个月亮, 还有一个和月亮差不多的星星. 他们都会随着时间变化, 有时候不太容易分清楚到底哪个是月亮, 哪个是星星. 那么我们需要构建一个分类模型, 来判断我们看到的这个天体是月亮还是星星.
但是我们目前的问题是我们拿到月亮的数据很少, 只有初一和十五的, 如果训练一个分类模型肯定不够了. 那么我们就可以利用VAE来搞出一些数据来, 模拟出从初一到三十每一天的月亮.
假设月亮的样子是由南北半球和每个月的日期这两个因素所决定的, 而且这些因素()服从正态分布, 那么我们的任务就是通过初一和十五这两个数据(当然, 实际上要更多一些)用VAE来训练出这些正态分布的均值和方差, 如南北半球的纬度()和每个月的日期().
训练的目标就是假设初一和十五的月亮的影响因素也是服从这个正态分布的, 那么通过这个分布一样可以还原出初一和十五的月亮.
因此loss function有两个部分, 一个是z的分布和正态分布的差距, 一般用KL散度 , 另外还有还原出的数据和原数据的差异:
如下图所示.
那么怎么生成模拟的月亮呢?
得到了这两个分布, 我们就可以在这两个分布内进行采样, 即改变和, 得到新的, 从而还原生成新的月亮.
VAE技术通常可以用在扩展训练数据上. 在NSDI2020年MIT的一篇论文Food and Liquid Sensing in Practical Environments using RFIDs里, 作者利用VAE生成了不同的multipath下的信道信道状态信息, 减少了数据采集的工作量.