扩散模型DDPM
文章目录
- 扩散模型DDPM
- 如何运作
- 基本概念
- 训练过程
- 推理过程:
- 目标
- 损失函数推导
- 评估标准
论文地址: Denoising Diffusion Probabilistic Models (DDPM)
如何运作
从guassian distribution进行采样得到一个噪声的图片,图片大小与想输出的图像一致,接着通过一系列的Denoise得到最终输出的图片。
为了让模型运行更好,针对不同噪声图片,我们都会进行一个编码(代表当前noise的程度),对step步数也进行输入。因为如果不进行次数编码,对于不同噪声图片(图片差异很大),通过同一个模型,其处理效果可能就不是那么友好。
Denoise通过Noise Predicter去预测输入的图片中,噪声是什么样的,然后进行相减就能得到输出图片。
预测噪声长什么样,而不是直接生成图片
训练数据来自于前向加噪声的过程,自己添加噪声和已知的step加到原始图片,就能生成一个带噪声的图片,反过来看,就是生成了训练数据了。
基本概念
训练过程
通过 α t ˉ \bar{\alpha_t} αtˉ吧决定噪声权重,一次性加上,而不是一次次递推加.
推理过程:
最后新增加了噪声,才输出生成的图片。
目标
极大似然估计,根据目标的estimation,生成的estimation与标准的estimation衡量
想让产生的
P
θ
(
x
i
)
P_\theta(x^i)
Pθ(xi)越大越好
θ
∗
=
arg
max
θ
∏
i
=
1
m
P
θ
(
x
i
)
\theta^*=\arg \max_\theta \prod_{i=1}^mP_\theta(x^i)
θ∗=argθmaxi=1∏mPθ(xi)
$$
\begin{aligned}
&\mathsf{Sample}\left{x{1},x{2},\ldots,x^{m}\right}\mathsf{from}P_{data}(x) \
\theta{*}&=arg\max_{\theta}\prod_{i=1}{m}P_{\theta}(x{i})=arg\max_{\theta}log\prod_{i=1}{m}P_{\theta}(x^{i}) \
&=arg\max_{\theta}\sum_{i=1}{m}logP_{\theta}\bigl(x{i}\bigr)\approx arg\max_{\theta}E_{x\sim P_{data}}\bigl[logP_{\theta}(x)\bigr] \
\end{aligned}
KaTeX parse error: Can't use function '$' in math mode at position 4: 由于$̲\int\limits_{x}…
&=arg\max_{\theta}\int\limits_{x}P_{data}(x)logP_{\theta}(x)dx\quad{\color{Red}-\int\limits_{x}P_{data}(x)logP_{data}(x)dx}\
&=arg\max\limits_{\theta}\int\limits_{x}P_{data}(x)log\frac{P_{\theta}(x)}{P_{data}(x)}dx=arg\min\limits_{\theta}KL(P_{data}||P_{\theta}) \
&\text{Maximum Likelihood=Minimize KL Divergence}
$$
第一个 P ( x T ) P(x_T) P(xT)是直接在原图进行采样的,不需要使用到 θ \theta θ
损失函数推导
kl散度没关系, P ( x T ) q ( x T ∣ x 0 ) P(x_T)q(x_T|x_0) P(xT)q(xT∣x0)两项一项是自己找噪声图片概率,一个是前向process自己定义的,可以拿走
让x(t)丢进去,希望输出的尽可能接近左边的mean
为什么加noise?经过实验,如果不加noise什么都生成不了,加入了能生成。