深度学习(生成式模型)——Classifier Free Guidance Diffusion

文章目录

前言

在上一节中,我们总结了Classifier Guidance Diffusion,其有两个弊端,一是需要额外训练一个分类头,引入了额外的训练开销。二是要噪声图像通常难以分类,分类头通常难以学习,影响生成图像的质量。

Classifier Free Guidance Diffusion解决了上述两个弊端,不需要引入额外的分类头即可控制图像的生成。

本节所有符号含义与前文一致,请读者阅读完前三篇博文后在查阅此文。

本文仅总结backbone为DDIM情况下的Classifier Free Guidance Diffusion

推导流程

依据前文可知Classifier Guidance Diffusion的前向过程与反向过程与DDPM一致,且有
q ( x t ∣ x t − 1 , y ) = q ( x t ∣ x t − 1 ) q(x_t|x_{t-1},y)=q(x_t|x_{t-1}) q(xt∣xt−1,y)=q(xt∣xt−1)

则有 q ( x t ∣ x 0 , y ) = q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t|x_{0},y)=q(x_t|x_0)=\mathcal N(x_t;\sqrt{\bar \alpha_t}x_0,(1-\bar\alpha_t)\mathcal I) q(xt∣x0,y)=q(xt∣x0)=N(xt;αˉt x0,(1−αˉt)I)

假设目前有一批基于条件 y y y的样本 x t x_t xt, ϵ ( x t , t , y ) \epsilon(x_t,t,y) ϵ(xt,t,y)服从标准正态分布,则样本 x t x_t xt将满足
x t = α ˉ t x 0 + 1 − α ˉ t ϵ ( x t , t , y ) (1.0) x_t=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon(x_t,t,y)\tag{1.0} xt=αˉt x0+1−αˉt ϵ(xt,t,y)(1.0)

依据Tweedie方法,我们有

α ˉ t x 0 = x t + ( 1 − α ˉ t ) ∇ x t log ⁡ p ( x t ∣ y ) \begin{aligned} \sqrt{\bar \alpha_t}x_0=x_t+(1-\bar\alpha_t)\nabla_{x_t}\log p(x_t|y) \end{aligned} αˉt x0=xt+(1−αˉt)∇xtlogp(xt∣y)

进而有
x t = α ˉ t x 0 − ( 1 − α ˉ t ) ∇ x t log ⁡ p ( x t ∣ y ) (1.1) x_t=\sqrt{\bar \alpha_t}x_0-(1-\bar\alpha_t)\nabla_{x_t}\log p(x_t|y)\tag{1.1} xt=αˉt x0−(1−αˉt)∇xtlogp(xt∣y)(1.1)

结合式1.0与1.1,则有

∇ x t log ⁡ p ( x t ∣ y ) = − 1 1 − α ˉ t ϵ ( x t , t , y ) (1.2) \nabla_{x_t}\log p(x_t|y)=-\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t,y)\tag{1.2} ∇xtlogp(xt∣y)=−1−αˉt 1ϵ(xt,t,y)(1.2)

依据贝叶斯公式,我们有
log ⁡ p ( x t ∣ y ) = log ⁡ p ( y ∣ x t ) + log ⁡ p ( x t ) − log ⁡ p ( y ) ∇ x t log ⁡ p ( y ∣ x t ) = ∇ x t log ⁡ p ( x t ∣ y ) − ∇ x t log ⁡ p ( x t ) + ∇ x t log ⁡ p ( y ) = ∇ x t log ⁡ p ( x t ∣ y ) − ∇ x t log ⁡ p ( x t ) = − 1 1 − α ˉ t ϵ ( x t , t , y ) + 1 1 − α ˉ t ϵ ( x t , t ) (1.3) \begin{aligned} \log p(x_t|y)&=\log p(y|x_t)+\log p(x_t)-\log p(y)\\ \nabla_{x_t}\log p(y|x_t)&=\nabla_{x_t}\log p(x_t|y)-\nabla_{x_t}\log p(x_t)+\nabla_{x_t}\log p(y)\\ &=\nabla_{x_t}\log p(x_t|y)-\nabla_{x_t}\log p(x_t)\\ &=-\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t,y)+\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t) \end{aligned}\tag{1.3} logp(xt∣y)∇xtlogp(y∣xt)=logp(y∣xt)+logp(xt)−logp(y)=∇xtlogp(xt∣y)−∇xtlogp(xt)+∇xtlogp(y)=∇xtlogp(xt∣y)−∇xtlogp(xt)=−1−αˉt 1ϵ(xt,t,y)+1−αˉt 1ϵ(xt,t)(1.3)

