扩散模型学习
扩散模型
看了篇论文,里面提到了扩散模型,前段时间听师兄说老师最近对扩散模型很感兴趣,所以我就找了个视频学习了一下
学习视频:B站
学习代码:Github
非常感谢这位UP,讲得非常深入浅出。
1 扩散模型
简单来说就是这个方程:
其中ϵ是噪声,x是图像,上述方程描述了噪声在图像当中扩散的状态。$ϵ_t\sim N(0,1)$,每次重新生成。
同时 表示噪声扩散速度越来越快。
有看到说, $(\sqrt{\beta})^2+(\sqrt{1-\beta})^2 = 1$ 是为了保证能量守恒。
引入 $a_t = 1 - β_t$,可以得到:
2 前向传播
我们知道前向传播的过程是:
所以首先探讨如何避免多次迭代?
2.1 避免多次迭代
我们从$x_{t-2}$与$x_{t}$ 的关系开始讨论:
我们根据方程(1)可得:
因此,把$x_{t-1}$代入,不难得出:
我们已知:$ϵ\sim N(0,1)$
所以此时相当于,将原先丢一个骰子的问题,转化成同时丢俩个骰子的问题,也就是叠加概率分布。此处用卷积方法对概率求总和。我们知道正态分布的卷积仍然符合正态分布,即:
此时我们便能知道,对于方程(2):
因为$ϵ_t\sim N(0,1)$
所以:
将上述两个结果代入公式(3):
使用重参数化,产生新采样ϵ,将方程(2)转化为:
按照这个思路,我们进一步探讨$x_{t-3}$与$x_{t}$的关系:
不难得出:
其中:
即:
由此,我们不难看出$x_t$与$x_{t-k}$的关系(可以使用数学归纳法证明):
$x_t$与$x_0$的关系:
我们引入:
得出前向传播的方程:
3 反向过程 $p$
3.1 贝叶斯公式
其中:$P(A)$ 称为Prior - 先验概率;$P(A|B)$ 称为Posterior - 后验概率;$P(B)$ 称为Evidence - 证据;$P(B|A)$称为似然 - likelihood,表示B对A的证据强度。
3.2 马尔可夫链
这里摘抄一下,马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。随机漫步就是马尔可夫链的例子。随机漫步中每一步的状态是在图形中的点,每一步可以移动到任何一个相邻的点,在这里移动到每一个点的概率都是相同的(无论之前漫步路径是如何的)。
简单来说,马尔可夫链某一时刻状态转移的概率只依赖于它的前一个状态,具有无记忆性
。
其数学表达为:$P(x_t|x_{t-1},x_{t-2}\dots,x_{0}) = P(x_t|x_{t-1})$
掌握上述两个定理后,我们开始推导反向过程 $p$ (Reverse Process $p$)
3.3 Reverse Process $p$
我们已知:
从前向传播的方程我们也知道:
因此在反向过程中,我们需要从 $x_{t}$ 求 $x_{t-1}$,根据贝叶斯公式:
为了严谨,我们都加上条件 $x_{0}$:
(实际跟据马尔科夫链的无记忆性,加不加是一样的)
我们已知,正态分布的概率密度函数为:
在此,整理所有的条件:
即,可得:
即,可得:
代入 $x_{t-1}$ 与 $x_0$ 的关系前向传播方程
即,可得:
将公式(7)(8)(9)代入公式(6),得出方程:
(我算到这里就不会解了XD,后面看别人的推导了)
最后,可得:
由于 $x_0$ 为我们需要的结果,因此:
根据 $x_{t} = \sqrt{\bar{a}_t}\times x_0+ \sqrt{1-\bar{a}_t}\times ϵ$, $x_0 = \frac{x_t - \sqrt{1-\bar{a}_t}\times ϵ}{\sqrt{\bar{a}_t}}$ ,替换 $x_0$ ,可得
由此,我们可以利用公式(10)推导出来的关系,由 $x_T$ 不断反向推导到 $x_0$
3.4 含义解释
我们理解含义为:任意时刻 $x_{t}$ 的图像,都是由 $x_{0}$ 时刻的图像直接加噪而来的。因此,只要知道ϵ,便可求出上一时刻$x_{t-1}$的概率分布。
此处,训练神经网络用于预测 $x_{t}$ 时刻的图像相对于 $x_{0}$ 时刻的图像加入的噪声ϵ,然后得到 $x_{t-1}$ 时刻图像的概率分布,用此概率分布进行随机采样,便可得到 $x_{t-1}$ 时刻图像,反复迭代上述过程,便可获得 $x_{0}$ 时刻的图像
我们已知:
$x_{T}$ 时刻 $\bar{a}$ 接近于0,因此 $x_T \approx ϵ$,即 $x_T$ 的图像近似于标准正态分布,即为任意一张标准正态分布噪声图像。
也就是说,任意一张标准正态分布噪声图像都是由某张 $x_0$ 图像加噪声得来的,因此对标准正态分布的图像进行随机采样就可获得 $x_T$ 时刻图像。
此时,神经网络接受参数 $x_t$ 和 $t$ , $x_t$ 用于预测噪声ϵ, $t$ 用于学习图像在加入噪声序列中的位置。
从 $T$ 到 $0$ 时刻,上一时刻的正态分布标准差越来越接近0,也就是说上一时刻图像越来越靠近均值,越来越确定。
上述为DDPM模型反向过程生成图片的原理。
感想:数学真奇妙。从标准正态分布噪声图像,通过不同噪声ϵ,便可反向推导出不同的 $x_0$ 时刻图像。