第二十三课.扩散模型
目录
- 概述
- 前向过程
- 逆向过程
- DDPM
概述
近几年扩散模型不断涌现,但都来源于一个基础模型:DDPM(Denoising Diffusion Probabilistic Model)。扩散模型本质是生成模型,过去我们常用的生成模型包括GAN和VAE,利用随机噪声生成图像样本。GAN和VAE有一个共同点,它们都是使用一个网络直接一步式生成结果,如果要获得好的生成结果,不得不追求更复杂的网络,但是这会导致训练困难。
相反,DDPM中包含了一个新的想法,对于前向过程,我们对 x0x_{0}x0 逐步加噪声,得到一系列的数据xt−1,xt,...,xTx_{t-1},x_{t},...,x_{T}xt−1,xt,...,xT。如下图所示:
虽然前向步骤和图像生成没有关系,但这是构建训练样本GT的重要步骤。
前向过程的每个时刻ttt只与时刻t−1t-1t−1有关,所以可以看作马尔可夫过程,扩散的目的是通过马尔可夫过程将x0x_{0}x0逐渐映射到多维正态分布(高斯噪声)。其中每一步的随机过程为q(xt∣xt−1)q(x_{t}|x_{t-1})q(xt∣xt−1),这个过程由我们自己定义(是已知的),通常,我们把加噪声的过程定义为(利用了重参数方式):xt=αtxt−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=αtxt−1+βtϵt,ϵt∼N(0,I)其中,αt,βt\alpha_{t},\beta_{t}αt,βt是系数,并且满足调和关系:αt2+βt2=1\alpha_{t}^{2}+\beta_{t}^{2}=1αt2+βt2=1其中,βt\beta_{t}βt是随着ttt的增加不断变大的。
从xTx_{T}xT到x0x_{0}x0的过程是扩散的逆向过程,图像慢慢从高斯噪声变换到正常图像,每一步的随机过程为q(xt−1∣xt)q(x_{t-1}|x_{t})q(xt−1∣xt),该过程是未知的,因此扩散模型要做的是定义一个可学习的为pθ(xt−1∣xt)p_{\theta}(x_{t-1}|x_{t})pθ(xt−1∣xt)的逆向过程,通过优化参数θ\thetaθ,使得该过程尽可能接近真实逆向过程q(xt−1∣xt)q(x_{t-1}|x_{t})q(xt−1∣xt),从而使我们能通过一个高斯噪声生成正常图像。
前向过程
DDPM定义的前向过程为:q(xt∣xt−1)=N(xt;αtxt−1,βtI)q(x_{t}|x_{t-1})=N(x_{t};\sqrt{\alpha_{t}}x_{t-1},\beta_{t}I)q(xt∣xt−1)=N(xt;αtxt−1,βtI)由于高斯分布的性质,可以得到:q(xt∣x0)=N(xt;α‾tx0,(1−α‾t)I)q(x_{t}|x_{0})=N(x_{t};\sqrt{\overline{\alpha}_{t}}x_{0},(1-\overline{\alpha}_{t})I)q(xt∣x0)=N(xt;αtx0,(1−αt)I)其中III为单位矩阵,α‾t=∏i=1tαi\overline{\alpha}_{t}=\prod_{i=1}^{t}\alpha_{i}αt=∏i=1tαi,由于αt\alpha_{t}αt是逐渐减小的,所以当ttt接近无穷时,q(xt∣0)=N(xt;0,I)q(x_{t}|0)=N(x_{t};0,I)q(xt∣0)=N(xt;0,I),即此时xtx_{t}xt服从标准正态分布。
关于N(xt;0,I)N(x_{t};0,I)N(xt;0,I),指的是xt∼N(0,I)x_{t}\sim N(0,I)xt∼N(0,I)。
逆向过程
对于逆向的随机过程q(xt−1∣xt)q(x_{t-1}|x_{t})q(xt−1∣xt)是无法求出的,但是在已知x0x_{0}x0的情况下,我们可以通过贝叶斯公式求出:q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)=N(xt−1;μ~t(xt,x0),β~tI)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(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)=N(xt−1;μt(xt,x0),βtI)其中:μ~t(xt,x0)=αt(1−α‾t−1)1−α‾txt+α‾t−1βt1−α‾tx0\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−αt−1)xt+1−αtαt−1βtx0β~t=1−α‾t−11−α‾tβt\widetilde{\beta}_{t}=\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}}\beta_{t}βt=1−αt1−αt−1βt对随机过程q(xt∣x0)q(x_{t}|x_{0})q(xt∣x0)使用重参数方法,得到xtx_{t}xt关于x0x_{0}x0的表达式,并且表达式中包含一个高斯噪声ϵt∼N(0,I)\epsilon_{t}\sim N(0,I)ϵt∼N(0,I),再转换一下变量,就得到:x0=xt−1−α‾tϵtαtx_{0}=\frac{x_{t}-\sqrt{1-\overline{\alpha}_{t}}\epsilon_{t}}{\sqrt{\alpha_{t}}}x0=αtxt−1−αtϵt把x0x_{0}x0代入μ~t(xt,x0)\widetilde{\mu}_{t}(x_{t},x_{0})μt(xt,x0)得到:μ~t=1αt(xt−βt1−α‾tϵt)\widetilde{\mu}_{t}=\frac{1}{\sqrt{\alpha_{t}}}(x_{t}-\frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\epsilon_{t})μt=αt1(xt−1−αtβtϵt)到这里,我们发现,如果我们假设我们知道了x0x_{0}x0,我们可以根据q(xt−1∣xt,x0)q(x_{t-1}|x_{t},x_{0})q(xt−1∣xt,x0)采样出xt−1x_{t-1}xt−1,但问题在于,在重参数过程中有一个随机噪声ϵt\epsilon_{t}ϵt,尽管它服从标准正态分布,但是要还原到x0x_{0}x0,我们必须确保逆向过程的每一步都能准确预测出每一步的ϵ\epsilonϵ的具体噪声值。所以,DDPM使用UNet来预测这个噪声值。
DDPM
我们先设:pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),β~tI)p_{\theta}(x_{t-1}|x_{t})=N(x_{t-1};\mu_{\theta}(x_{t},t),\widetilde{\beta}_{t}I)pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),βtI)而μθ(xt,t)\mu_{\theta}(x_{t},t)μθ(xt,t)的表达式为:μθ(xt,t)=1αt(xt−βt1−α‾tϵθ(xt,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)=αt1(xt−1−αtβtϵθ(xt,t))其中,ϵθ\epsilon_{\theta}ϵθ就是这个UNet,θ\thetaθ是网络参数,网络输入xtx_{t}xt和ttt,然后预测出该时刻的噪声ϵ^t\widehat{\epsilon}_{t}ϵt,然后根据下面式子从xtx_{t}xt回到xt−1x_{t-1}xt−1:xt=αtxt−1+βtϵt→xt−1=xt−βtϵ^tαtx_{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=αtxt−1+βtϵt→xt−1=αtxt−βtϵt因此,对于训练,只需要让UNet在每个时刻的输出拟合前向过程对应时刻采样出的噪声即可:Lt=∣∣ϵt−ϵ^t∣∣=∣∣ϵt−ϵ^(xt,t)∣∣L_{t}=||\epsilon_{t}-\widehat{\epsilon}_{t}||=||\epsilon_{t}-\widehat{\epsilon}(x_{t},t)||Lt=∣∣ϵt−ϵt∣∣=∣∣ϵt−ϵ(xt,t)∣∣
第二十三课.扩散模型相关推荐
- NeHe OpenGL教程 第二十三课:球面映射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- OpenGL教程翻译 第二十三课 阴影贴图(一)
第二十三课 阴影贴图(一) 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) 背景 阴影和光是紧密联系在一起的,因为如果你想要产生一个阴影就必须要光.有许多的 ...
- 宇宙精密调治的再思《基督教与科学》第二十三课
黄牧师 从圣经诗19:1-2,看宇宙.太阳系.地球.生物.人类的创造. 一.回顾宇宙.地球.生物.人的设计 宇宙.地球.太阳系.行星.地球环境.生命.人,一切都有极端精密的调治,很清楚可以观察到有看不 ...
- Vue2+Vue3的专题目录结构(第二十三课)
这个世界有些事情真的是无法改变的,我们唯一能做的,只是在自己与世界之间找到一个平衡点. 了解Vue框架的大致学习方向(第一课)_星辰镜的博客-CSDN博客 Vue框架的学习(Vue的基础指令操作一)第 ...
- 第二十三课.Kaggle交易预测
目录 简介 基于 lightgbm 的 Kaggle 交易预测 baseline 优化 简介 实验基于 Kaggle 竞赛数据,使用 lightgbm 预测银行客户在未来是否会进行交易,比赛地址(已结 ...
- 学习淘淘商城第二十三课(添加商品的实现)
上节课我们一起学习了富文本编辑器的使用,这节课我们一起学习下商品添加的实现. 在item-add.jsp当中,当点击提交按钮后,会触发submitForm方法,如下图所示. 在提交表单前需要校验输入的 ...
- 第二十三课,抗锯齿(Anti Aliasing)
Anti Aliasing(ˈænti ,ˈeliəsɪŋ )反走样 文章目录 超采样抗锯齿(Super Sample Anti-aliasing, SSAA) 多重采样抗锯齿(Multisample ...
- 【线性代数公开课MIT Linear Algebra】 第二十三课 微分方程与exp(At)
本系列笔记为方便日后自己查阅而写,更多的是个人见解,也算一种学习的复习与总结,望善始善终吧~ 一阶常系数微分方程 Au=dudt 将一阶常系数微分方程转换为线性代数问题的关键在于常系数微分方程的解一定 ...
- 重学java基础第二十三课:java基础 注释
最新文章
- 首届中国IT架构大师高峰论坛(十年架构之路汇成一句话!)
- [BZOJ1072][SCOI2007]排列perm
- 电脑越来越慢怎么办_电脑维修|你的电脑肯定遇到过这些故障
- boost::test模块带有自定义初始化测试的静态库使用变体
- Netflix 工程师的生活 —— 40毫秒的案例
- 用计算机做科学实验心得体会,科学实验的心得体会
- 脚本命令_SAP HANA数据库备份命令脚本
- 字体外面怎么加边框_有钱人家连电视墙都发“光”,大理石墙周围加一圈镜面边框,华丽...
- ubuntu 安装sql_在Ubuntu上进行SQL Server安装和故障排除
- python怎么画简单图-Python | 用matplotlib画些简单的图
- markdown这么好用的东西我才知道。。。多么不折腾的我。。。
- B/S架构 Web打印程序(Argox)
- 运筹学 知识点总结 (十一)
- Photoshop提高照片对比度的几种实用方法
- Excel设置图片固定在某个单元格内部
- nacos 未读取到合法数据,请检查导入的数据文件
- Mac下安装Maven
- 重磅!L4级自动驾驶硬件方案来啦!
- 订单(一)——准备订单数据
- 云ERP与传统ERP系统的区别详解