Diffusion详解及PyTorch代码

news2024/9/23 19:20:27

首先附上几个大佬的讲解

lilianweng-diffusion-models

这篇博客借鉴了上述博客和视频,同时加上个人的理解整合了一下,整个推导过程非常详细,希望能使每个人都看懂

结合之前讲过的VAE和GAN模型,Diffusion Model和他们的区别就是latent code和原图是同尺寸大小的。如下图所示,Diffusion Model分为前向过程和反向过程,前向过程将输入图片 x 0 x_{0} x0变为纯高斯噪声 x T x_{T} xT(就是一个不断加噪的过程),反向过程就是将噪声 x T x_{T} xT还原为图片 x 0 x_{0} x0的过程(就是一个不断去噪的过程)

在这里插入图片描述

知道Diffusion Model在做什么之后,我们分别对Diffusion的每个过程做详细的分析

Diffusion的前向过程

给定真实图片 x 0 ∼ q ( x ) x_{0} \sim q(x) x0q(x),前向过程中diffusion model对其添加了 T T T次高斯噪声,分别得到图 x 1 , x 2 , x 3 , . . . , x T x_{1},x_{2},x_{3},...,x_{T} x1,x2,x3,...,xT,这个过程用下面式子表示
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_{t}|x_{t-1}) = \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) q(xtxt1)=N(xt;1βt xt1,βtI)

整个前向加噪过程是马尔科夫过程,即 t t t时刻的状态只与 t − 1 t-1 t1时刻有关,并且在不断加噪的过程中, x t x_{t} xt不断接近纯噪声, T → ∞ T\rightarrow \infty T x t x_{t} xt变为完全的高斯噪声,在论文中 β t \beta_{t} βt是从0.0001到0.02线性插值的, T = 1000 T=1000 T=1000,也就是说 β t \beta_{t} βt是不断增加的, 1 − β t 1-\beta_{t} 1βt是不断减小的。因此我们再看上述分布 N ( x t ; 1 − β t x t − 1 , β t I ) \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) N(xt;1βt xt1,βtI),随着 t t t增加, x t x_{t} xt的均值是 x t − 1 x_{t-1} xt1 1 − β t < 1 \sqrt{1-\beta_{t}} <1 1βt <1倍,因此最终 x t x_{t} xt的均值不断变小,趋近于 0 0 0

为了推导方便,根据原论文我们令 α t = 1 − β t \alpha_{t} = 1-\beta_{t} αt=1βt,令 α ‾ t = ∏ i = 1 T α i \overline{\alpha}_{t} = \prod_{i=1}^{T}\alpha_{i} αt=i=1Tαi,并用重参数化的方法来表示前向过程每一步的数据分布(不知道重参数化方法的直接先看最后),这里我们由 q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_{t}|x_{t-1}) = \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) q(xtxt1)=N(xt;1βt xt1,βtI)
x t = 1 − β t x t − 1 + β t z 1 ,      w h e r e   z 1 , z 2 , . . . , ∼ N ( 0 , I ) = α t x t − 1 + 1 − α t z 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 z 2 ) + 1 − α t z 1 = α t α t − 1 x t − 2 + α t 1 − α t − 1 z 2 + 1 − α t z 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 z ‾ 2 ,      z ‾ 2 ∼ N ( 0 , I ) = α ‾ t x 0 + 1 − α ‾ t z ‾ t \begin{aligned} x_{t} &= \sqrt{1-\beta_{t}}x_{t-1} + \sqrt{\beta_{t}}z_{1}, ~~~~ where~z_{1},z_{2},...,\sim \mathcal{N}(0, I) \\ &= \sqrt{\alpha_{t}}x_{t-1} + \sqrt{1-\alpha_{t}}z_{1} \\ &= \sqrt{\alpha_{t}}(\sqrt{\alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_{t-1}}z_{2}) + \sqrt{1-\alpha_{t}}z_{1} \\ &= \sqrt{\alpha_{t}\alpha_{t-1}}x_{t-2} + \sqrt{\alpha_{t}}\sqrt{1-\alpha_{t-1}}z_{2} + \sqrt{1-\alpha_{t}}z_{1} \\ &= \sqrt{\alpha_{t}\alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_{t}\alpha_{t-1}}\overline{z}_{2}, ~~~~ \overline{z}_{2}\sim \mathcal{N}(0, I) \\ &= \sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} \end{aligned} xt=1βt xt1+βt z1,    where z1,z2,...,N(0,I)=αt xt1+1αt z1=αt (αt1 xt2+1αt1 z2)+1αt z1=αtαt1 xt2+αt 1αt1 z2+1αt z1=αtαt1 xt2+1αtαt1 z2,    z2N(0,I)=αt x0+1αt zt

