变分扩散模型 ELBO 重构推导详解

news/2025/3/7 0:27:43/

变分扩散模型 ELBO 重构推导详解

在变分扩散模型(Variational Diffusion Model)中,证据下界(Evidence Lower Bound, ELBO)的形式通过优化正向和逆向分布的匹配来实现数据生成。初始 ELBO (变分扩散模型中的 Evidence Lower Bound (ELBO) 详解)存在采样复杂性,尤其是过渡块中需要联合分布 ( q φ ( x t − 1 , x t + 1 ∣ x 0 ) q_φ(x_{t-1}, x_{t+1}|x_0) qφ(xt1,xt+1x0) ) 的样本,这引发了重新设计的动机。后面提出了一种等价的 ELBO 形式,通过贝叶斯定理和条件调整简化了计算。本文将详细推导这一重构过程,解释这种转变,面向具备概率论和深度学习基础的读者。

参考:https://arxiv.org/pdf/2403.18103


初始 ELBO 的问题

原始 ELBO

原本定义的 ELBO 为:

ELBO φ , θ ( x ) = E q φ ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] − E q φ ( x T − 1 ∣ x 0 ) [ D K L ( q φ ( x T ∣ x T − 1 ) ∥ p ( x T ) ) ] − ∑ t = 1 T − 1 E q φ ( x t − 1 , x t + 1 ∣ x 0 ) [ D K L ( q φ ( x t ∣ x t − 1 ) ∥ p θ ( x t ∣ x t + 1 ) ) ] \text{ELBO}_{φ,θ}(x) = \mathbb{E}_{q_φ(x_1|x_0)} [\log p_θ(x_0|x_1)] - \mathbb{E}_{q_φ(x_{T-1}|x_0)} \left[ D_{KL}(q_φ(x_T|x_{T-1}) \| p(x_T)) \right] - \sum_{t=1}^{T-1} \mathbb{E}_{q_φ(x_{t-1}, x_{t+1}|x_0)} \left[ D_{KL}(q_φ(x_t|x_{t-1}) \| p_θ(x_t|x_{t+1})) \right] ELBOφ,θ(x)=Eqφ(x1x0)[logpθ(x0x1)]Eqφ(xT1x0)[DKL(qφ(xTxT1)p(xT))]t=1T1Eqφ(xt1,xt+1x0)[DKL(qφ(xtxt1)pθ(xtxt+1))]

  • 初始块:重构项 ( E q φ ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] \mathbb{E}_{q_φ(x_1|x_0)} [\log p_θ(x_0|x_1)] Eqφ(x1x0)[logpθ(x0x1)] )。
  • 最终块:先验匹配项 ( − E q φ ( x T − 1 ∣ x 0 ) [ D K L ( q φ ( x T ∣ x T − 1 ) ∥ p ( x T ) ) ] -\mathbb{E}_{q_φ(x_{T-1}|x_0)} [D_{KL}(q_φ(x_T|x_{T-1}) \| p(x_T))] Eqφ(xT1x0)[DKL(qφ(xTxT1)p(xT))] )。
  • 过渡块:一致性项 ( − ∑ t = 1 T − 1 E q φ ( x t − 1 , x t + 1 ∣ x 0 ) [ D K L ( q φ ( x t ∣ x t − 1 ) ∥ p θ ( x t ∣ x t + 1 ) ) ] -\sum_{t=1}^{T-1} \mathbb{E}_{q_φ(x_{t-1}, x_{t+1}|x_0)} [D_{KL}(q_φ(x_t|x_{t-1}) \| p_θ(x_t|x_{t+1}))] t=1T1Eqφ(xt1,xt+1x0)[DKL(qφ(xtxt1)pθ(xtxt+1))] )。

问题所在

过渡块需要从联合分布 ( q φ ( x t − 1 , x t + 1 ∣ x 0 ) q_φ(x_{t-1}, x_{t+1}|x_0) qφ(xt1,xt+1x0) ) 抽样,这涉及未来状态 ( x t + 1 x_{t+1} xt+1 ) 和过去状态 ( x t − 1 x_{t-1} xt1 ) 的耦合。直接采样 ( ( x t − 1 , x t + 1 ) (x_{t-1}, x_{t+1}) (xt1,xt+1) ) 复杂,因为 ( q φ ( x t + 1 ∣ x 0 ) q_φ(x_{t+1}|x_0) qφ(xt+1x0) ) 依赖多步正向过程,且正向 ( q φ ( x t ∣ x t − 1 ) q_φ(x_t|x_{t-1}) qφ(xtxt1) ) 和逆向 ( p θ ( x t ∣ x t + 1 ) p_θ(x_t|x_{t+1}) pθ(xtxt+1) ) 方向相反,增加了计算负担。


