采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程

news2025/2/28 20:53:04
参考

https://arxiv.org/pdf/2010.02502
在这里插入图片描述


一、背景与动机

去噪扩散隐式模型(DDIM) 是对DDPM的改进,旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异,但其采样需迭代数百至数千次,效率较低。DDIM通过以下关键创新解决该问题:

  • 非马尔可夫反向过程:打破严格的马尔可夫链假设,允许跳步采样。
  • 确定性生成路径:通过设定参数σ=0,实现确定性采样,减少随机性带来的不确定性。
  • 兼容性:使用与DDPM相同的训练模型,无需重新训练。

二、DDIM与DDPM的核心区别
特性DDPMDDIM
反向过程严格马尔可夫链非马尔可夫,允许跳跃式采样
采样速度慢(需完整迭代所有时间步)快(可跳过中间步,如50步代替1000步)
随机性控制固定方差调度(βₜ)可调参数σₜ(σ=0时为确定性采样)
训练目标需完整训练噪声预测模型直接复用DDPM的预训练模型

三、数学推导与关键公式
1. 前向过程的一致性

DDIM沿用DDPM的前向扩散过程定义,任意时刻( x_t )可表示为:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I}) xt=αˉt x0+1αˉt ϵ,ϵN(0,I)
其中 α ˉ t = ∏ i = 1 t α i \bar{\alpha}_t = \prod_{i=1}^t \alpha_i αˉt=i=1tαi, α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt

2. 反向过程的重新参数化

DDIM将反向过程定义为非马尔可夫链,允许从任意时间步( t )直接推断( x_{t-Δ} )(Δ为跳跃步长)。其核心公式为:
x t − Δ = α ˉ t − Δ ( x t − 1 − α ˉ t ϵ θ ( x t , t ) α ˉ t ) ⏟ 预测的  x 0 + 1 − α ˉ t − Δ − σ t 2 ⋅ ϵ θ ( x t , t ) + σ t z x_{t-Δ} = \sqrt{\bar{\alpha}_{t-Δ}} \underbrace{\left( \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right)}_{\text{预测的 } x_0} + \sqrt{1 - \bar{\alpha}_{t-Δ} - \sigma_t^2} \cdot \epsilon_\theta(x_t, t) + \sigma_t z xtΔ=αˉtΔ 预测的 x0 (αˉt xt1αˉt ϵθ(xt,t))+1αˉtΔσt2 ϵθ(xt,t)+σtz

  • 第一项:基于当前 x t x_t xt和预测噪声 ϵ θ \epsilon_\theta ϵθ估计的原始数据 x 0 x_0 x0
  • 第二项:沿预测噪声方向的确定性更新。
  • 第三项:可控的随机噪声项, z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, \mathbf{I}) zN(0,I)
3. 参数σₜ的作用
  • σₜ=0:完全确定性采样(DDIM的标准设定),生成结果唯一。
  • σₜ=√[(1−αₜ₋₁)/(1−αₜ)] · √(1−αₜ/αₜ₋₁):恢复DDPM的采样过程。

四、DDIM采样算法步骤
  1. 输入

    • 预训练噪声预测模型 ϵ θ \epsilon_\theta ϵθ
    • 总时间步 T T T,子序列步数 S S S(如 S = 50 S=50 S=50
    • 方差调度参数 { α t } \{\alpha_t\} {αt}
    • 随机性控制参数 σ t \sigma_t σt
  2. 生成时间步子序列
    选择递减的子序列 { τ 1 , τ 2 , . . . , τ S } \{\tau_1, \tau_2, ..., \tau_S\} {τ1,τ2,...,τS},例如均匀间隔或余弦调度。

  3. 初始化:采样初始噪声 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \mathbf{I}) xTN(0,I)

  4. 迭代去噪(从 τ S \tau_S τS τ 1 \tau_1 τ1):

    • 预测噪声 ϵ = ϵ θ ( x τ s , τ s ) \epsilon = \epsilon_\theta(x_{\tau_s}, \tau_s) ϵ=ϵθ(xτs,τs)
    • 估计原始数据
      x ^ 0 = x τ s − 1 − α ˉ τ s ϵ α ˉ τ s \hat{x}_0 = \frac{x_{\tau_s} - \sqrt{1 - \bar{\alpha}_{\tau_s}} \epsilon}{\sqrt{\bar{\alpha}_{\tau_s}}} x^0=αˉτs xτs1αˉτs ϵ
    • 计算下一步状态
      x τ s − 1 = α ˉ τ s − 1 x ^ 0 + 1 − α ˉ τ s − 1 − σ τ s 2 ⋅ ϵ + σ τ s z x_{\tau_{s-1}} = \sqrt{\bar{\alpha}_{\tau_{s-1}}} \hat{x}_0 + \sqrt{1 - \bar{\alpha}_{\tau_{s-1}} - \sigma_{\tau_s}^2} \cdot \epsilon + \sigma_{\tau_s} z xτs1=αˉτs1 x^0+1αˉτs1στs2 ϵ+στsz
      • σ τ s = 0 \sigma_{\tau_s}=0 στs=0时,最后一项消失,变为确定性更新。
  5. 输出 x 0 x_0 x0为生成的数据。


