当前位置: 首页 > news >正文

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完结)

Understanding Diffusion Models: A Unified Perspective(六)(完结)

  • 文章概括
  • 指导(Guidance)
    • 分类器指导
    • 无分类器引导(Classifier-Free Guidance)
  • 总结

文章概括

引用:

@article{luo2022understanding,title={Understanding diffusion models: A unified perspective},author={Luo, Calvin},journal={arXiv preprint arXiv:2208.11970},year={2022}
}
Luo, C., 2022. Understanding diffusion models: A unified perspective. arXiv preprint arXiv:2208.11970.

原文: https://arxiv.org/abs/2208.11970
代码、数据和视频:https://arxiv.org/abs/2208.11970


系列文章:
请在 《 《 文章 》 》 专栏中查找



指导(Guidance)

到目前为止,我们专注于仅对数据分布 p ( x ) p(x) p(x)进行建模。然而,我们通常还对学习条件分布 p ( x ∣ y ) p(x|y) p(xy)感兴趣,这将使我们能够通过条件信息 y y y明确控制生成的数据。这构成了图像超分辨率模型(如级联扩散模型[Cascaded Diffusion Models][18])的基础,同时也是图像-文本模型(如DALL-E 2[19]和Imagen[7])的前沿技术。

一种自然的方式是简单地在每次迭代中将条件信息与时间步信息一起添加。回忆公式32中的联合分布:

p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t) p(x0:T)=p(xT)t=1Tpθ(xt1xt)

然后,为了将其转化为一个条件扩散模型,我们可以在每个转换步骤中简单地添加任意条件信息 y y y,表示为:

p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) p(x_{0:T}|y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t, y) p(x0:Ty)=p(xT)t=1Tpθ(xt1xt,y)

例如, y y y可以是在图像-文本生成中的文本编码,也可以是用于执行超分辨率的低分辨率图像。因此,我们可以像之前一样,通过预测 x ^ θ ( x t , t , y ) ≈ x 0 \hat{x}_\theta(x_t,t,y) \approx x_0 x^θ(xt,t,y)x0 ϵ ^ θ ( x t , t , y ) ≈ ϵ 0 \hat{\epsilon}_\theta(x_t,t,y) \approx \epsilon_0 ϵ^θ(xt,t,y)ϵ0 s θ ( x t , t , y ) ≈ ∇ log ⁡ p ( x t ∣ y ) s_\theta(x_t,t,y) \approx \nabla \log p(x_t|y) sθ(xt,t,y)logp(xty),学习VDM的核心神经网络,以实现每种所需的解释和实现。

这种基础公式的一个警告是,通过这种方式训练的条件扩散模型可能会倾向于忽略或弱化任何给定的条件信息。因此,提出了指导(Guidance)作为一种更明确控制模型对条件信息权重的方法,但代价是样本多样性的降低。两种最流行的指导形式被称为分类器指导(Classifier Guidance)[10, 20]和无分类器指导(Classifier-Free Guidance)[21]。

这段内容主要讲解了如何将扩散模型从无条件生成(直接建模数据分布 p ( x ) p(x) p(x))扩展到条件生成(建模条件分布 p ( x ∣ y ) p(x|y) p(xy)),并提到了一种潜在的问题,即条件信息 y y y在训练过程中可能被模型忽略或弱化。


1. 从无条件生成到条件生成

1.1 无条件生成建模 扩散模型在无条件生成建模中专注于直接建模数据分布 p ( x ) p(x) p(x)。联合分布形式(回忆公式 32): p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) . p(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t). p(x0:T)=p(xT)t=1Tpθ(xt1xt).

  1. x 0 : T x_{0:T} x0:T:表示数据从初始噪声 x T x_T xT 到去噪还原 x 0 x_0 x0 的一系列中间步骤。
  2. p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt1xt):表示从时间 t t t 的噪声分布 x t x_t xt 逐步还原到 t − 1 t-1 t1 的噪声分布 x t − 1 x_{t-1} xt1
  3. p ( x T ) p(x_T) p(xT):初始噪声的分布,通常为标准高斯分布。

1.2 条件生成建模 我们希望生成样本不仅符合 p ( x ) p(x) p(x),还能够通过条件信息 y y y 控制生成过程,即建模条件分布 p ( x ∣ y ) p(x|y) p(xy)。 为了实现条件生成,只需在无条件模型的每个步骤中添加条件信息 y y y
p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:Ty)=p(xT)t=1Tpθ(xt1xt,y).

公式含义

  1. p ( x T ) p(x_T) p(xT):与无条件模型相同,初始噪声的分布仍然为标准高斯分布。
  2. p θ ( x t − 1 ∣ x t , y ) p_\theta(x_{t-1} | x_t, y) pθ(xt1xt,y):条件扩散模型的核心,用于学习在给定条件 y y y 下从 x t x_t xt 转换到 x t − 1 x_{t-1} xt1 的概率。


如何引入条件信息 y y y 条件信息 y y y 的形式是任意的,比如:

  • 在图像-文本生成任务中, y y y 是文本编码。
  • 在图像超分辨率任务中, y y y 是低分辨率图像。


模型通过神经网络参数化 p θ ( x t − 1 ∣ x t , y ) p_\theta(x_{t-1} | x_t, y) pθ(xt1xt,y),可以在每次迭代中引入 y y y,如:

  1. 预测 x ^ θ ( x t , t , y ) ≈ x 0 \hat{x}_\theta(x_t, t, y) \approx x_0 x^θ(xt,t,y)x0:从条件 y y y 中还原出原始数据 x 0 x_0 x0
  2. 预测 ϵ ^ θ ( x t , t , y ) ≈ ϵ 0 \hat{\epsilon}_\theta(x_t, t, y) \approx \epsilon_0 ϵ^θ(xt,t,y)ϵ0:预测初始噪声。
  3. 预测 s θ ( x t , t , y ) ≈ ∇ log ⁡ p ( x t ∣ y ) s_\theta(x_t, t, y) \approx \nabla \log p(x_t | y) sθ(xt,t,y)logp(xty):学习条件得分函数。

2. 条件扩散模型忽略条件信息的问题

2.1 问题来源 条件扩散模型的训练目标类似于无条件模型,只是多了条件 y y y E p ( x 0 : T , y ) [ ∥ s θ ( x t , t , y ) − ∇ log ⁡ p ( x t ∣ y ) ∥ 2 2 ] . \mathbb{E}_{p(x_{0:T}, y)} \left[ \| s_\theta(x_t, t, y) - \nabla \log p(x_t | y) \|_2^2 \right]. Ep(x0:T,y)[sθ(xt,t,y)logp(xty)22].

  1. 损失函数关注的是得分函数 s θ ( x t , t , y ) s_\theta(x_t, t, y) sθ(xt,t,y) 对于数据 x t x_t xt 的预测精度。
  2. 目标是让模型通过学习条件分布 p ( x t ∣ y ) p(x_t | y) p(xty) 更好地指导采样。


问题: 在很多情况下,模型可以选择忽略 y y y,只关注数据分布 p ( x ) p(x) p(x),也能在损失函数上取得较低值。这是因为:

  • y y y 的影响很弱时,模型可以退化为无条件扩散模型,只预测 p ( x t ) p(x_t) p(xt) 的得分函数,而不使用 y y y
  • 如果 y y y x t x_t xt 的关系较复杂,而简单的无条件预测已经足够降低损失,模型倾向于忽略 y y y

2.2 为什么模型可能忽略 y y y 这个现象称为“条件退化问题”(Conditional Degradation Problem),其主要原因包括:

  1. 目标函数对条件信息的依赖较弱

    • 损失函数中没有显式地对条件信息 y y y 强化约束,模型更容易忽略 y y y
    • 在高维数据空间中, p ( x t ) p(x_t) p(xt) 的特征可能已经足够显著,使得条件信息 y y y 显得无足轻重。
  2. 训练数据中条件信息的质量和多样性不足

    • 如果 y y y 的分布较简单或信息量不足,模型可能会学习到“忽略 y y y”更容易优化。
  3. 无条件预测较为简单

    • 如果无条件生成已经能够很好地降低损失,模型可能会放弃更复杂的条件生成。

