— order: 3 —可以参考1.生成扩散模型漫谈(苏剑林)2.【较真系列】讲人话-Diffusion Model全解(原理+代码+公式)【串讲系列】讲人话-Stable Diffusion全解(原理+代码+公式)之SDXL3.零推导理解 Diffusion Flow Matching4.理解扩散模型:一个统一的视角 Understanding Diffusion Models: A Unified perspective 全译文(也就是宋飏博士那篇博客)又看到一篇它的 阅读笔记5.一文贯通 Diffusion 原理:DDPMDDIM Flow Matching6.【公式推导】还在头疼 Diffusion 模型公式吗?Diffusion 理论公式喂饭式超详细逐步推导来了!1 生成模型生成模型是涌现or “幻觉,常见的 text-conditioned 生成模型是言出法随。下面讨论不带条件的(最基本的)生成模型定义:一个能随机生成与训练数据一致的样例的模型问题:如何对训练数据建模?如何采样?思路:从一个简单分布(对其采样是容易的)变换到观测数据分布(这个变换是可以拟合的)encoder: 从观测数据分布映射到简单分布,记作𝑞(𝒛|𝒙)decoder: 从简单分布映射到观测数据分布,记作𝑝𝜃(𝒙)训练时需要 encoder decoder推断时只需要 decoder这个简单分布采用高斯分布Why? 回忆高斯混合模型,一个复杂分布可以用多个高斯分布来表示𝑝𝜃(𝒙)=𝐾𝑖=1𝑝(𝒛𝑖)𝑝𝜃(𝒙|𝒛𝑖)为了避免设置𝐾作为超参,把𝒛表示为连续的高斯分布(即高斯个高斯分布𝑝𝜃(𝒙)=𝑝(𝒛)𝑝𝜃(𝒙|𝒛)d𝒛如何求𝜃使用极大似然估计𝜃=argmax𝜃𝑝𝜃(𝒙)最小化负对数似然𝕃=log(𝑝𝜃(𝒙0))log(𝑝𝜃(𝒙0))=log(𝑝𝜃(𝒙0))𝑞(𝒛|𝒙)d𝒛借一个值为一的积分=log(𝑝𝜃(𝒙,𝒛)𝑝𝜃(𝒛|𝒙))𝑞(𝒛|𝒙)d𝒛贝叶斯公式=log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙)𝑞(𝒛|𝒙)𝑝𝜃(𝒛|𝒙))𝑞(𝒛|𝒙)d𝒛=log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙))𝑞(𝒛|𝒙)d𝒛+KL(𝑞(𝒛|𝒙)𝑝𝜃(𝒛|𝒙))KL(𝑝|𝑞)=𝑝log𝑝𝑞log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙))𝑞(𝒛|𝒙)d𝒛=𝔼𝑞(𝒛|𝒙)[log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙))]此即为证据下界 Evidence Lower Bound (ELBO),有时也称为 Variational Lower Bound (VLB)极大似然估计 = 最大 lower bound = 最小化负对数似然注:从第一条式子到最后一条实际上可以直接由 Jensen 不等式得到,但这里的推导显示出 Evidence Evidence LowerBound 之间显式的关系 —— 差一个 KL 散度项(而且该项的形式很有意思) Question注:上面的推导过程看起来很有道理,但为什么最大化 ELBO 就可最大化似然呢?会不会有一种可能 ELBO 增大的同时 KL 减小,于是似然并没有增大?宋飏博士的博客对这个变分推断的过程进行了解释,他的推导如下:log𝑝(𝒙)=𝔼𝑞𝜃(𝒛|𝒙)[log𝑝(𝒙,𝒛)𝑞𝜃(𝒛|𝒙)]+𝐷KL(𝑞𝜃(𝒛|𝒙)𝑝(𝒛|𝒙))我们的目的是最小化 KL 散度,即让预测的变分后验分布𝑞𝜃(𝒛|𝒙)尽可能逼近真实后验分布𝑝(𝒛|𝒙),但我们无法访问 ground truth𝑝(𝒛|𝒙)。然而,evidence 相对𝜃是个常数,所以我们可以通过最大化 ELBO 来最小化 KL 散度。此外,训练完成后 ELBO 也可用于估计似然(因为它逼近log𝑝(𝒙))。宋飏博士的这个解释感觉自然很多,但这里并不是最大化似然而是最小化 KL然而,无论是各大博客还是原论文都有极大似然的表述,感觉有点奇怪?2 DDPM原论文 denoising Diffusion probabilistic Models时间:2020.6.192.1 前向扩散与反向生成前向扩散过程 (forward diffusion process)𝑝(𝒛|𝒙),𝑝(𝒙𝑇|𝒙0)核心加噪过程𝒙𝑡=1𝛽𝑡𝒙𝑡1+𝛽𝑡𝜀𝑡1𝒙𝑡=𝛼𝑡𝒙0+1𝛼𝑡𝜀𝑡注:𝛼𝑡=1𝛽𝑡,𝛼𝑡=𝜋𝑡𝑖=1𝛼𝑖注:这个𝜀𝑡𝜀𝑡1不是同种𝜀,一个是逐步的,一个是单步的(重参数化采样表示出来的),理论上来说应该标识一下,但为美观起见就不标了,后续我们统一采用后者其概率描述𝑞(𝒙𝑡|𝒙𝑡1)=𝒩(𝒙𝑡;1𝛽𝑡𝒙𝑡1,𝛽𝑡𝑰)𝑞(𝒙𝑡|𝒙0)=𝒩(𝒙𝑡;𝛼𝑡𝒙𝑡,(1𝛼𝑡)𝑰)重参数化采样:从𝒙0逐步推向𝒙𝑇,已知的𝒙𝑡1作为固定偏置,结果就是一个均值比较奇怪的高斯分布(沾上一点高斯就变成了高斯),并且我们可以通过系数来操控每一步以及最后的高斯的均值与方差两个独立高斯分布的和依然是高斯分布,且均值为二者均值的和、方差为二者方差的和超参设置,𝑇=1000𝛽𝑡𝛽1=104𝛽𝑇=0.02线性变化,大致上可以表示为𝛼𝑡=10.02𝑡𝑇为什么要设置这么大的𝑇和这么一个单调递减的𝛼𝑡?两个问题的答案其实是一致的这跟具体的数据背景有关。在重构的时候我们简单起见用欧氏距离作为损失函数,这其实并不是图片真实程度的好的度量。VAE 用欧氏距离来重构时往往会得到模糊的结果,除非是输入输出的两张图片非常接近才能得到比较清晰的结果。为此,较大𝑇让我们每一步的变化尽可能小𝑡比较小时,𝒙𝑡还比较接近真实图片,要缩小𝒙𝑡1𝒙𝑡的差距(即较大的𝛼𝑡),以便更适用欧氏距离;当𝑡比较大时,𝒙𝑡已经比较接近纯噪声,用欧式距离无妨,可以稍微增大𝒙𝑡1𝒙𝑡的差距(即较小的𝛼𝑡)。另外我们最终接近纯高斯噪声要𝛼𝑡0,这也要求𝛼𝑡不能一直很大反向生成过程 (reverse diffusion process)𝑝(𝒙|𝒛),𝑝(𝒙0|𝒙𝑇)训练时已知𝒙0,反向生成过程也是一个确定性的过程根据贝叶斯公式𝑝(𝒙𝑡1|𝒙𝑡)=𝑝(𝒙𝑡|𝒙𝑡1)𝑝(𝒙𝑡1)𝑝(𝒙𝑡)𝑝(𝒙𝑡1),𝑝(𝒙𝑡)未知,但是在给定𝒙0情况下,𝑝(𝒙𝑡|𝒙0),𝑝(𝒙𝑡1|𝒙0)已知(加噪的过程),于是给上式都加上𝒙0𝑝(𝒙𝑡1|𝒙𝑡,𝒙0)=𝑝(𝒙𝑡|𝒙𝑡1,𝒙0)𝑝(𝒙𝑡1|𝒙0)𝑝(𝒙𝑡|𝒙0)其中𝑝(𝒙𝑡|𝒙𝑡1,𝒙0)=𝑝(𝒙𝑡|𝒙𝑡1)𝑝(𝒙𝑡|𝒙0),𝑝(𝒙𝑡|𝒙0)均已知,带入整理系数得到𝑝(𝒙𝑡1|𝒙𝑡,𝒙0)=𝒩(𝒙𝑡;1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝑡),1𝛼𝑡11𝛼𝑡𝛽𝑡𝑰)𝒩(𝒙𝑡1;̃𝜇(𝒙𝑡,𝒙0),̃𝜎2𝑡𝑰)危险的量反向生成过程中的其它值要么是超参,要么是一步步生成的结果,唯独𝜀𝑡是前向过程中的,需要预测出来𝜀𝑡=𝜀𝜃(𝒙𝑡,𝑡)或者也可以说𝒙0是未知值(因为𝜀𝑡𝒙0通过加噪过程相关联,知道一个就知道了另一个,预测噪声与预测原图殊途同归)本质上其实是说:我们只想通过𝒙𝑡(和𝑡)来预测𝒙𝑡1,而不能依赖𝒙0(最终想要生成的结果)于是一个异想天开的想法是:如果能通过𝒙𝑡𝑡预测𝒙0,不就能消去𝑝(𝒙𝑡1|𝒙𝑡,𝒙0)中的𝒙0,使得它只依赖于𝒙𝑡𝑡吗?𝑝𝜃(𝒙𝑡1|𝒙𝑡)𝒩(𝒙𝑡1;𝜇𝜃(𝒙𝑡,𝑡),Σ𝜃(𝒙𝑡,𝑡))𝑝(𝒙𝑡1|𝒙𝑡,𝒙0=̂𝜇𝜃(𝒙𝑡,𝑡))=𝒩(𝒙𝑡1;̃𝜇(𝒙𝑡,̂𝜇𝜃(𝒙𝑡,𝑡)),̃𝜎𝑡𝑰)𝒙𝑡,𝑡预估𝒙0,要是能估准的话,就直接一步到位了,用不着逐步采样了。因此可以相见,这个预估不会太准,至少开始的相当多步内都不准。它仅仅起到了一个前瞻性的预估作用。就是很多数值算法中的预估-修正思想,即我们用一个粗糙的解往前推很多步,然后利用这个粗糙的结果将最终结果推进一小步,以此来逐步获得更为精细的解 —— 苏剑林综合前向扩散与反向生成的过程如下注:图里为了对称都画成了逐步进行,实际上前向扩散是一步到位的2.2 优化目标生成过程如前面所述,从一个简单高斯分布采样反转得到观测图像的一般步骤为𝑝𝜃(𝒙)=𝑝(𝒛)𝑝𝜃(𝒙|𝒛)d𝒛而对于 DDPM 这样逐步的过程,𝒙1𝒙𝑇都属于隐变量𝒛,得到 DDPM 的采样生成过程𝑝𝜃(𝒙0)=𝑝𝜃(𝒙0:𝑇)d𝒙1:𝑇其中每个𝑝𝜃(𝒙𝑡1|𝒙𝑡)都为高斯分布,用同一个网络预测其均值和方差(参数共享)𝑝𝜃(𝒙𝑡1|𝒙𝑡)=𝒩(𝒙𝑡1;𝜇𝜃(𝒙𝑡,𝑡),Σ𝜃(𝒙𝑡,𝑡)) 记号𝑝(𝒙0:𝑇)=𝑝(𝒙0|𝒙1)𝑝(𝒙1|𝑥2)𝑝(𝒙𝑡1|𝒙𝑡)𝑝(𝒙𝑡)=𝑝(𝒙𝑇)𝑇𝑡=1𝑝(𝒙𝑡1|𝒙𝑡)𝑞(𝒙1:𝑇|𝒙0)=𝑞(𝒙𝑇|𝑥𝑇1)𝑞(𝑥𝑇1|𝑥𝑇2)𝑞(𝒙1|𝒙0)=𝑇𝑡=1𝑞(𝒙𝑡|𝒙𝑡1)变分下界逐步推导如前所述,原始 VAE Diffusion ELBO 分别为log(𝑝𝜃(𝒙0))log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙))𝑞(𝒛|𝒙)d𝒛=𝔼𝑞(𝒛|𝒙)[log(𝑝𝜃(𝒙,𝒛)𝑞(𝒛|𝒙))]log(𝑝𝜃(𝒙0))log(𝑝𝜃(𝒙0:𝑇)𝑞(𝒙1:𝑇|𝒙0))𝑞(𝒙1:𝑇|𝒙0)d𝒙1:𝑇=𝔼𝑞(𝒙1:𝑇|𝒙0)[log(𝑝𝜃(𝒙0:𝑇)𝑞(𝒙1:𝑇|𝒙0))]于是我们有以下逐步推导,最终拆分为三项VLB=𝔼𝑞(𝒙1:𝑇|𝒙0)[log(𝑞(𝒙1:𝑇|𝒙0)𝑝𝜃(𝒙0:𝑇))]=𝔼𝑞[[[log𝑇𝑡=1𝑞(𝒙𝑡|𝒙𝑡1)𝑝𝜃(𝒙𝑇)𝑇𝑡=1𝑝𝜃(𝒙𝑡1|𝒙𝑡)]]]=𝔼𝑞[log𝑝(𝒙𝑇)+𝑇𝑡=1log𝑞(𝒙𝑡|𝒙𝑡1)𝑝𝜃(𝒙𝑡1|𝒙𝑡)]=𝔼𝑞[log𝑝(𝒙𝑇)+𝑇𝑡=2log𝑞(𝒙𝑡|𝒙𝑡1)𝑝𝜃(𝒙𝑡1|𝒙𝑡)+log𝑞(𝒙1|𝒙0)𝑝𝜃(𝒙0|𝒙1)]=𝔼𝑞[log𝑝(𝒙𝑇)+𝑇𝑡=2log(𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡)𝑞(𝒙𝑡|𝒙0)𝑞(𝒙𝑡1|𝒙0))+log𝑞(𝒙1|𝒙0)𝑝𝜃(𝒙0|𝒙1)]=𝔼𝑞[log𝑝(𝒙𝑇)+𝑇𝑡=2log𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡)+𝑇𝑡=2log𝑞(𝒙𝑡|𝒙0)𝑞(𝒙𝑡1|𝒙0)+log𝑞(𝒙1|𝒙0)𝑝𝜃(𝒙0|𝒙1)]=𝔼𝑞[log𝑝(𝒙𝑇)+𝑇𝑡=2log𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡)+log𝑞(𝒙𝑇|𝒙0)𝑞(𝒙1|𝒙0)+log𝑞(𝒙1|𝒙0)𝑝𝜃(𝒙0|𝒙1)]=𝔼𝑞(𝒙1:𝑇|𝒙0)[log𝑞(𝒙𝑇|𝒙0)𝑝(𝒙𝑇)+𝑇𝑡=2log𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡)log𝑝𝜃(𝒙0|𝒙1)]=𝔼𝑞(𝒙𝑇|𝒙0)[log𝑞(𝒙𝑇|𝒙0)𝑝(𝒙𝑇)]+𝑇𝑡=2𝔼𝑞(𝒙𝑡,𝒙𝑡1|𝒙0)[log𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡)]𝔼𝑞(𝒙1|𝒙0)[log𝑝𝜃(𝒙0|𝒙1)]=𝐷KL(𝑞(𝒙𝑇|𝒙0)𝑝(𝒙𝑇))𝑇+𝑇𝑡=2𝔼𝑞(𝒙𝑡|𝒙0)[𝐷KL(𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡))]𝑡1𝔼𝑞(𝒙1|𝒙0)[log𝑝𝜃(𝒙0|𝒙1)]0这个式子也很优美,是原论文的另一个表述对于函数的期望,若给出的分布有自变量以外的变量,它们并不会影响函数的期望注:无关变量不影响函数期望,例如𝔼𝑞(𝒙1:𝑇|𝒙0)[𝑓(𝒙𝑗)]=𝒙1:𝑇[𝑇𝑡=1𝑞(𝒙𝑡|𝒙0)]𝑓(𝒙𝑗)d𝒙1:𝑇=[𝜋𝑇𝑡=1,𝑡𝑗𝒙𝑡𝑞(𝒙𝑡|𝒙0)d𝒙𝑡]𝒙𝑗𝑞(𝒙𝑗|𝒙0)𝑓(𝒙𝑗)d𝒙𝑗=[𝜋𝑇𝑡=1,𝑡𝑗1]𝒙𝑗𝑞(𝒙𝑗|𝒙0)𝑓(𝒙𝑗)d𝒙𝑗=𝒙𝑗𝑞(𝒙𝑗|𝒙0)𝑓(𝒙𝑗)d𝒙𝑗=𝔼𝑞(𝒙𝑗|𝒙0)[𝑓(𝒙𝑗)]这三项分别有自己的含义1.𝑇prior matching term: 表示最终加出来的噪声尽可能为高斯分布(先验),它没有可训练的参数,并且根据我们的假设等于零2.0reconstruction term: 可以使用蒙特卡洛估计进行近似和优化(?)。论文中则是牵扯到 Data scaling 之类,没太看懂。一些资料认为这一项也是由超参所决定,可以不去管它3.𝑡1denoising matching term: 最核心,它要求我们模型的预测结果跟已知𝒙0时的去噪真值结果尽可能一致另外可以注意到,当𝑇=1,上式完全等于传统 VAE ELBO 方程现在我们来仔细 judge 𝑡1项,导出优化目标我们已知:𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)=𝒩(𝒙𝑡1;̃𝜇(𝒙𝑡,𝒙0),̃𝜎2𝑡𝑰)=𝒩(𝒙𝑡1;1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝑡),1𝛼𝑡11𝛼𝑡𝛽𝑡𝑰)𝑝𝜃(𝒙𝑡1|𝒙𝑡)=𝒩(𝒙𝑡1;𝜇𝜃(𝒙𝑡,𝑡),Σ𝜃(𝒙𝑡,𝑡))=𝒩(𝒙𝑡1;1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝜃(𝒙𝑡,𝑡)),Σ𝜃(𝒙𝑡,𝑡))且两个高斯分布的 KL 散度有计算公式(推导见 两个多元正态分布的 KL 散度、巴氏距离和 W 距离KL(𝑝(𝒙)𝑞(𝒙))=12[(𝜇𝑝𝜇𝑞)𝑇Σ1𝑞(𝜇𝑝𝜇𝑞)logdet(Σ1𝑞Σ𝑝)+tr(Σ1𝑞Σ𝑝)𝑑]于是我们得到(为简洁起见,高斯参数的自变量省略)𝐷KL(𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡))=12[(̃𝜇𝜇𝜃)𝑇Σ1𝜃(̃𝜇𝜇𝜃)log(̃𝜎2𝑡)𝑑detΣ𝜃+̃𝜎2𝑡tr(Σ1𝜃)𝑑]这个式子看起来很丑陋?但如果我们限定Σ𝜃(𝒙𝑡,𝑡)=̃𝜎2𝜃𝑰(对角矩阵且各项同性),就变成𝐷KL(𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡))=12̃𝜎2𝜃̃𝜇𝜇𝜃22+12[𝑑̃𝜎2𝑡̃𝜎2𝜃𝑑𝑑log̃𝜎2𝑡̃𝜎2𝜃]=(1𝛼𝑡)22̃𝜎2𝑡𝛼𝑡(1𝛼𝑡)𝜀𝜃(𝒙𝑡,𝑡)𝜀𝑡22+12[𝑑̃𝜎2𝑡̃𝜎2𝜃𝑑𝑑log̃𝜎2𝑡̃𝜎2𝜃]更进一步,DDPM 令方差为跟𝜃无关的常数(实验证明具体是̃𝜎2𝑡=1𝛼𝑡11𝛼𝑡𝛽𝑡̃𝜎2𝜃=𝛽𝑡效果差别不大),于是上式右边成为跟梯度无关的常数(甚至可以是零)。问题归结为𝑡1=𝔼𝑞(𝒙𝑡|𝒙0)[(1𝛼𝑡)22̃𝜎2𝑡𝛼𝑡(1𝛼𝑡)𝜀𝜃(𝒙𝑡,𝑡)𝜀𝑡22]𝜃=argmin𝜃𝔼𝑡𝑈{2,𝑇}[𝔼𝑞(𝒙𝑡|𝒙0)[(1𝛼𝑡)22̃𝜎2𝑡𝛼𝑡(1𝛼𝑡)𝜀𝜃(𝒙𝑡,𝑡)𝜀𝑡22]]=argmin𝜃𝔼𝑡𝑈{2,𝑇}{𝔼𝒙0,𝜀[(1𝛼𝑡)22̃𝜎2𝑡𝛼𝑡(1𝛼𝑡)𝜀𝜃(𝛼𝑡𝒙0+1𝛼𝑡𝜀,𝑡)𝜀𝑡22]}顺带一提,这里的两种方差选择,刚好分别是假设数据集𝑝(𝒙0)服从狄拉克函数(单个样本)和标准正态分布时推导出来的结果,属于两个极端。具体推导,可以参考 生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪 By 苏剑林如果不固定的话,也预测Σ𝜃,这是后续一些不差钱的工作的做法这里推导过程比较复杂,最后就真正变成了一个 noise predictor最终的损失函数如上推导了 Standard Variational Bound DDPM 最终采用的却是如下的损失函数𝐿simple=𝔼𝑡𝑈{1,𝑇},𝒙0,𝜀[𝜀𝜃(𝛼𝑡𝒙0+1𝛼𝑡𝜀,𝑡)𝜀𝑡22]可以看到这就是相对标准变分下界的 unweighted 版本(只考虑了𝐿0,𝐿𝑡1),这可以看作是对标准版本的 reweighting对较小的𝑡赋予更小的权重,让模型更关注较大的𝑡时更困难的去噪任务。实验表明这样做效果更好2.3 训练与推理训练训练时不必枚举每个𝑡,因为已经推导出每一时刻的加噪的封闭形式,可以直接均匀随机采样(也方便并行)推理推理时沿着马尔科夫过程反向模拟每一步(逐步进行)需要注意,模型预测的噪声实际上不是真的随机变量,可以看作是确定的值(只是均值中的一部分)而不是分布,需要加一个𝜀使每一步结果都是高斯分布模型结构使用常见的 UNet 结构time embedding 为标准的位置编码方式 (sinusoidal embedding)加到 UNet 的每个 block 的输入上2.4 总结前向扩散𝒙𝑡=1𝛽𝑡𝒙𝑡1+𝛽𝑡𝜀𝑡1𝒙𝑡=𝛼𝑡𝒙0+1𝛼𝑡𝜀𝑡𝑞(𝒙𝑡|𝒙𝑡1)=𝒩(𝒙𝑡;1𝛽𝑡𝒙𝑡1,𝛽𝑡𝑰)𝑞(𝒙𝑡|𝒙0)=𝒩(𝒙𝑡;𝛼𝑡𝒙𝑡,(1𝛼𝑡)𝑰)𝛼𝑡=1𝛽𝑡,𝛼𝑡=𝑡𝑖=1𝛼𝑖反向生成𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)=𝒩(𝒙𝑡1;̃𝜇(𝒙𝑡,𝒙0),̃𝜎2𝑡𝑰)=𝒩(𝒙𝑡1;1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝑡),1𝛼𝑡11𝛼𝑡𝛽𝑡𝑰)𝑝𝜃(𝒙𝑡1|𝒙𝑡)=𝒩(𝒙𝑡1;𝜇𝜃(𝒙𝑡,𝑡),Σ𝜃(𝒙𝑡,𝑡))=𝒩(𝒙𝑡1;1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝜃(𝒙𝑡,𝑡)),Σ𝜃(𝒙𝑡,𝑡))推导路线总结𝑝(𝒙𝑡|𝒙𝑡1)推导𝑝(𝒙𝑡|𝒙0)推导𝑝(𝒙𝑡1|𝒙𝑡,𝒙0)近似𝑝(𝒙𝑡1|𝒙𝑡)DDPM1.是一类生成模型,输入是标准高斯噪声,输出是图片2.相对 GAN 稳定易训练3.生成过程不是一步到位的,是需要迭代的【耗时】4.的输入和输出尺寸是一致的【耗资源耗时】针对耗时的问题:许多加速采样的方法应运而生,目的是降低迭代的次数针对耗资源的问题:LDM (latent diffusion model) 提出把 Diffusion Model 做到 VAE encoder 输出上,降低每次迭代的计算量(而且本身数字图像的大多数像素都用来描述细节,在像素空间做 Diffusion 存在大量冗余)Diffusion 为什么爆火,除了其本身效率的原因外,还有SD 微调 (LoRA) 的适配度较好开源社区的支持,尤其是 ControlNet3 更深入的理解3.1 数学原理背景VLB ELBO……ODE SDE……3.2 VAE DDPM VAE 的角度看 DDPM前向扩散过程即为 encoder反向去噪过程即为 decoder通过多步微调的方式变相增强了模型复杂度VAE 只过一次前向,模型复杂度为𝑂(𝑁),而 DDPM 通过参数共享达到𝑂(𝑇𝑁)这既是优点也是缺点,模型复杂度高了时间复杂度也随之上升;但逐步的方式允许它慢慢达到更好的效果(而且每一步只预测噪声而非图片,利用了高斯分布适合神经网络预测这一特性)自回归式的 VAE 彰显出 auto-regressive 的优势马尔可夫链……3.3 VDM 的三种等价形式宋飏博士将这类扩散模型称为 Variational Diffusion Model (VDM)并提出了三种等效的优化 VDM 目标1.学习神经网络预测原始图像𝒙02.学习神经网络预测噪声𝜀𝑡,这也是 DDPM 和上面我们推导的形式3.一定噪声水平下的图像得分函数𝒙𝑡log𝑝(𝒙𝑡)学艺不精的时候我以为是从𝒙𝑡预测噪声和预测𝒙𝑡1两种并列(类似 ResNet 的关系),现在才明白其实前者是为了后者(这三种方式都是为了𝒙𝑡预测𝒙𝑡1三种版本都来自对下式的不同推导𝑡1=𝔼𝑞(𝒙𝑡|𝒙0)[KL(𝑞(𝒙𝑡1|𝒙𝑡,𝒙0)𝑝𝜃(𝒙𝑡1|𝒙𝑡))]=𝔼𝑞(𝒙𝑡|𝒙0)[12̃𝜎2𝜃̃𝜇𝜇𝜃22+12(𝑑̃𝜎2𝑡̃𝜎2𝜃𝑑𝑑log̃𝜎2𝑡̃𝜎2𝜃)]=12̃𝜎2𝜃𝔼𝑞(𝒙𝑡|𝒙0)[̃𝜇𝜇𝜃22]+𝐶1.用如下代换推出原始图像𝒙0形式̃𝜇(𝒙𝑡,𝒙0)=𝛼𝑡(1𝛼𝑡1)𝒙𝑡+𝛼𝑡1(1𝛼𝑡)𝒙01𝛼𝑡𝜇𝜃(𝒙𝑡,𝑡)=𝛼𝑡(1𝛼𝑡1)𝒙𝑡+𝛼𝑡1(1𝛼𝑡)𝑥𝜃(𝒙𝑡,𝑡)1𝛼𝑡𝑡1=12̃𝜎2𝜃𝛼𝑡1(1𝛼𝑡)2(1𝛼𝑡)2𝔼𝑞(𝒙𝑡|𝒙0)[𝒙0𝑥𝜃(𝒙𝑡,𝑡)22]+𝐶2.用如下代换推出噪声𝜀𝑡形式̃𝜇(𝒙𝑡,𝒙0)=1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝑡)𝜇𝜃(𝒙𝑡,𝑡)=1𝛼𝑡(𝒙𝑡1𝛼𝑡1𝛼𝑡𝜀𝜃(𝒙𝑡,𝑡))𝑡1=12̃𝜎2𝜃(1𝛼𝑡)2𝛼𝑡(1𝛼𝑡)𝔼𝑞(𝒙𝑡|𝒙0)[𝜀𝜃(𝒙𝑡,𝑡)𝜀𝑡22]+𝐶3.用如下代换推出得分函数𝒙𝑡log𝑝(𝒙𝑡)形式̃𝜇(𝒙𝑡,𝒙0)=1𝛼𝑡𝒙𝑡+1𝛼𝑡𝛼𝑡𝒙𝑡log𝑝(𝒙𝑡)𝜇𝜃(𝒙𝑡,𝑡)=1𝛼𝑡𝒙𝑡+1𝛼𝑡𝛼𝑡𝑠𝜃(𝒙𝑡,𝑡)𝑡1=12̃𝜎2𝜃(1𝛼𝑡)2𝛼𝑡𝔼𝑞(𝒙𝑡|𝒙0)[𝑠𝜃(𝒙𝑡,𝑡)𝒙𝑡log𝑝(𝒙𝑡)22]+𝐶第二种替换就是前面 DDPM 介绍过的做法,第一种则只需要注意到加噪时𝒙0𝜀𝑡的共通性即可,但第三种形式需要介绍一下对于满足高斯分布的变量𝒛𝒩(𝒛;𝝁𝒛,Σ𝒛)Tweedie 公式如下𝔼[𝝁𝒛|𝒛]=𝒛+Σ𝒛𝒛log𝑝(𝒛)𝑞(𝒙𝑡|𝒙0)=𝒩(𝒙𝑡;𝛼𝑡𝒙0,(1𝛼𝑡)𝑰)我们知道已知𝒙0情况下𝒙𝑡的后验均值,带入得到𝒙0=𝒙𝑡+(1𝛼𝑡)𝒙𝑡log𝑝(𝒙𝑡)𝛼𝑡于是就可以将该式带入我们在第一种形式中用到的̃𝜇(𝒙𝑡,𝒙0)进而化简得到̃𝜇(𝒙𝑡,𝒙0)了,具体计算从略另外,我们能以𝒙0为桥梁将噪声𝜀𝑡与得分函数𝒙𝑡log𝑝(𝒙𝑡)联系起来𝒙0=𝒙𝑡1𝛼𝑡𝜀𝑡𝛼𝑡=𝒙𝑡+(1𝛼𝑡)𝒙𝑡log𝑝(𝒙𝑡)𝛼𝑡𝒙𝑡log𝑝(𝒙𝑡)=11𝛼𝑡𝜀𝑡事实证明,这两个术语存在一个随时间变化而缩放的常数差!得分函数测量了在数据空间中如何移动以最大化对数概率。直观地说,由于源噪声被添加到自然图像中以污染它,因此向反方向移动会去噪声,并且将是提高后续对数概率的最佳更新。而我们的数学证明证实了这种直觉:学习模拟得分函数等价于模拟源噪声的相反数(差一个缩放因子)3.4 Score-based Generative Model上一节中,我们通过 Tweedie 公式简单地推出可以通过优化神经网络𝑠𝜃(𝒙𝑡,𝑡)来预测得分函数𝒙𝑡log𝑝(𝒙𝑡)可以用来学习变分扩散模型。但是其实我们并未对得分函数有很深的理解,也无法解释为什么模拟得分函数值得研究。甚至到目前为止,我们连为什么叫它得分函数都不知道。因此先来探索更一般的 Score-based Generative Model甚至溯源回 Energe-based Generative Model3.4.1 Energy-based Models论及生成模型,最直接也是之前最普遍使用的思路就是 likelihood-based models直接建模目标数据的分布,然后在这个数据分布中采样就可以得到生成的新数据。基于这种想法,如果设待建模数据是一个连续型随机变量,那就可以通过建模该随机变量的概率密度函数来进行生成。直接设为连续型随机变量其实包含了对世界的连续性的假设但有时概率密度函数是难以捉摸的,就像 Diffusion Model 这里也是,我们并非直接建模概率密度函数,而是建模从高斯密度函数到它的转换。Energy-based Models (EBM) Yann Lecun 提出的一种希望统括 ML/DL 的模型框架。它认为模型只需要建模一个能量函数𝐹(𝑥,𝑦)衡量𝑥𝑦的相容性 (compatibility)从能量函数出发再进一步处理就可以得到最终想要建模的概率密度函数。能量函数(相容性度量)𝐹(𝑥,𝑦)𝑥是观测变量,𝑦是待预测变量(举视频生成的例子,若𝑥是已有的视频帧,𝑦就是待生成的视频帧),我们希望𝑦尽可能与𝑥相融,即能量函数𝐹(𝑥,𝑦)尽可能小。如果模型很好地学到了这个能量函数,在推断时就可以通过下式得到与所给数据最相容的预测𝑦𝑦=argmin𝑦𝐹(𝑥,𝑦)𝑥学成函数后,给定𝑦输出一个相容性𝑓𝜃(𝑦),衡量了𝑦出现在𝑥的分布中的概率。我们也可以更直观地写出能量函数与概率密度的关系(这在实践中更常用):𝑝𝜃(𝒙)=𝑒𝑓𝜃(𝒙)𝒁𝜃其中,𝒁𝜃就是一个归一化项,使得𝑝𝜃满足概率密度函数的基本要求𝑝𝜃(𝒙)d𝒙=1。因此,这里说的 EBM 也被称为未归一化的概率模 (unnormalized probabilistic model)3.4.2 Challenges of EBM & Introduction to Score-based Model那么这样一个 EBM 该如何训练?可以仍然用似然模型的框架,通过最大化训练集的对数似然以训练𝑝𝜃(𝒙)max𝜃log𝑝𝜃(𝑁𝑖=1𝒙𝑖)=max𝜃log𝑁𝑖=1𝑝𝜃(𝒙𝑖)=max𝜃𝑁𝑖=1log𝑝𝜃(𝒙𝑖)但对于复杂的𝑓𝜃(𝒙)函数,归一化常数𝒁𝜃或许是难以计算的,有两种常见的妥协方式:1.限制网络结构,如自回归 CNN 中的因果卷积 (causal convolution) 和归一化流模型 (normalizing flow models) 中的可逆网络2.近似计算𝑍(𝜃),如 VAE 中的变分推断和对比散度 (contrastive divergence) 中的马尔科夫链蒙特卡洛 (Markov Chain MonteCarlo, MCMC) 采样,往往需要较高的计算量代价为了避免求取𝑍(𝜃)的麻烦,Score-based Model 在和基于似然的模型的同一层次上,将原本的建模𝑝(𝒙)转为去建模一个称为 score𝑠(𝒙)=𝒙log𝑝𝜃(𝒙)这是因为观察到上式两侧取对数再导数为𝒙log𝑝𝜃(𝒙)=𝒙log(1𝒁𝜃)+𝒙log𝑒𝑓𝜃(𝒙))=𝒙𝑓𝜃(𝒙)𝑠𝜃(𝒙)可以看到它可以自由地表示为神经网络,而不涉及任何归一化常数得分函数代表什么意义?对于每个𝒙,取其对数似然相对于𝒙的梯度,本质上描述了移动到哪个方向可以进一步增加似然。因此,从直觉上说,得分函数在数据𝒙所在的整个空间上定义了一个朝向着模式(mode指混合分布中的一个单独分布)的向量场然后,通过学习真实数据分布的得分函数,我们可以通过在同一空间中的任意点开始,跟随得分函数迭代到达某个模式来生成样本。这个采样过程被称为 Langevin 动力学(朗之万动力学),并且在数学上被描述为:𝒙𝑖+1𝒙𝑖+𝑐log𝑝(𝒙𝑖)+2𝑐𝜀,𝑖=0,1,,𝐾其中𝒙0是从先验分布(如均匀分布)随机抽样得到的,而𝜀𝒩(𝟎,𝑰)是额外的噪声项,以确保生成的样本不总是塌陷到一个模式上,而是在其周围游走,以获得更多多样性。而且能避免由于学习出的确定性的得分函数导致的确定性轨迹。当采样从处于多个模式之间的位置初始化时,这种随机性尤其有用得分函数应该怎么学呢?可以通过最小化 Fisher 散度与真值得分函数来优化:𝔼𝑝(𝒙)[𝑠𝜃(𝒙)log𝑝(𝒙)22]但真实得分函数我们不一定能得到(比如模拟自然图像分布这样复杂的分布而言)。幸运的是,已经有一些称为得分匹配 (scorematching) 的替代技术,可以在不知道真实得分函数的情况下最小化 Fisher 散度,并可以用随机梯度下降进行优化这种通过得分函数来学习表示分布、通过马尔科夫链蒙特卡洛技术 (e.g. Langevin 动力学) 生成样本的方法,被称为 Score-basedGenerative Modeling,它有三个主要问题:1.𝒙处于高维空间中的低维流形上时,得分函数未定义从数学上看,不在低维流形上的所有点的概率都为零,其对数是未定义的这在尝试学习自然图像的生成模型时特别不方便,因为自然图像被认为位于整个环境空间的低维流形上2.通过一般的得分匹配方法训练的估计得分函数在低密度区域中将不准确因为我们要最小化的目标是对𝑝(𝒙)的期望,并且明确地在其样本上训练,模型在少见或未见样本上无法获得准确的学习信号这个问题很大,因为我们的采样策略是从高维空间中的随机位置开始根据学习的得分函数移动,这个位置很可能是随机噪声。由于我们遵循的是嘈杂或不准确的得分估计,最终生成的样本也可能不够优化,或者需要更多迭代才能收敛到准确的输出3.即使使用真实的得分进行 Langevin 动力学采样,也可能无法混合假设真实数据分布是两个不相交分布的混合𝑝(𝒙)=𝑐1𝑝1(𝒙)+𝑐2𝑝2(𝒙)然后,在计算得分时,这些混合系数会丢失,因为对数运算将系数从分布中分离出来,并且梯度运算将其置零事实证明,通过向数据添加多层高斯噪声可以同时解决这三个缺点!1.由于高斯噪声分布的支持是整个空间,扰动后的数据样本将不再限于低维流形2.添加大量的高斯噪声会增加每个模式在数据分布中的覆盖范围,在低密度区域添加更多训练信号3.通过添加方差递增的多层高斯噪声,可以得到对应于真实混合系数的中间分布形式上,我们可以选择一个噪声水平为{𝜎𝑡}𝑇𝑡=1的正序列,并定义一个渐进扰动数据分布序列𝑝𝜎𝑡(𝒙𝑡)=𝑝(𝒙)𝒩(𝒙𝑡;𝒙,𝜎2𝑡)d𝒙然后,使用得分匹配学习神经网络𝑠𝜃(𝒙,𝑡),以同时学习所有噪声水平的得分函数argmin𝜃𝑇𝑡=1𝜆(𝑡)𝔼𝑝𝜎𝑡(𝒙)[𝑠𝜃(𝒙)𝒙log𝑝𝜎𝑡(𝒙)22]其中,𝜆(𝑡)>0为对噪声水平𝑡施加的权重注意到了吗?这与基于变分扩散模型训练推导出的目标公式几乎完全相同此外,作者提出了一个通过退火 Langevin 动力学采样的生成过程1.其中样本是按顺序在每个𝑡=𝑇,𝑇1,,2,1上运行 Langevin 动力学来生成的2.初始化是从某个固定先验(例如均匀分布)中选择的,并且每个后续的采样步骤都从前一个仿真的最终样本开始3.由于随着时间步长𝑡的减小噪声水平逐渐降低,我们逐渐减小步长大小,样本最终会收敛到真实模式这与变分扩散模型的马尔可夫 HVAE 解释中执行的采样过程直接类似(随机初始化的数据向量经过逐渐减小的噪声水平迭代地进行改进)基于此,我们在训练目标和采样过程上建立了 VDM Score-based Generative Model 之间的明确联系还有一个问题是如何自然地将扩散模型推广到无限数量的时间步骤在马尔可夫 HVAE 视图下,这可以解释为将层次数扩展到无穷大𝑇从等价的基于得分的生成模型的观点来看能更清晰地表示这一点:在无限数量的噪声尺度下,图像随时间的连续变化可以被表示为一种随机过程,因此可以用随机微分方程 (SDE) 描述。采样是通过反向求解 SDE 进行的,这自然要求在每个连续值噪声水平处估计得分函数。SDE 的不同参数化基本上描述了随时间的不同扰动方案,使得对噪声过程的灵活建模成为可能原文后续还有对 Classifier Guidance Classifier-Free Guidance 的讨论,这里略去3.4.3 统一视角理解扩散模型的总结文章脉络1.首先,将变分扩散模型推导为马尔可夫层级变分自动编码器的特例,其中三个关键假设使计算可行并实现了对 ELBO 的可扩展优化2.接下来,证明优化 VDM 归结为学习一个神经网络以预测三个潜在目标之一:从任意噪声源噪声化的图像中还原出原始源图像、从任意加噪的图像中还原出原始噪声源,或者是任意噪声水平下加噪图像的评分函数3.然后,深入探讨了学习评分函数的含义,并将其明确地与基于评分的生成建模的观点联系起来4.最后,介绍了如何使用扩散模型学习条件分布扩散模型展示了生成模型不可思议的能力,并且支撑这些模型的数学方法非常优雅,但也有一些缺点1.对于我们人类来说,这不太可能是自然建模和生成数据的方式;我们不会将样本生成为随机噪声,然后迭代地去噪2.变分扩散模型无法产生可解释的潜变量。如果说一个 VAE 通过优化其编码器来学习一个结构化的潜空间,那么在变分扩散模型中,每个时间步的编码器已经被设定为线性高斯模型,不能进行灵活优化。因此,中间的潜变量仅仅是原始输入的嘈杂版本3.潜变量受限于与原始输入相同的维度,进一步阻碍了学习有意义、压缩的潜变量结构的努力4.采样是一个开销较大的过程,因为在两种形式下都必须运行多次去噪步骤最后要注意,扩散模型的成功凸显了分层变分自编码器 HVAE 作为生成模型的能力我们已经证明,当推广到无限潜层次时,即使编码器是微不足道的、潜变量维度是固定的,并且假设马尔可夫转换,我们仍然能够学习到强大的数据模型这表明,在一般情况下,深层 HVAE 可能会取得进一步的性能提升,其中复杂的编码器和具有语义意义的潜空间可能会被学习出来