当前位置: 首页 > 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) 总结 文章概括 引用: …...

Redis --- 分布式锁的使用

我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…...

电脑怎么格式化?格式化详细步骤

格式化是我们在日常使用电脑时可能会用到的一种操作,无论是清理磁盘空间、安装新系统,还是解决磁盘读写错误,都可能需要格式化。不过,对于一些不熟悉电脑操作的用户来说,格式化听起来可能有些复杂。其实,只…...

TikTok广告投放优化策略:提升ROI的核心技巧

在短许多品牌和商家纷纷投入广告营销,争夺这片潜力巨大的市场。然而,在激烈的竞争环境中,如何精准有效地投放广告,优化广告效果,实现更高的投资回报率(ROI)成为了广告主关注的核心。 一. 精准受…...

视觉语言模型 (VLMs):跨模态智能的探索

文章目录 一. VLMs 的重要性与挑战:连接视觉与语言的桥梁 🌉二. VLMs 的核心训练范式:四种主流策略 🗺️1. 对比训练 (Contrastive Training):拉近正例,推远负例 ⚖️2. 掩码方法 (Masking):重构…...

第05章 08 绘制脑部体绘制图的阈值等值面

绘制脑部体绘制图的阈值等值面,例如肌肉和头骨骼,需要对医学图像数据进行阈值处理,并使用体绘制技术来可视化这些结构。以下是一个基于VTK/C的示例代码,展示如何读取DICOM图像数据,应用阈值过滤器来提取特定组织&#…...

类和对象(4)——多态:方法重写与动态绑定、向上转型和向下转型、多态的实现条件

目录 1. 向上转型和向下转型 1.1 向上转型 1.2 向下转型 1.3 instanceof关键字 2. 重写(overidde) 2.1 方法重写的规则 2.1.1 基础规则 2.1.2 深层规则 2.2 三种不能重写的方法 final修饰 private修饰 static修饰 3. 动态绑定 3.1 动态绑…...

动态规划<九>两个数组的dp

目录 引例 LeetCode经典OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门LeetCode<1143>最长公共子序列 画图分析&#xff1a; 使用动态规划解决 1.状态表示 ------经验题目要求 经验为选取第一个字符串的[0,i]区间以及第二个字…...

Go:基于Go实现一个压测工具

文章目录 写在前面整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理 客户端模块Http客户端处理Grpc客户端处理Websocket客户端处理 连接处理模块GrpcHttp 统计数据模块统计原理实现过程 写在前面 本篇主要是基于Go来实现一个压测的工具&#xff0c;关于压测的内…...

2025年数学建模美赛 A题分析(2)楼梯使用频率数学模型

2025年数学建模美赛 A题分析&#xff08;1&#xff09;Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析&#xff08;2&#xff09;楼梯磨损分析模型 2025年数学建模美赛 A题分析&#xff08;3&#xff09;楼梯使用方向偏好模型 2025年数学建模美赛 A题分…...

在Ubuntu上用Llama Factory命令行微调Qwen2.5的简单过程

半年多之前写过一个教程&#xff1a;在Windows上用Llama Factory微调Llama 3的基本操作_llama-factory windows-CSDN博客 如果用命令行做的话&#xff0c;前面的步骤可以参考上面这个博客。安装好环境后&#xff0c; 用自我认知数据集微调Lora模块&#xff1a;data/identity.j…...

虹科分享 | 汽车NVH小课堂之听音辨故障

随着车主开始关注汽车抖动异响问题&#xff0c;如何根据故障现象快速诊断异响来源&#xff0c;成了汽修人的必修课。 一个比较常用的方法就是靠“听”——“听音辨故障”。那今天&#xff0c;虹科Pico也整理了几个不同类型的异响声音&#xff0c;一起来听听看你能答对几个吧 汽…...

RoboVLM——通用机器人策略的VLA设计哲学:如何选择骨干网络、如何构建VLA架构、何时添加跨本体数据

前言 本博客内解读不少VLA模型了&#xff0c;包括π0等&#xff0c;且如此文的开头所说 前两天又重点看了下openvla&#xff0c;和cogact&#xff0c;发现 目前cogACT把openvla的动作预测换成了dit&#xff0c;在模型架构层面上&#xff0c;逼近了π0​那为了进一步逼近&#…...