五、伪代码示例
def ddim_sample(model, T, S, alphas_bar, sigmas):
    # 生成时间步子序列(如从T到0每隔k步取一次)
    tau = np.linspace(T, 0, S+1, dtype=int)  # 示例:线性间隔
    
    x = torch.randn_like(data)  # x_T ~ N(0, I)
    for s in range(S, 0, -1):
        t_current = tau[s]
        t_prev = tau[s-1]
        
        # 预测噪声
        epsilon = model(x, t_current)
        
        # 估计x0
        x0_hat = (x - np.sqrt(1 - alphas_bar[t_current]) * epsilon) / np.sqrt(alphas_bar[t_current])
        
        # 计算系数
        coeff1 = np.sqrt(alphas_bar[t_prev])
        coeff2 = np.sqrt(1 - alphas_bar[t_prev] - sigmas[t_current]**2)
        
        # 更新x
        x = coeff1 * x0_hat + coeff2 * epsilon + sigmas[t_current] * torch.randn_like(x)
        
    return x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各种类型网络安全竞赛有哪些 网络安全大赛的简称

本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF(capture the flag)是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会,替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993,…

包子凑数——蓝桥杯真题Python

包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括:1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来,所以有无限多个 运行限制 最大运行时间:1s最大运行内存: 256M 最大公约数 最大公…

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…

MySQL--》如何在MySQL中打造高效优化索引

目录 初识索引 索引结构 性能分析 索引使用 最左前缀法则 SQL提示使用 覆盖索引使用 前缀索引使用 索引失效情况 初识索引 索引(index):是帮助MySQL高效获取数据的数据结构(有序),在数据之外数据库系统还维护着满足特定查找算法的数据结构&…

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…

网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术

文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN(Virtual Local Area Network,虚拟局域网)技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …

DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data

项目地址: https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天 (4/5)! ​ ​ 一、背景概述 …

树莓百度百科更新!宜宾园区业务再添新篇

树莓集团宜宾园区业务不断拓展,主要体现在以下几个方面: 产业布局 -聚焦数字经济核心领域:涵盖软件开发、人工智能、大数据等,吸引众多上下游企业入驻,形成从芯片研发、软件开发到系统集成的完整产业链条。 -推进“双…

RabbitMQ操作实战

1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…

OpenWebUI配置异常的外部模型导致页面无法打开

一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置,且默认是打开的,默认情况下,启动后,会不断的去连https://api.openai.com/v1,但是无法连上,会报错,但是不会影响页面,能正常…

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了,很多之前的移动端地图应用,纷纷都要求适配鸿蒙Next。作为开发者都清楚,所谓的适配其实都是重新开发,鸿蒙的开发语言和纯前端的Javascript不同,也可以Android原始开发的语言不同。鸿蒙自带的…

java练习(45)

ps:题目来自力扣 两数相除 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断…

部署Flink1.20.1

1、设置环境变量 export JAVA_HOME/cluster/jdk export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarp #export HIVE_HOME/cluster/hive export MYSQL_HOME/cluster/mysql export HADOOP_HOME/cluster/hadoop3 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop …

影视后期工具学习之PR

pr剪辑之旅 第一节课 入门基础知识 1.了解影视基础术语 2.PR面板&首选项设置 首选项需要设置的选项: 自动保存: 修剪: 媒体: 媒体缓存: 经典面板设置,可以根据个人喜好做出改变: 3.展示与准备工作 新建序列:1.横板序列 2.竖版序列:</

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射&#xff0c;F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的&#xff0c;但这个办法可以暂时解决问题&#xff0c;点完这个东西就隐藏了webpack&#xff0c;有懂的来讲讲。 又浪费一个小时…

XXE漏洞:原理、危害与修复方法详解

目录 一、XXE漏洞概述二、XXE漏洞原理三、XXE漏洞危害1. 任意文件读取2. 命令执行3. 拒绝服务攻击(DoS)4. SSRF攻击四、XXE漏洞修复方法1. 禁用外部实体JavaPythonPHP2. 输入验证和过滤3. 安全配置服务器4. 升级解析器版本五、总结一、XXE漏洞概述 XXE(XML External Entity…

DeepSeek-R1:通过强化学习激发大语言模型的推理能力

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列三DeepSeek大模型技术系列三》DeepSeek-…

Xcode如何高效的一键重命名某个关键字

1.选中某个需要修改的关键字&#xff1b; 2.右击&#xff0c;选择Refactor->Rename… 然后就会出现如下界面&#xff1a; 此时就可以一键重命名了。 还可以设置快捷键。 1.打开Settings 2.找到Key Bindings 3.搜索rename 4.出现三个&#xff0c;点击一个地方设置后其…

smolagents学习笔记系列(八)Examples - Master you knowledge base with agentic RAG

这篇文章锁定官网教程中 Examples 章节中的 Master you knowledge base with agentic RAG 文章&#xff0c;主要介绍了如何将 agent 和 RAG 结合使用。 官网链接&#xff1a;https://huggingface.co/docs/smolagents/v1.9.2/en/examples/rag&#xff1b; Agentic RAG 在之前的…

数据挖掘工程师的技术图谱和学习路径

数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…