第二十三课.扩散模型

news2024/11/30 8:49:38

目录

  • 概述
  • 前向过程
  • 逆向过程
  • DDPM

概述

近几年扩散模型不断涌现,但都来源于一个基础模型:DDPM(Denoising Diffusion Probabilistic Model)。扩散模型本质是生成模型,过去我们常用的生成模型包括GAN和VAE,利用随机噪声生成图像样本。GAN和VAE有一个共同点,它们都是使用一个网络直接一步式生成结果,如果要获得好的生成结果,不得不追求更复杂的网络,但是这会导致训练困难。

相反,DDPM中包含了一个新的想法,对于前向过程,我们对 x 0 x_{0} x0 逐步加噪声,得到一系列的数据 x t − 1 , x t , . . . , x T x_{t-1},x_{t},...,x_{T} xt1,xt,...,xT。如下图所示:
fig2
虽然前向步骤和图像生成没有关系,但这是构建训练样本GT的重要步骤

前向过程的每个时刻 t t t只与时刻 t − 1 t-1 t1有关,所以可以看作马尔可夫过程,扩散的目的是通过马尔可夫过程将 x 0 x_{0} x0逐渐映射到多维正态分布(高斯噪声)。其中每一步的随机过程为 q ( x t ∣ x t − 1 ) q(x_{t}|x_{t-1}) q(xtxt1),这个过程由我们自己定义(是已知的),通常,我们把加噪声的过程定义为(利用了重参数方式): x t = α t x t − 1 + β t ϵ t , ϵ t ∼ N ( 0 , I ) x_{t}=\alpha_{t}x_{t-1}+\beta_{t}\epsilon_{t},\epsilon_{t}\sim N(0,I) xt=αtxt1+βtϵt,ϵtN(0,I)其中, α t , β t \alpha_{t},\beta_{t} αt,βt是系数,并且满足调和关系: α t 2 + β t 2 = 1 \alpha_{t}^{2}+\beta_{t}^{2}=1 αt2+βt2=1其中, β t \beta_{t} βt是随着 t t t的增加不断变大的。

x T x_{T} xT x 0 x_{0} x0的过程是扩散的逆向过程,图像慢慢从高斯噪声变换到正常图像,每一步的随机过程为 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt),该过程是未知的,因此扩散模型要做的是定义一个可学习的为 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_{t}) pθ(xt1xt)的逆向过程,通过优化参数 θ \theta θ,使得该过程尽可能接近真实逆向过程 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt),从而使我们能通过一个高斯噪声生成正常图像。

前向过程

DDPM定义的前向过程为: q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , β t I ) q(x_{t}|x_{t-1})=N(x_{t};\sqrt{\alpha_{t}}x_{t-1},\beta_{t}I) q(xtxt1)=N(xt;αt xt1,βtI)由于高斯分布的性质,可以得到: q ( x t ∣ x 0 ) = N ( x t ; α ‾ t x 0 , ( 1 − α ‾ t ) I ) q(x_{t}|x_{0})=N(x_{t};\sqrt{\overline{\alpha}_{t}}x_{0},(1-\overline{\alpha}_{t})I) q(xtx0)=N(xt;αt x0,(1αt)I)其中 I I I为单位矩阵, α ‾ t = ∏ i = 1 t α i \overline{\alpha}_{t}=\prod_{i=1}^{t}\alpha_{i} αt=i=1tαi,由于 α t \alpha_{t} αt是逐渐减小的,所以当 t t t接近无穷时, q ( x t ∣ 0 ) = N ( x t ; 0 , I ) q(x_{t}|0)=N(x_{t};0,I) q(xt∣0)=N(xt;0,I),即此时 x t x_{t} xt服从标准正态分布。


关于 N ( x t ; 0 , I ) N(x_{t};0,I) N(xt;0,I),指的是 x t ∼ N ( 0 , I ) x_{t}\sim N(0,I) xtN(0,I)


逆向过程

