【深度学习】Diffusion扩散模型原理解析1

1、前言

diffusion,这几年一直很火的模型,比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型,但由于该模型与VAE那边,都涉及了较多了概率论知识,实在让人望而却步。所以,本文将对diffusion进行数学原理推导,如果你没有上过概率论这门课,建议先去学。

论文:

①Deep Unsupervised Learning using Nonequilibrium Thermodynamics (arxiv.org)

②Denoising Diffusion Probabilistic Models (arxiv.org)

③Understanding Diffusion Models: A Unified Perspective (arxiv.org)

参考代码:DL-Demos/dldemos at master · SingleZombie/DL-Demos · GitHub

视频:【Diffusion扩散模型原理解析-哔哩哔哩】

案例演示:

在这里插入图片描述
受CSDN篇幅限制,分成两篇,下一篇:【深度学习】Diffusion扩散模型原理解析2

2、Diffusion流程

2.1、运行流程

Diffusion分为两个步骤——扩散、逆扩散

在这里插入图片描述

扩散过程是对图像加入高斯噪声的过程(图中上半部分):

给定一张图像,然后构造T个时刻,每一个时刻对应一张图像,如图中t=0,对应我们给定的初始图像

然后,对这张图像加一个高斯噪声,得到t=1时刻的图像;再对t=1时刻的图像加入噪声,得到t=2时刻的噪声。然后重复此法,到T时刻时,就得到了一张全是噪点的图像(t=T)

逆扩散过程就是对图像减去噪声的过程,也就是还原图像的过程(图中下半部分):

给定一张全是噪点的图像,然后不断去噪,去到t=2时,得到图中的图像,再去噪,得到t=1时刻的图像,再再去噪,就还原回了坤坤的图像。

2.2、原因

为什么要费尽心思把它加入这么多噪声,再复原回来?

对于T时刻的图像,它是服从正态分布的,并且,是近似服从标准正态分布。那么,如果要生成图像,是不是可以直接从标准正态分布中采样出数据,然后一点点去噪,就能还原回原来的图像了呢?这就是diffusion的思想

2.3、前向加噪

记时刻1为原始图像,表示为 x 1 x_1 x1,则时刻2表达为 x 2 x_2 x2

每一个时刻都要加入一个噪声,那么该如何加噪呢?假设在 t − 1 t-1 t1时刻,我们该如何得到 i i i时刻的图像?其公式如下
x t = α t x t − 1 + 1 − α t ϵ t (1) x_t=\sqrt\alpha_t x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\tag{1} xt=α txt1+1αt ϵt(1)
x t − 1 、 x t x_{t-1}、x_t xt1xt分别表示 t − 1 t-1 t1时刻和 t t t时刻的图像。 α t \alpha_t αt一般是一个大于0小于1的超参数,随着时刻的增加而减小, ϵ t ∼ N ( 0 , I ) \epsilon_t\sim N(0,I) ϵtN(0,I)的标准正态分布(Ps:为什么是加权平均,并且要开根号?感兴趣请看参考①)

从这个式子不难看出,这其实不是简单的从 x t − 1 x_{t-1} xt1中加噪,而是加权平均。

t − 1 t-1 t1 t t t可以用式(1)表示,那从 t − 2 t-2 t2 t t t呢?难道我们每次都要一次一次的加入噪声吗?有没有办法更好的表示?

我们先看一个正态分布的基本定理:

定理①:

假设: x 1 ∼ N ( 0 , σ 1 I ) , x 2 ∼ N ( 0 , σ 2 I ) x_1\sim N(0,\sigma_1I),x_2\sim N(0,\sigma_2I) x1N(0,σ1I),x2N(0,σ2I)

则: ( x 1 + x 2 ) ∼ N ( 0 , ( σ 1 + σ 2 ) I ) (x_1+x_2)\sim N(0,(\sigma_1+\sigma_2)I) (x1+x2)N(0,(σ1+σ2)I)

定理②:

假设: x 1 ∼ N ( 0 , I ) x_1 \sim N(0,I) x1N(0,I)

则: a x 1 ∼ N ( 0 , a 2 I ) ax_1 \sim N(0,a^2I) ax1N(0,a2I)

Ps:这几个定理证明很简单,此处不做证明,不懂的可以自行百度,或者问我。

现在,我们把 t − 2 t-2 t2 t t t由式(1)推导出来
x t = α t x t − 1 + 1 − α t ϵ t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 1 ) + 1 − α t ϵ t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 1 + 1 − α t ϵ t (2) \begin{aligned}x_t = &\sqrt\alpha_tx_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\\=&\sqrt\alpha_t(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon_{t-1})+\sqrt{1-\alpha_t}\epsilon_t\\=&\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{\alpha_{t}(1-\alpha_{t-1})}\epsilon_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\end{aligned}\tag{2} xt===α txt1+1αt ϵtα t(αt1 xt2+1αt1 ϵt1)+1αt ϵtαtαt1 xt2+αt(1αt1) ϵt1+1αt ϵt(2)
其中 ϵ ∼ N ( 0 , I ) \epsilon \sim N(0,I) ϵN(0,I)

由定理②可得: α t ( 1 − α t − 1 ) ϵ t − 1 ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) \sqrt{\alpha_{t}(1-\alpha_{t-1})}\epsilon_{t-1} \sim N(0,\alpha_{t}(1-\alpha_{t-1})I) αt(1αt1) ϵt1N(0,αt(1αt1)I)