回顾一下backbone为DDIM的Classifier Guidance Diffusion的采样流程

将式1.3代入,且引入一个超参数 w w w,可得
ϵ ^ = ϵ θ ( x t ) − w 1 − α ˉ t ∇ x t log ⁡ p ( y ∣ x t ) = ϵ θ ( x t ) − w ( ϵ θ ( x t , t ) − ϵ θ ( x t , t , y ) ) = ( 1 − w ) ϵ θ ( x t , t ) + w ϵ θ ( x t , t , y ) (1.4) \begin{aligned} \hat \epsilon &= \epsilon_\theta(x_t)-w\sqrt{1-\bar\alpha_t}\nabla_{x_t}\log p(y|x_t)\\ &=\epsilon_\theta(x_t)-w(\epsilon_\theta(x_t,t)-\epsilon_\theta(x_t,t,y))\\ &=(1-w)\epsilon_\theta(x_t,t)+w\epsilon_\theta(x_t,t,y) \end{aligned}\tag{1.4} ϵ^=ϵθ(xt)−w1−αˉt ∇xtlogp(y∣xt)=ϵθ(xt)−w(ϵθ(xt,t)−ϵθ(xt,t,y))=(1−w)ϵθ(xt,t)+wϵθ(xt,t,y)(1.4)

注意到原论文的推导结果为(为了区分,超参数设为 w ^ \hat w w^)

ϵ ^ = ( 1 + w ^ ) ϵ θ ( x t , t , y ) − w ^ ϵ θ ( x t , t ) (1.5) \hat \epsilon = (1+\hat w)\epsilon_\theta(x_t,t,y)-\hat w\epsilon_\theta(x_t,t)\tag{1.5} ϵ^=(1+w^)ϵθ(xt,t,y)−w^ϵθ(xt,t)(1.5)

式1.5和1.4是一致的,均为 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)与 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)的加权和,且权重和为1。

训练流程

依据式1.5,我们需要训练两个神经网络 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)与 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t),前者为的输入包含加噪图片 x t x_t xt以及条件 y y y(图像or文字),后者的输入仅包含加噪图像 x t x_t xt。但其实两个神经网络可以共用一个backbone,在训练时,只需要用一定的概率将条件 y y y设置为空即可。

测试流程

Classifier Free Guidance Diffusion的测试流程有两次推断

  • 将条件 y y y空置,得到 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)
  • 输入条件 y y y,得到 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)
  • 利用公式1.5,生成基于条件 y y y的图像

可以看到推断成本多了一倍。

相关推荐
春末的南方城市20 分钟前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
zmjia11121 分钟前
AI大语言模型进阶应用及模型优化、本地化部署、从0-1搭建、智能体构建技术
人工智能·语言模型·自然语言处理
jndingxin35 分钟前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频
AI完全体1 小时前
【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)
人工智能·深度学习·神经网络·机器学习·过拟合·模型复杂度·偏差-方差
GZ_TOGOGO1 小时前
【2024最新】华为HCIE认证考试流程
大数据·人工智能·网络协议·网络安全·华为
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
新缸中之脑1 小时前
Ollama 运行视觉语言模型LLaVA
人工智能·语言模型·自然语言处理
卷心菜小温2 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
胡耀超2 小时前
知识图谱入门——3:工具分类与对比(知识建模工具:Protégé、 知识抽取工具:DeepDive、知识存储工具:Neo4j)
人工智能·知识图谱
陈苏同学2 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm