首页 / 资讯中心 / 文章详情

让 AI“画一个从没见过的人脸“,VAE 到底在“变“什么?——变分自编码器,一次讲透

让 AI“画一个从没见过的人脸“,VAE 到底在“变“什么?——变分自编码器,一次讲透 ★ FEATURED ARTICLE
你见过这样的演示吗给 AI 一张人脸编码再往编码里轻轻挪一点解码出来的人脸就自然地变了——年轻一点、戴副眼镜、换个发型全程流畅没有生硬的跳变。凭什么人脸的每一张图明明是几万个像素AI 是怎么把它压成几个数字还能让这几个数字的微小变化对应语义上的微小变化的答案藏在今天要讲的东西里——变分自编码器Variational AutoencoderVAE。它是生成模型Generative Model家族里的重要一员也是后来那批文生图模型的先声。先看普通自编码器能压缩但不能造理解 VAE得先看它的前身——自编码器AutoencoderAE。AE 的结构特别对称像一个沙漏编码器Encoder把高维输入比如一张 28×28 的手写数字图784 个像素压成一个低维向量z zz比如 10 维。这叫编码。解码器Decoder把这个低维向量z zz再还原回原来的图。这叫解码。训练目标也很朴素让还原出来的图尽量接近原图。练成之后那个 10 维的z zz就是这张图的压缩精华——它抓住了图像最关键的信息笔画、结构丢掉了冗余。听起来已经很厉害了。但 AE 有个致命的短板让它只能压缩不能创作AE 学出来的那个低维空间z zz是碎的、散的没有连续性。什么意思训练的时候AE 只是被动地记住这张图压成这个点那张图压成那个点。它从没被要求过相邻的z zz应该对应相似的图。结果就是编码空间里一个个点之间是真空地带——你随便取一个点解码出来可能是一团毫无意义的噪点而不是一张合理的手写数字。所以 AE 的问题是你没法随机抽一个z zz再解码来生成一张新图。而生成恰恰是我们真正想要的。VAE 的关键一击逼着编码空间规整起来VAE 的思路是给 AE 加一条硬约束把上面那个短板补上我不仅要你会压缩还要你把编码空间规整成一块连续的、能采样的区域。具体怎么做它规定每个输入的编码z zz不是随便一个点而必须服从一个标准正态分布N ( 0 , 1 ) \mathcal{N}(0, 1)N(0,1)。这句话的威力得拆开看。一旦所有样本的z zz都被约束成以原点为中心、单位方差的正态分布就会发生两件好事空间连续了因为所有z zz都往原点附近挤空间里不再有真空地带相近的z zz会解码出相近的图可以采样了你现在随便从N ( 0 , 1 ) \mathcal{N}(0, 1)N(0,1)里抽一个z zz它大概率落在一个合理的区域里解码出来就是一张像样的图。一句话AE 学会的是记住每张图对应的那个点VAE 学会的是这一整片区域都是可以生成合理图像的地方。前者是死记后者是掌握了分布。但这里有个绕不开的坎怎么让采样能训练理想很丰满现实很骨感。上面说的编码z zz服从正态分布落进代码里会撞上一个技术难题。现在编码器不直接输出z zz了而是输出两个东西均值μ \muμ和方差σ \sigmaσ。然后按下面的方式采样z μ σ ⋅ ε , ε ∼ N ( 0 , 1 ) z \mu \sigma \cdot \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, 1)zμσ⋅ε,ε∼N(0,1)问题来了采样这个动作是随机的、不可导的。而神经网络训练靠的是反向传播一路求导传回去。采样这个节点没法求导梯度传不过去模型就没法训练。这就要靠 VAE 最漂亮的一个工程技巧——重参数化技巧Reparameterization Trick。看上面那个式子ε \varepsilonε是随机性μ \muμ和σ \sigmaσ是编码器输出的确定值。技巧在于——把随机性从采样里抽离出来塞给一个外来的、不参与梯度的ε \varepsilonε。这样z μ σ ⋅ ε z \mu \sigma \cdot \varepsilonzμσ⋅ε对μ \muμ和σ \sigmaσ就是可导的了对μ \muμ求导是 1对σ \sigmaσ求导是ε \varepsilonε。梯度能顺利穿过z zz一路传回编码器。ε \varepsilonε每轮随机抽但不参与反向传播。把随机采样变成一个可导的确定性表达式 一个外挂的随机噪声这就是重参数化技巧的全部精髓。一个看似无解的死结就这么被巧妙地绕开了。那个变分和KL 散度又是什么来头训练 VAE 的损失函数是两部分加起来L 重建损失 ⏟ 让解码出来的图接近原图 K L ( q ( z ∣ x ) ∥ p ( z ) ) ⏟ 让 μ , σ 逼近标准正态 \mathcal{L} \underbrace{\text{重建损失}}_{\text{让解码出来的图接近原图}} \underbrace{KL\big(q(z|x)\,\big\|\,p(z)\big)}_{\text{让 } \mu,\sigma \text{ 逼近标准正态}}L让解码出来的图接近原图重建损失​​让μ,σ逼近标准正态KL(q(z∣x)​p(z))​​第一部分好懂跟 AE 一样要求还原得准。第二部分是关键它叫KL 散度KL Divergence用来衡量编码器输出的分布q ( z ∣ x ) N ( μ , σ 2 ) q(z|x) \mathcal{N}(\mu, \sigma^2)q(z∣x)N(μ,σ2)“和我们期望的标准正态p ( z ) N ( 0 , 1 ) p(z) \mathcal{N}(0,1)p(z)N(0,1)“差得有多远。这一项的作用就是把每个样本的编码往标准正态上拽”强制实现我们前面说的空间规整”。没有这一项会怎样模型会偷懒——把σ \sigmaσ学成 0让z zz退化成确定值VAE 就退化回了普通 AE又变回只会压缩、不能生成了。所以KL 散度这一项是 VAE 区别于 AE 的灵魂是它逼着模型去学分布而不是记点的那个推手。至于变分Variational这个名字来自背后的数学工具——变分推断真实的后验分布p ( z ∣ x ) p(z|x)p(z∣x)太难算于是用一个简单的分布q ( z ∣ x ) q(z|x)q(z∣x)去近似它并用 KL 散度衡量近似得好不好。整个推导链最终会落到一个叫ELBO证据下界的东西上VAE 就是在最大化 ELBO。名字唬人但直觉就是我们上面说的那套“既要还原得准又要把编码空间规整成标准正态”。关于 KL 散度我在讲交叉熵的那篇里拆过它的来龙去脉模型猜错该罚多少-log(0.01) 和 0.01差了 460 倍——从信息熵到交叉熵的一课。信息熵、KL 散度、交叉熵是一家人搞懂一条线这三个就都通了。一个能亲手玩的 numpy 演示光说不练永远是隔靴搔痒。下面这段代码用 numpy 搭一个二维版 VAE的核心思想演示——重点是让你看清重参数化和KL 项是怎么落到代码里的importnumpyasnp# 假设 8 个样本编码器输出 2 维隐变量这里用随机数模拟n8munp.random.randn(n,2)# 编码器输出的均值log_varnp.random.randn(n,2)# 编码器输出的 log 方差取 log 保证为正# —— 重参数化技巧把随机交给外挂的 epsilon ——epsnp.random.randn(n,2)# 外来的标准正态噪声不参与梯度zmunp.exp(log_var/2)*eps# z 对 mu、log_var 可导# —— KL 散度把 q(z|x) 拉向标准正态 N(0,1) ——# KL( N(mu, sigma^2) || N(0,1) ) -0.5 * sum(1 log_var - mu^2 - exp(log_var))kl-0.5*np.sum(1log_var-mu**2-np.exp(log_var))print(隐变量 z 的形状:,z.shape)print(KL 散度这一项:,round(float(kl),4))print(注意z 是通过 mu sigma*eps 算出来的所以能对 mu、log_var 求导)真实训练时重建损失会让z zz携带足够信息去还原原图KL 项会同时把μ \muμ拉向 0、σ \sigmaσ拉向 1。两个力互相拉扯最后达到平衡z zz既保留了图像的信息又规整地分布在原点附近。训练完你只要np.random.randn(2)抽一个点喂给解码器就是一张新画的图。VAE 和它的远亲们搞懂 VAE再回头看 AIGC 这个大家族很多关系就清楚了GAN生成对抗网络靠生成器造假 判别器打假的博弈来生成图往往更清晰但训练极不稳定、容易模式崩溃只会画少数几种图扩散模型Diffusion靠先加噪、再逐步去噪来生成图质更高但生成慢、要几十步上百步一张图要被加噪1000 次才能学会生成扩散模型凭什么取代 GANVAE靠显式地学一个规整的隐空间来生成训练稳定、有清晰的理论目标ELBO但生成的图偏糊。它们没有谁绝对碾压谁而是各抓住了生成这件事的一个侧面VAE 抓住了隐空间的连续性GAN 抓住了逼真度扩散模型抓住了稳定与高质量的平衡。今天的很多大模型恰恰是它们的杂交品种——比如稳定扩散Stable Diffusion的潜空间就借了 VAE 的把图压进低维潜空间这一步。结语会创造的前提是懂分布VAE 给我最深的启发不是公式而是一个认知“生成和压缩之间的那道坎叫连续性”。普通自编码器只会记点所以它只能复现、不能创造VAE 强迫自己学分布把一个个孤立的点连成一片连续的区域于是它才能在区域里随便取一点都是合理的创造。这像极了人做事死记一百个答案你只能回答一百道原题真正理解了这一类问题的分布你才能应对从没见过的新题。创造从来不是凭空变出点什么而是先吃透规律再在规律的边界内自由挥洒。VAE、ELBO、KL 散度、重参数化……这些生成模型背后的硬核全都要靠概率与信息论的底子。想把这些数学一次补透推荐 B站【408实验室】的《机器学习数学基础》从分布、期望到信息熵一步一个脚印。
阅读完成 · 觉得有帮助?
咨询建站