其中 α t 1 − α t − 1 z 2 + 1 − α t z 1 \sqrt{\alpha_{t}}\sqrt{1-\alpha_{t-1}}z_{2} + \sqrt{1-\alpha_{t}}z_{1} αt 1αt1 z2+1αt z1 1 − α t α t − 1 z ‾ 2 \sqrt{1-\alpha_{t}\alpha_{t-1}}\overline{z}_{2} 1αtαt1 z2用到了高斯分布的独立可加性,即 N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 I ) ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) \mathcal{N}(0, \sigma^{2}_{1}I) + \mathcal{N}(0, \sigma^{2}_{2}I) \sim \mathcal{N}(0, (\sigma^{2}_{1}+\sigma^{2}_{2})I) N(0,σ12I)+N(0,σ22I)N(0,(σ12+σ22)I)
α t 1 − α t − 1 z 2 ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) 1 − α t z 1 ∼ N ( 0 , ( 1 − α t − 1 ) I ) α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 ∼ N ( 0 , [ α t ( 1 − α t − 1 ) + ( 1 − α t − 1 ) ] I ) ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) → 1 − α t α t − 1 z ‾ 2 \begin{aligned} & \sqrt{\alpha_{t}}\sqrt{1-\alpha_{t-1}}z_{2} \sim \mathcal{N}(0, \alpha_{t}(1-\alpha_{t-1})I) \\ & \sqrt{1-\alpha_{t}}z_{1} \sim \mathcal{N}(0, (1-\alpha_{t-1})I) \\ & \sqrt{\alpha_{t}(1-\alpha_{t-1})}z_{2} + \sqrt{1-\alpha_{t}}z_{1} \sim \mathcal{N}(0, [\alpha_{t}(1-\alpha_{t-1}) + (1-\alpha_{t-1})]I) \\ & \sim \mathcal{N}(0, (1-\alpha_{t}\alpha_{t-1})I) \rightarrow \sqrt{1-\alpha_{t}\alpha_{t-1}}\overline{z}_{2} \end{aligned} αt 1αt1 z2N(0,αt(1αt1)I)1αt z1N(0,(1αt1)I)αt(1αt1) z2+1αt z1N(0,[αt(1αt1)+(1αt1)]I)N(0,(1αtαt1)I)1αtαt1 z2

有一个疑问,为什么 x t x_{t} xt的分布是 q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_{t}|x_{t-1}) = \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) q(xtxt1)=N(xt;1βt xt1,βtI)呢?因为这个公式是作者直接给出的,并没有一个推导,公式表明在加噪的过程中均值要乘上 1 − β t \sqrt{1-\beta_{t}} 1βt ,如果要保证均值最后为0的话,只需要每次乘的值小于1就可以了(虽然方差可能并不是 I I I),通过上述推导我们可以发现 x t x_{t} xt的最终等于 α ‾ t x 0 + 1 − α ‾ t z ‾ t \sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} αt x0+1αt zt,即 T → ∞ , x t ∼ N ( 0 , I ) T \rightarrow \infty, x_{t} \sim \mathcal{N}(0, I) T,xtN(0,I),也就是说 N ( x t ; 1 − β t x t − 1 , β t I ) \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) N(xt;1βt xt1,βtI)这个分布能够保证 x t x_{t} xt最终收敛为标准高斯分布,但是具体这个式子怎么得到的,我依然不了解

Diffusion的反向过程

在前向加噪过程中,我们的加噪表达式为 q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_{t}|x_{t-1}) = \mathcal{N}(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I) q(xtxt1)=N(xt;1βt xt1,βtI),反向过程就是将上述过程进行逆转,得到 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt)的分布,通过不断的去噪从 x t ∼ N ( 0 , I ) x_{t} \sim \mathcal{N}(0, I) xtN(0,I)中还原出原图 x 0 x_{0} x0,文中中证明了如果 q ( x t ∣ x t − 1 ) q(x_{t}|x_{t-1}) q(xtxt1)满足高斯分布并且 β t \beta_{t} βt足够小, q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt)仍然是一个高斯分布。但是我们无法简单推断 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_{t}) q(xt1xt),因此我们使用深度学习模型(参数为 θ \theta θ,结构一般为U-net+attention结构)来预测他的分布
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_{\theta}({x_{t-1}|x_{t}}) = \mathcal{N}(x_{t-1}; \mu_{\theta}(x_{t}, t), \Sigma_{\theta}(x_{t}, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))

