【生成式AI】Diffusion Model 原理详解

Diffusion Model

【碎碎念】感觉Diffusion Model里面的数学公式太多了QwQ,所以自己稍微梳理一下。
我自己是听B站的课程:李宏毅课程听懂的,感觉讲得很清楚

概念模型

请添加图片描述
Diffusion Model的基本思想就是:

  • 把一张图片通过 T T Tstep 添加高斯噪声,最后会形成一个高斯分布, N ( 0 , I ) \mathcal N(0,\mathbf{I}) N(0,I)
  • 把添加噪声的每步图片 x 0 ⋯ x T x_0\cdots x_T x0xT看成随机过程,则形成一个马尔可夫链,每一步是已知的 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)
  • 设置一个Network,网络中的参数 θ \theta θ作为先验,如果能预测出逆过程 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt),就可以从噪声图片生成图片

算法流程

在这里插入图片描述

主算法流程如上图,解释以下大致思路:
训练部分:

  • Sample一张图片 x 0 \mathbf{x}_0 x0
  • 选择一个步骤 t t t
  • 优化目标:Denoise网络,给定 t t t t t t步的噪图,能够预测 t − 1 t-1 t1步到 t t t步添加的噪声长什么样子

推理部分:

  • Sample一张噪图
  • T T T步开始一步一步通过Denoise推理出真实图片

实际上上述只是一个非常粗略的解释,要真正理解这个算法,还有如下几个问题要解决:

  1. 如何生成 t t t步的噪图
  2. 形式化Denoise的优化目标

生成t步的噪图

每一步逐渐混入方差为 β i \beta_i βi的高斯噪声,得到下面的式子
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_t|\mathbf{x}_{t-1})=\mathcal N(\mathbf{x}_t;\sqrt{1-\beta_t} \mathbf{x}_{t-1},\beta_t \mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)
用重参数化的写法是:
x t = 1 − β t x t − 1 + β t ϵ t ϵ t ∼ N ( 0 , I ) \mathbf{x_t}=\sqrt{1-\beta_t}\mathbf{x}_{t-1}+\sqrt \beta_t \epsilon_t \\ \epsilon_t\sim\mathcal N(0,\mathbf{I}) xt=1βt xt1+β tϵtϵtN(0,I)

进一步推到

x t = 1 − β t x t − 1 + β t ϵ t = 1 − β t ( 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 1 ) + β t ϵ t = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + 1 − ( 1 − β t ) ( 1 − β t − 1 ) ϵ = ⋯ = α t x 0 + 1 − α t ϵ , α t = ∏ i = 1 t 1 − β t \mathbf{x}_t=\sqrt {1 - \beta_t} \mathbf{x}_{t-1}+\sqrt {\beta_t} \epsilon_t \\ = \sqrt{1-\beta_t}(\sqrt{1-\beta_{t-1}}\mathbf{x}_{t-2}+\sqrt {\beta_{t-1}}\epsilon_{t-1})+\sqrt {\beta_t} \epsilon_t \\ =\sqrt{(1-\beta_t)(1-\beta_{t-1})}\mathbf{x}_{t-2}+\sqrt{1 - (1 - \beta_t)(1-\beta_{t-1})}\epsilon \\ =\cdots \\ = \sqrt{\alpha_t}\mathbf{x}_0+\sqrt{1-\alpha_t}\mathbf\epsilon,\\ \alpha_t=\prod_{i=1}^t 1-\beta_t xt=1βt xt1+βt ϵt=1βt (1βt1 xt2+βt1 ϵt1)+βt ϵt=(1βt)(1βt1) xt2+1(1βt)(1βt1) ϵ==αt x0+1αt ϵ,αt=i=1t1βt

这是根据高斯的可加性原理推导得出的结论。也就是,不需要一步步加,可以一次性推导到位。

优化目标

假设整体的 T T T步网络生成的概率分布是 p θ p_\theta pθ,那么其实优化的目标可以是:
max ⁡ θ E x 0 ∼ p d a t a ( x 0 ) [ l o g p θ ( x 0 ) ] \max_\theta \mathbb{E}_{x_0\sim p_{data}(x_0)}[logp_\theta(\mathbf{x}_0)] θmaxEx0pdata(x0)[logpθ(x0)]

这个优化目标可以解释为Sample所有数据集的图片,这些图片被 p θ p_\theta pθ 生成的概率乘积最大(取了个log)

接下来其实利用了一个著名的VLB(变分下界)的定理,这个定理再VAE中使用过,具体的证明可以看视频,这里直接出结论:
log ⁡ p θ ( x 0 ) ≥ E x 1 ⋯ x T ∼ q ( x 1 ⋯ x T ∣ x 0 ) [ log ⁡ p θ ( x 0 ⋯ x T ) q ( x 1 ⋯ x T ∣ x 0 ) ] \log p_\theta(\mathbf{x}_0)\geq \mathbb E_{\mathbf{x}_1\cdots \mathbf{x}_T\sim q(\mathbf{x}_1\cdots \mathbf{x}_T|\mathbf{x}_0)}[\log \frac{p_\theta(\mathbf{x}_0\cdots \mathbf{x}_T)}{q(\mathbf{x_1}\cdots \mathbf{x}_T|\mathbf{x}_0)}] logpθ(x0)Ex1xTq(x1xTx0)[logq(x1xTx0)pθ(x0xT)]

原论文经过了一番精彩的数学推导(注意,这段推导是取符号转化成最小化的Loss,所以符号要反着看):
在这里插入图片描述
在这里插入图片描述
关于这段推导变换的精妙之处,先占个坑,暂时没想出来~
注意到 p ( x T ) p(\mathbf{x}_T) p(xT)就是变换到最后的噪声图,而 q ( x T ∣ x 0 ) q(\mathbf{x}_T|\mathbf{x}_0) q(xTx0)是一个固定的过程,这两者都和网络没关系,所以可以直接在优化项中舍去。

q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0) q(xt1xt,x0)的推导

q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 , x t , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_t,x_0)=\frac{q(x_{t-1},x_t,x_0)}{q(x_t,x_0)}=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)q(x_0)}{q(x_t|x_0)q(x_0)}=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} q(xt1xt,x0)=q(xt,x0)q(xt1,xt,x0)=q(xtx0)q(x0)q(xtxt1)q(xt1x0)q(x0)=q(xtx0)q(xtxt1)q(xt1x0)
发现等式后面每项都是已知的,然后开始经过一番魔幻推导
在这里插入图片描述
结果就是还是一个高斯分布
梳理一下思路:我们现在有两个高斯分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0) p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt),后者就是我们的降噪网络,我们的目标是让我们的降噪网络和 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的分布尽量接近。
再进一步思考,实际上 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的意思就是给定初始图片, t → t − 1 t\to t-1 tt1这个逆过程的分布
而我们的网络是要生成一个降噪网络,这个优化目标告诉我们,需要在没有初始图片的情况下去拟合这个 t → t − 1 t\to t-1 tt1

非常的合理,只不过使用了严谨的数学公式去推导了这个过程罢了。
关于最后一项,说是和VAE类似的处理方法,先占个坑,不解释

优化过程

  • q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)是一个高斯分布,那我们让 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)也是高斯分布就行了。
  • q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的方差是确定的,那我们让 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)的方差和它一样就行了
  • 所以最后我们需要最小化的,就是两者的平均值。

继续化简
在这里插入图片描述
我们让两者形式一致,最后我们需要predict只剩下最后一小项
在这里插入图片描述
这就是Alog1,2的来源
这篇文章到这里就暂告一段落了,参考文献:
https://arxiv.org/pdf/2208.11970.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值