diffusion model (七) diffusion model是一个zero-shot 分类器

Paper: Your Diffusion Model is Secretly a Zero-Shot Classifier

Website: diffusion-classifier.github.io/

文章目录

    • 相关阅读
    • 背景
    • 方法大意
      • diffusion model的背景知识
      • 如何将diffusion model应用到zero-shot classification
        • 如何求解
    • 实验
    • 参考文献

相关阅读

  • diffusion model(一)DDPM技术小结 (denoising diffusion probabilistic)
  • diffusion model(二)—— DDIM技术小结
  • diffusion model(三)—— classifier guided diffusion model
  • diffusion model(四)文生图diffusion model(classifier-free guided)
  • diffusion model(五)stable diffusion底层原理(latent diffusion model, LDM

背景

最近,出现了一系列大规模的文生图模型,它们极大地增强了我们通过文字生成图片的能力。这些模型可以根据各种提示生成逼真的图片,展现出惊人的综合创作能力。到目前为止,几乎所有的应用都只关注了模型的生成功能,但实际上,这些模型还能提供条件密度估计,这对于处理图像生成之外的任务也很有用。

本篇文章指出类似stable diffusion这样的大规模文本转图像模型所计算出的密度估计,可以被用来进行“零样本分类” (zero-shot classification),而不需要额外的训练。

方法大意

diffusion model的背景知识

从前面diffusions系列文章中我们知道,diffuison model的去噪过程是一个马尔可夫过程
p θ ( x 0 ) = ∫ p θ ( x 0 : T ) d x 1 : T 其中:  p θ ( x 0 : T ) : = p θ ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ t I ) (1) p_\theta(x_{0})= \int p_\theta(x_{0:T})dx_{1:T} \\ \text{其中:} \space p_\theta(x_{0:T}) := p_\theta(x_T)\prod_{t=1}^{T} p_\theta (x_{t-1}|x_t) \\ p_\theta (x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t) , \sigma_t \textbf{I}) \tag{1} pθ(x0)=pθ(x0:T)dx1:T其中: pθ(x0:T):=pθ(xT)t=1Tpθ(xt1xt)pθ(xt1xt)=N(xt1;μθ(xt,t),σtI)(1)
即:
p θ ( x 0 ) = ∫ p θ ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) d x 1 : T p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ t I ) (2) p_\theta(x_{0})= \int p_\theta(x_T)\prod_{t=1}^{T} p_\theta (x_{t-1}|x_t) dx_{1:T} \\ p_\theta (x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t) , \sigma_t \textbf{I}) \tag{2} pθ(x0)=pθ(xT)t=1Tpθ(xt1xt)dx1:Tpθ(xt1xt)=N(xt1;μθ(xt,t),σtI)(2)
p θ ( x T ) p_\theta(x_T) pθ(xT)服从正态分布 N ( x T ; 0 , I ) \mathcal{N}(x_T; 0, \mathrm{I}) N(xT;0,I), 其与 θ \theta θ无关,可记作 p ( x T ) p(x_T) p(xT)

当给定条件 c c c时,采样过程可以表述为
p θ ( x 0 ∣ c ) = ∫ p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , c ) d x 1 : T (3) p_\theta(x_{0} | c)= \int p(x_T)\prod_{t=1}^{T} p_\theta (x_{t-1}|x_t, c) dx_{1:T} \\ \tag{3} pθ(x0c)=p(xT)t=1Tpθ(xt1xt,c)dx1:T(3)