虽然我们无法得到反向过程的分布 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-1}|x_{t}, x_{0}) q(xt1xt,x0)
q ( x t − 1 ∣ x t , x 0 ) = ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_{t}, x_{0}) = \mathcal(x_{t-1}; \tilde{\mu}(x_{t}, x_{0}), \tilde{\beta}_{t}I) q(xt1xt,x0)=(xt1;μ~(xt,x0),β~tI)

推导过程如下,首先利用贝叶斯公式将反向过程均变为前向过程 x t − 1 → x t x_{t-1} \rightarrow x_{t} xt1xt x 0 → x t − 1 x_{0}\rightarrow x_{t-1} x0xt1以及 x 0 → x t x_{0}\rightarrow x_{t} x0xt
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 ) 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})} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)

根据高斯分布的概率密度函数的指数部分 N ∼ ( μ , σ 2 ) ∝ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) \mathcal{N}\sim (\mu, \sigma^{2}) \propto \exp(-\frac{(x-\mu)^2}{2\sigma^{2}}) N(μ,σ2)exp(2σ2(xμ)2)以及前向推导公式 x t = α t x t − 1 + 1 − α t z 1 = α ‾ t x 0 + 1 − α ‾ t z ‾ t x_{t} = \sqrt{\alpha_{t}}x_{t-1} + \sqrt{1-\alpha_{t}}z_{1} = \sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} xt=αt xt1+1αt z1=αt x0+1αt zt
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) 1 q ( x t ∣ x 0 ) = [ α t x t − 1 + 1 − α t z 1 ] × [ α ‾ t − 1 x 0 + 1 − α ‾ t − 1 z ‾ t − 1 ] × [ 1 α ‾ t x 0 + 1 − α ‾ t z ‾ t ] ∝ exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ‾ t − 1 x 0 ) 2 1 − α ‾ t − 1 − ( x t − α ‾ t x 0 ) 2 1 − α ‾ t ) ) = exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α ‾ t − 1 ) x t − 1 2 ⏟ − ( 2 α t β t x t + 2 α ‾ t − 1 1 − α ‾ t − 1 x 0 ) x t − 1 ⏟ + C ( x t , x 0 ⏟ ) ) ) \begin{aligned} q(x_{t-1}|x_{t}, x_{0}) &= q(x_{t}|x_{t-1}, x_{0}) q(x_{t-1}|x_{0}) \frac{1}{q(x_{t}|x_{0})} \\ &= [\sqrt{\alpha_{t}}x_{t-1} + \sqrt{1-\alpha_{t}}z_{1}] \times [\sqrt{\overline{\alpha}_{t-1}}x_{0} + \sqrt{1-\overline{\alpha}_{t-1}}\overline{z}_{t-1}] \times [\frac{1}{\sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t}}] \\ &\propto \exp(-\frac{1}{2}(\frac{(x_{t} - \sqrt{\alpha_{t}}x_{t-1})^2}{\beta_{t}} + \frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_{0})^{2}}{1-\overline{\alpha}_{t-1}} - \frac{(x_{t}-\sqrt{\overline{\alpha}_{t}}x_{0})^{2}}{1-\overline{\alpha}_{t}})) \\ &= \exp(-\frac{1}{2}(( \underbrace{\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\overline{\alpha}_{t-1}})x^{2}_{t-1}} - \underbrace{(\frac{2\sqrt{\alpha_{t}}}{\beta_{t}}x_{t} + \frac{2\sqrt{\overline{\alpha}_{t-1}}}{1-\overline{\alpha}_{t-1}}x_{0})x_{t-1}} + \underbrace{C(x_{t}, x_{0}}))) \end{aligned} q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0)1=[αt xt1+1αt z1]×[αt1 x0+1αt1 zt1]×[αt x0+1αt zt1]exp(21(βt(xtαt xt1)2+1αt1(xt1αt1 x0)21αt(xtαt x0)2))=exp(21(( βtαt+1αt11)xt12 (βt2αt xt+1αt12αt1 x0)xt1+ C(xt,x0)))