由定理②可得: ( 1 − α t ) ϵ t ∼ N ( 0 , ( 1 − α t ) I ) (1-\sqrt{\alpha_t})\epsilon_{t} \sim N(0,(1-\alpha_t)I) (1αt )ϵtN(0,(1αt)I)

所以由定理①可得:
α t ( 1 − α t − 1 ) ϵ t − 1 + ( 1 − α t ) ϵ t ∼ N ( 0 , ( α t ( 1 − α t − 1 ) + 1 − α t ) I ) → N ( 0 , ( 1 − α t α t − 1 ) I ) (3) \sqrt{\alpha_{t}(1-\alpha_{t-1})}\epsilon_{t-1}+(1-\sqrt{\alpha_t})\epsilon_t \sim N(0,(\alpha_{t}(1-\alpha_{t-1})+1-\alpha_t)I)\rightarrow N(0,(1-\alpha_t\alpha_{t-1})I)\tag{3} αt(1αt1) ϵt1+(1αt )ϵtN(0,(αt(1αt1)+1αt)I)N(0,(1αtαt1)I)(3)

而由定理②可知: N ( 0 , ( 1 − α t α t − 1 ) I ) → 1 − α t α t − 1 ϵ ˉ N(0,(1-\alpha_t\alpha_{t-1})I)\rightarrow\sqrt{1-\alpha_t\alpha_{t-1}}\bar\epsilon N(0,(1αtαt1)I)1αtαt1 ϵˉ
N ( 0 , ( 1 − α t α t − 1 ) I ) → 1 − α t α t − 1 ϵ ˉ (4) N(0,(1-\alpha_t\alpha_{t-1})I)\rightarrow\sqrt{1-\alpha_t\alpha_{t-1}}\bar\epsilon\tag{4} N(0,(1αtαt1)I)1αtαt1 ϵˉ(4)
其中 ϵ ˉ ∼ N ( 0 , I ) \bar\epsilon\sim N(0,I) ϵˉN(0,I)

那么
α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 1 + 1 − α t ϵ t ∼ N ( α t α t − 1 x t − 2 , ( 1 − α t α t − 1 ) I ) \sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{\alpha_{t}(1-\alpha_{t-1})}\epsilon_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\sim N(\sqrt{\alpha_t\alpha_{t-1}}x_{t-2},(1-\alpha_t\alpha_{t-1})I) αtαt1 xt2+αt(1αt1) ϵt1+1αt ϵtN(αtαt1 xt2,(1αtαt1)I)
所以不难看出式(3)直接等于式(4)

所以式(2)的后两项可直接用式(4)代换,得
x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ˉ x_t=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\bar\epsilon xt=αtαt1 xt2+1αtαt1 ϵˉ
不难看出,现在就有了 x t − 1 x_{t-1} xt1图像和 x t x_t xt的图像关系,就不需要再一步步加入噪声了,可以一步到位

所以,当求某个随机变量的概率时,可以写成

q ( x t ∣ x t − 1 ) ∼ N ( x t ∣ α t x t − 1 , ( 1 − α t ) I ) q(x_t|x_{t-1})\sim N(x_t|\sqrt{\alpha_t}x_{t-1},(1-\alpha_{t})I) q(xtxt1)N(xtαt xt1,(1αt)I)
为了更好的表示从0到 t t t时刻的概率分布,我们设 α ˉ t = ∏ i = 0 t α i \bar\alpha_t=\prod\limits_{i=0}^t\alpha_i αˉt=i=0tαi

加噪的过程则可表示为
x t = α ˉ t x 0 + 1 − α ˉ t ϵ t (5) x_t=\sqrt{\bar\alpha_t}x_{0}+\sqrt{1-\bar\alpha_t}\epsilon_t\tag{5} xt=αˉt x0+1αˉt ϵt(5)
其概率分布表示为
q ( x t ∣ x 0 ) ∼ N ( x t ∣ α ˉ t x 0 , ( 1 − α ˉ t ) I ) (6) q(x_t|x_0)\sim N(x_t|\sqrt{\bar\alpha_t}x_{0},(1-\bar\alpha_t)I)\tag{6} q(xtx0)N(xtαˉt x0,(1αˉt)I)(6)
除此之外,为了后面的表达方便,作者还使用 β = 1 − α \beta = 1-\alpha β=1α β ˉ = 1 − α ˉ \bar\beta=1-\bar\alpha βˉ=1αˉ

因此,可得
x t = 1 − β ˉ t x t − 1 + β ˉ t ϵ t q ( x t ∣ x t − 1 ) ∼ N ( x t ∣ 1 − β t x t − 1 , β t I ) q ( x t ∣ x 0 ) ∼ N ( x t ∣ 1 − β ˉ t x 0 , β ˉ t I ) x_t=\sqrt{1-\bar\beta_t}x_{t-1}+\sqrt{\bar\beta_t}\epsilon_t\\q(x_t|x_{t-1})\sim N(x_t|\sqrt{1-\beta_t}x_{t-1},\beta_tI)\\ q(x_t|x_0)\sim N(x_t|\sqrt{1-\bar\beta_t}x_{0},\bar\beta_tI) xt=1βˉt xt1+βˉt ϵtq(xtxt1)N(xt1βt xt1,βtI)q(xtx0)N(xt1βˉt x0,βˉtI)

