生成模型VAE

news2024/11/25 6:46:53

VAE

  • likelihood-based
  • ELBO
  • VAE
    • SGVB估计器和AEVB算法
    • 重参数化

likelihood-based

likelihood-based generative models是生成模型的一类范式,通过最大化所有观测数据的似然函数来学习模型参数。

该怎么去理解likelihood-based,基于似然的生成模型,优化的目标函数到底是什么?
在这里插入图片描述
如图所示,我们希望待学习分布 p θ ( x ) p_\theta(x) pθ(x)和真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)尽可能近。那该如何度量两个分布之间的距离?自然想到KL散度。
D K L ( P d a t a ∣ ∣ P θ ) = E x ∼ P d a t a [ l o g P d a t a ( x ) P θ ( x ) ] = E x ∼ P d a t a [ l o g P d a t a ( x ) ] − E x ∼ P d a t a [ l o g P θ ( x ) ] \begin{aligned} D_{KL}(P_{data}||P_\theta) &= E_{x\sim P_{data}}[log\frac{P_{data}(x)}{P_\theta(x)}] \\ &= E_{x\sim P_{data}}[logP_{data}(x)] - E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned} DKL(Pdata∣∣Pθ)=ExPdata[logPθ(x)Pdata(x)]=ExPdata[logPdata(x)]ExPdata[logPθ(x)]
RHS第一项是常量,不依赖待学习参数 θ \theta θ。因此最小化KL散度等价于最大化log-likelihood
a r g m i n P θ D K L ( P d a t a ∣ ∣ P θ ) = a r g m i n P θ − E x ∼ P d a t a [ l o g P θ ( x ) ] = a r g m a x P θ E x ∼ P d a t a [ l o g P θ ( x ) ] \begin{aligned} \mathop{argmin}\limits_{P_\theta}D_{KL}(P_{data}||P_\theta) &= \mathop{argmin}\limits_{P_\theta} - E_{x\sim P_{data}}[logP_\theta(x)] \\&= \mathop{argmax}\limits_{P_\theta} E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned} PθargminDKL(Pdata∣∣Pθ)=PθargminExPdata[logPθ(x)]=PθargmaxExPdata[logPθ(x)]

ELBO

假设数据集中有N个数据点 { x ( 1 ) , . . . , x ( N ) } \{x^{(1)}, ..., x^{(N)}\} {x(1),...,x(N)},定义在其上的概率似然可以写作:
E x ∼ P d a t a [ l o g P θ ( x ) ] = ∑ i = 1 N [ l o g p θ ( x ( i ) ) ] E_{x\sim P_{data}}[logP_\theta(x)] = \sum_{i=1}^N[logp_\theta(x^{(i)})] ExPdata[logPθ(x)]=i=1N[logpθ(x(i))]

