扩散模型的数学理解

article/2023/6/4 15:23:01

前置知识:

标准高斯分布的乘法:若z~N(0, I),则 n*z~N(0, n^2 * I)。因为期望为0,乘以n后还是为0,但方差为1,乘以n后还要加上平方,所以说是n^2 * I。

概率公式中的逗号、分号、竖线:分号的优先级最大,竖线的优先级高于逗号。一个函数公式中,分号前表示的是这个式子用来预测分布的随机变量,分号后面表示所需的相关参数。比如P(X; θ)表示X的分布,并且X的分布与参数θ相关。P(A|B,C)表示在B,C的条件下,发生A的概率。

重参数化技巧:TODO

Fubini定理:TODO

变分下限(VLB):TODO

Jensen不等式:TODO


正向过程

前向扩散过程,相当于在每一time step都往上一个图像的状态加入一个高斯噪声μ~N(, ),这样当T→+∞时,就会变成完全的高斯噪声。这个过程中,每一个状态只与前一个状态有关,因此整个前向扩散过程可以看作是一个马尔可夫过程,描述如下:

q是从得到的过程,它可以描述为一个概率函数N,它的参数为(均值),(方差),I是单位矩阵。都是矩阵,因为往图像中加入高斯噪声μ~N(, ),其实实质上是为的每一个像素值都添加相同的噪声分布μ,然后在每一个像素点上从这个分布上采样一个值进行相加,所以要乘以变为矩阵形式对应每一个像素点处的均值,对应的则是每一个像素点处的方差(相同)。

直观上理解,当T→+∞时,每一个像素点都会变成一个标准高斯分布,有高斯混合模型可知,那整个图像也相当于趋近于标准高斯分布。(这个理解待考证)

在GLIDE的code中,方差 βt 随着t增大是递增的,且是由0.0001 到0.02线性插值。至于均值为什么会选择,这是为了当T→+∞时,稳定收敛到标准正态分布,其中的细节参考:由浅入深了解Diffusion Model的Eq. (3)&(4)。

逆向过程

TODO

训练过程

TODO

参考:

[1] https://zhuanlan.zhihu.com/p/525106459

http://www.ngui.cc/article/show-1007698.html

相关文章

Vue中的常用指令!!

Vue 中的指令是 Vue 的核心功能之一&#xff0c;用于在模板中添加特殊的标签&#xff0c;使得 DOM 元素和 Vue 实例的数据绑定在一起&#xff0c;实现双向数据绑定和动态更新。下面是常用的 Vue 指令。 v-if 指令&#xff1a;根据条件动态渲染元素 <!-- 根据 show 布尔值的…

【算法基础】欧拉函数

一、欧拉函数 1. 公式法求欧拉函数 2. 筛法求欧拉函数 二、案例分析1 (公式法求欧拉函数) (一)Question 1. 问题描述 2. Input 第一行包含整数 n。接下来 n行,每行包含一个正整数 ai。(1 ≤ n ≤ 100, 1 ≤ ai ≤ 2109) 3. Output 输出共 n 行,每行输出一个正整数…

Python接口自动化 ❀ JsonPath提取器和正则提取器

Python接口自动化 ❀ JsonPath提取器和正则提取器一、前言1.1 正则提取器1.2 正则示例&#xff1a;1.3 JsonPath提取器1.4 JsonPath提取器具体使用一、前言 我们一般在做接口关联时&#xff0c;会通过保存中间变量实现接口关联&#xff0c;在关联时就需要用到变量提取&#xf…

计科数据《算法设计与分析》第3次上机作业

问题 A: 算法10-6~10-8&#xff1a;快速排序 #include<bits/stdc.h> using namespace std; #define int long long #define fer(i,a,b) for(int ia;i<b;i) const int N1e55,mod1e97; int a[N]; int partition(int a[],int l,int r){int il,jr;int xa[l];while(i<j…

Oracle-CDC进程同步报错问题合集

前言: Oracle CDC是数据库自带的数据库数据复制和增量数据抽取工具&#xff0c;提供五种复制模式 1 Synchronous Change Data Capture Configuration(同步复制) 2 Asynchronous HotLog Configuration(异步在线日志CDC) 3 Asynchronous Distributed HotLog Configuratio…

史诗级详解面试中JVM的实战

史诗级详解面试中JVM的实战 1.1 什么是内存泄漏?什么是内存溢出?1.2 你们线上环境的JVM都设置多大?1.3 线上Java服务器内存飙升怎么回事?1.4 线上Java项目CPU飙到100%怎么排查?1.5 线上Java项目OOM了,怎么回事?1.1 什么是内存泄漏?什么是内存溢出? 内存溢出:OutOfMe…

Lua for 的使用

Lua 中的 for 循环有两种形式&#xff1a;数值型遍历和泛型遍历。 1&#xff0c;数值型遍历 语法为: for nameexp1, exp2 [,exp] do -- do something end [,exp] 这个不是必须的&#xff0c;是可选项。它表示步长&#xff0c;即从nameexp1 如何变化到 exp2&#xff0c;所…

HJ64 MP3光标位置(java详解)

就是一块诺基亚手机屏幕,只能显示四个歌曲,upper代表屏幕显示第一个歌曲(总歌曲中第几个),down代表屏幕显示的最后一个歌曲(总歌曲中第几个) 你要输入这个总歌曲数量n {初始值,cur0,upper0,downMath.min(3,n-1);}{为啥cur为0,例如打开QQ音乐光标不都是显示在第一个歌曲位置嘛} …

C++初阶——类和对象(3)赋值/运算符重载

目录 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现——流插入&#xff0c;流提取重载 Date.h&#xff1a; Date.cpp: 7.const成员 8.取地址及const取地址操作符重载 5.赋值运算符重载 5.1 运算符重载 C为了增强代码的可读性…

建堆、堆排序、TopK问题大合集

一、如何建堆 1、向上调整建堆法O(NlogN) 原理&#xff1a; 利用向上调整的方法进行建堆&#xff0c;是通过模仿之前堆的插入操作&#xff0c;从第二个数开始&#xff0c;每次插入一个数&#xff0c;就对这个数进行向上调整&#xff0c;这样子既保证了原有数据为堆&#xff…