2.4、逆扩散过程

得到了 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)的加噪过程及其概率分布。前面提到,我们的最终目标是从T时刻采样出数据,然后慢慢去噪,就得到生成的图像。那么,该如何去噪呢?换句话说,我们该如何求出 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)呢?

论文提出,当扩散过程的 β \beta β足够小,那么其逆操作,也同样符合正态分布,也就是 q ( x t − 1 ∣ x t ) ∼ N q(x_{t-1}|x_t)\sim N q(xt1xt)N

2.5、一阶马尔可夫假设

在扩散过程中,模型总是一个时刻一个时刻地加噪,也就是说, t t t时刻的图像,是来自 t − 1 t-1 t1时刻的

在这里插入图片描述

所以,在这种过程中,引入一个假设——马尔可夫假设

一阶马尔可夫假设:给定 t − 1 t-1 t1时刻的状态, t t t时刻仅与 t − 1 t-1 t1时刻有关,与过去的状态无关

概率表达为
q ( x t ∣ x t − 1 , x t − 2 , ⋯   , x 0 ) = q ( x t ∣ x t − 1 ) q(x_t|x_{t-1},x_{t-2},\cdots,x_0)=q(x_t|x_{t-1}) q(xtxt1,xt2,,x0)=q(xtxt1)
逆扩散也是一样的道理(按照图中箭头即可看到)
P ( x t − 1 ∣ x t , x t + 1 , ⋯   , x T ) = P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t,x_{t+1},\cdots,x_T)=P(x_{t-1}|x_t) P(xt1xt,xt+1,,xT)=P(xt1xt)
由马尔可夫假设,我们不难得出
q ( x 1 : T ∣ x 0 ) = q ( x 2 : T ∣ x 0 , x 1 ) q ( x 1 ∣ x 0 ) = q ( x 3 : T ∣ x 0 , x 1 , x 2 ) q ( x 2 ∣ x 0 , x 1 ) q ( x 1 ∣ x 0 ) = q ( x 3 : T ∣ x 0 , x 1 , x 2 ) q ( x 2 ∣ x 1 ) q ( x 1 ∣ x 0 ) \begin{aligned}q(x_{1:T}|x_0)=&q(x_{2:T}|x_0,x_1)q(x_{1}|x_0)\\=&q(x_{3:T}|x_0,x_1,x_2)q(x_{2}|x_0,x_1)q(x_{1}|x_0)\\=&q(x_{3:T}|x_0,x_1,x_2)q(x_{2}|x_1)q(x_{1}|x_0)\end{aligned}\nonumber q(x1:Tx0)===q(x2:Tx0,x1)q(x1x0)q(x3:Tx0,x1,x2)q(x2x0,x1)q(x1x0)q(x3:Tx0,x1,x2)q(x2x1)q(x1x0)
然后不断拆分,就得到了
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(x_{1:T}|x_0)=\prod\limits_{t=1}^Tq(x_t|x_{t-1}) q(x1:Tx0)=t=1Tq(xtxt1)
逆扩散过程也同理, P ( x 0 : T − 1 ∣ x T ) = ∏ t = 1 T P ( x t − 1 ∣ x t ) P(x_{0:T-1}|x_T)=\prod\limits_{t=1}^TP(x_{t-1}|x_{t}) P(x0:T1xT)=t=1TP(xt1xt)

3、Diffusion训练

3.1、目标函数

按照传统做法,直接对训练图片求极大似然,定义所有图像为 X X X
X = ( x 1 , x 2 , x 3 , . . , x n ) X=\begin{pmatrix}x^{1},x^{2},x^{3},..,x^n\end{pmatrix} X=(x1,x2,x3,..,xn)
x i x^{i} xi是第 i i i个样本,样本之间独立同分布

对X求对数似然
log ⁡ P ( X ) = log ⁡ P ( x 1 , x 2 , . . . , x n ) = log ⁡ ∏ i = 1 n P ( x i ) = ∑ i = 1 n log ⁡ P ( x i ) \begin{aligned}\log P(X)=&\log P(x^1,x^2,...,x^n)\\=&\log\prod\limits_{i=1}^nP(x^{i})\\=&\sum\limits_{i=1}^n\log P(x^i)\end{aligned}\nonumber logP(X)===logP(x1,x2,...,xn)logi=1nP(xi)i=1nlogP(xi)
我们先从某一个样本出发,为了简便,直接记作 P ( x ) P(x) P(x)

而x是前向扩散的初始图像,为了区分不同时刻的图像,我们把 P ( x ) P(x) P(x)表示为 P ( x 0 ) P(x_0) P(x0),代表是初始图像
log ⁡ P ( x 0 ) = log ⁡ P ( x 0 : T ) P ( x 1 : T ∣ x 0 ) \log P(x_0)=\log\frac{P(x_{0:T})}{P(x_{1:T}|x_0)} logP(x0)=logP(x1:Tx0)P(x0:T)
P ( x 0 : T ) = P ( x 0 , x 1 , ⋯   , x T ) P(x_{0:T})=P(x_0,x_1,\cdots,x_T) P(x0:T)=P(x0,x1,,xT)

引入一个 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:Tx0),在等式左右,关于 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:Tx0)求积分

等式左边:
∫ log ⁡ P ( x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = log ⁡ P ( x 0 ) ∫ q ( x 1 : T ∣ x 0 ) d x 1 : T = log ⁡ P ( x 0 ) \int\log P(x_0)q(x_{1:T}|x_0)dx_{1:T}=\log P(x_0)\int q(x_{1:T}|x_0)dx_{1:T}=\log P(x_0) logP(x0)q(x1:Tx0)dx1:T=logP(x0)q(x1:Tx0)dx1:T=logP(x0)
等式右边:
∫ log ⁡ P ( x 0 : T ) P ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T \int \log\frac{P(x_{0:T})}{P(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T} logP(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:T
所以:
log ⁡ P ( x 0 ) = ∫ log ⁡ P ( x 0 : T ) P ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) P ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = ∫ ( log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) − log ⁡ P ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) ) q ( x 1 : T ∣ x 0 ) d x 1 : T = ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T − ∫ log ⁡ P ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T ⏟ ① + K L ( q ( x 1 : T ∣ x 0 ) ∣ ∣ P ( x 1 : T ∣ x 0 ) ) ⏟ ② \begin{aligned}\log P(x_0)=&\int \log\frac{P(x_{0:T})}{P(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}\\=&\int\log \frac{\frac{P(x_{0:T})}{q(x_{1:T}|x_0)}}{\frac{P(x_{1:T}|x_0)}{q(x_{1:T}|x_0)}}q(x_{1:T}|x_0)dx_{1:T}\\=&\int\left(\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}-\log\frac{P(x_{1:T}|x_0)}{q(x_{1:T}|x_0)} \right) q(x_{1:T}|x_0)dx_{1:T}\\=&\int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}-\int\log\frac{P(x_{1:T}|x_0)}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}\\=&\underbrace{\int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}}_{①}+\underbrace{KL(q(x_{1:T}|x_0)||P(x_{1:T}|x_0))}_{②}\end{aligned}\nonumber logP(x0)=====logP(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:Tlogq(x1:Tx0)P(x1:Tx0)q(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:T(logq(x1:Tx0)P(x0:T)logq(x1:Tx0)P(x1:Tx0))q(x1:Tx0)dx1:Tlogq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:Tlogq(x1:Tx0)P(x1:Tx0)q(x1:Tx0)dx1:T logq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:T+ KL(q(x1:Tx0)∣∣P(x1:Tx0))
②是一个KL散度,但是 P ( x 1 : T ∣ x 0 ) P(x_{1:T}|x_0) P(x1:Tx0)我们是没有办法求出来的。因此,我们可以选择去求出 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:Tx0),由KL散度 ≥ 0 \ge0 0可知,当两个概率分布相等,KL等于0,只需要让②最小,所以我们有一个优化目标,也就是最小化
min ⁡ K L ( q ( x 1 : T ∣ x 0 ) ∣ ∣ P ( x 1 : T ∣ x 0 ) ) \min KL(q(x_{1:T}|x_0)||P(x_{1:T}|x_0)) minKL(q(x1:Tx0)∣∣P(x1:Tx0))
而我们知道,当给定训练数据 x 0 x_0 x0跟对应的似然参数时, log ⁡ P ( x 0 ) \log P(x_0) logP(x0)的值是唯一确定的。对于一个确定的值,我们最小化②,就相当于最大化①。因为 log ⁡ P ( x 0 ) \log P(x_0) logP(x0)是确定的,所以②变小,就意味着①增大,
max ⁡ ∫ z log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T ↔ min ⁡ K L ( q ( x 1 : T ∣ x 0 ) ∣ ∣ P ( x 1 : T ∣ x 0 ) ) \max \int_{z}\log\frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T} \leftrightarrow \min KL(q(x_{1:T}|x_0)||P(x_{1:T}|x_0)) maxzlogq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:TminKL(q(x1:Tx0)∣∣P(x1:Tx0))
由于式子②始终大于等于0,所以对于①,由于 log ⁡ P ( x 0 ) ≥ ① \log P(x_0)\ge① logP(x0),所以①又被称为变分下界

所以,我们优化的,其实根本就不是极大似然,而是似然的变分下界,这也是一种无奈之举

优化其变分下界

log ⁡ P ( x 0 ) ≥ ∫ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) q ( x 1 : T ∣ x 0 ) d x 1 : T = E q [ log ⁡ P ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) P ( x 0 : T − 1 ∣ x T ) q ( x 1 : T ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + log ⁡ P ( x 0 : T − 1 ∣ x T ) q ( x 1 : T ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + log ⁡ ∏ t = 1 T P ( x t − 1 ∣ x t ) ∏ t = 1 T q ( x t ∣ x t − 1 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 1 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] (7) \begin{aligned}\log P(x_0)\ge& \int\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}q(x_{1:T}|x_0)dx_{1:T}\\=&\mathbb{E}_q\left[\log \frac{P(x_{0:T})}{q(x_{1:T}|x_0)}\right] \\=&\mathbb{E}_q\left[\log \frac{P(x_T)P(x_{0:T-1}|x_T)}{q(x_{1:T}|x_0)}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\log\frac{P(x_{0:T-1}|x_T)}{q(x_{1:T}|x_0)}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\log\frac{\prod\limits_{t=1}^{T}P(x_{t-1}|x_t)}{\prod\limits_{t=1}^Tq(x_t|x_{t-1})}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=1}^T\log\frac{P(x_{t-1}|x_t)}{q(x_t|x_{t-1})}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\log\frac{P(x_{t-1}|x_t)}{\color{red}{q(x_t|x_{t-1})}}+\log\frac{P(x_{0}|x_1)}{q(x_1|x_0)}\right]\nonumber\end{aligned}\tag{7} logP(x0)======logq(x1:Tx0)P(x0:T)q(x1:Tx0)dx1:TEq[logq(x1:Tx0)P(x0:T)]Eq[logq(x1:Tx0)P(xT)P(x0:T1xT)]Eq[logP(xT)+logq(x1:Tx0)P(x0:T1xT)]Eq logP(xT)+logt=1Tq(xtxt1)t=1TP(xt1xt) Eq[logP(xT)+t=1Tlogq(xtxt1)P(xt1xt)]Eq[logP(xT)+t=2Tlogq(xtxt1)P(xt1xt)+logq(x1x0)P(x0x1)](7)