由于涉及到积分,直接最大化 p θ ( x 0 ∣ c ) p_\theta(x_0|c) pθ(x0c)很难求解,因此diffusion model的训练采用了最小化对数似然的证据下界(Evidence Lower Bound, ELBO)。通过推导得出:最大化 p θ ( x 0 ∣ c ) p_\theta(x_0|c) pθ(x0c)相当于优化下界【预测噪声和实际添加噪声差异的期望越小越好】。详细过程可参考文献[1]中的式32-45, 86-92
log ⁡ p θ ( x 0 ∣ c ) ≥ E q [ log ⁡ p θ ( x 0 : T ∣ c ) q ( x 1 : T ∣ x 0 ) ] = E q [ log ⁡ p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , c ) ∏ t = 1 T q ( x t ∣ x t − 1 ) ] = E q [ log ⁡ p ( x T ) p θ ( x 0 ∣ x 1 , c ) ∏ t = 2 T p θ ( x t − 1 ∣ x t , c ) q ( x T ∣ x T − 1 ) ∏ t = 1 T − 1 q ( x t ∣ x t − 1 ) ] ⋯ = − E ϵ [ ∑ t = 2 T w t ⏟ 当训练时以均匀分布采样时间步时 w t = 1 ∥ ϵ − ϵ θ ( x t , c ) ∥ 2 − log ⁡ p θ ( x 0 ∣ x 1 , c ) ⏟ 当T足够大时,该项 → 0 ] + C ⏟ 常数与c无关 ≈ 去除无关项 − E ϵ , t [ ∥ ϵ − ϵ θ ( x t , c ) ∥ 2 ] (4) \begin{aligned} \log p _ { \theta } ( x _ { 0 } \vert c ) &\ge \mathbb{E} _ { q } [ \log \frac { p _ { \theta } ( x _ { 0 : T } | c ) } { q ( x _ { 1 : T } \vert x _ { 0 } ) } ] \\ &= \mathbb{E} _ { q } [ \log \frac { p(x_T)\prod_{t=1}^{T} p_\theta (x_{t-1}|x_t, c)} { \prod _ { t = 1 } ^ { T } q ( x _ { t } \vert x _ { t - 1 } ) } ] \\ & = \mathbb{ E } _ { q } [ \log \frac { p ( x _ { T } ) p _ { \theta } ( x _ { 0 } \vert x _ { 1 } , c) \prod _ { t = 2 } ^ { T } p _ { \theta } ( x _ { t - 1 } \vert x _ { t } , c ) } { q ( x _ { T } \vert x _ { T - 1 } ) \prod _ { t = 1 } ^ { T - 1 } q ( x _ { t } \vert x _ { t - 1 } ) } ] \\ & \cdots \\ &= - \mathbb{E} _ { \epsilon } [ \sum _ { t = 2 } ^ { T } \underbrace{w _ { t }}_{\text{当训练时以均匀分布采样时间步时}w_t=1} \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c ) \Vert ^ { 2 } - \underbrace {\log p _ { \theta } ( x _ { 0 } \vert x _ { 1 } , c )}_{\text{当T足够大时,该项} \rightarrow 0} ] + \underbrace{C}_{\text{常数与c无关}} \\ & \stackrel{去除无关项} \approx - \mathbb{E} _ { \epsilon, t} \left[ \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c ) \Vert ^ { 2 } \right]\\ \end{aligned}\tag{4} logpθ(x0c)Eq[logq(x1:Tx0)pθ(x0:Tc)]=Eq[logt=1Tq(xtxt1)p(xT)t=1Tpθ(xt1xt,c)]=Eq[logq(xTxT1)t=1T1q(xtxt1)p(xT)pθ(x0x1,c)t=2Tpθ(xt1xt,c)]=Eϵ[t=2T当训练时以均匀分布采样时间步时wt=1 wtϵϵθ(xt,c)2T足够大时,该项0 logpθ(x0x1,c)]+常数与c无关 C去除无关项Eϵ,t[ϵϵθ(xt,c)2](4)

如何将diffusion model应用到zero-shot classification

在这里插入图片描述

对于一个分类模型,给定输入 x x x,模型输出类别的概率向量 c c c, 即 p θ ( c ∣ x ) p_\theta(c|x) pθ(cx),为了用diffusion model求解 p θ ( c ∣ x ) p_\theta(c|x) pθ(cx),需要用到贝叶斯公式
p θ ( c i ∣ x ) = p ( c i ) p θ ( x ∣ c i ) ∑ j p ( c j ) p θ ( x ∣ c j ) (5) p _ { \theta } ( c _ { i } \vert x ) = \frac { p ( c _ { i } ) \, p _ { \theta } ( x \vert c _ { i } ) } { \sum _ { j } p ( c _ { j } ) \, p _ { \theta } ( x \vert c _ { j } ) } \tag{5} pθ(cix)=jp(cj)pθ(xcj)p(ci)pθ(xci)(5)
不妨假设各个类别的先验概率相同,有 p ( c 1 ) = p ( c 2 ) = ⋯ = p ( c N ) = 1 N p(c_1)=p(c_2)=\cdots=p(c_N) = \frac{1}{N} p(c1)=p(c2)==p(cN)=N1