对于逆向的随机过程 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt)是无法求出的,但是在已知 x 0 x_{0} x0的情况下,我们可以通过贝叶斯公式求出: q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_{t},x_{0})=q(x_{t}|x_{t-1},x_{0})\frac{q(x_{t-1}|x_{0})}{q(x_{t}|x_{0})}\\=N(x_{t-1};\widetilde{\mu}_{t}(x_{t},x_{0}),\widetilde{\beta}_{t}I) q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)=N(xt1;μ t(xt,x0),β tI)其中: μ ~ t ( x t , x 0 ) = α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t + α ‾ t − 1 β t 1 − α ‾ t x 0 \widetilde{\mu}_{t}(x_{t},x_{0})=\frac{\sqrt{\alpha_{t}(1-\overline{\alpha}_{t-1})}}{1-\overline{\alpha}_{t}}x_{t}+\frac{\sqrt{\overline{\alpha}_{t-1}}\beta_{t}}{1-\overline{\alpha}_{t}}x_{0} μ t(xt,x0)=1αtαt(1αt1) xt+1αtαt1 βtx0 β ~ t = 1 − α ‾ t − 1 1 − α ‾ t β t \widetilde{\beta}_{t}=\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}}\beta_{t} β t=1αt1αt1βt对随机过程 q ( x t ∣ x 0 ) q(x_{t}|x_{0}) q(xtx0)使用重参数方法,得到 x t x_{t} xt关于 x 0 x_{0} x0的表达式,并且表达式中包含一个高斯噪声 ϵ t ∼ N ( 0 , I ) \epsilon_{t}\sim N(0,I) ϵtN(0,I),再转换一下变量,就得到: x 0 = x t − 1 − α ‾ t ϵ t α t x_{0}=\frac{x_{t}-\sqrt{1-\overline{\alpha}_{t}}\epsilon_{t}}{\sqrt{\alpha_{t}}} x0=αt xt1αt ϵt x 0 x_{0} x0代入 μ ~ t ( x t , x 0 ) \widetilde{\mu}_{t}(x_{t},x_{0}) μ t(xt,x0)得到: μ ~ t = 1 α t ( x t − β t 1 − α ‾ t ϵ t ) \widetilde{\mu}_{t}=\frac{1}{\sqrt{\alpha_{t}}}(x_{t}-\frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\epsilon_{t}) μ t=αt 1(xt1αt βtϵt)到这里,我们发现,如果我们假设我们知道了 x 0 x_{0} x0,我们可以根据 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_{t},x_{0}) q(xt1xt,x0)采样出 x t − 1 x_{t-1} xt1,但问题在于,在重参数过程中有一个随机噪声 ϵ t \epsilon_{t} ϵt,尽管它服从标准正态分布,但是要还原到 x 0 x_{0} x0,我们必须确保逆向过程的每一步都能准确预测出每一步的 ϵ \epsilon ϵ的具体噪声值。所以,DDPM使用UNet来预测这个噪声值。

DDPM

我们先设: p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , β ~ t I ) p_{\theta}(x_{t-1}|x_{t})=N(x_{t-1};\mu_{\theta}(x_{t},t),\widetilde{\beta}_{t}I) pθ(xt1xt)=N(xt1;μθ(xt,t),β tI) μ θ ( x t , t ) \mu_{\theta}(x_{t},t) μθ(xt,t)的表达式为: μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ‾ t ϵ θ ( x t , t ) ) \mu_{\theta}(x_{t},t)=\frac{1}{\sqrt{\alpha_{t}}}(x_{t}-\frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\epsilon_{\theta}(x_{t},t)) μθ(xt,t)=αt 1(xt1αt βtϵθ(xt,t))其中, ϵ θ \epsilon_{\theta} ϵθ就是这个UNet, θ \theta θ是网络参数,网络输入 x t x_{t} xt t t t,然后预测出该时刻的噪声 ϵ ^ t \widehat{\epsilon}_{t} ϵ t,然后根据下面式子从 x t x_{t} xt回到 x t − 1 x_{t-1} xt1 x t = α t x t − 1 + β t ϵ t → x t − 1 = x t − β t ϵ ^ t α t x_{t}=\alpha_{t}x_{t-1}+\beta_{t}\epsilon_{t}\rightarrow x_{t-1}=\frac{x_{t}-\beta_{t}\widehat{\epsilon}_{t}}{\alpha_{t}} xt=αtxt1+βtϵtxt1=αtxtβtϵ t因此,对于训练,只需要让UNet在每个时刻的输出拟合前向过程对应时刻采样出的噪声即可: L t = ∣ ∣ ϵ t − ϵ ^ t ∣ ∣ = ∣ ∣ ϵ t − ϵ ^ ( x t , t ) ∣ ∣ L_{t}=||\epsilon_{t}-\widehat{\epsilon}_{t}||=||\epsilon_{t}-\widehat{\epsilon}(x_{t},t)|| Lt=∣∣ϵtϵ t∣∣=∣∣ϵtϵ (xt,t)∣∣

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

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

相关文章

【Linux】冯诺依曼体系结构

目录🌈前言🌷1、冯诺依曼体系结构🌸2、操作系统(Operator System)🌹2.1、概念🍀2.2、如何理解管理🍁3、进程🍂3.1、概念🌈前言 本篇文章进行操作系统中进程的学习!&…

全新一代智慧园区数字孪生解决方案,为园区运营商和集成商赋能!

对于园区运营方而言,园区既要满足使用者的需求,还要面对后期运营过程中大量、繁琐的维护管理工作,同时还要兼顾园区运维效率和管理成本。 随着5G、物联网、云计算、人工智能、大数据等技术的快速发展和应用,园区运维智能化升级已…

自动控制原理 - 2 控制系统的数学模型 节2.7-2.10

