Diffusion Model理解
Diffusion Model理解
整体理解
从右向左是正向过程,\(q(x_t|x_{t-1})\) 是加噪声的过程,可以直接获知,\(q(x_{t-1}|x_t)\) 是我们想要做的建楼
操作,需要通过训练模型\(p_\theta(x_{t-1}|x_t)\) 来估计
ELBO
隐变量模型
间接的方式描述观测数据的分布,\(\mathbf{z}\)表示隐变量,原始数据分布用联合分布的边缘分布表示
Evidence Lower Bound
为什么需要ELBO呢?
有时候最大化观测数据的最大似然函数比较困难,就推导出观测数据对数似然函数(evidence)的下界 Evidence Lower Bound (ELBO) ,最大化这个下届,就相当于最大化对数似然函数。
推导ELBO的两种方式
方式一:根据詹森不等式
方式二:根据\(D_{KL}\ge0\)的性质
前向过程
前向过程是马尔科夫链
因为前向过程是马氏链,才有公式 (2) 左边的式子成立,理解如下
前向过程中有一个简单的推导,就是给定初始图像\(x_0\),推导出任意时刻\(t\)的加噪声的图像\(x_t\)
反向过程
反向过程也是马尔科夫链
因为逆向过程是马氏链才有公式(1)左边的式子成立,理解如下
目标函数推导
理论上的反向过程
自己的推导和理解
目标函数推导
以下为之前的理解
但这边为什么求对数似然函数的期望,还不理解,从公式上有两点
- 求期望并不会影响最小化负对数似然函数
- 将\(\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/.
Understanding Diffusion Models: A Unified Perspective
Calvin Luo, arXiv:2208.11970
Understanding Deep Learning
Simon J.D. Prince, http://udlbook.com