3. 示例:条件扩散中的问题

3.1 图像超分辨率中的条件扩散 任务:给定低分辨率图像 y y y,生成对应的高分辨率图像 x x x

条件扩散公式: p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:Ty)=p(xT)t=1Tpθ(xt1xt,y). 模型可能的问题:

  • 如果模型发现低分辨率图像 y y y 信息不足以显著影响生成结果,它可能退化为无条件生成,仅根据 p ( x ) p(x) p(x) 生成高分辨率图像。
  • 结果是生成的图像可能与 y y y 无关,仅符合高分辨率图像的分布。

3.2 图像-文本生成中的条件扩散 任务:给定文本描述 y y y,生成对应的图像 x x x

条件扩散公式: p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:Ty)=p(xT)t=1Tpθ(xt1xt,y). 模型可能的问题:

  • 如果文本 y y y 的语义信息较模糊,模型可能倾向于生成一个与 p ( x ) p(x) p(x) 相符的“通用图像”。
  • 比如,输入“猫在沙发上”,但生成的结果可能是一只猫,而无关沙发。

4. 解决条件信息弱化问题

为了解决模型倾向于忽略条件信息的问题,可以采取以下方法:

  1. 加强条件信息的权重

    • 在训练中通过损失函数显式强调 ( y ) 的影响,比如引入条件正则化项:
      E p ( x 0 : T , y ) [ ∥ s θ ( x t , t , y ) − ∇ log ⁡ p ( x t ∣ y ) ∥ 2 2 + λ ∥ f ( y ) − g ( x t ) ∥ 2 2 ] , \mathbb{E}_{p(x_{0:T}, y)} \left[ \| s_\theta(x_t, t, y) - \nabla \log p(x_t | y) \|_2^2 + \lambda \| f(y) - g(x_t) \|_2^2 \right], Ep(x0:T,y)[sθ(xt,t,y)logp(xty)22+λf(y)g(xt)22],
      其中 f ( y ) f(y) f(y) g ( x t ) g(x_t) g(xt) 表示条件和数据的特征提取函数。
  2. 改进条件编码方式

    • 增加条件编码的质量,比如在图像-文本任务中引入更强大的文本编码器(如预训练的 CLIP 模型)。
  3. 增加条件数据多样性

    • 确保训练数据中条件 y y y 的分布足够广泛,覆盖各种可能的情况。
  4. 使用交叉注意力机制

    • 在神经网络中引入交叉注意力层,使条件信息 y y y 更加显著地影响生成过程。

总结

  1. 条件扩散模型通过引入条件信息 y y y,在每次迭代中将无条件生成扩展为条件生成。
  2. 条件信息可能被忽略的原因包括目标函数弱化对 y y y 的依赖、数据分布的复杂性以及模型训练中的简化偏好。
  3. 可以通过加强条件编码、调整损失函数和改进训练数据等方法解决这一问题。

分类器指导

