Diffusion Model理解
整体理解
拆楼(正向过程)可以直接一步步加噪声做,建楼(反向过程)需要使用模型来学习
从右向左是正向过程,\(q(x_t|x_{t-1})\) 是加噪声的过程,可以直接获知,\(q(x_{t-1}|x_t)\) 是我们想要做的建楼
操作,需要通过训练模型\(p_\theta(x_{t-1}|x_t)\) 来估计
前向过程
前向过程是马尔科夫链
因为前向过程是马氏链,才有公式 (2) 左边的式子成立,理解如下
前向过程中有一个简单的推导,就是给定初始图像\(x_0\),推导出任意时刻\(t\)的加噪声的图像\(x_t\)
反向过程
反向过程也是马尔科夫链
因为逆向过程是马氏链才有公式(1)左边的式子成立,理解如下
理论上的反向过程
variational lower bound
但这边为什么求对数似然函数的期望,还不理解,从公式上有两点
- 求期望并不会影响最小化负对数似然函数
- 将\(\Epsilon_{x1:T}\)转换为\(\Epsilon_{x0:T}\)
目标函数推导
基本思想是:最大似然法(最小化负对数似然函数),上面推导出来了负对数似然函数的上届,最小化它的上界的效果相当于最小化负对数似然函数
在Lil’Log中有一个不理解的地方,就是下面这两个KL散度是如何得到的?KL散度不应该是有积分或求和的形式吗?
KL散度的定义
而且Lil’Log中这部分的推导感觉有点前后矛盾
可以先忽略这一点,继续往下理解
观察可以发现,公式中\(L_T, L_0\)都是确定的,因此只需要优化\(L_{T-1}...L_2\)即可,而观察又可以发现\(L_{T-1}...L_2\)就是理论上反向过程和模型估计反向过程分布的KL散度,我们之前又已经推导出了理论上的反向过程表达,因此目标函数就可以写出来了
忽略常数,简化目标函数:
此时就可以理解到,和李宏毅老师的讲解一致,”训练模型去估计这张图像在t时刻被加入的噪声“。\(\epsilon_t\)是图像在前向过程中t时刻被加上的随机噪声,\(\epsilon_\theta\)就是我们的模型,需要训练这个模型去估计加入的随机噪声,这是训练(training)过程。当模型训练好之后,就具有了从加了噪声的图像中去除这一步噪声的能力,一步步逐渐从纯噪声中把噪声去除,即得到了生成的图像,这也就是推理(inference)过程。
算法如下
Weng, Lilian. (Jul 2021). What are diffusion models? Lil’Log.
https://lilianweng.github.io/posts/2021-07-11-diffusion-models/.
苏剑林. (Jun. 13, 2022). 《生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼 》
[Blog post]. Retrieved from https://kexue.fm/archives/9119