重构动机与贝叶斯调整

一致性项的挑战

  • ( q φ ( x t ∣ x t − 1 ) q_φ(x_t|x_{t-1}) qφ(xtxt1) ) 是正向过渡,( p θ ( x t ∣ x t + 1 ) p_θ(x_t|x_{t+1}) pθ(xtxt+1) ) 是逆向过渡,两者方向相反,导致需要同时处理 ( x t − 1 x_{t-1} xt1 ) 和 ( x t + 1 x_{t+1} xt+1 ) 的样本。
  • 目标是简化一致性检查,避免“反向”依赖。

贝叶斯定理的引入

通过贝叶斯定理调整条件分布:

q ( x t ∣ x t − 1 ) = q ( x t − 1 ∣ x t ) q ( x t ) q ( x t − 1 ) q(x_t|x_{t-1}) = \frac{q(x_{t-1}|x_t) q(x_t)}{q(x_{t-1})} q(xtxt1)=q(xt1)q(xt1xt)q(xt)

条件于 ( x 0 x_0 x0 ):

q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) q(x_t|x_{t-1}, x_0) = \frac{q(x_{t-1}|x_t, x_0) q(x_t|x_0)}{q(x_{t-1}|x_0)} q(xtxt1,x0)=q(xt1x0)q(xt1xt,x0)q(xtx0)

  • 这一变换将正向 ( q ( x t ∣ x t − 1 , x 0 ) q(x_t|x_{t-1}, x_0) q(xtxt1,x0) ) 转化为逆向形式的 ( q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt1xt,x0) ),方向与 ( p θ ( x t − 1 ∣ x t ) p_θ(x_{t-1}|x_t) pθ(xt1xt) ) 一致。
  • ( x 0 x_0 x0 ) 的条件确保分布依赖初始状态,避免无限制采样。

重构 ELBO 的推导

步骤 1:从 Jensen 不等式开始

从之前的基础推导(变分扩散模型 ELBO 的推导过程详解)出发:

log ⁡ p ( x ) ≥ E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x 0 : T ) q φ ( x 1 : T ∣ x 0 ) ] \log p(x) \geq \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_{0:T})}{q_φ(x_{1:T}|x_0)} \right] logp(x)Eqφ(x1:Tx0)[logqφ(x1:Tx0)p(x0:T)]

代入联合分布:

p ( x 0 : T ) = p ( x T ) p ( x 0 ∣ x 1 ) ∏ t = 2 T p ( x t − 1 ∣ x t ) p(x_{0:T}) = p(x_T) p(x_0|x_1) \prod_{t=2}^T p(x_{t-1}|x_t) p(x0:T)=p(xT)p(x0x1)t=2Tp(xt1xt)

q φ ( x 1 : T ∣ x 0 ) = q φ ( x 1 ∣ x 0 ) ∏ t = 2 T q φ ( x t ∣ x t − 1 , x 0 ) q_φ(x_{1:T}|x_0) = q_φ(x_1|x_0) \prod_{t=2}^T q_φ(x_t|x_{t-1}, x_0) qφ(x1:Tx0)=qφ(x1x0)t=2Tqφ(xtxt1,x0)

(注意:这里 ( q φ ( x t ∣ x t − 1 , x 0 ) q_φ(x_t|x_{t-1}, x_0) qφ(xtxt1,x0) ) 因马尔可夫性简化为 ( q φ ( x t ∣ x t − 1 ) q_φ(x_t|x_{t-1}) qφ(xtxt1)),但为一致性保留条件。)

步骤 2:展开对数项

log ⁡ p ( x 0 : T ) q φ ( x 1 : T ∣ x 0 ) = log ⁡ p ( x T ) p ( x 0 ∣ x 1 ) ∏ t = 2 T p ( x t − 1 ∣ x t ) q φ ( x 1 ∣ x 0 ) ∏ t = 2 T q φ ( x t ∣ x t − 1 , x 0 ) \log \frac{p(x_{0:T})}{q_φ(x_{1:T}|x_0)} = \log \frac{p(x_T) p(x_0|x_1) \prod_{t=2}^T p(x_{t-1}|x_t)}{q_φ(x_1|x_0) \prod_{t=2}^T q_φ(x_t|x_{t-1}, x_0)} logqφ(x1:Tx0)p(x0:T)=logqφ(x1x0)t=2Tqφ(xtxt1,x0)p(xT)p(x0x1)t=2Tp(xt1xt)