让我们从扩散模型的基于分数(score-based)形式开始,其中我们的目标是在任意噪声水平 t t t下学习条件模型的分数 ∇ log ⁡ p ( x t ∣ y ) \nabla\log p(x_t|y) logp(xty)。回顾一下, ∇ \nabla ∇ x t \nabla_{x_t} xt的简写,为了简洁起见采用此形式。根据贝叶斯公式,我们可以推导出以下等价形式:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ ( p ( x t ) p ( y ∣ x t ) p ( y ) ) ( 163 ) = ∇ log ⁡ p ( x t ) + ∇ log ⁡ p ( y ∣ x t ) − ∇ log ⁡ p ( y ) ( 164 ) = ∇ log ⁡ p ( x t ) ⏟ unconditional score + ∇ log ⁡ p ( y ∣ x t ) ⏟ adversarial gradient ( 165 ) \begin{aligned} \nabla \log p(x_t|y) &= \nabla \log \left(\frac{p(x_t)p(y|x_t)}{p(y)}\right) \quad & (163) \\ &= \nabla \log p(x_t) + \nabla \log p(y|x_t) - \nabla \log p(y) \quad & (164) \\ &= \underbrace{\nabla \log p(x_t)}_{\text{unconditional score}} + \underbrace{\nabla \log p(y|x_t)}_{\text{adversarial gradient}} \quad & (165) \end{aligned} logp(xty)=log(p(y)p(xt)p(yxt))=logp(xt)+logp(yxt)logp(y)=unconditional score logp(xt)+adversarial gradient logp(yxt)(163)(164)(165)

我们利用了一个事实,即 log ⁡ p ( y ) \log p(y) logp(y)关于 x t x_t xt的梯度为零。

我们最终推导的结果可以理解为学习一个无条件的分数函数,并将其与分类器 p ( y ∣ x t ) p(y|x_t) p(yxt)的对抗梯度相结合。因此,在分类器引导(Classifier Guidance)中,无条件扩散模型的分数函数按照之前的推导进行学习,同时训练一个分类器,该分类器接收任意带噪的 x t x_t xt并尝试预测条件信息 y y y。然后,在采样过程中,用于退火Langevin动态的整体条件分数函数被计算为无条件分数函数与带噪分类器的对抗梯度之和。

为了引入细粒度控制,以鼓励或阻止模型考虑条件信息,分类器引导通过一个超参数 γ \gamma γ对带噪分类器的对抗梯度进行缩放。在分类器引导下学习的分数函数可以总结如下:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ p ( x t ) + γ ∇ log ⁡ p ( y ∣ x t ) ( 166 ) \nabla\log p(x_t|y) = \nabla\log p(x_t) + \gamma\nabla\log p(y|x_t) \quad (166) logp(xty)=logp(xt)+γlogp(yxt)(166)

直观来看,当 γ = 0 \gamma=0 γ=0时,条件扩散模型完全忽略条件信息的学习,而当 γ \gamma γ值较大时,条件扩散模型会学习生成严格符合条件信息的样本。这种情况以牺牲样本多样性为代价,因为模型仅会生成那些即使在有噪声的情况下也能轻松再现所提供条件信息的数据。

条件引导(Classifier Guidance)的一个显著缺点是它依赖于单独训练的分类器。由于分类器必须处理任意噪声输入,而大多数现有的预训练分类模型并未针对这种情况进行优化,因此分类器必须与扩散模型同时进行特定的训练。

无分类器引导(Classifier-Free Guidance)

无分类器引导(Classifier-Free Guidance)中,作者摒弃了单独训练分类器模型的方法,而是选择了无条件扩散模型和条件扩散模型。为了推导无分类器引导下的得分函数,我们可以首先重排公式165,得到:

∇ log ⁡ p ( y ∣ x t ) = ∇ log ⁡ p ( x t ∣ y ) − ∇ log ⁡ p ( x t ) ( 167 ) \nabla \log p(y|x_t) = \nabla \log p(x_t|y) - \nabla \log p(x_t) \quad (167) logp(yxt)=logp(xty)logp(xt)(167)

