【论文阅读】Consistency Models

文章目录

  • Introduction
  • Diffusion Models
  • Consistency Models
    • Definition
    • Parameterization
    • Sampling
  • Training Consistency Models via Distillation
  • Training Consistency Models in Isolation
  • Experiment

Introduction

  • 相比于单步生成的模型(例如 GANs, VAEs, normalizing flows),扩散模型的迭代式生成过程需要 10 到 2000 步计算来采样,导致推理速度低,实时性应用受限.

  • 本文的目的是创造高效、单步的生成,同时不牺牲迭代采样的优势。在数据到噪声的 PF-ODE 轨迹上,学习轨迹上任意点到轨迹起点的映射,对这些映射的建模成为 consistency model.
    在这里插入图片描述

  • 两种训练 consistency model的方法

    1. 使用 numerical ODE solver 和预训练的扩散模型在 PF-ODE 轨迹上生成若干相邻点对,通过最小化模型输出点对间的距离(相似度),蒸馏出 consistency model.
    2. 不依赖预训练扩散模型,独立训练一个 consistency model.
  • 在一些数据集上测试.

Diffusion Models

使用 p d a t a ( x ) p_{data}(\mathrm{x}) pdata(x)表示数据分布,扩散模型使用如下随机微分公式对服从原分布的数据进行扩散:

d x t = μ ( , x t , t ) + σ ( t ) d w t \large \mathrm{dx}_t = \mu(\mathrm,{x}_t, t) + \sigma(t)\mathrm{dw}_t dxt=μ(,xt,t)+σ(t)dwt

其中 t t t为时间步,范围是 0 0 0 T T T μ ( ⋅ , ⋅ ) \mu(·,·) μ(⋅,⋅) σ ( ⋅ ) \sigma(·) σ()分别是布朗运动中的漂移系数和扩散系数, x t \mathbf{x}_t xt服从分布 p t ( x ) p_{t}(\mathrm{x}) pt(x) x 0 \mathrm{x}_0 x0服从分布 p d a t a ( x ) p_{data}(\mathrm{x}) pdata(x). 该方程的一个重要属性是,其存在一个 PF-ODE 方程:

d x t = [ μ ( x t , t ) − 1 2 σ ( t ) 2 ∇ log ⁡ p t ( x t ) ] d t \large\mathrm{dx}_t = \left[ \mu(\mathrm{x}_t, t)-\frac{1}{2}\sigma(t)^2 \nabla\log{p_t(\mathrm{x}_t)} \right]\mathrm{d}t dxt=[μ(xt,t)21σ(t)2logpt(xt)]dt

其中 ∇ log ⁡ p t ( x ) \nabla\log{p_t(\mathrm{x})} logpt(x) p t ( x ) p_t(\mathrm{x}) pt(x)的 score function.
在 SDE 中,令漂移系数 μ ( x , t ) = 0 \mu(\mathrm{x}, t) = 0 μ(x,t)=0, 扩散系数 σ ( t ) = 2 t \sigma(t) = \sqrt{2t} σ(t)=2t . 使用得分匹配的方式训练模型 s ϕ ( x , t ) ≈ ∇ log ⁡ p t ( x ) s_{\phi}(\mathrm{x},t) \approx \nabla\log{p_t(\mathrm{x})} sϕ(x,t)logpt(x),代入 PF-ODE 方程,得到 empirical PF-ODE:

