扩散原理详解与实战

news/2024/7/24 9:24:54 标签: 人工智能, 机器学习, 扩散模型

学习一下扩散模型的数学原理。

前向扩散

q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q\left(\mathbf{x}_t \mid \mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_t ; \sqrt{\bar{\alpha}_t} \mathbf{x}_0,\left(1-\bar{\alpha}_t\right) \mathbf{I}\right) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)

其中, α t = 1 − β t \alpha_t = 1-\beta_t αt=1βt

  • 前向扩散过程没有可训练参数, β t \beta_t βt 是人工设置的超参
  • x 0 x_0 x0 可以直接推导得到 x T x_T xT,而无须一步步迭代

逆向扩散

formula

  • 逆向扩散过程一步步去噪,需要训练参数
  • x T x_T xT 不能一步推导到 x 0 x_0 x0,需要一步步迭代

损失函数

− log ⁡ p θ ( x 0 ) ≤ − log ⁡ p θ ( x 0 ) + D K L ( q ( x 1 : T ∣ x 0 ) ∥ p θ ( x 1 : T ∣ x 0 ) ) = − log ⁡ p θ ( x 0 ) + E x 1 : T ∼ q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 , T ) / p θ ( x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) + log ⁡ p θ ( x 0 ) ] = E q [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ]  Let  L V L B = E q ( x 0 : T ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] ≥ − E q ( x 0 ) log ⁡ p θ ( x 0 ) \begin{aligned} & -\log p_\theta\left(\mathbf{x}_0\right) \leq-\log p_\theta\left(\mathbf{x}_0\right)+D_{\mathrm{KL}}\left(q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right) \| p_\theta\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right)\right) \\ & =-\log p_\theta\left(\mathbf{x}_0\right)+\mathbb{E}_{\mathbf{x}_{1: T \sim} q\left(\mathbf{x}_{\left.1: T \mid \mathbf{x}_0\right)}\right.}\left[\log \frac{q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right)}{p_\theta\left(\mathbf{x}_{0, T}\right) / p_\theta\left(\mathbf{x}_0\right)}\right] \\ & =-\log p_\theta\left(\mathbf{x}_0\right)+\mathbb{E}_q\left[\log \frac{q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right)}{p_\theta\left(\mathbf{x}_{0: T}\right)}+\log p_\theta\left(\mathbf{x}_0\right)\right] \\ & =\mathbb{E}_q\left[\log \frac{q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right)}{p_\theta\left(\mathbf{x}_{0: T}\right)}\right] \\ & \text { Let } L_{\mathrm{VLB}}=\mathbb{E}_{q\left(\mathbf{x}_{0: T)}\right.}\left[\log \frac{q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_0\right)}{p_\theta\left(\mathbf{x}_{0: T}\right)}\right] \geq-\mathbb{E}_{q\left(\mathbf{x}_0\right)} \log p_\theta\left(\mathbf{x}_0\right) \\ & \end{aligned} logpθ(x0)logpθ(x0)+DKL(q(x1:Tx0)pθ(x1:Tx0))=logpθ(x0)+Ex1:Tq(x1:Tx0)[logpθ(x0,T)/pθ(x0)q(x1:Tx0)]=logpθ(x0)+Eq[logpθ(x0:T)q(x1:Tx0)+logpθ(x0)]=Eq[logpθ(x0:T)q(x1:Tx0)] Let LVLB=Eq(x0:T)[logpθ(x0:T)q(x1:Tx0)]Eq(x0)logpθ(x0)

最终化简得到的损失函数为:
L simple  ( θ ) : = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] L_{\text {simple }}(\theta):=\mathbb{E}_{t, \mathbf{x}_0, \epsilon}\left[\left\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{x}_0+\sqrt{1-\bar{\alpha}_t} \boldsymbol{\epsilon}, t\right)\right\|^2\right] Lsimple (θ):=Et,x0,ϵ[ ϵϵθ(αˉt x0+1αˉt ϵ,t) 2]
确实非常简洁。。。

  • 具体的推导可见:对数似然下界推导

模型训练与推理

train&infer

FAQ

  1. 为什么建模目标不是直接预测原始输入 x 0 x_0 x0

这个得看看原论文了。其实逆向扩散过程中模型预测的是噪音残差,跟ResNet思想一致。

  1. 前向可以 x 0 x_0 x0 可以直接推导得到 x T x_T xT,为什么后向不能 x T x_T xT 可以直接推导得到 x 0 x_0 x0

其实是可以的,但一步到位直接预测 x 0 x_0 x0,但生成的图片效果较差。还是需要马尔科夫过程一步步生成高质量的图片。


参考

  • The Illustrated Stable Diffusion
  • 54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
    • 上述视频的置顶评论,是up主有关视频疑问的详细讲解
    • 上述up主的代码实现

http://www.niftyadmin.cn/n/5034632.html

相关文章

后端配置(宝塔):SSH终端设置

一、打开SSH开关 在“安全”中找到SSH管理,按图打开对应按钮 二、复制秘钥 点击“查看密钥”,对密钥进行复制 三、添加服务器 在终端页面添加新的服务器 四、进行密钥连接 输入IP地址,进行root登录,私钥即在“安全”界面复制的…

docker容器里面的java进程内存泄露排查

同事反馈java进程的内存越来越大,设置的是2G,但是占用了8G的内存。 docker里面的java进程在宿主机器无法进入,需要先进入docker容器,然后再安排。 1、进入docker容器: docker exec -it docker_id /bin/bash 2、找到ja…

c语言基础知识+OS+数据结构

c语言: memory section: .bss .data .text C语言编译流程: pre-compiler: compiler: 检查语法问题 link: 将symbol转化为实际函数/变量地址,map file里面可以看到 预编译在做什么: (#define&#x…

使用Python 3脚本自动化Harbor镜像复制

介绍: 在容器化应用程序的世界中,Docker镜像是构建和部署的核心。许多组织使用Harbor作为他们的镜像仓库管理解决方案。但有时候,需要将镜像从一个Harbor仓库复制到另一个,这可能会是一个繁琐的任务。为了简化这个过程&#xff0…

22.2 JavaScript 常用操作

1. BOM操作 浏览器对象模型(BOM): 是JavaScript与浏览器交互的接口集合. 它提供了一组对象, 用于操作浏览器窗口, 历史记录, 文档等. BOM可以通过Javascript代码来访问和控制浏览器的功能和行为.BOM的核心对象是window对象, 它表示浏览器的窗口或框架. 通过window对象, 可以访…

Spring Boot 各版本的支持时间

1. Spring Boot 各版本的支持时间 Spring Boot 2.7 的版本,支持到2023-11-18,之后就要停止支持了。 按照官网的数据,3.0 的版本也是到2023年11月就停止支持了。如果要转到SpringBoot3,直接从3.1开始吧。到写这篇文章时&#xff…

Xcode14.3.1 真机调试iOS17的方法(无iOS17 DeviceSupport)

由于iOS17需要使用Xcode15 才能调试,而当前Xcode15都是beta,正式版还未出,那么要真机调试iOS17的方式一般有两种: 方法一: 一种是下载新的Xcode15 beta版 (但Xcode包一般比较大,好几个G&#…

工厂模式-(简单工厂模式)

首先看一下设计模式的六大原则 设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概…