对红色部分,由马尔可夫假设和条件概率公式可得
1 q ( x t ∣ x t − 1 ) = 1 q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x 0 ) q ( x t , x t − 1 ∣ x 0 ) = q ( x t − 1 ∣ x 0 ) q ( x t − 1 ∣ , x t , x 0 ) q ( x t ∣ x 0 ) \frac{1}{q(x_t|x_{t-1})}=\frac{1}{q(x_t|x_{t-1},x_0)}=\frac{q(x_{t-1}|x_0)}{q(x_{t},x_{t-1}|x_0)}=\frac{q(x_{t-1}|x_0)}{q(x_{t-1}|,x_{t},x_0)q(x_{t}|x_0)} q(xtxt1)1=q(xtxt1,x0)1=q(xt,xt1x0)q(xt1x0)=q(xt1,xt,x0)q(xtx0)q(xt1x0)
将其代入式(7),可得
log ⁡ P ( x 0 ) ≥ E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 2 T [ log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + log ⁡ q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ] + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + ∑ t = 2 T log ⁡ q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + log ⁡ ∏ t = 2 T q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] (8) \begin{aligned}\log P(x_0)\ge&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}\frac{q(x_{t-1}|x_0)}{q(x_{t}|x_0)}+\log\frac{P(x_0|x_1)}{q(x_1|x_0)}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\left[\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+\log \frac{q(x_{t-1}|x_0)}{q(x_{t}|x_0)}\right]+\log\frac{P(x_0|x_1)}{q(x_1|x_0)}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+\sum\limits_{t=2}^T\log \frac{q(x_{t-1}|x_0)}{q(x_{t}|x_0)}+\log\frac{P(x_0|x_1)}{q(x_1|x_0)}\right]\\=&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+{\color{red}\log\prod\limits_{t=2}^T \frac{q(x_{t-1}|x_0)}{q(x_{t}|x_0)}}+\log\frac{P(x_0|x_1)}{q(x_1|x_0)}\right]\end{aligned}\tag{8} logP(x0)===Eq[logP(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)q(xtx0)q(xt1x0)+logq(x1x0)P(x0x1)]Eq[logP(xT)+t=2T[logq(xt1xt,x0)P(xt1xt)+logq(xtx0)q(xt1x0)]+logq(x1x0)P(x0x1)]Eq[logP(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)+t=2Tlogq(xtx0)q(xt1x0)+logq(x1x0)P(x0x1)]Eq[logP(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)+logt=2Tq(xtx0)q(xt1x0)+logq(x1x0)P(x0x1)](8)
标红那一部分,把连乘展开
log ⁡ ∏ t = 2 T q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) = log ⁡ q ( x 1 ∣ x 0 ) q ( x 2 ∣ x 0 ) ∗ q ( x 2 ∣ x 0 ) q ( x 3 ∣ x 0 ) ⋯ ∗ q ( x T − 2 ∣ x 0 ) q ( x T − 1 ∣ x 0 ) ∗ q ( x T − 1 ∣ x 0 ) q ( x T ∣ x 0 ) = log ⁡ q ( x 1 ∣ x 0 ) q ( x T ∣ x 0 ) \log\prod\limits_{t=2}^T \frac{q(x_{t-1}|x_0)}{q(x_{t}|x_0)}=\log\frac{q(x_1|x_0)}{q(x_2|x_0)}*\frac{q(x_2|x_0)}{q(x_3|x_0)}\cdots *\frac{q(x_{T-2}|x_0)}{q(x_{T-1}|x_0)}*\frac{q(x_{T-1}|x_0)}{q(x_T|x_0)}=\log \frac{q(x_1|x_0)}{q(x_T|x_0)} logt=2Tq(xtx0)q(xt1x0)=logq(x2x0)q(x1x0)q(x3x0)q(x2x0)q(xT1x0)q(xT2x0)q(xTx0)q(xT1x0)=logq(xTx0)q(x1x0)
将其代入式(8),可得
log ⁡ P ( x 0 ) ≥ E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + log ⁡ q ( x 1 ∣ x 0 ) q ( x T ∣ x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] = E q [ log ⁡ P ( x T ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + log ⁡ q ( x 1 ∣ x 0 ) − log ⁡ q ( x T ∣ x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) q ( x 1 ∣ x 0 ) ] \begin{aligned}\log P(x_0)\ge&\mathbb{E}_q\left[\log P(x_T)+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+\log \frac{q(x_{1}|x_0)}{q(x_{T}|x_0)}+\log\frac{P(x_0|x_1)}{q(x_1|x_0)}\right]\\=&\mathbb{E}_q\left[{\color{blue}\log P(x_T)}+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+{\color{red}\log q(x_1|x_0)}-{\color{blue}\log q(x_T|x_0)}+{\color{red}\log\frac{P(x_0|x_1)}{q(x_1|x_0)}}\right]\end{aligned}\nonumber logP(x0)=Eq[logP(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)+logq(xTx0)q(x1x0)+logq(x1x0)P(x0x1)]Eq[logP(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)+logq(x1x0)logq(xTx0)+logq(x1x0)P(x0x1)]
依据 log ⁡ \log log运算法则,将蓝色跟蓝色的式子结合起来(红色同理)
log ⁡ P ( x 0 ) ≥ E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) + ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) + log ⁡ P ( x 0 ∣ x 1 ) ] = E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] ⏟ ① + E q [ ∑ t = 2 T log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) ] ⏟ ② + E q [ log ⁡ P ( x 0 ∣ x 1 ) ] ⏟ ③ (9) \begin{aligned}\log P(x_0)\ge&\mathbb{E}_q\left[\log \frac{{P(x_T)}}{ q(x_T|x_0)}+\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}+\log P(x_0|x_1)\right]\\=&\underbrace{\mathbb{E}_q\left[\log \frac{{P(x_T)}}{ q(x_T|x_0)}\right]}_{①}+\underbrace{\mathbb{E}_q\left[\sum\limits_{t=2}^T\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}\right]}_{②}+\underbrace{\mathbb{E}_q\left[\log P(x_0|x_1)\right]}_{③}\end{aligned}\tag{9} logP(x0)=Eq[logq(xTx0)P(xT)+t=2Tlogq(xt1xt,x0)P(xt1xt)+logP(x0x1)] Eq[logq(xTx0)P(xT)]+ Eq[t=2Tlogq(xt1xt,x0)P(xt1xt)]+ Eq[logP(x0x1)](9)
从式(7)不难看出,里面的 q q q q ( x 2 : T ∣ x 1 ) q(x_{2:T}|x_1) q(x2:Tx1),对于①

