生成式AI原理讲解
从扩散模型看图形生成
大名鼎鼎的diffusion model是如何运作的呢?我们首先深入探讨这个问题
它的核心不是学出来一个图片及其复杂的真实分布,而是从一堆混乱的噪声中”雕刻”出真实的图片,详细来说,我们给定一个初始图片$x_0$,然后定义一个加噪的过程:
$$
x_0 \rightarrow x_1 \rightarrow \ldots \rightarrow x_n
$$
直接给出加噪得到的最后的图片的公式:
$$
x_t = \alpha_t x + \sigma_t \epsilon_t
$$
如果写成递推式的话是:
$$
x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t}
$$
其中:
$$
\epsilon_t \sim \mathcal{N}(0,I) \\
\alpha_t = \sqrt{\bar{\alpha_t}} \\
\sigma_t = \sqrt{1 - \bar{\alpha_t}} \\
\bar{\alpha_t} = \prod_{s = 1}^{t} (1 - \beta_s)
$$
接着,我们把前面两个递推式用概率分布的形式写出来:
$$
x_t \sim q(x_t | x_0) = \mathcal{N}(x_t;\sqrt{\bar{\alpha_t}}x_0,(1 - \bar{\alpha_0})\mathbf{I}) \\
x_t \sim q(x_t | x_{t-1}) = \mathcal{N}(x_t;\sqrt{\alpha_t}x_{t-1},(1-\alpha_0)\mathbf{I})
$$
补充一些概率论的知识:高斯分布$\mathcal{N}(变量;均值,方差)$
以第二个分布为例推导一下:
$$
E(x_t) = E(\sqrt{\alpha_t}x_{t-1} + \sqrt{1 - \alpha_t}\epsilon_t) = \sqrt{\alpha_t}x_{t-1} + \sqrt{1 - \alpha_t}E(\epsilon_t) = \sqrt{\alpha_t}x_{t-1} \\
Var(x_t) = Var(\sqrt{\alpha_t}x_{t-1} + \sqrt{1 - \alpha_t}\epsilon_t) = 0 + (\sqrt{1 - \alpha_t})^2\mathbf{I} = (1-\alpha_t)\mathbf{I}
$$
这里的$\beta$的值全都是人为设定的,可以预想到,如果不做任何干预,最终的加噪结果会极度趋于一个高斯分布$\mathcal{N}(0,I)$
那么训练的是什么呢?是干净的图像吗?并非,网络去学习的是预测出来噪声的分布,也就是对于某一时刻$t$和一个带噪声的图片$x_t$,网络预测出一个噪声:
$$
\epsilon_\theta (t,x_t)
$$
那么损失也就非常好算了,最基本的均方损失:
$$
\mathcal{L} = \mathbb{E} | \epsilon - \epsilon_\theta(t,x_t)|^2
$$