diffusion model
马尔可夫链
stable Diffusion的前向过程和反向过程都是一个马尔可夫连,
马尔科夫链的思想:过去所有的信息都已经被保存到了现在的状态,基于现在就可以预测未来。
马尔科夫链认为过去所有的信息都被保存在了现在的状态下了
。比如这样一串数列 1 - 2 - 3 - 4 - 5 - 6,在马尔科夫链看来,6 的状态只与
5 有关,与前面的其它过程无关。
既然某一时刻状态转移的概率只依赖于它的前一个状态
,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了
马尔可夫矩阵的稳定性
状态转移矩阵有一个非常重要的特性,经过一定有限次数序列的转换,最终一定可以得到一个稳定的概率分布 ,且与初始状态概率分布无关
DIffusion Models
DDPM(Denoising Diffusion Probabilistic Model)于2020年被提出,被称为扩散模型,是如今一种先进的图像生成模型。
模型预测过程
DDPM模型从随机噪声开始,通过多步预测,\(X_i\)都会在\(X_{i-1}\)的基础上减少一些噪声,让图片更清晰。 模型在每一步学习的不是从\(X_{i-1}\)到\(X_i\)的函数,而是从\(X_j{i-1}\)到\(X_i\)的差值(噪声),类似于resnet中的残差,从\(X_{i-1}\)减去噪声得到\(X_i\)。同时在每一步时还会加上一个步数编码。
模型训练过程
从预测过程可知,模型要学习的ground
truth是相对于上一张图的噪声,所以训练样本也应该是噪声。为了得到这个训练噪声,我们可以通过Forward
Process(Diffusion Process)来获得噪声。forward
process即对每一步的图像随机采样噪声,得到噪声和加上噪声的\(X_{i+1}\),所以grount truth就是在forward
process中得到的噪声
文生图Framework
文生图的三个网络: 1. Text Encoder: 从输入的文字生成词向量 2.
Generation Model ; 结合初始随机噪声和词向量representation
feture或者小图 3. Decoder 从representation feture 生成最终图像
一般来说三个网络是分开训练的。在有的模型中2和3可以是一个模型。
text encoder 的作用
帮助图像更好的理解,提高模型的泛化能力。逻辑上,模型在训练集上见到的文字描述是有限的,如果遇到没见的描述可能会使模型理解能力变差,所以通过encoder可以将模型不能理解文字转化为可以理解的向量。
指标
FID
有一个训练好的分类模型。例如vgg图像识别模型。将真实图像和生成图像在vgg中产生的represetation算一个distance。类似GAN中的discriminator。
CLIP Contrastive Language-image Pre-training
这是一个模型,可以对text和image算distance。
如果这个text使在描述这个image则distance越低。
Decoder
- 如果generatation 产生的是一些小图,则直接通过图像处理产生大图小图训练集,扔给模型。decoder是一个图像超分模型。
- 如果generatation产生的是一些latent
Representation。可以利用一个Autu-encoder自编码。 >
Q:这个decoder如何跟latent Representation对齐呢?
A: 1.先训练decoder,再锁住decoder再去训练generation。 2.最后来一个端到端训练。
Q:对于1如何再训练generation使使它对齐呢。
VAE variational auto encoder 变分自编码器
算法 training
\(X_0\):clear image
Uniform : 均匀分布
\(\epsilon\) :noise
\(\epsilon_\theta\): Noise
predictor
2: sample one clear image
3: sample a number between 1, T
4: sample a noise from Normal distribution
5: 圆括号内对\(x_0\)和\(\epsilon\)做wighted sum,其中\(\bar{\alpha_t}\)是一组事先选择的权重,从大到小。t是2中随机选择的。sample到的t越大,\(\alpha\)越小,原图占的比例越小。加起来就是noise
image.noise image 和 t一起作为predictor的输入
想象中reverse process 过程是利用predictor一步步减少噪音,即每一步把噪声很多的图减少到噪声不那么多的图,但是再实际算法中DDPN直接在clear image中混入噪音,只不过噪音的大小由t来决定,然后学习噪音。没有中间少量噪音的中间图。这是经过数学推导得到的。
算法 Sampling
1: sample a noise image from normal distribution\(X_T\)
2: loop T times
3: sample a noise \(z\)
4: 括号里的是\(X_t -
predict_noise\),系数是公式推导出的,\(/alpha\)和training算法中类似。加z是提升泛化,不加似乎出不来。

公式推导
看了一遍没太看懂,过段时间再看吧
看懂了,但不想写了,扔个链接 深入浅出扩散模型(Diffusion
Model)系列:基石DDPM(人人都能看懂的数学原理篇)
一个mnist的demo
https://github.com/guchengzhong/latent_diffusion_model_mnist.git
Unet 框架
guided-diffusion[3]
一种使用了classifier的diffusion ,openai的仓库地址[2]