对于 l o g p θ ( x ( i ) ) logp_\theta(x^{(i)}) logpθ(x(i))我们有:
l o g p θ ( x ( i ) ) = D K L ( q ϕ ( z ∣ x ( i ) ∣ ∣ p θ ( z ∣ x ( i ) ) ) + L ( θ , ϕ ; x ( i ) ) logp_\theta(x^{(i)}) = D_{KL}(q_\phi(z|x^{(i)} || p_\theta(z|x^{(i)})) + L(\theta, \phi; x^{(i)}) logpθ(x(i))=DKL(qϕ(zx(i)∣∣pθ(zx(i)))+L(θ,ϕ;x(i))

RHS的第一项是近似分布和真实后验分布之间的KL散度,因为KL散度的非负特性,RHS的第二项被称为数据点 x ( i ) x^{(i)} x(i)边际似然的(variational) lower bound,简称为ELBO。因此:
l o g p θ ( x ( i ) ) ≥ L ( θ , ϕ ; x ( i ) ) = E z ∼ q ϕ ( z ∣ x i ) [ l o g p θ ( x ( i ) ∣ z ) ] − D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p ( z ) ) logp_\theta(x^{(i)}) \geq L(\theta, \phi; x^{(i)}) = E_{z\sim q_\phi(z|x^{i})}[logp_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) || p(z)) logpθ(x(i))L(θ,ϕ;x(i))=Ezqϕ(zxi)[logpθ(x(i)z)]DKL(qϕ(zx(i))∣∣p(z))

对于上述结论推导如下。
为了书写简化,下文以 p ( x ) p(x) p(x)代称 p θ ( x ( i ) ) p_\theta(x^{(i)}) pθ(x(i))。正常上式中的 p ( x ) p(x) p(x)非常复杂,无法求解。因此采用变分推断的方式,通过最大化ELBO,达到间接优化似然函数的目的,通常也称为proxy或者surrogate。

对于上面的“ p ( x ) p(x) p(x)非常复杂,无法求解。”做进一步的解释:
我们有两种方式去利用联合概率分布 p ( x , z ) p(x, z) p(x,z)恢复出观测数据的概率似然 p ( x ) p(x) p(x),一种是边际概率似然 p ( x ) = ∫ p ( x , z ) d z p(x)=\int p(x, z)dz p(x)=p(x,z)dz,还有一个是贝叶斯法则 p ( x ) = p ( x , z ) p ( z ∣ x ) p(x)=\frac{p(x, z)}{p(z|x)} p(x)=p(zx)p(x,z)。但这两个方法在计算过程中,方法一是对所有隐变量 z z z做积分,方法二需要知道隐变量编码器 p ( z ∣ x ) p(z|x) p(zx),对于复杂模型,均无法直接求解。因此我们可以利用上述两个公式,推导出ELBO,做为对数似然的代理优化目标函数。

对于上面的“通过最大化ELBO,达到间接优化似然函数的目的”做进一步解释:
引入隐变量 z z z,我们的目标是学习可以描述观测数据的隐变量结构。换句话说,我们希望优化变分后验 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)的参数,使其与真实后验分布 p ( z ∣ x ) p(z|x) p(zx)完全一致。这可以通过最小化两者之间的KL散度实现。但不幸的是,我们不知道真实的 p ( z ∣ x ) p(z|x) p(zx)分布,没法直接求解两者之间的KL散度项。但我们注意到数据的对数似然 l o g p ( x ) logp(x) logp(x)始终是常值,ELBO + KL等于常值,最大化ELBO项等价于最小化KL散度项,ELBO最大时,模型参数达到最优。也因此ELBO可以做为建模并学习后验分布的proxy。