根据 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) = exp ⁡ ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) \exp(-\frac{(x-\mu)^{2}}{2\sigma^{2}}) = \exp(-\frac{1}{2}(\frac{1}{\sigma^{2}}x^{2}-\frac{2\mu}{\sigma^{2}}x + \frac{\mu^{2}}{\sigma^{2}})) exp(2σ2(xμ)2)=exp(21(σ21x2σ22μx+σ2μ2)),上式的最后括号部分,我们分别进行化简能够得到 q ( x t − 1 ∣ x t , x 0 ) = ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_{t}, x_{0}) = \mathcal(x_{t-1}; \tilde{\mu}(x_{t}, x_{0}), \tilde{\beta}_{t}I) q(xt1xt,x0)=(xt1;μ~(xt,x0),β~tI)的均值和方差,如下
{ 1 σ 2 = 1 β ~ t = ( α t β t + 1 1 − α ‾ t − 1 )    2 μ σ 2 = 2 μ ~ t ( x t , x 0 ) β ~ t = ( 2 α t β t x t + 2 α ‾ t − 1 1 − α ‾ t − 1 x 0 ) \left\{ \begin{array}{ll} \frac{1}{\sigma^{2}} = \frac{1}{\tilde{\beta}_{t}} = (\frac{\alpha_{t}}{\beta_{t}} + \frac{1}{1-\overline{\alpha}_{t-1}}) \\ ~~ \\ \frac{2\mu}{\sigma^{2}} = \frac{2\tilde{\mu}_{t}(x_{t}, x_{0})}{\tilde{\beta}_{t}} = (\frac{2\sqrt{\alpha_{t}}}{\beta_{t}}x_{t} + \frac{2\sqrt{\overline{\alpha}_{t-1}}}{1-\overline{\alpha}_{t-1}}x_{0}) \end{array} \right. σ21=β~t1=(βtαt+1αt11)  σ22μ=β~t2μ~t(xt,x0)=(βt2αt xt+1αt12αt1 x0)

化简得
{ β ~ t = 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t    μ ~ t ( x t , x 0 ) = α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t + α ‾ t − 1 β t 1 − α ‾ t x 0 \left\{ \begin{array}{ll} \tilde{\beta}_{t} = \frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}} \cdot \beta_{t} \\ ~~ \\ \tilde{\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} \end{array} \right. β~t=1αt1αt1βt  μ~t(xt,x0)=1αtαt (1αt1)xt+1αtαt1 βtx0
在前向过程中我们推导出 x t = α ‾ t x 0 + 1 − α ‾ t z ‾ t x_{t} = \sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} xt=αt x0+1αt zt,由此得到 x 0 = 1 α ‾ t ( x t − 1 − α ‾ t z t ‾ ) x_{0} = \frac{1}{\sqrt{\overline{\alpha}_{t}}}(x_{t}-\sqrt{1-\overline{\alpha}_{t}}\overline{z_{t}}) x0=αt 1(xt1αt zt)并替换上面均值得到
μ ~ t = 1 α t ( x t − β t 1 − α ‾ t z ‾ t ) \tilde{\mu}_{t} = \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\overline{z}_{t}) μ~t=αt 1(xt1αt βtzt)

其中高斯分布 z ‾ t \overline{z}_{t} zt是深度学习模型所预测的噪声,可以看做 z θ ( x t , t ) z_{\theta}(x_{t}, t) zθ(xt,t),由此得到均值为
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ‾ t z θ ( x t , t ) ) \mu_{\theta}(x_{t}, t) = \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}z_{\theta}(x_{t}, t)) μθ(xt,t)=αt 1(xt1αt βtzθ(xt,t))

这样我们证明最初已知 x 0 x_{0} x0后的反向表达式了

补充

1. 重参数化技巧

重参数化技巧在VAE中被应用过,此技巧主要用来使采样可以进行反向传播,假设我们随机采样时从任意一个高斯分布 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^{2}) N(μ,σ2)中采样,然后预测结果,最终结果是无法反向传播的(不可导),通常做法是使用标准高斯分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)作为引导