【SpringBoot教程】Spring Boot + MySQL + HikariCP 连接池整合教程

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 在前面一篇文章中毛毛张介绍了SpringBoot中数据源与数据库连接池相关概念&#xff0c;今天毛毛张要分享的是关于SpringBoot整合HicariCP连接池相关知识点以及底层源码…...

0.91英寸OLED显示屏一种具有小尺寸、高分辨率、低功耗特性的显示器件

0.91英寸OLED显示屏是一种具有小尺寸、高分辨率、低功耗特性的显示器件。以下是对0.91英寸OLED显示屏的详细介绍&#xff1a; 一、基本参数 尺寸&#xff1a;0.91英寸分辨率&#xff1a;通常为128x32像素&#xff0c;意味着显示屏上有128列和32行的像素点&#xff0c;总共409…...

【insert函数】

在 C 中&#xff0c;std::string::insert 是一个功能强大的成员函数&#xff0c;用于在字符串的指定位置插入内容。它有多个重载版本&#xff0c;支持插入 字符、字符串、子字符串 等。以下是 insert 所有相关函数的详细介绍&#xff1a; 1. 插入字符串 函数签名&#xff1a; …...

Python 如何进行文本匹配:difflib| python 小知识

Python 如何进行文本匹配&#xff1a;difflib| python 小知识 difflib是Python标准库中的一个工具&#xff0c;用于比较和处理文本差异。它提供了一组用于比较和处理文本差异的功能&#xff0c;可以用于比较字符串、文件等。本文将详细介绍difflib模块的用法和实现细节&#x…...

MySQL误删数据怎么办?

文章目录 1. 从备份恢复数据2. 通过二进制日志恢复数据3. 使用数据恢复工具4. 利用事务回滚恢复数据5. 预防误删数据的策略总结 在使用MySQL进行数据管理时&#xff0c;误删数据是一个常见且具有高风险的操作。无论是因为操作失误、系统故障&#xff0c;还是不小心执行了删除命…...

可以称之为“yyds”的物联网开源框架有哪几个?

有了物联网的发展&#xff0c;我们的生活似乎也变得更加“鲜活”、有趣、便捷&#xff0c;包具有科技感的。在物联网&#xff08;IoT&#xff09;领域中&#xff0c;也有许多优秀的开源框架支持设备连接、数据处理、云服务等&#xff0c;成为被用户们广泛认可的存在。以下给大家…...

为AI聊天工具添加一个知识系统 之74 详细设计之15 正则表达式 之2

本文要点 要点 本项目&#xff08;为AI聊天工具添加一个知识系统&#xff09;中的正则表达式。 正则表达式的三“比”。正则表达式被 一、排比为三种符号&#xff08;元符号-圈号&#xff0c;特殊符号-引号&#xff0c;普通符号-括号&#xff09; 引号<<a线性回归bo…...

Java 注解与元数据

Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程中&#xff0c;注解&#xff08;Annotation&#xff09;和元数据&#xff08;Metadata&#xff09;是两个重要的概念。注解为程序提供了一种在代码中嵌入额外信息的方式&#xff0c;这些额外信息就是元数据。元…...

【橘子Kibana】Kibana的分析能力Analytics简易分析

一、kibana是啥&#xff0c;能干嘛 我们经常会用es来实现一些关于检索&#xff0c;关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI&#xff0c;你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…...

度小满前端面试题及参考答案

<form>标签使用过哪些 tag? <form>标签中常使用的标签有很多。 <input>:这是最常用的标签之一,用于创建各种类型的输入字段,如文本框、密码框、单选按钮、复选框、文件上传框等。通过设置type属性来指定输入类型,例如type="text"创建文本输入…...

Padas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…...

LQ1052 Fibonacci斐波那契数列

题目描述 Fibonacci斐波那契数列也称为兔子数列&#xff0c;它的递推公式为&#xff1a;FnFn-1Fn-2&#xff0c;其中F1F21。 当n比较大时&#xff0c;Fn也非常大&#xff0c;现在小蓝想知道&#xff0c;Fn除以10007的余数是多少&#xff0c;请你编程告诉她。 输入 输入包含一…...

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用&#xff1f;华硕笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…...

编译器gcc/g++ --【Linux基础开发工具】

文章目录 一、背景知识二、gcc编译选项1、预处理(进行宏替换)2、编译&#xff08;生成汇编&#xff09;3、汇编&#xff08;生成机器可识别代码&#xff09;4、链接&#xff08;生成可执行文件或库文件&#xff09; 三、动态链接和静态链接四、静态库和动态库1、动静态库2、编译…...