我们可得
E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] = E q ( x T ∣ x 0 ) [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] \mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}\right]=\mathbb{E}_{q(x_T|x_0)}\left[\log\frac{P(x_T)}{q(x_T|x_0)}\right] Eq[logq(xTx0)P(xT)]=Eq(xTx0)[logq(xTx0)P(xT)]
这是因为 q q q q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:Tx0),而 E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] \mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}\right] Eq[logq(xTx0)P(xT)]里面只有 x T x_T xT这个随机变量,其他的随机变量里面都没有那关于 q ( x 1 : T − 1 ∣ x 0 ) q(x_{1:T-1}|x_0) q(x1:T1x0)求期望时,就完全是对常数求期望一样,完全不变。如果你不明白,我们可以做个推导

我们先看①
E q [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] = ∫ x 1 : T q ( x 1 : T ∣ x 0 ) log ⁡ P ( x T ) q ( x T ∣ x 0 ) d x 1 : T = ∫ x T ∫ x T − 1 ⋯ ∫ x 2 ∫ x 1 q ( x 1 : T ∣ x 0 ) log ⁡ P ( x T ) q ( x T ∣ x 0 ) d x 1 ⏟ d x 2 ⋯ d x T = ∫ x T ∫ x T − 1 ⋯ ∫ x 2 log ⁡ P ( x T ) q ( x T ∣ x 0 ) ∫ x 1 q ( x 1 : T ∣ x 0 ) d x 1 ⏟ d x 2 ⋯ d x T = ∫ x T ∫ x T − 1 ⋯ ∫ x 2 log ⁡ [ P ( x T ) q ( x T ∣ x 0 ) ] q ( x 2 : T ∣ x 0 ) d x 2 ⋯ d x T ⋮ = ∫ x T q ( x T ∣ x 0 ) log ⁡ P ( x T ) q ( x T ∣ x 0 ) d x T = E q ( x T ∣ x 0 ) [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] = − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) \begin{aligned}\mathbb{E}_q\left[\log \frac{P(x_T)}{q(x_T|x_0)}\right]=&\int_{x_{1:T}} q(x_{1:T}|x_0)\log \frac{P(x_T)}{q(x_T|x_0)}dx_{1:T}\\=&\int_{x_T}\int_{x_{T-1}}\cdots \int_{x_{2}}\underbrace{\int_{x_1} q(x_{1:T}|x_0)\log\frac{P(x_T)}{q(x_T|x_0)}dx_1}dx_{2}\cdots dx_{T}\\=&\int_{x_T}\int_{x_{T-1}}\cdots \int_{x_{2}}\underbrace{\log\frac{P(x_T)}{q(x_T|x_0)}\int_{x_1} q(x_{1:T}|x_0)dx_1}dx_{2}\cdots dx_{T}\\=&\int_{x_T}\int_{x_{T-1}}\cdots \int_{x_{2}}\log\left[\frac{P(x_T)}{q(x_T|x_0)}\right] q(x_{2:T}|x_0)dx_{2}\cdots dx_{T}\\\vdots&\\=&\int_{x_T}q(x_{T}|x_0)\log \frac{P(x_T)}{q(x_T|x_0)}dx_T\\=&{\color{red}\mathbb{E}_{q(x_T|x_0)}\left[\log\frac{P(x_T)}{q(x_T|x_0)}\right]}\\=&-KL\left(q(x_T|x_0)||P(x_T)\right)\end{aligned}\nonumber Eq[logq(xTx0)P(xT)]=======x1:Tq(x1:Tx0)logq(xTx0)P(xT)dx1:TxTxT1x2 x1q(x1:Tx0)logq(xTx0)P(xT)dx1dx2dxTxTxT1x2 logq(xTx0)P(xT)x1q(x1:Tx0)dx1dx2dxTxTxT1x2log[q(xTx0)P(xT)]q(x2:Tx0)dx2dxTxTq(xTx0)logq(xTx0)P(xT)dxTEq(xTx0)[logq(xTx0)P(xT)]KL(q(xTx0)∣∣P(xT))
对于②,③。也是一样的道理,所以式(9)得
log ⁡ P ( x 0 ) ≥ E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] + ∑ t = 2 T E q ( x t − 1 , x t ∣ x 0 ) [ log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) ] + E q ( x T ∣ x 0 ) [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] = E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] + ∑ t = 2 T E q ( x t − 1 ∣ x 0 , x t ) q ( x t ∣ x 0 ) [ log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) ] + E q ( x T ∣ x 0 ) [ log ⁡ P ( x T ) q ( x T ∣ x 0 ) ] = E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] + ∑ t = 2 T E q ( x t ∣ x 0 ) ∫ q ( x t − 1 ∣ x 0 , x t ) log ⁡ P ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x t , x 0 ) d x t − 1 + ∫ q ( x T ∣ x 0 ) log ⁡ P ( x T ) q ( x T ∣ x 0 ) d x T = E q ( x 1 ∣ x 0 ) [ log ⁡ P ( x 0 ∣ x 1 ) ] − ∑ t = 2 T E q ( x t ∣ x 0 ) [ K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ P ( x t − 1 ∣ x t ) ) ] − K L ( q ( x T ∣ x 0 ) ∣ ∣ P ( x T ) ) (10) \begin{aligned}\log P(x_0)\ge& \mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]+\sum\limits_{t=2}^T\mathbb{E}_{q(x_{t-1},x_{t}|x_0)}\left[\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}\right]+\mathbb{E}_{q(x_T|x_0)}\left[\log\frac{P(x_T)}{q(x_T|x_0)}\right]\\=& \mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]+\sum\limits_{t=2}^T\mathbb{E}_{q(x_{t-1}|x_0,x_{t})q(x_{t}|x_0)}\left[\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}\right]+\mathbb{E}_{q(x_T|x_0)}\left[\log\frac{P(x_T)}{q(x_T|x_0)}\right]\\=&\mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]+\sum\limits_{t=2}^T\mathbb{E}_{q(x_{t}|x_0)}\int q(x_{t-1}|x_0,x_t)\log \frac{P(x_{t-1}|x_t)}{q(x_{t-1}|x_{t},x_0)}dx_{t-1}+\int q(x_T|x_0)\log\frac{P(x_T)}{q(x_T|x_0)}dx_T\\=&\mathbb{E}_{q(x_1|x_0)}\left[\log P(x_0|x_1)\right]-\sum\limits_{t=2}^T\mathbb{E}_{q(x_t|x_0)}\left[KL(q(x_{t-1}|x_t,x_0)||P(x_{t-1}|x_t))\right]-KL\left(q(x_T|x_0)||P(x_T)\right)\end{aligned}\tag{10} logP(x0)===Eq(x1x0)[logP(x0x1)]+t=2TEq(xt1,xtx0)[logq(xt1xt,x0)P(xt1xt)]+Eq(xTx0)[logq(xTx0)P(xT)]Eq(x1x0)[logP(x0x1)]+t=2TEq(xt1x0,xt)q(xtx0)[logq(xt1xt,x0)P(xt1xt)]+Eq(xTx0)[logq(xTx0)P(xT)]Eq(x1x0)[logP(x0x1)]+t=2TEq(xtx0)q(xt1x0,xt)logq(xt1xt,x0)P(xt1xt)dxt1+q(xTx0)logq(xTx0)P(xT)dxTEq(x1x0)[logP(x0x1)]t=2TEq(xtx0)[KL(q(xt1xt,x0)∣∣P(xt1xt))]KL(q(xTx0)∣∣P(xT))(10)
所以,式(10)就是我们要优化的目标函数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