具体做法是首先从标准高斯分布中采样一个变量,然后根据高斯分布的均值 μ \mu μ和方差 σ 2 \sigma^{2} σ2来对采样变量进行线性变换,如下
z = μ + σ ⊙ ϵ , ϵ ∼ N ( 0 , I ) z = \mu + \sigma \odot \epsilon, \epsilon \sim \mathcal{N}(0, I) z=μ+σϵ,ϵN(0,I)

重参数化之后得到的变量 z z z具有随机性的,满足均值为 μ \mu μ,方差为 σ 2 \sigma^{2} σ2的高斯分布,这样采样过程就可导了,随机性加到了 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)上,而不是 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^{2}) N(μ,σ2)

再通俗解释一下,就是如果我们直接对原来高斯分布采样的话,采样之后的所有计算是可以反向传播的,但是是传不到<在采样这个步骤之前的过程>的,因为数据具有随机性了,反向传播不能传播随机性的梯度,当我们将随机性转移到 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)上时,因为标准高斯分布之前就没有数据了,所以不用继续传播了,传播的是对其采样之后的 μ \mu μ σ \sigma σ

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

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

相关文章

Apache Struts2远程代码执行漏洞(S2-015)复现及修复方案

Apache Struts2远程代码执行漏洞(S2-015)介绍 Apache Struts 2是用于开发JavaEE Web应用程序的开源Web应用框架。Apache Struts 2.0.0至2.3.14.2版本中存在远程命令执行漏洞。远程攻击者可借助带有‘${}’和‘%{}’序列值&#xff08;可导致判断OGNL代码两次&#xff09;的请求…

LabVIEW​​共享​变量生命周期

LabVIEW​​共享​变量生命周期 共享​变量​生命​周期 ​所有​共享​变量​都是​项目​库​的​一部分。​SVE​将会​注册​项目​库​和​库​中​包含​的​共享​变量​&#xff08;当​LabVIEW​需要​调​用​其中​某​个​变量​时&#xff09;​。​默认​情况​…

AlphaGo简易版MuGo源码解析

文章目录前言源码实现MuGo的输入数据模型的搭建模型的训练参考链接结语前言 自从AlphaGo横空出世&#xff0c;战胜李世石后&#xff0c;AI围棋如雨后春笋一般遍地开花。阅读DeepMind的论文有时还是隔靴搔痒&#xff0c;只有钻到代码里&#xff0c;才能一探究竟。于是&#xff…

Arthas诊断追踪性能案例

文章目录1、什么是Arthas2、安装启动3、追踪流程背景&#xff1a;本次案例使用Windows操作系统进行本地环境演示&#xff08;生产环境Linux同理&#xff09; 案例&#xff1a;查询接口性能特别慢&#xff0c;通过Arthas追踪诊断链路中哪个步骤导致性能如此之慢 注意&#xff1a…

code review的思考和实践

使用方式 1.看名称效果图&#xff0c;有没有和自己想要的效果类似的 2.有的话&#xff0c;复制粘贴代码使用 3.也可以自己修改一下 4.css效果并不是特别难&#xff0c;只是有时候我们可能想不到 5.笔者空闲时间&#xff0c;会继续更新的哦&#xff0c;点赞关注不迷路**^_^** …

EMNLP 22:SetGNER: General Named Entity Recognition as Entity Set Generation

SetGNER: General Named Entity Recognition as Entity Set Generation **任务形式&#xff1a;**识别flat、nest和不连续实体。 **任务建模方式&#xff1a;**采用基于pointer的方式实现任务建模&#xff0c;文本序列中的每个word可以用tag表示&#xff0c;具体为&#xff1…

Java算法_LeetCode122:买卖股票的最佳时机II

LeetCode122&#xff1a;买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 …

有关于huggingface evaluate的使用

老版本Transformer的from datasets import load_metric&#xff0c;在新版本中被替换成了evaluate。 这个包挺难用的&#xff0c;而且不同版本的接口都有点不太一样&#xff0c;本博客以transformers4.18.0, evaluate0.4.0为例&#xff0c;示范一下如何使用evaluate进行常见的…

【LDF】线性判别函数(一)

基于判别函数的判别准则 对于ccc类分类问题&#xff1a;设 gi(x),i1,2,…,cg_i(\mathbf{x}), i1,2, \ldots, cgi​(x),i1,2,…,c, 表示每个类别对应的判别函数&#xff0c;决策规则为&#xff1a;如果 gi(x)>gj(x),∀j≠ig_i(\mathbf{x})>g_j(\mathbf{x}), \forall j \n…