八股文 (一)

文章目录 项目地址一、前端1.1 大文件上传,预览1.2 首页性能优化1.2 流量染色,灰度发布1.3 Websock心跳机制,大数据实时数据优化1.4 Gpu 加速 fps优化1.5 echarts包大小优化和组件封装1.6 前端监控系统1.7 超大虚拟列表卡顿1. 实现2. 相关问题(1) 什么是虚拟化列表,为什么要…...

c语言无符号的变量不能和有符号的直接比较,或者使用移项解决符号问题

使用移项解决问题&#xff0c;简单来说就是无符号运行不要有减号&#xff0c;使用移项后的加号代替 if(uEventDirLimitSize > uEventAndNormalDirSize) {if((uEventDirLimitSize - uEventAndNormalDirSize) > pStConfig->stParam.stUserParam.uEventRemain){return O…...

安卓日常问题杂谈(一)

背景 关于安卓开发中&#xff0c;有很多奇奇怪怪的问题&#xff0c;有时候这个控件闪一下&#xff0c;有时候这个页面移动一下&#xff0c;这些对于快速开发中&#xff0c;去查询&#xff0c;都是很耗费时间的&#xff0c;因此&#xff0c;本系列文章&#xff0c;旨在记录安卓…...

电力晶体管(GTR)全控性器件

电力晶体管&#xff08;Giant Transistor&#xff0c;GTR&#xff09;是一种全控性器件&#xff0c;以下是关于它的详细介绍&#xff1a;&#xff08;模电普通晶体管三极管进行对比学习&#xff09; 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管&#xff08;BJT&am…...

【美】Day 1 CPT申请步骤及信息获取指南(Day1 CPT)

参考文章&#xff1a;【美】境外申请Day 1 CPT完整流程&#xff08;境外Day 1 CPT&#xff09; 文章目录 **一、申请前准备&#xff1a;了解Day 1 CPT基本要求****二、选择Day 1 CPT学校****1. 搜索学校****2. 筛选标准** **三、申请流程****1. 提交学校申请****2. 转SEVIS记录…...

梯度下降优化算法-动量法

1. 动量法的数学原理 1.1 标准梯度下降回顾 在标准梯度下降中&#xff0c;参数的更新公式为&#xff1a; θ t 1 θ t − η ⋅ ∇ θ J ( θ t ) \theta_{t1} \theta_t - \eta \cdot \nabla_\theta J(\theta_t) θt1​θt​−η⋅∇θ​J(θt​) 其中&#xff1a; θ t …...

游戏引擎介绍:Game Engine

简介 定义&#xff1a;软件框架&#xff0c;一系列为开发游戏的工具的集合 可协作创意生产工具&#xff0c;复杂性艺术&#xff0c;注重realtime实时 目的 为艺术家&#xff0c;设计师&#xff0c;程序员设计工具链 游戏引擎开发参考书 推荐&#xff1a;Game Engine Archite…...

zookeeper-3.8.3-基于ACL的访问控制

ZooKeeper基于ACL的访问控制 ZooKeeper 用ACL控制对znode的访问&#xff0c;类似UNIX文件权限&#xff0c;但无znode所有者概念&#xff0c;ACL指定ID及对应权限&#xff0c;且仅作用于特定znode&#xff0c;不递归。 ZooKeeper支持可插拔认证方案&#xff0c;ID格式为scheme…...

ResNeSt: Split-Attention Networks 参考论文

参考文献 [1] Tensorflow Efficientnet. https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet. Accessed: 2020-03-04. 中文翻译&#xff1a;[1] TensorFlow EfficientNet. https://github.com/tensorflow/tpu/tree/master/models/official/efficien…...

正反转电路梯形图

1、正转联锁控制。按下正转按钮SB1→梯形图程序中的正转触点X000闭合→线圈Y000得电→Y000自锁触点闭合&#xff0c;Y000联锁触点断开&#xff0c;Y0端子与COM端子间的内部硬触点闭合→Y000自锁触点闭合&#xff0c;使线圈Y000在X000触点断开后仍可得电。 Y000联锁触点断开&…...

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…...

系统学英语 — 句法 — 复合句