l o g p ( x ) = l o g p ( x ) ∫ q ϕ ( z ∣ x ) d z = ∫ q ϕ ( z ∣ x ) l o g p ( x ) d z = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) p ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) p ( z ∣ x ) q ϕ ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] + E z ∼ q ( z ∣ x ) [ l o g q ϕ ( z ∣ x ) p ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] + K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) ≥ E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] = E L B O \begin{aligned} logp(x) &= logp(x)\int q_\phi(z|x)dz \\ &= \int q_\phi(z|x)logp(x)dz \\ &= E_{z\sim q_\phi(z|x)}[logp(x)] \\ &= E_{z\sim q_\phi(z|x)}[log\frac{p(x, z)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)q_\phi(z|x)}{p(z|x)q_\phi(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + E_{z\sim q(z|x)} [log\frac{q_\phi(z|x)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + KL(q_\phi(z|x)||p(z|x)) \\ &\geq E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned} logp(x)=logp(x)qϕ(zx)dz=qϕ(zx)logp(x)dz=Ezqϕ(zx)[logp(x)]=Ezqϕ(zx)[logp(zx)p(x,z)]=Ezqϕ(zx)[logp(zx)qϕ(zx)p(x,z)qϕ(zx)]=Ezqϕ(zx)[logqϕ(zx)p(x,z)]+Ezq(zx)[logp(zx)qϕ(zx)]=Ezqϕ(zx)[logqϕ(zx)p(x,z)]+KL(qϕ(zx)∣∣p(zx))Ezqϕ(zx)[logqϕ(zx)p(x,z)]=ELBO
推导过程用到了如下特性:
∫ q ϕ ( z ∣ x ) d z = 1 \int q_\phi (z|x)dz = 1 qϕ(zx)dz=1
K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) ≥ 0 KL(q_\phi(z|x)||p(z|x)) \geq 0 KL(qϕ(zx)∣∣p(zx))0
evidence和ELBO之间的差值是非负的KL项,因此ELBO的值不会超过evidence,且当参数化模型近似的后验分布 q ( z ∣ x ) q(z|x) q(zx)和真实后验分布 p ( z ∣ x ) p(z|x) p(zx)一致时,等号成立,因此ELBO可以认为是evidence的严格下界。上述ELBO的推导过程也可以用Jensen不等式推导一遍,但从ELBO是evidence严格下界这个角度去理解,没有上述过程那么直观。
l o g p ( x ) = l o g ∫ p ( x , z ) d z = l o g ∫ p ( x , z ) q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) d z = l o g E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] ≥ E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] = E L B O \begin{aligned} logp(x) &= log\int p(x, z)dz \\ &= log\int p(x, z)\frac{q_\phi(z|x)}{q_\phi(z|x)}dz \\ &= logE_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] \\ &\geq E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned} logp(x)=logp(x,z)dz=logp(x,z)qϕ(zx)qϕ(zx)dz=logEzqϕ(zx)[qϕ(zx)p(x,z)]Ezqϕ(zx)[qϕ(zx)p(x,z)]=ELBO

VAE

将ELBO变换形式可得:
E L B O = E z ∼ q ( z ∣ x ) [ l o g p ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q(z|x)}[logp(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezq(zx)[logp(xz)]KL(qϕ(zx)∣∣p(z))
我们用 ϕ \phi ϕ参数化 p ( z ∣ x ) p(z|x) p(zx)部分,可称之为decoder;用 θ \theta θ参数化 p ( x ∣ z ) p(x|z) p(xz)部分,可称之为encoder,ELBO可以进一步写为:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))

ELBO的第一部分是重建loss,第二部分是对隐变量分布做约束,让其尽可能贴近先验分布 p ( z ) p(z) p(z),最小化该项可以鼓励encoder学习一个正常的分布,而不致于坍塌为Dirac delta函数。

SGVB估计器和AEVB算法

SGVB: Stochastic Gradient Variational Bayes。
AEVB: Auto-Encoding Variational Bayes。

