从DDPM到DDIM(三) DDPM的训练与推理
从DDPM到DDIM(三) DDPM的训练与推理
前情回顾
首先还是回顾一下之前讨论的成果。
扩散模型的结构和各个概率模型的意义。下图展示了DDPM的双向马尔可夫模型。
其中
加噪过程的单步转移概率,服从高斯分布,这很好理解。 是真正的采样过程的单步转移概率,但是求解它比较困难。 代表的是神经网络拟合的概率,我们希望神经网络能更好地拟合采样过程的单步转移概率。 ,给定最终生成结果 的条件下,生成过程的单步转移概率。 就像有监督学习中的标签,指导着生成的方向。我们采用此概率来替代 做神经网络的拟合。如果无法理解,把它当作一个无物理意义的数学上的中间变量即可。
联合概率表示 扩散模型的联合概率和前向条件联合概率为:
概率分布的具体表达式 之前提到的各种条件概率的具体表达式为:
其中
另外,
根据贝叶斯公式,我们要改造的条件概率如下:
证据下界 我们原本要对生成的图像分布进行极大似然估计,但直接估计无法计算。于是我们改为最大化证据下界,然后对证据下界进行化简,现在,我们采用
3.5、利用 重新推导证据下界
书接上回。我们化简证据下界的一个想法是,我们希望将
与之前一样,上式三项也分别代表三部分:重建项、先验匹配项 和 一致项。
- 重建项。顾名思义,这是对最后构图的预测概率。给定预测的最后一个隐变量
,预测生成的图像 的对数概率。 - 先验匹配项。 这一项描述的是扩散过程的最后一步生成的高斯噪声与纯高斯噪声的相似度,与之前相比,这一项的
部分的条件改为了 。同样,这一项并没有神经网络参数,所以不需要优化,后续网络训练的时候可以将这一项舍去。 - 一致项。这一项与之前有两点不同。其一,与之前相比,不再有错位比较。其二,这匹配目标改为了由
向 匹配,而之前是和扩散过程的单步转移概率 匹配。更加合理。
类似地,与之前的操作一样,我们将上式的数学期望下角标中的无关的随机变量约去(积分为1),然后转化成KL散度的形式。我们看 先验匹配项 和 一致项。
重建项也类似,期望下角标的概率中,除了随机变量
下面聊聊数学期望的下角标的物理意义是。以重建项为例,下角标为
所以,我们需要计算loss的项有两个,一个是重建项中的对数部分,一个是一致项中的KL散度。至于数学期望和下角标,我们并不需要展开计算,而是在训练的时候用多个图片并分别添加不同程度的噪声来替代。
4、训练过程
下面我们利用 (3) 式对证据下界 (6) 式做进一步展开。从DDPM到DDIM(二) 这篇文章讲过,在
这里
根据 (6) 式,我们只需要计算 重建项 和 一致项,先验匹配项没有训练参数。下面分别计算:
其中
下面计算一致项,即KL散度。高斯分布的KL散度是有公式的,我们不加证明地给出,若需要证明,可以查阅维基百科。两个
下面我们将一致项代入上述公式:
从上两个式子可以看出,
为了更好地匹配,我们展开
重建项也可以继续化简,注意到
上式最后一行是为了与KL散度的形式保持一致。经过这么长时间的努力,我们终于将证据下界化为最简形式。我们把我们计算出的重建项和一致项代入到 (6) 式,并舍弃和神经网络参数无关的先验匹配项,有:
因为前面有个负号,所以最大化证据下界等价于最小化以下损失函数:
理解上式也很简单。首先我们看每一项的权重
其实现方式就是给你一张图像
然后将这些隐变量分别送入神经网络,输出与
Algorithm 1 . Training a Deniosing Diffusion Probabilistic Model. (Version: Predict image)
For every image
- Repeat the following steps until convergence.
- Pick a random time stamp
. - Draw a sample
, i.e.
- Take gradient descent step on
You can do this in batches, just like how you train any other neural networks. Note that, here, you are training one denoising network
采用batch来训练的话,就对每个图片分别同时进行上述操作,值得注意的是,神经网络参数只有一个,无论是哪一个
说句题外话,其实DDPM的原文很具有误导性,如下图的DDPM的原图。从这张图上看,或许有些同学以为神经网络是输入
5、推理过程
大家先别翻论文,你觉得最简单的一个生成图像的想法是什么。我当时就想过,既然神经网络
按照马尔可夫性质,还是用
其中
扩散模型给我的感觉就是,训练过程和推理过程的差别很大。或许这就是生成模型,训练算法和推理算法的形式有很大的区别,包括文本的自回归生成也是如此。他不像图像分类,推理的时候跟训练时是一样的计算方式,只是最后来一个取概率最大的类别就行。训练过程和推理过程的极大差异决定了此推理形式不是唯一的形式,一定有更优的推理算法。
这个推理过程由如下算法描述。
Algorithm 2. Inference on a Deniosing Diffusion Probabilistic Model. (Version: Predict image)
Input: the trained model
- You give us a white noise vector
- Repeat the following for
. - Update according to
Output:
- 推理输出的
还需要进行去归一化和离散化到 0 到 255 之间,这个我们留到下一篇文章讲。 - 另外,在DDPM原文中,并没有直接预测
,而是对 进行了重参数化,让神经网络预测噪声 ,这是怎么做的呢,我们也留到下一篇文章讲。
下一篇文章 《从DDPM到DDIM(四) 预测噪声与生图后处理》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程