[机器学习-概念新] 什么是欧式距离、标准化欧式距离、马氏距离、余弦距离

1.欧式距离(Euclidean Distance) 欧式距离源自N维欧氏空间中两点间的距离公式&#xff1a; 代码实践 from scipy import spatial vec1 [1, 2, 3, 4] vec2 [5, 6, 7, 8] euclidean spatial.distance.euclidean(vec1, vec2) print(euclidean) 2.标准化欧式距离&#xff08;S…

狂揽两千星,速度百倍提升,高性能Python编译器Codon开源

这个高性能 Python 编译器具有支持 Python 众多语法、完美互通其他框架等优点。 众所周知&#xff0c;Python 是一门简单易学、具有强大功能的编程语言&#xff0c;在各种用户使用统计榜单中总是名列前茅。相应地&#xff0c;围绕 Python&#xff0c;研究者开发了各种便捷工具&…

G1垃圾回收

目录一、G1垃圾回收器G1垃圾回收阶段&#xff08;3个&#xff09;① Young Collection② Young Collection CM③ Mixed CollectionYoung Collection 跨代引用RemarkG1—垃圾回收器优化字符串去重类卸载巨型对象动态调整阈值一、G1垃圾回收器 定义&#xff1a; Garbage First&…

lanmp环境搭建,你需要一次独立安装来深入了解各个软件

一&#xff0c;安装Apache yum install httpd -y,安装apache,版本为2.4.6&#xff0c;最新为2.4.9。 cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak; vim /etc/httpd/conf/httpd.conf &#xff08;默认唯一&#xff09; 端口改为8000&#xff0c;不能与Ngin…

File类的使用

java&#xff0c;File类File类静态成员变量构造方法常用方法用于创建、删除文件/文件夹的方法用于遍历文件/文件目录的方法文件过滤器方法File类 Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 File对象代表磁盘…

数据分析的大体思路

目录标题数据分析企业数据的分析的三个方向&#xff1a;离线分析&#xff08;Batch Processing&#xff09;实时分析&#xff08;Real Time Processing |Streaming&#xff09;&#xff1a;机器学习&#xff08;Machine Learning&#xff09;数据分析的流程明确分析的目的和思路…

JVM调优基本概念

1、jvm组成以工作流程 jvm组成 类装载器、运行时数据区&#xff08;内存模型&#xff09;、字节码执行引擎 工作大致流程 首先我们的java类编译成class类文件&#xff0c;当我们的class文件开始执行&#xff0c;我们的虚拟机便开始工作。 类加载器将class加载到运行时数据区…

SSM之Spring(一)

目录 一&#xff1a;Spring简介 1.1 Spring概述 1.2 SpringFrameWork 1.2.1 SpringFrameWork特性 1.2.2 Spring Framework五大功能模块 二&#xff1a;IOC 2.1 IOC容器 2.1.1 IOC思想 2.1.2 IOC容器在Spring中的实现 2.2 基于XML管理bean 2.2.1 入门案例 2.2.2 获取bean…

Golang switch 的使用的注意事项和细节

内容来自&#xff1a;尚硅谷-韩老师教学笔记&#xff0c;链接&#xff1a;尚硅谷 1&#xff09;case/switch 后是一个表达式( 即:常量值、变量、一个有返回值的函数等都可以) 2&#xff09;case 后的各个表达式的值的数据类型&#xff0c;必须和 switch 的表达式数据类型一致 3…

辞暮尔尔烟火年年,朝朝暮暮岁岁平安。(2022年度总结)

目录 前言&#xff1a; 一、第一件事情&#xff0c;重新认识自己&#xff0c;从内核出发 二、第二件事情&#xff0c;告别内卷&#xff0c;拥抱微雕 三、第三件事情&#xff0c;愿2023&#xff0c;你我更更好 前言&#xff1a; 今天是2022年12月31日&#xff0c;2022年的最…

Shell——变量与脚本运行的方式

文章目录变量定义变量的几种方式1&#xff09;无引号2&#xff09;单引号3&#xff09;双引号4&#xff09;反引号export定义变量变量的提取、修改与删除1&#xff09;变量的提取2&#xff09;变量的修改3&#xff09;变量的删除特殊变量1&#xff09;位置参数2&#xff09;${#…