参考下文的重参数化技巧,我们可以将随机变量 z ∼ q ϕ ( z ∣ x ) z\sim q_\phi(z|x) zqϕ(zx)使用一个辅助噪声 ϵ \epsilon ϵ的可微变换 g ϕ ( ϵ , x ) g_\phi(\epsilon, x) gϕ(ϵ,x)重参数化。
z = g ϕ ( ϵ , x ) , ϵ ∈ p ( ϵ ) z=g_\phi(\epsilon, x), \epsilon \in p(\epsilon) z=gϕ(ϵ,x),ϵp(ϵ)
对于一个函数 f ( z ) f(z) f(z)相对与 q ϕ ( z ∣ x ( i ) ) q_\phi(z|x^{(i)}) qϕ(zx(i))分布的期望,我们可以使用Monte Carlo估计:
E z ∼ q ϕ ( z ∣ x ( i ) ) [ f ( z ) ] = E p ( ϵ ) [ f ( g ϕ ( ϵ , x ( i ) ) ) ] ≈ 1 L ∑ l = 1 L f ( g ϕ ( ϵ ( l ) , x ( i ) ) E_{z\sim q_\phi(z|x^{(i)})}[f(z)] = E_{p(\epsilon)}[f(g_\phi(\epsilon, x^{(i)}))] \approx \frac{1}{L}\sum_{l=1}^Lf(g_\phi(\epsilon^{(l)}, x^{(i)}) Ezqϕ(zx(i))[f(z)]=Ep(ϵ)[f(gϕ(ϵ,x(i)))]L1l=1Lf(gϕ(ϵ(l),x(i))
where ϵ ( l ) ∼ p ( ϵ ) \epsilon^{(l)}\sim p(\epsilon) ϵ(l)p(ϵ)
我们可以该技术用在ELBO中,改写下式:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] ELBO = E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] ELBO=Ezqϕ(zx)[qϕ(zx)p(x,z)]
可以得到通用的SGVB估计器:
L ~ A ( θ , ϕ ; x ( i ) ) = 1 L ∑ l = 1 L l o g p θ ( x ( i ) , z ( i , l ) ) − l o g q ϕ ( z ( i , l ) ∣ x ( i ) ) \tilde{L}^A(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)}, z^{(i, l)}) - logq_\phi(z^{(i, l)}|x^{(i)}) L~A(θ,ϕ;x(i))=L1l=1Llogpθ(x(i),z(i,l))logqϕ(z(i,l)x(i))
where z ( i , l ) = g ϕ ( ϵ ( i , l ) , x ( i ) ) = μ ( i ) + σ ( i ) ⊙ ϵ ( l ) z^{(i, l)}=g_\phi(\epsilon^{(i, l)}, x^{(i)})=\mu^{(i)} + \sigma^{(i)}\odot \epsilon^{(l)} z(i,l)=gϕ(ϵ(i,l),x(i))=μ(i)+σ(i)ϵ(l), and ϵ ( l ) ∼ p ( ϵ ) \epsilon^{(l)}\sim p(\epsilon) ϵ(l)p(ϵ)

不过网络训练的时候也不会用上式。而且基于下式做进一步改写:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))
得到第二版SGVB估计器,因为第二项的KL散度有解析形式,因此只有第一项的重建误差需要通过采样进行估计。KL散度项可理解为对参数 ϕ \phi ϕ的正则化,鼓励近似后验分布接近先验分布 p ( z ) p(z) p(z)
L ~ B ( θ , ϕ ; x ( i ) ) = 1 L ∑ l = 1 L l o g p θ ( x ( i ) ∣ z ( i , l ) ) − D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p ( z ) ) ) \tilde{L}^B(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)} | z^{(i, l)}) - D_{KL}(q_\phi(z|x^{(i)}) || p(z))) L~B(θ,ϕ;x(i))=L1l=1Llogpθ(x(i)z(i,l))DKL(qϕ(zx(i))∣∣p(z)))

这里需要大白话翻译一下:输入第 i i i个数据点 x ( i ) x^{(i)} x(i),经过 ϕ \phi ϕ参数化模型,得到后验分布 p ( z ∣ x ) p(z|x) p(zx)的均值 μ ( i ) \mu^{(i)} μ(i)和方差 σ ( i ) \sigma^{(i)} σ(i)。利用该均值方差,我们用蒙特卡洛估计去估算 E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] Ezqϕ(zx)[logpθ(xz)],也就是 l o g p θ ( x ∣ z ) logp_\theta(x|z) logpθ(xz)在隐变量 z z z上的期望值。具体做法就是随机采样 L L L个辅助噪声,利用重参数化技巧构建出隐变量 z ( i , l ) z^{(i, l)} z(i,l),输入到 θ \theta θ参数化的生成模型中,计算 L L L个输出的loss均值,作为最终估计。