然后,将其代入公式166,我们得到:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ p ( x t ) + γ ( ∇ log ⁡ p ( x t ∣ y ) − ∇ log ⁡ p ( x t ) ) (168) = ∇ log ⁡ p ( x t ) + γ ∇ log ⁡ p ( x t ∣ y ) − γ ∇ log ⁡ p ( x t ) (169) = γ ∇ log ⁡ p ( x t ∣ y ) ⏟ conditional score + ( 1 − γ ) ∇ log ⁡ p ( x t ) ⏟ unconditional score (170) \begin{aligned} \nabla \log p(x_t|y) &= \nabla \log p(x_t) + \gamma \left(\nabla \log p(x_t|y) - \nabla \log p(x_t)\right) \quad &\text{(168)} \\ &= \nabla \log p(x_t) + \gamma \nabla \log p(x_t|y) - \gamma \nabla \log p(x_t) \quad &\text{(169)} \\ &= \underbrace{\gamma \nabla \log p(x_t|y)}_\text{conditional score} + \underbrace{(1 - \gamma)\nabla \log p(x_t)}_\text{unconditional score} \quad &\text{(170)} \end{aligned} logp(xty)=logp(xt)+γ(logp(xty)logp(xt))=logp(xt)+γlogp(xty)γlogp(xt)=conditional score γlogp(xty)+unconditional score (1γ)logp(xt)(168)(169)(170)

再一次, γ \gamma γ是一个控制学习的条件模型对条件信息关注程度的参数。当 γ = 0 \gamma=0 γ=0时,学习的条件模型完全忽略条件信息并学习一个无条件扩散模型。当 γ = 1 \gamma=1 γ=1时,模型明确地学习不带引导的普通条件分布。当 γ > 1 \gamma>1 γ>1时,扩散模型不仅优先考虑条件得分函数,还会朝远离无条件得分函数的方向移动。换句话说,它降低了生成不使用条件信息的样本的概率,更倾向于生成明确使用条件信息的样本。这也会导致样本多样性下降,但以生成准确匹配条件信息的样本为代价。

由于学习两个独立的扩散模型代价较高,我们可以将条件扩散模型和无条件扩散模型合并为一个单一的条件模型;通过将条件信息替换为固定的常量值(例如零),可以查询无条件扩散模型。这本质上是在条件信息上随机执行dropout操作。无分类器引导(Classifier-Free Guidance)的优雅之处在于,它让我们能够更灵活地控制条件生成过程,同时不需要额外训练多个扩散模型,仅需训练一个单一的扩散模型即可。


总结

让我们回顾一下在研究过程中的发现。首先,我们将变分扩散模型(VDM)推导为一种马尔科夫分层变分自编码器(HVAE)的特殊情况,其中三个关键假设使得证据下界(ELBO)的计算和优化变得可行且可扩展。接着,我们证明了优化VDM归结为学习一个神经网络来预测以下三种潜在目标之一:从任意噪声化的图像中恢复原始源图像,从任意噪声化图像中预测原始噪声,或在任意噪声水平下的噪声化图像的得分函数。然后,我们深入探讨了学习得分函数的意义,并将其与基于得分的生成建模(Score-based Generative Modeling)的视角明确关联起来。最后,我们探讨了如何使用扩散模型来学习条件分布。

总之,扩散模型作为生成模型表现出了令人难以置信的能力;实际上,它们为当前最先进的基于文本条件的图像生成模型(如Imagen和DALL-E 2)提供了支持。此外,这些模型背后的数学理论极其优雅。然而,仍有一些需要考虑的缺点:

  • 这很可能并非我们人类自然建模和生成数据的方式;我们并不是通过将样本生成为随机噪声后迭代去噪的方式进行数据建模。
  • VDM无法生成可解释的潜变量(Latents)。而VAE通过对编码器的优化,有望学习一个具有结构化的潜变量空间,而在VDM中,每个时间步的编码器已经是一个线性高斯模型,无法灵活优化。因此,中间的潜变量仅限于原始输入的噪声版本。
  • 潜变量被限制为与原始输入相同的维度,这进一步增加了学习有意义、压缩的潜在结构的难度。
  • 采样是一个代价高昂的过程,因为在这两种方法下都需要运行多个去噪步骤。请记住,其中一个限制是必须选择足够大的时间步数 T T T,以确保最终的潜变量完全是高斯噪声;在采样过程中,我们必须遍历所有这些时间步以生成样本。

