关于 VAE || 变分自编码器 的故事

Variational Autoencoder 的目的是将输入数据映射成潜在分布(隐分布)。
什么是潜在分布?就是特征提取后的有效低维空间的概率分布。

VAE包括编码器和解码器。

  • 编码器负责将输入数据 \(\boldsymbol x\)(可能是高维向量)映射成低维的 \(\mu_{\boldsymbol x}\)\(\log\left(\sigma^2_{\boldsymbol x}\right)\)(可能是低维向量)输出(这个编码器可以是CNN/RNN/Transformer)。

很神奇,不是吗?我们不把数据看作“确定的实体”,而是试图训练出一种将其映射成“可能的概率”;打个比方就是从一幅原画得到绘画风格。每个数据都有各自独立的分布,不涉及整体数据序列的联合分布。
\(\mu_{\boldsymbol x}\)\(\log\left(\sigma^2_{\boldsymbol x}\right)\) 只是描述概率分布用的,编码器也只会输出这两个参数(\(\mu_{\boldsymbol x}\) 可以理解成 \(\boldsymbol x\) 在降维后,每个维度在概率空间各自的均值组成的向量)。
接下来,我们会使用“重参数化技巧”,也就是构造一个“潜在变量(隐变量)” \(\boldsymbol z\)

\[\boldsymbol z=\mu_{\boldsymbol x}+\exp(\frac{1}{2}\log(\sigma^2_{\boldsymbol x}))\cdot \varepsilon \]

这个 \(\boldsymbol z\) 是连续的,可以用梯度下降法参与后续训练。
\(\mu_{\boldsymbol x}\) 项表示的是有效部分,\(\sigma_{\boldsymbol x}\) 项表示的是噪声部分。

  • 解码器负责把 \(\boldsymbol z\) 映射回 \(\boldsymbol x\),也就是生成过程(根据不同的下游任务,这里生成的 \(\boldsymbol x\) 可以是连续/离散的)。

训练过程是自监督(无监督)的,损失函数由以下公式定义:

\[L=-E\left(\log(p(\boldsymbol x|\boldsymbol z))\right)+KL\left(q(\boldsymbol z|\boldsymbol x)||p(\boldsymbol z)\right) \]

其中第一项称为“重构损失”,鼓励模型利用潜在表示重构出原始数据(训练解码器,增加特定数据的还原度);第二项称为“KL散度正则项”,使得潜在空间分布尽可能接近先验分布(训练编码器,增加整体分布的鲁棒性)。
\(p(\boldsymbol x|\boldsymbol z)\) 是先验分布(一般规定是正态分布),\(q(\boldsymbol z|\boldsymbol x)\) 是潜在空间分布。

posted @ 2025-02-07 13:49  rainrzk  阅读(24)  评论(0)    收藏  举报