分离:

= log ⁡ p ( x T ) p ( x 0 ∣ x 1 ) q φ ( x 1 ∣ x 0 ) + log ⁡ ∏ t = 2 T p ( x t − 1 ∣ x t ) ∏ t = 2 T q φ ( x t ∣ x t − 1 , x 0 ) = \log \frac{p(x_T) p(x_0|x_1)}{q_φ(x_1|x_0)} + \log \frac{\prod_{t=2}^T p(x_{t-1}|x_t)}{\prod_{t=2}^T q_φ(x_t|x_{t-1}, x_0)} =logqφ(x1x0)p(xT)p(x0x1)+logt=2Tqφ(xtxt1,x0)t=2Tp(xt1xt)

步骤 3:应用贝叶斯调整

对第二项,使用贝叶斯定理:

p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) = p ( x t − 1 ∣ x t ) q φ ( x t − 1 ∣ x t , x 0 ) q φ ( x t ∣ x 0 ) q φ ( x t − 1 ∣ x 0 ) \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} = \frac{p(x_{t-1}|x_t)}{q_φ(x_{t-1}|x_t, x_0) \frac{q_φ(x_t|x_0)}{q_φ(x_{t-1}|x_0)}} qφ(xtxt1,x0)p(xt1xt)=qφ(xt1xt,x0)qφ(xt1x0)qφ(xtx0)p(xt1xt)

= q φ ( x t − 1 ∣ x t , x 0 ) q φ ( x t ∣ x 0 ) q φ ( x t − 1 ∣ x 0 ) ⋅ p ( x t − 1 ∣ x t ) q φ ( x t − 1 ∣ x t , x 0 ) = \frac{q_φ(x_{t-1}|x_t, x_0) q_φ(x_t|x_0)}{q_φ(x_{t-1}|x_0)} \cdot \frac{p(x_{t-1}|x_t)}{q_φ(x_{t-1}|x_t, x_0)} =qφ(xt1x0)qφ(xt1xt,x0)qφ(xtx0)qφ(xt1xt,x0)p(xt1xt)

整理乘积:

∏ t = 2 T p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) = ∏ t = 2 T 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 ) \prod_{t=2}^T \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} = \prod_{t=2}^T \frac{p(x_{t-1}|x_t)}{q_φ(x_{t-1}|x_t, x_0)} \cdot \frac{q_φ(x_{t-1}|x_0)}{q_φ(x_t|x_0)} t=2Tqφ(xtxt1,x0)p(xt1xt)=t=2Tqφ(xt1xt,x0)p(xt1xt)qφ(xtx0)qφ(xt1x0)

步骤 4:期望分离

E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x T ) p ( x 0 ∣ x 1 ) q φ ( x 1 ∣ x 0 ) + log ⁡ ∏ t = 2 T p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) ] \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_T) p(x_0|x_1)}{q_φ(x_1|x_0)} + \log \prod_{t=2}^T \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} \right] Eqφ(x1:Tx0)[logqφ(x1x0)p(xT)p(x0x1)+logt=2Tqφ(xtxt1,x0)p(xt1xt)]

  • 第一项

E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x T ) p ( x 0 ∣ x 1 ) q φ ( x 1 ∣ x 0 ) ] \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_T) p(x_0|x_1)}{q_φ(x_1|x_0)} \right] Eqφ(x1:Tx0)[logqφ(x1x0)p(xT)p(x0x1)]

= E q φ ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] + E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x T ) q φ ( x T ∣ x 0 ) ] = \mathbb{E}_{q_φ(x_1|x_0)} [\log p_θ(x_0|x_1)] + \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_T)}{q_φ(x_T|x_0)} \right] =Eqφ(x1x0)[logpθ(x0x1)]+Eqφ(x1:Tx0)[logqφ(xTx0)p(xT)]

  • 第二项

E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ ∏ t = 2 T p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) ] = ∑ t = 2 T E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) ] \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \prod_{t=2}^T \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} \right] = \sum_{t=2}^T \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} \right] Eqφ(x1:Tx0)[logt=2Tqφ(xtxt1,x0)p(xt1xt)]=t=2TEqφ(x1:Tx0)[logqφ(xtxt1,x0)p(xt1xt)]

使用贝叶斯调整:

p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) = p ( x t − 1 ∣ x t ) q φ ( x t − 1 ∣ x 0 ) q φ ( x t − 1 ∣ x t , x 0 ) q φ ( x t ∣ x 0 ) \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} = \frac{p(x_{t-1}|x_t) q_φ(x_{t-1}|x_0)}{q_φ(x_{t-1}|x_t, x_0) q_φ(x_t|x_0)} qφ(xtxt1,x0)p(xt1xt)=qφ(xt1xt,x0)qφ(xtx0)p(xt1xt)qφ(xt1x0)

log ⁡ p ( x t − 1 ∣ x t ) q φ ( x t ∣ x t − 1 , x 0 ) = 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 \frac{p(x_{t-1}|x_t)}{q_φ(x_t|x_{t-1}, x_0)} = \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)} logqφ(xtxt1,x0)p(xt1xt)=logqφ(xt1xt,x0)p(xt1xt)+logqφ(xtx0)qφ(xt1x0)

步骤 5:简化期望

  • 重构项

E q φ ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] \mathbb{E}_{q_φ(x_1|x_0)} [\log p_θ(x_0|x_1)] Eqφ(x1x0)[logpθ(x0x1)]

  • 先验匹配项

E q φ ( x 1 : T ∣ x 0 ) [ log ⁡ p ( x T ) q φ ( x T ∣ x 0 ) ] = − D K L ( q φ ( x T ∣ x 0 ) ∥ p ( x T ) ) \mathbb{E}_{q_φ(x_{1:T}|x_0)} \left[ \log \frac{p(x_T)}{q_φ(x_T|x_0)} \right] = -D_{KL}(q_φ(x_T|x_0) \| p(x_T)) Eqφ(x1:Tx0)[logqφ(xTx0)p(xT)]=DKL(qφ(xTx0)p(xT))

  • 一致性项

∑ t = 2 T E q φ ( x 1 : T ∣ x 0 ) [ 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 ) ] \sum_{t=2}^T \mathbb{E}_{q_φ(x_{1:T}|x_0)} \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] t=2TEqφ(x1:Tx0)[logqφ(xt1xt,x0)p(xt1xt)+logqφ(xtx0)qφ(xt1x0)]

第二项的和为:

log ⁡ q φ ( x 1 ∣ x 0 ) q φ ( x T ∣ x 0 ) = log ⁡ q φ ( x 1 ∣ x 0 ) − log ⁡ q φ ( x T ∣ x 0 ) \log \frac{q_φ(x_1|x_0)}{q_φ(x_T|x_0)} = \log q_φ(x_1|x_0) - \log q_φ(x_T|x_0) logqφ(xTx0)qφ(x1x0)=logqφ(x1x0)logqφ(xTx0)