式5可写作
p θ ( c i ∣ x ) = p θ ( x ∣ c i ) ∑ j p θ ( x ∣ c j ) = exp ⁡ { log ⁡ ( p θ ( x ∣ c i ) ) } ∑ j exp ⁡ { log ⁡ ( p θ ( x ∣ c j ) ) } (6) \begin{aligned} p _ { \theta } ( c _ { i } \vert x ) &= \frac { p _ { \theta } ( x \vert c _ { i } ) } { \sum _ { j } \, p _ { \theta } ( x \vert c _ { j } ) } \\ & = \frac { \exp \{ \log {( p _ { \theta } ( x \vert c _ { i } ) } ) \} } { \sum _ { j } \, \exp \{ \log {( p _ { \theta } ( x \vert c _ { j } ))} \} } \end{aligned} \tag{6} pθ(cix)=jpθ(xcj)pθ(xci)=jexp{log(pθ(xcj))}exp{log(pθ(xci))}(6)
根据式4,我们知道 log ⁡ p θ ( x 0 ∣ c ) ≈ − E ϵ , t [ ∥ ϵ − ϵ θ ( x t , c ) ∥ 2 ] \log p _ { \theta } ( x _ { 0 } \vert c ) \approx - \mathbb{E} _ { \epsilon, t} \left[ \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c ) \Vert ^ { 2 } \right] logpθ(x0c)Eϵ,t[ϵϵθ(xt,c)2], 带入上式得
p θ ( c i ∣ x ) ≈ exp ⁡ { − E ϵ , t [ ∥ ϵ − ϵ θ ( x t , c i ) ∥ 2 ] } ∑ j exp ⁡ { − E ϵ , t [ ∥ ϵ − ϵ θ ( x t , c j ) ∥ 2 ] } (7) \begin{aligned} p _ { \theta } ( c _ { i } \vert x ) & \approx \frac { \exp \{ - \mathbb{E} _ { \epsilon, t} \left[ \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c_i ) \Vert ^ { 2 } \right]\} } { \sum _ { j } \, \exp \{ - \mathbb{E} _ { \epsilon, t} \left[ \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c_j ) \Vert ^ { 2 } \right] \} } \end{aligned} \tag{7} pθ(cix)jexp{Eϵ,t[ϵϵθ(xt,cj)2]}exp{Eϵ,t[ϵϵθ(xt,ci)2]}(7)
由此我们推导出了基于diffusion model的classifier。

如何求解

我们看到求式7的关键是不同类别下,预测的噪声和实际噪声差异的期望。这里面有两个随机变量,分别是 ϵ , t \epsilon, t ϵ,t,其中 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathrm{I}) ϵN(0,I), t ∼ u n i f o r m ( 0 , T ) t \sim \mathrm{uniform}(0, T) tuniform(0,T)。可以用蒙特卡诺采样对上述期望进行估计,假定依概率对上述两个随机变量采样 K K K次,得到 { ( ϵ i , t i ) ∣ i = 0 , 1 , ⋯ K } \{ (\epsilon_i, t_i)|i = 0, 1, \cdots K \} {(ϵi,ti)i=0,1,K},可将式7转化为
E ϵ , t [ ∥ ϵ − ϵ θ ( x t , c j ) ∥ 2 ] = 1 K ∑ i = 1 K ∥ ϵ i − ϵ θ ( x t i , c j ) ∥ 2 (8) \mathbb{E} _ { \epsilon, t} \left[ \Vert \epsilon - \epsilon _ { \theta } ( x _ { t } , c_j ) \Vert ^ { 2 } \right] = \frac { 1 } { K } \sum _ { i = 1 } ^ { K } \Vert \epsilon _ { i } - \epsilon _ { \theta } (x_{t_i}, c _ { j } ) \Vert ^ { 2 } \tag{8} Eϵ,t[ϵϵθ(xt,cj)2]=K1i=1Kϵiϵθ(xti,cj)2(8)
当我们求出每一个类别 j j j下的 p θ ( c j ∣ x ) p _ { \theta } ( c _ { j } \vert x ) pθ(cjx),值最大的就是预测出来的类别。