假定数据集 X X X有N个数据点,从中随机取M个数据点 X M = { x ( i ) } i = 1 M X^M=\{x^{(i)}\}_{i=1}^M XM={x(i)}i=1M作为minibatch,去估计上述ELBO,则有:
L ( θ , ϕ ; X ) ≈ L ~ M ( θ , ϕ ; X M ) = N M L ~ ( θ , ϕ ; x ( i ) ) L(\theta, \phi; X)\approx \tilde{L}^M(\theta, \phi; X^M)=\frac{N}{M}\tilde{L}(\theta, \phi; x^{(i)}) L(θ,ϕ;X)L~M(θ,ϕ;XM)=MNL~(θ,ϕ;x(i))
实验过程中,我们发现只要minibatch够大,比如M=100,做蒙特卡洛估计时L可以取1,而不用大量采样,拉长学习时长。

对于第一部分 p θ ( x ∣ z ) p_\theta(x|z) pθ(xz)的分布形式不确定,我们可以假设其为多元高斯分布/伯努利分布/拉普拉斯分布。
如果假设其为高斯分布 p ϕ ( x ∣ z ) = N ( x ; μ ϕ ( z ) , σ ϕ 2 ( z ) ) p_\phi(x|z)=N(x;\mu_\phi(z), \sigma^2_\phi(z)) pϕ(xz)=N(x;μϕ(z),σϕ2(z)),则:
l o g p ϕ ( x ∣ z ) = − 1 2 l o g ( 2 π σ ϕ 2 ( z ) ) − 1 2 σ ϕ 2 ( z ) ( x − μ ϕ ( z ) ) 2 logp_\phi(x|z) = -\frac{1}{2}log(2\pi\sigma^2_\phi(z)) - \frac{1}{2\sigma^2_\phi(z)}(x-\mu_\phi(z))^2 logpϕ(xz)=21log(2πσϕ2(z))2σϕ2(z)1(xμϕ(z))2
如果假设方差为定值 I I I,网络只学习 μ ϕ ( z ) \mu_\phi(z) μϕ(z),这样就简化为最一般的MSE Loss(这里还要展开讲一讲,实际训练时,只用MSE Loss监督的话,重建效果会blur,进一步引出了VQGAN,用GAN Loss起到锐化作用)。
如果假设分布是伯努利分布,那么最后将得到一个交叉熵损失。 (待进一步补充)
如果假设分布是拉普拉斯分布,那么最后得到L1损失。 (待进一步补充)

对于第二部分的KL约束,可参考数理基础部分有详细推导。结论是:
K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ) ) = − l o g σ θ ( x ) + 1 2 ( σ θ 2 ( x ) + μ θ 2 ( x ) ) − 1 2 KL(q_\theta(z|x)||p(z)) = -log\sigma_\theta(x) + \frac{1}{2}(\sigma^2_\theta(x) + \mu^2_\theta(x)) - \frac{1}{2} KL(qθ(zx)∣∣p(z))=logσθ(x)+21(σθ2(x)+μθ2(x))21

重参数化

z ∼ p θ ( z ∣ x ) z\sim p_\theta(z|x) zpθ(zx)可以想象为将样本 x x x,输入到参数化为 θ \theta θ的encoder中,得到隐变量 z z z概率分布的参数估计,假设隐变量 z z z服从高斯分布 z ∼ N ( z ; μ θ ( x ) , σ θ 2 ( x ) ) z\sim N(z;\mu_\theta(x), \sigma^2_\theta(x)) zN(z;μθ(x),σθ2(x))。需要从该分布中采样出样本 z z z,输入到decoder部分。这里的采样需要用到重参数化。如果直接利用torch.normal,输入encoder估计出的均值和方差,生成样本,训练过程中梯度无法反传,因此需要用到重参数化,绕开torch.normal采样,采用 m e a n + s t d ∗ ϵ mean + std*\epsilon mean+stdϵ, ϵ ∼ N ( 0 , I ) \epsilon\sim N(0, I) ϵN(0,I)的方式采样,得到样本 z z z,这样训练过程中,梯度就可以正常反传,做参数优化。