d x t d t = − t s ϕ ( x t , t ) \large \frac{\mathrm{dx}_t}{\mathrm{d}t}=-ts_{\phi}(\mathrm{x}_t,t) dtdxt=tsϕ(xt,t

采样时,使用 x ^ T ∼ N ( 0 , T 2 I ) \hat{\mathrm{x}}_T\sim\mathcal{N}(0, T^2I) x^TN(0,T2I)初始化,再使用 numerical ODE solver(例如 Euler, Heun)按时间步倒推出 x ^ 0 \hat{x}_0 x^0. 为了防止数值不稳定,会在 t = ϵ t=\epsilon t=ϵ是提前终止, ϵ \epsilon ϵ为一个正小数,同时将 x ^ ϵ \hat{\mathrm{x}}_{\epsilon} x^ϵ作为结果.

扩散模型的瓶颈在于采样速度慢, ODE solver 利用得分模型 s ϕ ( x , t ) s_{\phi}(\mathrm{x},t) sϕ(x,t)迭代求解,消耗算力多. 目前存在一些更快的 ODE solver,但是仍然需要大于 10 10 10 步的采样. 也存在一些蒸馏方法,但是大多数方法需要从扩散模型中采集巨大的数据集,同样消耗算力多.

Consistency Models

Definition

根据 PF-ODE 得到一条解路径 { x t } t ∈ [ ϵ , T ] \{\mathrm{x}_t\}_{t\in[\epsilon, T]} {xt}t[ϵ,T],将 consistency function 定义为:

f : ( x t , t ) ↦ x ϵ \large f:(\mathrm{x}_t, t) \mapsto \mathrm{x}_{\epsilon} f:(xt,t)xϵ

对于该路径上的任意点 ( x t , t ) (\mathrm{x}_t, t) (xt,t),其输出是一致的. 对于任意的 t , t ′ ∈ [ ϵ , T ] t, t' \in [\epsilon, T] t,t[ϵ,T],有 f ( x t , t ) = f ( x t ′ , t ′ ) f(\mathrm{x}_t, t) =f(\mathrm{x}_{t'}, t') f(xt,t)=f(xt,t)恒成立.
在这里插入图片描述

Parameterization

F θ ( x , t ) F_{\theta}(\mathrm{x}, t) Fθ(x,t)表示任意形式的神经网络,使用 sikp connection 可以将模型表示为:

f θ ( x , t ) = c s k i p ( t ) x + c o u t ( t ) F θ ( x , t ) \large f_{\theta}(\mathrm{x}, t)=c_{skip}(t)\mathrm{x}+c_{out}(t)F_{\theta}(\mathrm{x},t) fθ(x,t)=cskip(t)x+cout(t)Fθ(x,t)

其中边界条件为 c s k i p ( ϵ ) = 1 c_{skip}(\epsilon)=1 cskip(ϵ)=1 c o u t ( ϵ ) = 0 c_{out}(\epsilon)=0 cout(ϵ)=0.
具体为:

c s k i p ( t ) = σ d a t a 2 ( t − ϵ ) 2 + σ d a t a 2 \large c_{skip}(t)=\frac{\sigma_{data}^2}{(t-\epsilon)^2+\sigma_{data}^2} cskip(t)=(tϵ)2+σdata2σdata2

c o u t ( t ) = σ d a t a ( t − ϵ ) σ d a t a 2 + t 2 \large c_{out}(t)=\frac{\sigma_{data}(t-\epsilon)}{\sqrt{\sigma_{data}^2+t^2}} cout(t)=σdata2+t2 σdata(tϵ)

σ d a t a \sigma_{data} σdata取值 0.5 0.5 0.5.

Sampling

有了一个训练好的 consistency model f θ ( ⋅ , ⋅ ) f_{\theta}(·, ·) fθ(⋅,⋅)之后,从高斯噪声 N ( 0 , T 2 I ) \mathcal{N}(0, T^2I) N(0,T2I)采样 x ^ T \hat{\mathrm{x}}_T x^T,再代入模型一步推出 x ^ ϵ = f θ ( x T ^ , T ) \hat{\mathrm{x}}_{\epsilon}=f_{\theta}(\hat{\mathrm{x}_T}, T) x^ϵ=fθ(xT^,T).为了提高质量,也可以进行多步采样,算法如下:

在这里插入图片描述

Training Consistency Models via Distillation

作者的第一个方法是在预训练的得分模型 s ϕ ( x , t ) s_{\phi}(\mathrm{x},t) sϕ(x,t)上蒸馏.

首先考虑将 ϵ \epsilon ϵ T T T的时间离散化成 N − 1 N-1 N1 个间隔,也即 t 1 = ϵ < t 2 < t 3 < . . . < t N = T t_1=\epsilon<t_2<t_3<...<t_N=T t1=ϵ<t2<t3<...<tN=T. 在实践中,使用如下公式:

t i = ( ϵ 1 / ρ + i − 1 N − 1 ( T 1 / ρ − ϵ 1 / ρ ) ) ρ \large t_i=\left(\epsilon^{1/\rho} + \frac{i-1}{N-1}\left(T^{1/\rho}-\epsilon^{1/\rho}\right) \right)^{\rho} ti=(ϵ1/ρ+N1i1(T1/ρϵ1/ρ))ρ

其中 ρ = 7 \rho=7 ρ=7. 当 N N N充分大时,可以获得 x t n \mathrm{x}_{t_n} xtn x t n + 1 \mathrm{x}_{t_{n+1}} xtn+1的准确估计,于是 x ^ t n ϕ \hat{\mathrm{x}}_{t_n}^{\phi} x^tnϕ可以定义为:

x ^ t n ϕ = x t n + 1 + ( t n − t n + 1 ) Φ ( x t n + 1 , t n + 1 ; ϕ ) \large \hat{\mathrm{x}}_{t_n}^{\phi}=\mathrm{x}_{t_{n+1}} + (t_n-t_{n+1})\Phi(\mathrm{x}_{t_{n+1}}, t_{n+1};\phi) x^tnϕ=xtn+1+(tntn+1)Φ(xtn+1,tn+1;ϕ)

Φ ( . . . ; ϕ ) \Phi(...;\phi) Φ(...;ϕ)为 one-step ODE solver(比如Euler).

从数据集中采样 x \mathrm{x} x,通过 SDE 加噪 N ( x , t n + 1 2 I ) \mathcal{N}(\mathrm{x}, t_{n+1}^2I) N(x,tn+12I)得到 x t n + 1 \mathrm{x}_{t_{n+1}} xtn+1, 然后使用 ODE solver 求解出 x ^ t n ϕ \hat{\mathrm{x}}_{t_n}^{\phi} x^tnϕ,通过最小化在 x ^ t n ϕ \hat{\mathrm{x}}_{t_n}^{\phi} x^tnϕ x t n + 1 \mathrm{x}_{t_{n+1}} xtn+1计算结果的差距训练模型.

Definition 1
consistency distillation loss (CD)表示为:

L C D N ( θ , θ − ; ϕ ) = E [ λ ( t n ) d ( f θ ( x t n + 1 , t n + 1 ) , f θ − ( x ^ t n ϕ , t n ) ] \large \mathcal{L}_{CD}^{N}(\theta, \theta^-;\phi)=\mathbb{E}\left[\lambda(t_n)d(f_{\theta}(\mathrm{x}_{t_{n+1}},t_{n+1}),f_{\theta^-}(\hat{\mathrm{x}}_{t_n}^{\phi}, t_n) \right] LCDN(θ,θ;ϕ)=E[λ(tn)d(fθ(xtn+1,tn+1),fθ(x^tnϕ,tn)]

其中, λ ( ⋅ ) ∈ R + \lambda(·)\in\mathbb{R}^+ λ()R+是正权重函数, θ − \theta^- θ θ \theta θ在优化过程中历史值的均值. d ( ⋅ , ⋅ ) d(·,·) d(⋅,⋅)是一个度量函数,满足当且仅当两个输入相等时为 0 0 0,其余情况大于 0 0 0.

作者考虑 d ( ⋅ , ⋅ ) d(·,·) d(⋅,⋅) 使用 l 1 l_1 l1 以及 l 2 l_2 l2,在实验中 λ ( t n ) ≡ 1 \lambda(t_n) \equiv1 λ(tn)1表现较好. θ − \theta^- θ使用 EMA 更新,计算公式如下:

θ − ← s t o p g a r d ( μ θ − + ( 1 − μ ) θ ) \large \theta^- \leftarrow \mathrm{stopgard}(\mu\theta^-+(1-\mu)\theta) θstopgard(μθ+(1μ)θ)

其中 0 ≤ μ < 1 0\le\mu<1 0μ<1. 使用 EMA 可以使训练更稳定,同时能提高模型的表现.
模型训练算法如下:
在这里插入图片描述

Training Consistency Models in Isolation

consistency model 可以不依赖预训练扩散模型训练,使用如下无偏估计替换 ∇ log ⁡ p t ( x ) \nabla\log{p_t(\mathrm{x})} logpt(x)

∇ log ⁡ p t ( x ) = − E [ x t − x t 2 ∣ x t ] \large \nabla\log{p_t(\mathrm{x})}=-\mathbb{E}\left[\left.\frac{\mathrm{x}_t-\mathrm{x}}{t^2}\right|\mathrm{x}_t \right] logpt(x)=E[t2xtx xt]

consistency training loss (CT)表示为:

L C D N ( θ , θ − ) = E [ λ ( t n ) d ( f θ ( x + t n + 1 z , t n + 1 ) , f θ − ( x + t n z , t n ) ] \large \mathcal{L}_{CD}^{N}(\theta, \theta^-)=\mathbb{E}\left[\lambda(t_n)d(f_{\theta}(\mathrm{x}+t_{n+1}\mathrm{z},t_{n+1}),f_{\theta^-}(\mathrm{x}+t_{n}\mathrm{z},t_{n}) \right] LCDN(θ,θ)=E[λ(tn)d(fθ(x+tn+1z,tn+1),fθ(x+tnz,tn)]

其中 z ∼ N ( 0 , I ) \mathrm{z}\sim\mathcal{N}(0,I) zN(0,I). 损失函数的计算依赖于 f θ f_{\theta} fθ f θ − f_{\theta^-} fθ,且与扩散模型的无关.

为了提升模型效果,使用 schedule function N ( ⋅ ) N(·) N()控制 N N N 增长. 直觉上,当 N N N 小的时候,使用 consistency distillation loss 模型在一开始收敛更快,同时方差小、偏差大. 反之,在训练结束时,应当使 N N N 大,这样方差大、偏差小。同时,使用 schedule function μ ( ⋅ ) \mu(·) μ()替换 μ \mu μ,让它随着 N N N 增长而变化.
N ( ⋅ ) N(·) N() μ ( ⋅ ) \mu(·) μ()具体为

N ( k ) = ⌈ k K ( ( s 1 + 1 ) 2 − s 0 2 ) + s 0 2 − 1 ⌉ + 1 \large N(k)= \left\lceil\sqrt{\frac{k}{K}((s_1+1)^2-s_0^2)+s_0^2}-1 \right\rceil+1 N(k)= Kk((s1+1)2s02)+s02 1 +1

μ ( k ) = exp ⁡ ( s 0 log ⁡ μ 0 N ( k ) ) \large \mu(k)=\exp\left(\frac{s_0\log{\mu_0}}{N(k)}\right) μ(k)=exp(N(k)s0logμ0)

K K K表示整体训练步数, s 0 s_0 s0表示开始的离散化步数.

训练算法如下:
在这里插入图片描述

Experiment

关于 CD ,作者分别使用 l 1 l_1 l1, l 2 l_2 l2, L P I P S \mathrm{LPIPS} LPIPS作为度量函数,使用一阶Euler和二阶Heun座位 ODE solver, N N N { 9 , 12 , 18 , 36 , 50 , 60 , 80 , 120 } \{9,12,18,36,50,60,80,120\} {9,12,18,36,50,60,80,120},使用相应的预训练扩散模型做初始化. 使用 CT 训练的模型则随机初始化.
在这里插入图片描述

(a) 对比不同的度量函数在 CD 上的表现,其中 LPIPS 的效果最好.
(b, c) 对不不同 ODE solver 和 N N NCD 上的表现,使用 Heun 且 N N N 18 18 18时效果最好.在取相同的 N N N时,二阶Heun的表现优于一阶Euler,因为高阶的 ODE solver 的估计误差更小. 当 N N N充分大时,模型对 N N N变得不敏感.
(d) 根据之前的结论,关于 CT 的实验使用 LPIPS 作为度量函数. 更小的 N N N收敛更快,但是采样结构更差;使用自适应的 N ( ⋅ ) N(·) N() μ ( ⋅ ) \mu(·) μ()效果最好.

对比 CDprogressive disillation(PD) 在不同数据集上的效果,CD 的表现普遍比 PD 好.
在这里插入图片描述

对比 CT 和其它生成模型,仅使用一步或两步生成.
在这里插入图片描述

Zero-Shot Image Editing

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

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

相关文章

推荐几个Github高星GoLang管理系统

在Web开发领域&#xff0c;Go语言&#xff08;Golang&#xff09;以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统&#xff0c;这些项目星星众多&#xff0c;提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

学会这个昼夜系统,你也能做出一款饥荒生存类游戏DEMO!

学会这个昼夜系统&#xff0c;你也能做出一款饥荒生存类游戏DEMO&#xff01; 《饥荒》作为生存类游戏的老大哥&#xff0c;深受大家喜爱&#xff0c;这款游戏于2012年年底正式公测上线&#xff0c;距今已有10年的时间&#xff0c;从最初的单机版慢慢推出了联机版&#xff0c;…

Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级RTSP服务

技术背景 我们在对接Unity下推送模块的时候&#xff0c;遇到这样的技术诉求&#xff0c;开发者希望在Android的Unity场景下&#xff0c;获取到前后摄像头的数据&#xff0c;并投递到RTMP服务器&#xff0c;实现低延迟的数据采集处理。 在此之前&#xff0c;我们已经有了非常成…

大模型学习之书生·浦语大模型5——基于LMDeploy大模型量化部署实践

目录 大模型部署背景 LMDeploy部署 量化 TurboMind API server 动手实践环节

LCR 173. 点名(二分)

一、题目描述 LCR 173. 点名 某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席&#xff0c;请返回他的学号。 示例 1: 输入: records [0,1,2,3,5] 输出: 4示例 2: 输入: records [0, 1, 2, 3, 4, 5, 6, 8] 输出: 7 二、题目解析…

flink1.14.5使用CDH6.3.2的yarn提交作业

使用CDH6.3.2安装了hadoop集群&#xff0c;但是CDH不支持flink的安装&#xff0c;网上有CDH集成flink的文章&#xff0c;大都比较麻烦&#xff1b;但其实我们只需要把flink的作业提交到yarn集群即可&#xff0c;接下来以CDH yarn为基础&#xff0c;flink on yarn模式的配置步骤…

Resemble Enhance音频失真损坏修复AI工具:一个开源语音超分辨率AI模型

Resemble Enhance是一款强大的音频处理工具&#xff0c;可以将嘈杂的录音转化为清晰而有力的声音&#xff0c;为用户提供更优质的听觉体验。这个工具不仅可以有效去除录音中的各种噪声和杂音&#xff0c;还能够恢复音频失真并扩展音频带宽&#xff0c;使原本的声音听起来更加清…

高级分布式系统-第10讲 分布式控制系统

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 自动化是关于一切人造系统自动、智能、自主、高效和安全运行的科学与技术 计算机控制技术是实现自动化的主要方法和手段 分布式控制技术是伴随着机器大工业生产而诞生的特殊计算机控制技术 计算机控制系统 …

Qt/QML编程之路:使用camera摄像头(35)

汽车应用中,camera起到了越来越多的作用,数字化的作用,这点无可争议,而作为GUI设计工具,如何让Camera类的应用能更好的发挥作用呢? You can use Camera to capture images and movies from a camera, and manipulate the capture and processing settings that get appl…

网站防御爬虫攻击有哪些方式

很多网站都深受爬虫困扰&#xff0c;网站在被爬虫大量抓取的的时候经常容易被爬虫把服务器资源抓崩了&#xff0c;有的时候&#xff0c;同行也会来爬取我们网站进行数据采集&#xff0c;影响我们站点的原创性&#xff0c;那么如何进行相对应的防护还是非常重要的&#xff01; …

mysql新增用户密码控制局域网访问权限

方法一、通过navicat中sql语句新增 CREATE USER usernamelocalhost IDENTIFIED BY password; GRANT ALL PRIVILEGES ON *.* TO usernamelocalhost WITH GRANT OPTION; FLUSH PRIVILEGES;把其中的username和password改成自己的即可 如果将上面的localhost改成%&#xff0c;则这…

从CISC到RISC-V:揭开指令集的面纱

对于大多数同学来说&#xff0c;计算机或智能手机的运行似乎就像魔法一样神奇。你可能知道它们内部都是一些复杂的电子组件&#xff0c;比如CPU、内存等等&#xff0c;但这些组件是如何协同工作&#xff0c;让我们可以在电脑上打字&#xff0c;或者在手机上看视频呢&#xff1f…

1.环境部署

1.虚拟机安装redhat8系统 这个其实很简单&#xff0c;但是有一点小细节需要注意。 因为我的电脑是 16核心的&#xff0c;所以选择内核16&#xff0c;可以最大发挥虚拟机的性能 磁盘选择SATA&#xff0c;便于后期学习 将一些没用的设备移除 选择安装redhat 8 时间选择上海 选择…

无法解析的外部符号ShellExecuteExW

问题情况 在QT使用&#xff1a;ShellExecuteEx时遇上这么一个错误&#xff1a;遇上这么一个错误&#xff1a; error: LNK2019: 无法解析的外部符号 __imp_ShellExecuteExW *ReportService.obj&#x1f44e; error: LNK2019: 无法解析的外部符号 __imp_ShellExecuteExW&#x…

RocketMQ源码阅读-Producer消息发送

RocketMQ源码阅读-Producer消息发送 1. 从单元测试入手2. 启动过程3. 同步消息发送过程4. 异步消息发送过程5. 小结 Producer是消息的生产者。 Producer和Consummer对Rocket来说都是Client&#xff0c;Server是Broker。 客户端在源码中是一个单独的Model&#xff0c;目录为rock…

ASP.NET Core 的 Web Api 实现限流 中间件

Microsoft.AspNetCore.RateLimiting 中间件提供速率限制&#xff08;限流&#xff09;中间件。 它是.NET 7 以上版本才支持的中间件&#xff0c;刚看了一下&#xff0c;确实挺好用&#xff0c;下面给大家简单介绍一下&#xff1a; RateLimiterOptionsExtensions 类提供下列用…

收支明细曲线图:一图掌握你的财务变化趋势!

想要快速了解你的收支明细和变化趋势吗&#xff1f;不需要复杂的财务表格&#xff0c;一个曲线图就能让你一目了然&#xff01;现在&#xff0c;就让我们带你走进「图形化分析收支变化趋势」的世界&#xff0c;让你轻松掌握自己的财务状况。 首先&#xff0c;第一步&#xff0…

超结MOS在舞台灯电源上的应用-REASUNOS瑞森半导体

一、前言 舞台灯电源是一种为舞台灯具提供电力转换和控制的设备&#xff0c;它可以根据不同的灯具类型和需求&#xff0c;提供恒流或恒压、可调光或不可调光、模拟或数字或网络等输出模式。 舞台灯电源的主要特点是具有高效、稳定、安全、智能等功能&#xff0c;它可以适应不…

一台电脑如何通过另一台联网电脑访问网络

电脑A没有连接网络&#xff0c;电脑B已经连接wifi。 电脑A如何通过访问电脑B从而连接网络&#xff1f; 1. 将这2台电脑用网线直连 2. 电脑B打开【网络和Internet设置】 3. 右键点击WLAN&#xff0c;选择属性&#xff0c;进入共享tab页面&#xff0c;勾选【允许其他网络用户通过…

Kafka集群与可靠性

Kafka集群与可靠性 1.Kafka集群搭建实战 使用两台Linux服务器&#xff1a;一台192.168.182.137 一台192.168.182.138 安装kafka首先&#xff0c;我们需要配置java环境变量&#xff08;这里就略过了&#xff09; mkdir /opt/kafka #上传压缩包kafka_2.13-3.3.1.tgz并解压 ta…