目录 文章目录 目录复合句型主语从句宾语从句表语从句定语从句状语从句同位语从句 复合句型 复合句型&#xff0c;即&#xff1a;从句。在英语中&#xff0c;除了谓语之外的所有句子成分都可以使用从句来充当。 主语从句 充当主语的句子&#xff0c;通常位于谓语之前&#x…...

SQL server 数据库使用整理

标题&#xff1a;SQL server 数据库使用整理 1.字符串表名多次查询 2.读取SQL中Json字段中的值&#xff1a;JSON_VALUE&#xff08;最新版本支持&#xff0c;属性名大小写敏感&#xff09; 1.字符串表名多次查询 SELECT ROW_NUMBER() OVER (ORDER BY value ASC) rowid,value…...

*胡闹厨房*

前期准备 详细教程 一、创建项目 1、选择Universal 3D,创建项目 2、删除预制文件Readme:点击Remove Readme Assets,弹出框上点击Proceed 3、Edit-Project Setting-Quality,只保留High Fidelity 4、打开 Assets-Settings ,保留URP-HighFidelity-Renderer 和 URP-High…...

.NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤

本文将详细介绍如何将一个 .NET 8 项目通过 Docker 部署到 Linux 系统中。以下步骤包括从项目的创建、Dockerfile 的编写、镜像构建、到最后在 Linux 上的容器运行。 1. 环境准备 在开始之前&#xff0c;请确保你已经具备以下环境&#xff1a; Linux 系统&#xff08;如 Ubu…...

状态码对照表

别瞎自定义状态码了 1xx&#xff1a;信息性状态码 状态码名称使用场景100Continue客户端应继续请求&#xff0c;等待后续响应。101Switching Protocols服务器根据客户端的请求切换协议。102Processing服务器正在处理请求&#xff0c;但尚未完成。103Early Hints提供给客户端的…...

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》027-组件的高级配置和嵌套

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

Autosar-Os是怎么运行的?(多核系统运行)

写在前面&#xff1a; 入行一段时间了&#xff0c;基于个人理解整理一些东西&#xff0c;如有错误&#xff0c;欢迎各位大佬评论区指正&#xff01;&#xff01;&#xff01; 目录 1.Autosar多核操作系统 1.1多核启动过程 1.2多核运行过程 1.2.1核间任务同步 1.2.2Counte…...

WPF3-在xaml中引用其他程序集的名称空间

1. 如何在XAML里引用类库中的名称空间和类2. 小结 1. 如何在XAML里引用类库中的名称空间和类 首先需要记住一点&#xff1a;把类库引用到项目中是引用其中名称空间的物理基础&#xff0c;无论是C#还是XAML都是这样。 一旦将一个类库引用进程序&#xff0c;就可以引用其中的名…...

无人机红外热成像:应急消防的“透视眼”

无人机红外热成像&#xff1a;应急消防的“透视眼” 亲爱的小伙伴们&#xff0c;每年一到夏天&#xff0c;应急消防的战士们就像上紧了发条的闹钟&#xff0c;时刻准备应对各种灾害。炎热天气让火灾隐患“蹭蹭”往上涨&#xff0c;南北各地还有防洪救灾、台风、泥石流等灾害轮…...

飞牛NAS安装过程中的docker源问题

采用CloudFlare进行飞牛NAS的远程访问 【安全免费】无需公网IP、端口号&#xff0c;NAS外网访问新方法_网络存储_什么值得买 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1panel.dev&quo…...

python基础语法(4) ----- 学习笔记分享

目录 Python 使用库 以及 实战的一些案例 1. 标准库 1.1 认识标准库 1.2 使用import导入模块 1.3 代码示例:日期及结算 1.4 代码示例:字符串操作 1.5 代码示例 : 文件查找工具 2. 第三方库 2.1 认识第三方库 2.2 使用pip 2.3 代码示例:生成二维码 (1) 使用搜索引擎,…...

Linux 内核学习 3b - 和copilot 讨论pci设备的物理地址在内核空间和用户空间映射到虚拟地址的区别

前提知识&#xff1a; 可以把内核当作一个需要特殊权限运行的程序&#xff0c;那么不同的程序&#xff0c;相同的设备物理地址就会映射到不同的虚拟地址 &#xff08;见Linux 内核学习 3 - 虚拟内存和物理内存&#xff09;。 You said 同一个pcie 设备物理地址在linux 内核和用…...