细心的同学发现了,为了准确的估计期望,需要用蒙特卡诺方法采样较多的样本,一个样本意味着需要用diffusion model推理一次得到预测的噪声,当样本量较大时,推理时间会非常大。总的推理次数为 K ∗ # c K * \# c K#c, K K K为蒙特卡诺的采样的样本数目, # c \# c #c为类别数目, # c = N \#c=N #c=N

在实践中为了减少推理速度,作者修改了对 t i , ϵ i t_i, \epsilon_i ti,ϵi这两个随机变量的采样逻辑,也将上面的one-stage分类的范式转化为two-stage。感兴趣的读者可以阅读原文。本文简单介绍核心思路:

对于第一个提速方案:修改采样逻辑。主要基于实验观测,如下图。

(注:横轴表示 ϵ i \epsilon_i ϵi的采样数目。Uniform: t = [ 0 , 1 , 2 , . . , 1000 ] t = [0,1, 2, .., 1000] t=[0,1,2,..,1000], 0, 500, 1000: t = [ 0 , 500 , 1000 ] t=[0, 500, 1000] t=[0,500,1000], even 10: t = [ 0 , 10 , 20 , . . . , 1000 ] t = [0, 10, 20, ..., 1000] t=[0,10,20,...,1000]

在这里插入图片描述

对于第二个提速方案:作者将 N = { ( ϵ i , t i ) ∣ i = 0 , 1 , ⋯ K } N= \{ (\epsilon_i, t_i)|i = 0, 1, \cdots K \} N={(ϵi,ti)i=0,1,K}划分了成两个集合 K 1 , K 2 K_1, K_2 K1,K2, 首先在 K 1 K_1 K1中根据式7估计 x x x的类别。保留概率最高的 M M M个类别。随后在集合 K 2 K_2 K2上对前 M M M个可能的类别继续用式7计算概率。此时的计算量从 K ∗ # c K * \#c K#c变为 K 1 ∗ # c + ( K 2 ) ∗ M K_1 * \#c + (K_2) * M K1#c+(K2)M

实验

作者对比同为zero-shot classifier的CLIP,结果如下。zero-shot的能力以及接近了基于renset50的CLIP。但与openCLIP ViT-H/14还有较大差距。其它更多的实验对比请见原始论文。

在这里插入图片描述

参考文献

[1]: Luo, Calvin. “Understanding diffusion models: A unified perspective.” arXiv preprint arXiv:2208.11970 (2022).
[2]: Li, Alexander C., et al. “Your diffusion model is secretly a zero-shot classifier.” arXiv preprint arXiv:2303.16203 (2023).

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

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

相关文章

数学建模之“层次分析法”原理和代码详解

一、层次分析法简介 层次分析法(Analytic Hierarchy Process,AHP)是一种用于多准则决策分析和评估问题的定量方法,常用于数学建模中。它是由数学家托马斯赛蒂(Thomas Saaty)开发的。 层次分析法将复杂的决…

【k8s、云原生】基于metrics-server弹性伸缩

第四阶段 时 间:2023年8月17日 参加人:全班人员 内 容: 基于metrics-server弹性伸缩 目录 一、Kubernetes部署方式 (一)minikube (二)二进制包 (三)Kubeadm 二…

【数据结构】二叉搜索树

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🐌 个人主页:蜗牛牛啊 🔥 系列专栏:🛹数据结构、🛴C 📕 学习格言:博观而约取&…

近 2000 台 Citrix NetScaler 服务器遭到破坏

Bleeping Computer 网站披露在某次大规模网络攻击活动中,一名攻击者利用被追踪为 CVE-2023-3519 的高危远程代码执行漏洞,入侵了近 2000 台 Citrix NetScaler 服务器。 研究人员表示在管理员安装漏洞补丁之前已经有 1200 多台服务器被设置了后门&#x…

shell之正则表达式及三剑客grep命令

一、正则表达式概述 什么是正则表达式? 正则表达式是一种描述字符串匹配规则的重要工具 1、正则表达式定义: 正则表达式,又称正规表达式、常规表达式 使用字符串描述、匹配一系列符合某个规则的字符串 正则表达式 普通字符: 大小写字母…

【网络编程系列】网络编程实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

什么是CSS预处理器?请列举几个常见的CSS预处理器。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS预处理器是什么?⭐ 常见的CSS预处理器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是…

《安富莱嵌入式周报》第320期:键盘敲击声解码, 军工级boot设计,开源CNC运动控制器,C语言设计笔记,开源GPS车辆跟踪器,一键生成RTOS任务链表

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1Cr4y1d7Mp/ 《安富莱嵌入式周报》第320期:键盘敲击…

【STM32】FreeRTOS互斥量学习

互斥量(Mutex) 互斥量又称互斥信号量(本质也是一种信号量,不具备传递数据功能),是一种特殊的二值信号量,它和信号量不同的是,它支持互斥量所有权、递归访问以及防止优先级翻转的特性…

iPhone删除的照片能恢复吗?不小心误删了照片怎么找回?

iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,具有极其重要的纪念价值。 照片不小心误删是一件非常难受的事,那么iP…

2023最新水果编曲软件FL Studio 21.1.0.3267音频工作站电脑参考配置单及系统配置要求

音乐在人们心中的地位日益增高,近几年音乐选秀的节目更是层出不穷,喜爱音乐,创作音乐的朋友们也是越来越多,音乐的类型有很多,好比古典,流行,摇滚等等。对新手友好程度基本上在首位,…

仪表板展示 | DataEase看中国:2023年中国电影市场分析

背景介绍 随着《消失的她》、《变形金刚:超能勇士崛起》、《蜘蛛侠:纵横宇宙》、《我爱你》等国内外影片的上映,2023年上半年的电影市场也接近尾声。据国家电影专资办初步统计,上半年全国城市院线票房达262亿元,已经超…

2022年06月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;小白鼠再排队 N只小白鼠(1 < N < 100)&#xff0c;每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量&#xff0c;要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”&#xff0c;“blue”等字符串来表示。不同的小白…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

基于深度学习的3D城市模型增强【Mask R-CNN】

在这篇文章中&#xff0c;我们描述了一个为阿姆斯特丹 3D 城市模型自动添加门窗的系统&#xff08;可以在这里访问&#xff09;。 计算机视觉用于从城市全景图像中提取有关门窗位置的信息。 由于这种类型的街道级图像广泛可用&#xff0c;因此该方法可用于较大的地理区域。 推荐…

数据结构:栈和队列(超详细)

目录 ​编辑 栈&#xff1a; 栈的概念及结构&#xff1a; 栈的实现&#xff1a; 队列&#xff1a; 队列的概念及结构&#xff1a; 队列的实现&#xff1a; 扩展知识&#xff1a; 以上就是个人学习线性表的个人见解和学习的解析&#xff0c;欢迎各位大佬在评论区探讨&#…

C++入门篇9---list

list是带头双向循环链表 一、list的相关接口及其功能 1. 构造函数 函数声明功能说明list(size_type n,const value_type& valvalue_type())构造的list中包含n个值为val的元素list()构造空的listlist(const list& x)拷贝构造list(InputIterator first, InputIterator…

Python爬虫——scrapy_当当网图书管道封装

创建爬虫项目 srcapy startproject scrapy_dangdang进入到spider文件里创建爬虫文件&#xff08;这里爬取的是青春文学&#xff0c;仙侠玄幻分类&#xff09; srcapy genspider dang http://category.dangdang.com/cp01.01.07.00.00.00.html获取图片、名字和价格 # 所有的se…

快速通过华为HCIP认证

你可以按照以下步骤进行准备和学习&#xff1a; 华为认证课程和资料--提取码:1234https://pan.baidu.com/s/1YJhD8QbocHhZ30MvrKm8hg 了解认证要求&#xff1a;查看华为官方网站上的HCIP认证要求和考试大纲&#xff0c;了解考试的内容、考试形式和考试要求。 学习相关知识&am…

c++ std::shared_ptr(内存布局)

https://cplusplus.com/reference/memory/shared_ptr/