最后,扩散模型的成功凸显了分层变分自编码器(HVAE)作为生成模型的强大能力。我们已经表明,当我们将其推广到无限的潜变量层次时,即使编码器是简单的,潜变量维度是固定的,并且假设了马尔科夫转换,我们仍然能够学习到强大的数据模型。这表明,在一般的、深层的HVAE中,通过学习复杂的编码器和语义上有意义的潜变量空间,可能会实现进一步的性能提升。

致谢:我想感谢Josh Dillon、Yang Song、Durk Kingma、Ben Poole、Jonathan Ho、Yiding Jiang、Ting Chen、Jeremy Cohen和Chen Sun,他们审阅了本文的草稿并提供了许多有帮助的修改建议和评论。非常感谢!

相关文章:

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完结)

Understanding Diffusion Models: A Unified Perspective(六)(完结) 文章概括指导(Guidance)分类器指导无分类器引导(Classifier-Free Guidance) 总结 文章概括 引用: …...

NPM 使用介绍

NPM 使用介绍 引言 NPM(Node Package Manager)是Node.js生态系统中的一个核心工具,用于管理JavaScript项目的依赖包。无论是开发一个小型脚本还是构建大型应用程序,NPM都能极大地提高开发效率。本文将详细介绍NPM的使用方法,包括安装、配置、依赖管理、包发布等,帮助您…...

http3网站的设置(AI不会配,得人工配)

堡塔PHP项目中配置nginx1.26.0设置http3协议 # 文件所在服务器中的路径 /www/server/nginx/conf/nginx.confuser www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; pid /www/server/nginx/logs/nginx.pid; worker_rlimit_nofile 512…...

Vue+Echarts 实现青岛自定义样式地图

一、效果 二、代码 <template><div class"chart-box"><chart ref"chartQingdao" style"width: 100%; height: 100%;" :options"options" autoresize></chart></div> </template> <script> …...

Java教程练习:学生信息管理系统

文章目录 学生管理系统1、需求文档需求分析 2、新建学生实体类3、实现基本菜单和退出功能4、查询和添加4.1 查询学生信息4.2 添加学生信息 5、修改和删除5.1 删除功能实现5.2 修改功能实现 完整代码下载 学生管理系统 1、需求文档 需求 采取控制台的方式书写学生管理系统。 …...

书生大模型实战营4

文章目录 L0——入门岛玩转HF/魔搭/魔乐社区HF 平台1 注册2 InternLM模型下载3 GitHub CodeSpace的使用4 Hugging Face Spaces的使用5 模型上传 魔搭社区平台简介创建开发机环境配置 下载指定多个文件上传模型 魔乐社区平台下载internlm2_5-chat-1_8b模型上传模型 始智AI平台下…...

麒麟操作系统服务架构保姆级教程(十四)iptables防火墙四表五链和防火墙应用案例

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 防火墙在运维工作中有着不可或缺的重要性。首先&#xff0c;它是保障网络安全的关键防线&#xff0c;通过设置访问控制规则&#xff0c;可精准过滤非法网络流量&#xff0c;有效阻挡外部黑客攻击、恶…...

8. 网络编程

网络的基本概念 TCP/IP协议概述 OSI和TCP/IP模型 socket&#xff08;套接字&#xff09; 创建socket 字节序 字节序转换函数 通用地址结构 因特网地址结构 IPV4地址族和字符地址间的转换(点分十进制->网络字节序) 填写IPV4地址族结构案例 掌握TCP协议网络基础编程 相关函数 …...

C++并发编程指南04

文章目录 共享数据的问题3.1.1 条件竞争双链表的例子条件竞争示例恶性条件竞争的特点 3.1.2 避免恶性条件竞争1. 使用互斥量保护共享数据结构2. 无锁编程3. 软件事务内存&#xff08;STM&#xff09; 总结互斥量与共享数据保护3.2.1 互斥量使用互斥量保护共享数据示例代码&…...

常见的同态加密算法收集

随着对crypten与密码学的了解&#xff0c;我们将逐渐深入学习相关知识。今天&#xff0c;我们将跟随同态加密的发展历程对相关算法进行简单的收集整理 。 目录 同态加密概念 RSA算法 ElGamal算法 ELGamal签名算法 Paillier算法 BGN方案 Gentry 方案 BGV 方案 BFV 方案…...