luceda ipkiss教程 67:修改器件端口名

如果要替换线路中的器件,但是要替换的器件端口名称又不一样,那该怎么办呢?去对应改线路中端口的名称太过繁琐,这就需要需要器件的端口名,如: 改y分束器的端口名 改了端口名称,线路中的器件就可…

【大学物理】东北大学-马文蔚听课笔记

4.1刚体的定轴转动_哔哩哔哩_bilibili 此笔记为课堂学习笔记~ 4.1刚体的定轴转动 基本教学要求 什么时刚体呢? 研究刚体运动切口 平动:刚体中所有的点的运动轨迹都完全相同。 转动:分为¥定轴转动和非定轴转动 刚体转动的角速度…

Axure实现菜单抽屉效果

Axure是怎么实现如下效果的? 菜单打开和收起侧边栏菜单抽屉效果 实现效果 两级菜单,点击菜单收起其他菜单,打开当前菜单。 实现原理 单击一级菜单时,1)切换当下二季菜单的显示/隐藏状态 2)隐藏其他菜单…

MultiBoot 和 QuickBoot

目录 MultiBoot简介MultiBoot 实现方式设置 bitstream 属性使用 ICAPE2 原语WBSTAR 寄存器定义 MultiBoot 工作流程生成mcs固化文件 Tcl 指令Fallback状态寄存器MultiBoot 正常加载状态看门狗1超时状态看门狗2超时状态CRC 错误和无 DESYNC 命令IDCODE 错误状态CRC 错误状态 Wat…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

