一.前言
AIGC目前是一个非常火热的方向,DALLE-2,ImageGen,Stable Diffusion的图像在以假乱真的前提下,又有着脑洞大开的艺术性,以下是用开源的Stable Diffusion生成的一些图片。
|
|
|
|
这些模型后边都使用了Diffusion Model的技术,但是缺乏相关背景知识去单纯学习Diffusion Model门槛会比较高,不过沿着AE、VAE、CVAE、DDPM这一系列的生成模型的路线、循序学习会更好的理解和掌握,本文将从原理、数学推导、代码详细讲述这些模型。
二. AE (AutoEncoder)
AE模型作用是提取数据的核心特征(Latent Attributes),如果通过提取的低维特征可以完美复原原始数据,那么说明这个特征是可以作为原始数据非常优秀的表征。
AE模型的结构如下图
训练数据通过Encoder得到Latent,Latent再通过Decoder得到重建数据,通过重建数据和训练的数据差异来构造训练Loss,代码如下(本文所有的场景都是mnist,编码器和解码器都用了最基本的卷积网络):
Python |
通过AE模型可以看到,只要有有效的数据的Latent Attribute表示,那么就可以通过Decoder来生成新数据,但是在AE模型中,Latent是通过已有数据生成的,所以没法生成已有数据外的新数据。
所以我们设想,是不是可以假设Latent 符合一定分布规律,只要通过有限参数能够描述这个分布,那么就可以通过这个分布得到不在训练数据中的新Latent ,利用这个新Latent就能生成全新数据,基于这个思路,有了VAE(Variational AutoEncoder 变分自编码器)
三.VAE
VAE 中假设Latent Attributes (公式中用z)符合正态分布,也就是通过训练数据得到的z满足以下条件
因为z是向量,所都是向量,分别为正态分布的均值和方差。有了学习得到正态分布的参数
,那么就可以从这个正态分布中采样新的z,新的z通过解码器得到新的数据。
所以在训练过程中需要同时优化两点:
1.重建的数据和训练数据差异足够小,也就是生成x的对数似然越高,一般依然用L2 或者L1 loss;
2. 定义的正态分布需要和标准正态分布的一致,这里用了KL散度来约束两个分布一致;
(因为全文公式较多,有140多公式,公众号无法很好支持公式,可以点击原文跳转到我们公开的飞书文档阅读,建议在PC端阅读,未来我们还会持续输出AIGC相关的技术文章)
原文始发于微信公众号(来也技术团队):AIGC基础,从VAE到DDPM原理、代码详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论