import torch
mean = torch.rand(3, requires_grad=True)
std = torch.rand(3, requires_grad=True)
val = torch.normal(mean, std)
loss_1 = sum(val)
loss_1.backward()  # backpropgation计算梯度
print(mean.grad) # tensor([0., 0., 0.])
print(std.grad)  # tensor([0., 0., 0.])

# 重参数化采样
noise = torch.randn(3)
val = mean + std * noise
loss_2 = sum(val)
loss_2.backward()
print(mean.grad) # tensor([1., 1., 1.])
print(std.grad)  # noise value

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

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

相关文章

互联网重构“规则制定权”,周期性谋咒开始轮转!

周期“魔咒”又开始轮转了。 产业趋势叠加资本周期,使得任何产业都有其周期性规律,传统资源产业是如此,科技产业亦非例外。 刚刚迎来30周年庆的中国互联网赛道就正处于新一轮小周期的节点。随着移动用户量逐渐被开发利用至阶段性顶峰&#…

学习c语言第24天(练习)

编程题 第一题 最大公约数最小公倍数求和 //求最大公约数和最小公倍数之和 //暴力求解 //int main() //{ // int n 0; // int m 0; // while (scanf("%d %d", &n, &m)2) // { // int min n < m ? n : m; // int max n > m ? n : m; //…

原神4.8版本角色数据

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原神4.8版本角色数据</title><style>…

【浏览器插件】Chrome扩展V3版本

前言&#xff1a;Chrome从2022年6月开始&#xff0c;新发布插件只接受V3版。2024年V2版已从应用商店下架。 浏览器扩展插件开发API文档 chrome官网&#xff08;要翻墙&#xff09;&#xff1a; https://developer.chrome.com/docs/extensions/mv3 MDN中文&#xff1a;https:/…

gitee拉取项目,提交代码

1&#xff0c;安装git 2&#xff0c;gitee配置成员仓库权限 3&#xff0c;克隆项目 git clone gitgitee.com:sky474775788/Python_API_AUTO.git 4&#xff0c;配置用户信息 git config --global user.name 林俊xxx git config --global user.email ohnxxxsee1xxx.com 5&…

机器学习·L2W4-决策树

决策树 从根节点的所有示例开始计算所有可能特征的分割信息增益&#xff0c;并选择信息增益最高的特征根据所选特征分割数据集&#xff0c;并创建树的左分支和右分支不断重复分割过程&#xff0c;直到满足停止条件 信息增益 也可以理解为信息熵的减少 p p p是结果为positive…

住宅代理和数据中心代理:指纹浏览器用哪个更安全?

在当今的数字时代&#xff0c;确保您的在线安全至关重要。这就是住宅和数据中心代理发挥作用的地方&#xff0c;它们可以保护您的身份和个人信息。指纹浏览器解决了账号所在环境指纹参数隔离的安全问题&#xff0c;而IP解决环境的定位与隔离问题&#xff0c;就像Maskfog中提供的…

洛伦兹微分方程与混沌理论

前言 这一段时间在看书中关于深度学习与神经网络的内容&#xff0c;其中有一节介绍神经网络用于预测洛伦兹微分方程的数值解&#xff0c;还提到了“吸引子”这一概念&#xff0c;当时也没太理解是什么&#xff0c;下午搜集了一本书上关于混沌理论的介绍——《混沌的本质》。 这…

【线性回归】——解决运筹优化类问题

目录 文章目录 前言 一、模型原理 1.线性规划模型的三要素 &#x1f60f;&#x1f60f;&#x1f60f; 2.模型特点 3.线性规划的表现形式 二、模型建立步骤 1.找决策变量 2.确定目标函数 3.找到约束条件 4.运用Matlab中的Linprog函数 总结 前言 在实际生活应用中&#xff0c;我…

Unity入门5——材质