判断字符是否唯一——力扣

面试题 01.01. 判定字符是否唯一 已解答 简单 相关标签 相关企业 提示 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true…

【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task

论文&#xff1a;UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation ⭐⭐⭐⭐ EMNLP 2023, Microsoft Code&#xff1a;https://github.com/microsoft/LMOps 一、论文速读 这篇论文提出了 UPRISE&#xff0c;其思路是&#xff1a;训练一个 prompt retri…

【JVM】了解JVM规范中的虚拟机结构

目录 JVM规范的主要内容 1&#xff09;字节码指令集(相当于中央处理器CPU) JVM指令分类 2&#xff09;Class文件的格式 3&#xff09;数据类型和值 4&#xff09;运行时数据区 5&#xff09;栈帧 6&#xff09;特殊方法 7&#xff09;类库 JVM规范的主要内容 1&#…

软件测试人员必备的60个测试工具,果断收藏了!_测试工程师必备软件

据统计&#xff0c;中国软件外包市场的潜力和机会已远远超过软件王国印度&#xff0c;不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才&#xff0c;不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加&#xff0c;因此软件…

TC377TX 超声波雷达数据更新缓慢问题排查

1、问题表象 通过标定数据查看超声波雷达实时的距离大小,发现距离并没有实时更新,而是在实际值与默认值之间跳变,更新十分缓慢。   泊车功能必须依赖超声波雷达测距来实现,当雷达数据更新缓慢时,会导致泊车失败。 2、超声波雷达测距实现原理 MCU给超声波雷达发送一个40…

番外篇 | YOLOv8改进之利用SCINet解决黑夜目标检测问题 | 低照度图像增强网络

前言:Hello大家好,我是小哥谈。自校正照明网络(Self-Calibrating Illumination Network, SCINet)是一种基于深度学习的图像照明算法,可以自动分析图像的内容并根据图像内容自动优化照明。SCINet是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制…

【智能优化算法】金豺狼优化算法(Golden jackal optimization,GJO)

金豺狼优化(Golden jackal optimization,GJO)是期刊“Expert Systems with Applications”&#xff08;中科院一区IF 8.3&#xff09;的2022年智能优化算法 01.引言 金豺狼优化(Golden jackal optimization,GJO)旨在为解决实际工程问题提供一种替代的优化方法。GJO的灵感来自金…

YOLO数据集制作(一)|Labelme标注的矩形框json文件转txt

以下教程用于将使用Labelme软件标注生成的json格式文件转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;矩形框 使用方法&#xff1a;将json文件夹路径填到json_dir后&#xff0c; 将保存转化后txt的路径填入txt_dir后&#xff0c;运行即可转化。 运行完成后会生成label…

从头理解transformer,注意力机制(上)

深入理解注意力机制和Transformer架构&#xff0c;及其在NLP和其他领域的突破。 要想理解transformer&#xff0c;先从编码器解码器结构开始理解 基于transformer发展起来的llm 右边&#xff1a;只有解码器&#xff0c;强项是生成内容 左边&#xff1a;只有编码器&#xff0…

云动态摘要 2024-05-07

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

JUC下CountDownLatch详解

详细介绍 CountDownLatch是Java并发包java.util.concurrent中提供的一个同步工具类&#xff0c;它允许一个或多个线程等待其他线程完成操作后再继续执行。这个工具类基于一个计数器&#xff0c;计数器的初始值可以由构造函数设定。线程调用countDown()方法会将计数器减1&#x…

79.网络游戏逆向分析与漏洞攻防-移动系统分析-利用数据包实现人物走路

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

全新时代的降临——比亚迪,助力未来出行

近日&#xff0c;世界舞台中央聚焦&#xff0c;比亚迪登上欧洲顶级赛事赞助席位&#xff0c;让全球见证中国新能源汽车传奇崛起&#xff01;作为新能源领袖品牌&#xff0c;比亚迪现已累计销售突破730万辆&#xff0c;全球每售出五辆新能源汽车&#xff0c;便有一辆来自比亚迪。…

CLI举例:配置HTTP服务器的负载均衡

CLI举例&#xff1a;配置HTTP服务器的负载均衡 本举例介绍了如何配置HTTP服务器的负载均衡。 组网需求 如图1所示&#xff0c;企业有三台Web服务器Server1、Server2和Server3&#xff0c;且这三台服务器的硬件性能顺次降低&#xff0c;Server1性能是Server2的两倍、Server2性能…

Linux(利用gdb进行调试)

gdb: gdb是GNU debugger的缩写&#xff0c;是编程调试工具。 gdb功能 1.启动程序&#xff0c;可以按照用户自定义的要求随心所欲的运行程序。 2.让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。 3.当程序停住时&#xff0c;可以检查此时程序中所发…