深入探讨数据库索引类型:B-tree、Hash、GIN与GiST的对比与应用

title: 深入探讨数据库索引类型:B-tree、Hash、GIN与GiST的对比与应用 date: 2025/1/26 updated: 2025/1/26 author: cmdragon excerpt: 在现代数据库管理系统中,索引技术是提高查询性能的重要手段。当数据量不断增长时,如何快速、有效地访问这些数据成为了数据库设计的核…...

记录 | Docker的windows版安装

目录 前言一、1.1 打开“启用或关闭Windows功能”1.2 安装“WSL”方式1&#xff1a;命令行下载方式2&#xff1a;离线包下载 二、Docker Desktop更新时间 前言 参考文章&#xff1a;Windows Subsystem for Linux——解决WSL更新速度慢的方案 参考视频&#xff1a;一个视频解决D…...

AI智慧社区--生成验证码

接口文档&#xff1a; 从接口文档中可以得知的信息&#xff1a; 代码的返回格式为json格式&#xff0c;可以将Controlller换为RestController前端发起的请求为Get请求&#xff0c;使用注解GetMapping通过返回的数据类型&#xff0c;定义一个返回类型Result package com.qcby.…...

2501,20个窗口常用操作

窗口是屏幕上的一个矩形区域.窗口分为3种:覆盖窗口,弹窗和子窗口.每个窗口都有由系统绘画的"非客户区"和应用绘画的"客户区". 在MFC中,CWnd类为各种窗口提供了基类. 1,通过窗柄取得CWnd指针 可调用Cwnd::FromHandle函数,通过窗柄取得Cwnd指针. void CD…...

【gopher的java学习笔记】一文讲懂controller,service,mapper,entity是什么

刚开始上手Java和Spring时&#xff0c;就被controller&#xff0c;service&#xff0c;mapper&#xff0c;entity这几个词搞懵了&#xff0c;搞不懂这些究竟代表什么&#xff0c;感觉使用golang开发的时候也没太接触过这些名词啊~ 经过两三个月的开发后&#xff0c;逐渐搞懂了这…...

消息队列篇--通信协议篇--STOMP(STOMP特点、格式及示例,WebSocket上使用STOMP,消息队列上使用STOMP等)

STOMP&#xff08;Simple Text Oriented Messaging Protocol&#xff0c;简单面向文本的消息传递协议&#xff09;是一种轻量级、基于文本的协议&#xff0c;旨在为消息代理&#xff08;消息队列&#xff09;和客户端之间的通信&#xff08;websocket&#xff09;提供一种简单的…...

基于SpringBoot的租房管理系统(含论文)

基于SpringBoot的租房管理系统是一个集订单管理、房源信息管理、屋主申诉处理、用户反馈等多项功能于一体的系统。该系统通过SpringBoot框架开发&#xff0c;拥有完善的管理员后台、屋主管理模块、用户功能模块等&#xff0c;适用于房地产租赁平台或中介公司进行日常管理与运营…...

提升企业内部协作的在线知识库架构与实施策略

内容概要 在当前快速变化的商业环境中&#xff0c;企业对于提升内部协作效率的需求愈显迫切。在线知识库作为信息存储与共享的平台&#xff0c;成为了推动企业数字化转型的重要工具。本文将深入探讨如何有效打造与实施在线知识库&#xff0c;强调架构设计、知识资产分类管理及…...

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…...

Jackson中@JsonTypeId的妙用与实例解析

在日常的Java开发中&#xff0c;Jackson库是处理JSON数据的常用工具。其中&#xff0c;JsonTypeId注解是一个非常实用的功能&#xff0c;它可以帮助我们更好地控制多态类型信息在序列化过程中的表现。今天&#xff0c;我们就来深入探讨一下JsonTypeId的用法&#xff0c;并通过具…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...