创建材质 点击Assets → Create → Material&#xff0c;得到一个默认材质球的副本。 使用材质 直接把材质球拖拽到物体上&#xff0c;或设置mesh renderer组件下的Materials 数组中第一个元素

etcd高可用集群部署

文章目录 一、环境准备二、安装部署2.1 下载安装包2.2 将etcd和etcdctl复制到/usr/local/bin中2.3 创建目录并赋予权限2.4 修改节点配置2.4.1 配置etcd.conf文件2.4.2 配置/etc/systemd/system/etcd.service文件 2.5 启动ectd服务2.6 查看集群成员信息2.7 查看集群状态 在生产环…

【PyQt5】PyQt5 信号和槽

基于GUI的应用程序是事件驱动的。函数或方法按照用户的操作&#xff08;例如点击按钮、从集合中选择项目或点击鼠标等&#xff09;来执行&#xff0c;这些操作被称为 事件 。用于构建GUI界面的小部件充当这些事件的来源。每个PyQt小部件都是从QObject类派生而来&#xff0c;设计…

《Redis设计与实现》读书笔记-复制

目录 1.概述 2.复制命令 3.部分重同步过程 4.部分重同步实现 4.1复制偏移量 4.2复制积压缓冲区 4.3服务器运行ID 5.总结 1.概述 在redis 通过向从服务器发送命令&#xff1a;SLAVE OF&#xff0c;让从服务器复制主服务器&#xff0c;成为复制。 复制的目的 让从服务器…

等保测评 linux设置三权分立

1、首先浅谈一下目录结构 drwxr-xr-x意思如下&#xff1a;第一位表示文件类型。 d是目录文件&#xff0c;l是链接文件&#xff0c;-是普通文件&#xff0c;p是管道。后面的分三个三个来看&#xff0c;即 rwx 、r-x 、r-x。 第一个&#xff1a; root &#xff1a;r 是可读&#…

在Linux中认识pthread库

int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间&#xff0c;及0号地址&#xff0c;及往虚拟地址的0号地址处写8个字节的数据&#xff0c;全部写为0. &#xff08;此操作不允许&#xff09; 进程和线程的关系如…

Python PDF文本处理技巧 - 查找和高亮文字

目录 使用工具 Python在PDF中查找和高亮文字并统计出现次数和页码 Python在PDF的特定页面区域中查找和高亮文字 Python使用正则表达式在PDF中查找和高亮文字 Python在PDF中查找文字并获取它的坐标位置 其他查找条件设置 在日常工作和学习中&#xff0c;我们常常需要处理各…

命令-响应框架在 ESP RainMaker 中的应用

【如果您之前有关注乐鑫的博客和新闻&#xff0c;那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注&#xff0c;建议先查看相关信息&#xff0c;知晓本文背景。】 在 ESP RainMaker 中&#xff0c;管理员用户可以查看一些基本的节点数据&#xff0c;包括类型、型…

【Liunx】线程与进程的经典面试题总结

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 线程与进程的面试题总结 1 简述什么是LWP2 简述LWP与pthread_create创建的线程之间的关系3 简述轻量级进程ID与进程ID之间的区别4 请简述什么是线程互斥&#xff0c;为什么需要互斥5 简述你了解的进程间通信方式…

【免费测试】人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对&#xff1f; 人脸身份证比对又称人证比对&#xff0c;实人比对&#xff0c;人像比对&#xff0c;输入姓名、身份证号码和头像照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

安科瑞智慧能源管理平台在电动汽车虚拟电厂优化调度起到什么作用?

摘要&#xff1a;大量电动汽车用户的无序充电可能造成电网负荷剧烈波动&#xff0c;危及电网的安全稳定。随着电动汽车入网技术的应用&#xff0c;将电动汽车充电站及其周边的分布式新能源发电聚合为虚拟电厂后进行优化调度&#xff0c;有助于改善电动汽车用户充放电的经济性及…