2 控制系统的数学模型2.7 结构图的等效变换准则2.8 结构图等效变换的应用2.9 信号流图2.10 梅逊公式 2 控制系统的数学模型 2.7 结构图的等效变换准则 结构图没有直接给出系统输入与输出之间的定量关系。如何得到系统输入输出之间的传递函数,从而便于进一步分析系…

质量管理PPAP说明

PPAP是英文Production Part Approval Process的缩写,中文翻译为生产件批准程序。PPAP是TS16949质量管理体系五大工具之一,用于汽车整车或零部件生产过程的质量管控。 各种质量管理类书籍关于PPAP的介绍有很多,但什么情况下必须提交PPAP&…

Spring Boot + Docker实战

文章目录1.编写DockerFile2.构建镜像3.查看编译的镜像4.启动镜像测试5.创建私有仓库5.1查询registry镜像5.2加载镜像5.3运行镜像容器5.4检查容器6.搭建Registry web6.1首先搜索并拉取镜像6.2运行一个registry web容器6.3验证7.推送镜像到私有仓库8.服务器拉取镜像部署8.1 资源限…

在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序在线电子书阅读系统,前台用户使用小程序,后台管理使用基JavaMySql技术;通过后台录入电子书信息、书目录信息,用户通过小程序登录,查…

CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3

CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3 FITC/Rhodamine/TRITC/Comarin/Bodipy/ICG/CY3/CY3.5/CY5/CY5.5/CY7/CY7.5标记海藻酸钠 海藻酸钠的结构海藻酸酸是一种线性的阴离子多糖,由β-D-甘露糖醛酸(M)和α-L-葡糖醛酸&am…

【Android】性能监控之帧率检测Tinydancer

git地址 使用 增加依赖 dependencies {debugCompile "com.github.brianPlummer:tinydancer:0.1.2"releaseCompile "com.github.brianPlummer:tinydancer-noop:0.1.2"testCompile "com.github.brianPlummer:tinydancer-noop:0.1.2"}在Applicati…

strcat · strstr | 使用场景与模拟实现

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

java计算机毕业设计家教管理系统(附源码、数据库)

java计算机毕业设计家教管理系统(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…

单调队列/单调栈优化dp

从这几篇博客学习的: DP优化小技巧(单调队列/单调栈) (单调队列优化DP) 代码源每日一题 Div1 选元素(数据加强版) 算法学习笔记(67): 单调栈 牛客多校第九场I (单调栈优化dp/单调栈的常用套路) 一. 单调队列 NC50528…

擎创技术流 | ClickHouse实用工具—ckman教程(1)部署安装

前言: 在数据量日益增长的当下,传统数据库的查询性能已满足不了业务需求。而Clickhouse在OLAP(On-Line Analysis Processing——即一种在线分析处理的,用于数据分析的计算方法)领域的应用,可以助力企业打造…

云原生之快速使用Nacos Spring Cloud

本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务注册发现。 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。通过 Nacos Server 和 spring-cloud-starter-alibab…

iwebsec靶场 SSRF关卡通关笔记

iwebsec靶场SSRF漏洞通关笔记。 1. 源码分析 由于URL参数无经过严格的过滤,那么攻击者可以构造任意的url利用SSRF漏洞 如上所示,分析可知有SSRF漏洞 2.SSRF漏洞文件读取 (1)访问网址根目录下ssrf文件夹下的1.txt 构造SSRF漏洞访…

云原生 · DevOps | Sonar Qube

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

软银集团:从零到一万亿

第一章 公司发展概况 1.1 企业创始人和发展史 软银集团在1981年由孙正义在日本创立并于1994年在日本上市,是一家综合性的风险投资公司,主要致力IT产业的投资,包括网络和电信。 1981-1996年(个人电脑及软件业务时期)…

C语言函数针对训练--递归篇(动画讲解,由易到难递归例题)

CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 💖作者:龟龟不断向前 ✨简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: …

【FreeRTOS】队列的使用

队列的使用前言创建队列发送数据接收数据查询队列数据个数使用示例创建两个线程配置按键驱动编写按键发送子函数编写按键读取子函数前言 基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有…

leetcode算法每天一题010: 正则表达式,判断pattern和string是否匹配(动态规划)

题目描述 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 PATTERNTRUEFALSEa.baab,abb,acba, ab,ba*bb,ab,aab,aaaba,abb,acbc*a.baab,caab,cccccacb,ccabbbaab,cabbbdp[i] [j] 的含义是当字符串 s 的长度为 i,模式串 p 的长度为 j 时,两…

KubeVela 插件指南:轻松扩展你的平台专属能力

KubeVela 插件(addon)可以方便地扩展 KubeVela 的能力。正如我们所知,KubeVela 是一个微内核高度可扩展的平台,用户可以通过模块定义(Definition)[1]扩展 KubeVela 的系统能力,而 KubeVela 插件…