但重点是第一项:

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 ) [ D K L ( q φ ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x 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[ D_{KL}(q_φ(x_{t-1}|x_t, x_0) \| p_θ(x_{t-1}|x_t)) \right] Eqφ(xt1,xtx0)[logqφ(xt1xt,x0)p(xt1xt)]=Eqφ(xtx0)[DKL(qφ(xt1xt,x0)pθ(xt1xt))]

步骤 6:范围调整

从 ( t = 2 t=2 t=2 ) 到 ( t = T t=T t=T ) 对应 ( x t − 1 x_{t-1} xt1 ) 从 ( x 1 x_1 x1 ) 到 ( x T − 1 x_{T-1} xT1 ),与过渡块 ( t = 1 t=1 t=1 ) 到 ( T − 1 T-1 T1 ) 一致,调整索引。

最终 ELBO

ELBO φ , θ ( x ) = E q φ ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] − D K L ( q φ ( x T ∣ x 0 ) ∥ p ( x T ) ) − ∑ t = 2 T E q φ ( x t ∣ x 0 ) [ D K L ( q φ ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] \text{ELBO}_{φ,θ}(x) = \mathbb{E}_{q_φ(x_1|x_0)} [\log p_θ(x_0|x_1)] - D_{KL}(q_φ(x_T|x_0) \| p(x_T)) - \sum_{t=2}^T \mathbb{E}_{q_φ(x_t|x_0)} \left[ D_{KL}(q_φ(x_{t-1}|x_t, x_0) \| p_θ(x_{t-1}|x_t)) \right] ELBOφ,θ(x)=Eqφ(x1x0)[logpθ(x0x1)]DKL(qφ(xTx0)p(xT))t=2TEqφ(xtx0)[DKL(qφ(xt1xt,x0)pθ(xt1xt))]


推导总结

  • 贝叶斯定理将 ( q φ ( x t ∣ x t − 1 , x 0 ) q_φ(x_t|x_{t-1}, x_0) qφ(xtxt1,x0) ) 转化为 ( q φ ( x t − 1 ∣ x t , x 0 ) q_φ(x_{t-1}|x_t, x_0) qφ(xt1xt,x0) ),与 ( p θ ( x t − 1 ∣ x t ) p_θ(x_{t-1}|x_t) pθ(xt1xt) ) 方向一致。
  • 期望从联合分布简化为单变量,消除了 ( x t + 1 x_{t+1} xt+1 ) 的依赖。
  • 新的 ELBO 保持优化目标,简化了采样复杂性。

代码实现片段(伪代码)

def elbo_loss_new(x0, model, T, alpha_schedule):elbo = 0.0x1 = forward_transition(x0, alpha_schedule[1])elbo += torch.mean(model.log_prob_x0_given_x1(x0, x1))  # ReconstructionxT = forward_multi_step(x0, alpha_schedule)kl_prior = kl_divergence(xT, torch.zeros_like(xT), torch.ones_like(xT))elbo -= kl_prior  # Prior matchingfor t in range(2, T + 1):xt = forward_step(x0, t, alpha_schedule)xt_minus_1 = forward_step(x0, t - 1, alpha_schedule)kl_cons = kl_divergence(xt_minus_1, model.reverse_mean(xt, t), model.reverse_cov(xt, t))elbo -= torch.mean(kl_cons)  # Consistencyreturn elbo

总结

重构后的 ELBO 通过贝叶斯调整消除了联合采样的复杂性,保持了模型的优化能力。这一设计体现了扩散模型的灵活性,为高效训练提供了可能。

希望这篇推导帮助你理解!

后记

2025年3月5日18点17分于上海,在grok 3大模型辅助下完成。


http://www.ppmy.cn/news/1577217.html

相关文章

基于51单片机超声波测量报警LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机超声波测量报警LCD1602显示 1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 下载链接 基于51单片机超声波测量报警LCD1602显示( proteus仿真程序设计报告讲解视频) 仿真图proteus8.15(有低版本) 程序编译器&#xff…

Java面试常见问题总结

每次面试都要有充分的复习准备,每次面试完,一定要学会总结,不会的查缺补漏。总结一下面试经常遇到的问题。 1:项目介绍,介绍项目主要业务模块及功能,介绍自己负责的模块,项目中遇到过最大的挑战…

nuxt3中请求封装与开发代理配置步骤

一、plugin文件夹中新建axios.js文件 import axios from axios;export default defineNuxtPlugin(nuxtApp > {const axiosInstance axios.create({baseURL: , // 设置你的API基础URLtimeout: 10000, // 设置请求超时时间});// 可以添加请求拦截器等axiosInstance.intercep…

Python-04BeautifulSoup网络爬虫

2025-03-04-BeautifulSoup网络爬虫 记录BeautifulSoup网络爬虫的核心知识点 文章目录 2025-03-04-BeautifulSoup网络爬虫 [toc]1-参考网址2-学习要点3-核心知识点1. 安装2. 导入必要的库3. 发送 HTTP 请求4. 创建 BeautifulSoup 对象5. 解析 HTML 内容5.1 查找标签5.2 根据属性…

【EB-07】TC397 Tresos 导入通信ARXML

TC397 Tresos 导入通信ARXML 1. 导入通信ARXML1.1 创建导入规则1.2 创建导入wizard2 优化ARXML2.1 查看优化效果1. 导入通信ARXML 1.1 创建导入规则 1.2 创建导入wizard EB Tresos不像其他工具会自动加入模块,需要我们手动去加入对应的模块

Elasticsearch 限制索引大小与索引模板匹配冲突解决方案

文章目录 背景介绍环境限制索引大小创建 ILM(索引生命周期管理)策略创建 ILM 策略 创建索引模板并关联 ILM 策略使用索引模板应用 ILM 策略 解决索引模板匹配冲突✅ 解决方案🔹 方案 1:修改 index_patterns(推荐&#…

JS篇-关于javascript、ts互斥锁的作用和写法

一、一般情况下的单线程 JavaScript 在webworks和 Node.js 环境下,主线程通常是单线程执行的,这意味着同一时间只会执行一个任务,所以大部分情况下不需要传统意义上的互斥锁。 let counter 0;function increment() {counter;console.log(c…

AJAX 文件上传进度条 JAVA

JSP文件 <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>AJAX 文件上传进度条</title>…