Diffusion Model理解

发布时间 2024-01-03 09:46:42作者: dctwan

Diffusion Model理解

整体理解

拆楼(正向过程)可以直接一步步加噪声做,建楼(反向过程)需要使用模型来学习


苏剑林. (Jun. 13, 2022). 《生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼 》文章中截图

从右向左是正向过程,\(q(x_t|x_{t-1})\) 是加噪声的过程,可以直接获知,\(q(x_{t-1}|x_t)\) 是我们想要做的建楼操作,需要通过训练模型\(p_\theta(x_{t-1}|x_t)\) 来估计


Weng, Lilian. (Jul 2021). What are diffusion models? Lil’Log.文章中截图

前向过程

前向过程是马尔科夫链

image-20240102112026229

因为前向过程是马氏链,才有公式 (2) 左边的式子成立,理解如下

image-20240102142836569

前向过程中有一个简单的推导,就是给定初始图像\(x_0\),推导出任意时刻\(t\)的加噪声的图像\(x_t\)

image-20240102192256379

反向过程

反向过程也是马尔科夫链

image-20240102111128518

因为逆向过程是马氏链才有公式(1)左边的式子成立,理解如下

image-20240102111856061

理论上的反向过程

image-20240103094225577

variational lower bound

但这边为什么求对数似然函数的期望,还不理解,从公式上有两点

  1. 求期望并不会影响最小化负对数似然函数
  2. \(\Epsilon_{x1:T}\)转换为\(\Epsilon_{x0:T}\)

image-20240103083031591

目标函数推导

基本思想是:最大似然法(最小化负对数似然函数),上面推导出来了负对数似然函数的上届,最小化它的上界的效果相当于最小化负对数似然函数

在Lil’Log中有一个不理解的地方,就是下面这两个KL散度是如何得到的?KL散度不应该是有积分或求和的形式吗?

image-20240103082859975

KL散度的定义

image-20240103083430911

而且Lil’Log中这部分的推导感觉有点前后矛盾

image-20240103084711237

可以先忽略这一点,继续往下理解

观察可以发现,公式中\(L_T, L_0\)都是确定的,因此只需要优化\(L_{T-1}...L_2\)即可,而观察又可以发现\(L_{T-1}...L_2\)就是理论上反向过程和模型估计反向过程分布的KL散度,我们之前又已经推导出了理论上的反向过程表达,因此目标函数就可以写出来了

image-20240103085307956

忽略常数,简化目标函数:

image-20240103085338998

此时就可以理解到,和李宏毅老师的讲解一致,”训练模型去估计这张图像在t时刻被加入的噪声“。\(\epsilon_t\)是图像在前向过程中t时刻被加上的随机噪声,\(\epsilon_\theta\)就是我们的模型,需要训练这个模型去估计加入的随机噪声,这是训练(training)过程。当模型训练好之后,就具有了从加了噪声的图像中去除这一步噪声的能力,一步步逐渐从纯噪声中把噪声去除,即得到了生成的图像,这也就是推理(inference)过程。

算法如下

image-20240103090102099

论文:arXiv:2006.11239

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