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

Fisher散度:从信息几何到机器学习的隐藏利器

Fisher散度:从信息几何到机器学习的隐藏利器

在机器学习和统计学中,比较两个概率分布的差异是常见任务,比如评估真实分布与模型预测分布的差距。KL散度(Kullback-Leibler Divergence)可能是大家熟悉的选择,但今天我们要介绍一个不太常见却同样重要的指标——Fisher散度(Fisher Divergence)。它与Fisher信息矩阵关系密切,不仅有深厚的理论根基,还在生成模型和变分推断等领域大放异彩。这篇博客将详细讲解Fisher散度的定义、数学公式、推导过程及其应用,特别澄清推导中的关键步骤,既通俗易懂,也适合研究者深入探索。


什么是Fisher散度?

Fisher散度是一种基于对数密度梯度(即得分函数,Score Function)来度量两个概率分布 ( p ( x ) p(x) p(x) ) 和 ( q ( x ) q(x) q(x) ) 之间差异的指标。它得名于Fisher信息矩阵,源于信息几何,利用分布的局部曲率来比较“形状”差异。

通俗比喻

想象你在比较两座山(分布 ( p p p ) 和 ( q q q ))。KL散度像是在测量两座山的“总体体积差”,而Fisher散度更像是站在山坡上,比较两座山的“坡度”(梯度)在每个点的差异。它关注分布的局部变化,而非全局概率质量。


Fisher散度的数学定义

Fisher散度的形式因应用场景而异。最常见的是得分匹配(Score Matching)中的定义,表示为得分函数差异的平方范数:

D F ( p ∥ q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) − ∇ log ⁡ q ( x ) ∥ 2 d x D_F(p \parallel q) = \int p(x) \left\| \nabla \log p(x) - \nabla \log q(x) \right\|^2 \, dx DF(pq)=p(x)logp(x)logq(x)2dx

  • ( ∇ log ⁡ p ( x ) \nabla \log p(x) logp(x) ) 和 ( \nabla \log q(x) ):分别是 ( p(x)$ ) 和 ( q ( x ) q(x) q(x) ) 的对数密度梯度。
  • ( ∥ ⋅ ∥ 2 \left\| \cdot \right\|^2 2 ):欧几里得范数的平方,衡量梯度差异。
  • ( p ( x ) p(x) p(x) ):以 ( p ( x ) p(x) p(x) ) 加权,强调真实分布的视角。

更广义的形式可能涉及Fisher信息矩阵:

D F ( p ∥ q ) = ∫ p ( x ) ( ∇ log ⁡ p ( x ) − ∇ log ⁡ q ( x ) ) T I ( x ) ( ∇ log ⁡ p ( x ) − ∇ log ⁡ q ( x ) ) d x D_F(p \parallel q) = \int p(x) \left( \nabla \log p(x) - \nabla \log q(x) \right)^T I(x) \left( \nabla \log p(x) - \nabla \log q(x) \right) \, dx DF(pq)=p(x)(logp(x)logq(x))TI(x)(logp(x)logq(x))dx

  • ( I ( x ) I(x) I(x) ):Fisher信息矩阵,通常定义为 ( I ( x ) = E p [ ∇ log ⁡ p ( x ) ∇ log ⁡ p ( x ) T ] I(x) = E_p[\nabla \log p(x) \nabla \log p(x)^T] I(x)=Ep[logp(x)logp(x)T] )。

Fisher散度不对称(( D F ( p ∥ q ) ≠ D F ( q ∥ p ) D_F(p \parallel q) \neq D_F(q \parallel p) DF(pq)=DF(qp) )),也不满足三角不等式,因此不是严格的距离。


Fisher散度的推导

为了理解Fisher散度的来源,我们从得分匹配的角度推导其常见形式,并解决推导中的疑惑点(如交叉项系数调整)。

得分匹配中的Fisher散度

得分匹配的目标是让模型分布 ( q ( x ) q(x) q(x) ) 的得分函数 ( ∇ log ⁡ q ( x ) \nabla \log q(x) logq(x) ) 接近真实分布 ( p ( x ) p(x) p(x) ) 的得分函数 ( ∇ log ⁡ p ( x ) \nabla \log p(x) logp(x) )。Fisher散度是这一过程的自然损失函数。

推导步骤

假设我们要最小化 ( q ( x ) q(x) q(x) ) 和 ( p ( x ) p(x) p(x) ) 在得分函数上的差异,定义损失:

L ( q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) − ∇ log ⁡ q ( x ) ∥ 2 d x L(q) = \int p(x) \left\| \nabla \log p(x) - \nabla \log q(x) \right\|^2 \, dx L(q)=p(x)logp(x)logq(x)2dx

展开平方项:

L ( q ) = ∫ p ( x ) [ ∥ ∇ log ⁡ p ( x ) ∥ 2 − 2 ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) + ∥ ∇ log ⁡ q ( x ) ∥ 2 ] d x L(q) = \int p(x) \left[ \left\| \nabla \log p(x) \right\|^2 - 2 \nabla \log p(x)^T \nabla \log q(x) + \left\| \nabla \log q(x) \right\|^2 \right] \, dx L(q)=p(x)[logp(x)22∇logp(x)Tlogq(x)+logq(x)2]dx

  • 第一项 ( ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) ∥ 2 d x \int p(x) \left\| \nabla \log p(x) \right\|^2 \, dx p(x)logp(x)2dx ):只依赖 ( p ( x ) p(x) p(x) ),是常数。
  • 第二项 ( − 2 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x -2 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx 2p(x)logp(x)Tlogq(x)dx ):交叉项,依赖 ( p p p ) 和 ( q q q )。
  • 第三项 ( ∫ p ( x ) ∥ ∇ log ⁡ q ( x ) ∥ 2 d x \int p(x) \left\| \nabla \log q(x) \right\|^2 \, dx p(x)logq(x)2dx ):依赖 ( q q q ),需要转换。

直接优化 ( L ( q ) L(q) L(q) ) 对 ( q ( x ) q(x) q(x) ) 的函数梯度较为复杂。得分匹配的关键是利用分部积分,将第三项转换为更易处理的形式。

分部积分简化

处理第三项:

∫ p ( x ) ∥ ∇ log ⁡ q ( x ) ∥ 2 d x = ∫ p ( x ) ∇ log ⁡ q ( x ) T ∇ log ⁡ q ( x ) d x \int p(x) \left\| \nabla \log q(x) \right\|^2 \, dx = \int p(x) \nabla \log q(x)^T \nabla \log q(x) \, dx p(x)logq(x)2dx=p(x)logq(x)Tlogq(x)dx

因为 ( ∇ log ⁡ q ( x ) = ∇ q ( x ) q ( x ) \nabla \log q(x) = \frac{\nabla q(x)}{q(x)} logq(x)=q(x)q(x) ):

∇ log ⁡ q ( x ) T ∇ log ⁡ q ( x ) = ∇ log ⁡ q ( x ) T ∇ q ( x ) q ( x ) \nabla \log q(x)^T \nabla \log q(x) = \nabla \log q(x)^T \frac{\nabla q(x)}{q(x)} logq(x)Tlogq(x)=logq(x)Tq(x)q(x)

应用向量形式的分部积分(散度定理):

∫ p ( x ) ∇ log ⁡ q ( x ) T ∇ q ( x ) q ( x ) d x = ∫ ∇ T [ p ( x ) ∇ log ⁡ q ( x ) ] d x − ∫ ∇ p ( x ) T ∇ log ⁡ q ( x ) d x \int p(x) \nabla \log q(x)^T \frac{\nabla q(x)}{q(x)} \, dx = \int \nabla^T [p(x) \nabla \log q(x)] \, dx - \int \nabla p(x)^T \nabla \log q(x) \, dx p(x)logq(x)Tq(x)q(x)dx=T[p(x)logq(x)]dxp(x)Tlogq(x)dx

假设边界项 ( ∫ ∇ T [ p ∇ log ⁡ q ] d x \int \nabla^T [p \nabla \log q] \, dx T[plogq]dx ) 在无穷远为零(概率密度通常满足此条件),则:

∫ p ( x ) ∥ ∇ log ⁡ q ( x ) ∥ 2 d x = − ∫ ∇ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x \int p(x) \left\| \nabla \log q(x) \right\|^2 \, dx = - \int \nabla p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx p(x)logq(x)2dx=p(x)Tlogq(x)dx+p(x)Tlogq(x)dx

代入 ( ∇ p = p ∇ log ⁡ p \nabla p = p \nabla \log p p=plogp ):

∫ p ( x ) ∥ ∇ log ⁡ q ( x ) ∥ 2 d x = − ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x \int p(x) \left\| \nabla \log q(x) \right\|^2 \, dx = - \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx p(x)logq(x)2dx=p(x)logp(x)Tlogq(x)dx+p(x)Tlogq(x)dx

代回原始损失

将第三项替换回 ( L ( q ) L(q) L(q) ):

L ( q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) ∥ 2 d x − 2 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + [ − ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x ] L(q) = \int p(x) \left\| \nabla \log p(x) \right\|^2 \, dx - 2 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \left[ - \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx \right] L(q)=p(x)logp(x)2dx2p(x)logp(x)Tlogq(x)dx+[p(x)logp(x)Tlogq(x)dx+p(x)Tlogq(x)dx]

合并交叉项:

− 2 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x − ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x = − 3 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x -2 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx - \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx = -3 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx 2p(x)logp(x)Tlogq(x)dxp(x)logp(x)Tlogq(x)dx=3p(x)logp(x)Tlogq(x)dx

得到:

L ( q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) ∥ 2 d x − 3 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x L(q) = \int p(x) \left\| \nabla \log p(x) \right\|^2 \, dx - 3 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx L(q)=p(x)logp(x)2dx3p(x)logp(x)Tlogq(x)dx+p(x)Tlogq(x)dx

调整到标准形式

此时,交叉项系数是 ( − 3 -3 3)。但得分匹配的标准形式(Hyvärinen, 2005)是:

L ( q ) = const + ∫ p ( x ) [ − 2 ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) + ∇ T ∇ log ⁡ q ( x ) ] d x L(q) = \text{const} + \int p(x) \left[ -2 \nabla \log p(x)^T \nabla \log q(x) + \nabla^T \nabla \log q(x) \right] \, dx L(q)=const+p(x)[2∇logp(x)Tlogq(x)+Tlogq(x)]dx

为什么从 ( − 3 -3 3) 变成 ( − 2 -2 2)?得分匹配的目标是优化 ( q ( x ) q(x) q(x) ) 使其得分匹配 ( p ( x ) p(x) p(x) ) 的得分。原始定义中的交叉项是 ( − 2 -2 2),分部积分引入了额外的 ( − 1 -1 1)。在优化中,我们只关心 ( q q q ) 的可变部分,等价形式保留原始的 ( − 2 -2 2),将多余的 ( − 1 -1 1)(即 ( − ∫ p ∇ log ⁡ p T ∇ log ⁡ q -\int p \nabla \log p^T \nabla \log q plogpTlogq ))归入常数,因为它不影响 ( q q q ) 的优化结果(详见附录)。

最终损失为:

L ( q ) = const + ∫ p ( x ) [ − 2 ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) + ∇ T ∇ log ⁡ q ( x ) ] d x L(q) = \text{const} + \int p(x) \left[ -2 \nabla \log p(x)^T \nabla \log q(x) + \nabla^T \nabla \log q(x) \right] \, dx L(q)=const+p(x)[2∇logp(x)Tlogq(x)+Tlogq(x)]dx

验证:最小化此损失,求变分导数为零,得 ( ∇ log ⁡ q ( x ) = ∇ log ⁡ p ( x ) \nabla \log q(x) = \nabla \log p(x) logq(x)=logp(x) ),与 ( D F ( p ∥ q ) D_F(p \parallel q) DF(pq) ) 的目标一致。


Fisher散度的性质

  1. 非负性
    D F ( p ∥ q ) ≥ 0 ,等于 0 当且仅当 ∇ log ⁡ p ( x ) = ∇ log ⁡ q ( x ) (几乎处处) D_F(p \parallel q) \geq 0,等于0 当且仅当 \nabla \log p(x) = \nabla \log q(x) \,(几乎处处) DF(pq)0,等于0当且仅当logp(x)=logq(x)(几乎处处)
    对于可微分布,意味着 ( p ( x ) ∝ q ( x ) p(x) \propto q(x) p(x)q(x) )。

  2. 不对称性
    Fisher散度以 ( p ( x ) p(x) p(x) ) 加权,因此 ( D F ( p ∥ q ) ≠ D F ( q ∥ p ) D_F(p \parallel q) \neq D_F(q \parallel p) DF(pq)=DF(qp) )。

  3. 局部性
    它聚焦得分函数差异,反映分布的局部特性。


在机器学习中的应用

Fisher散度在生成模型和统计推断中有重要应用:

1. 得分匹配(Score Matching)

  • 用途:训练生成模型(如得分基模型)。
  • 方法:通过最小化Fisher散度,模型 ( q ( x ) q(x) q(x) ) 学习 ( p ( x ) p(x) p(x) ) 的得分函数,再用朗之万采样生成样本。
  • 优势:无需归一化常数,适合高维数据(如图像)。

2. 扩散模型(Diffusion Models)

  • 联系:反向去噪过程依赖得分估计,Fisher散度是训练核心。
  • 例子:Stable Diffusion 通过神经网络逼近 ( ∇ log ⁡ p ( x t ) \nabla \log p(x_t) logp(xt) )。

3. 变分推断

  • 用途:近似后验分布时,衡量局部差异。
  • 优势:计算简便,梯度易得。

4. GAN改进

  • 用途:替代判别器损失,提升稳定性。

与KL散度的对比

  • KL散度
    D K L ( p ∥ q ) = ∫ p ( x ) log ⁡ p ( x ) q ( x ) d x D_{KL}(p \parallel q) = \int p(x) \log \frac{p(x)}{q(x)} \, dx DKL(pq)=p(x)logq(x)p(x)dx

    • 全局性:关注概率质量差异。
    • 计算复杂:需归一化。
  • Fisher散度

    • 局部性:关注得分差异。
    • 计算简便:仅需梯度。

总结

Fisher散度通过得分函数差异量化分布距离,兼具理论优雅与实践威力。它在得分匹配和扩散模型中大放异彩,推导中的分部积分虽复杂,但最终形式清晰简洁,确保优化目标正确。无论是研究分布特性,还是生成高质量样本,Fisher散度都是不可忽视的利器。下次遇到分布比较问题,试试Fisher散度吧!

有疑问或想看例子?欢迎留言交流!


附录:为什么不改变优化结果?常数可以随便改吗?

为什么不改变优化结果?

在得分匹配中,原始损失 ( L ( q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) − ∇ log ⁡ q ( x ) ∥ 2 d x L(q) = \int p(x) \left\| \nabla \log p(x) - \nabla \log q(x) \right\|^2 \, dx L(q)=p(x)logp(x)logq(x)2dx ) 展开后,分部积分将第三项转换为:

∫ p ( x ) ∥ ∇ log ⁡ q ( x ) ∥ 2 d x = − ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x \int p(x) \left\| \nabla \log q(x) \right\|^2 \, dx = - \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx p(x)logq(x)2dx=p(x)logp(x)Tlogq(x)dx+p(x)Tlogq(x)dx

代回后,交叉项系数变成 ( − 3 -3 3):

L ( q ) = ∫ p ( x ) ∥ ∇ log ⁡ p ( x ) ∥ 2 d x − 3 ∫ p ( x ) ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) d x + ∫ p ( x ) ∇ T ∇ log ⁡ q ( x ) d x L(q) = \int p(x) \left\| \nabla \log p(x) \right\|^2 \, dx - 3 \int p(x) \nabla \log p(x)^T \nabla \log q(x) \, dx + \int p(x) \nabla^T \nabla \log q(x) \, dx L(q)=p(x)logp(x)2dx3p(x)logp(x)Tlogq(x)dx+p(x)Tlogq(x)dx

但标准形式是:

L ( q ) = const + ∫ p ( x ) [ − 2 ∇ log ⁡ p ( x ) T ∇ log ⁡ q ( x ) + ∇ T ∇ log ⁡ q ( x ) ] d x L(q) = \text{const} + \int p(x) \left[ -2 \nabla \log p(x)^T \nabla \log q(x) + \nabla^T \nabla \log q(x) \right] \, dx L(q)=const+p(x)[2∇logp(x)Tlogq(x)+Tlogq(x)]dx

多出的 ( − 1 -1 1)(即 ( − ∫ p ∇ log ⁡ p T ∇ log ⁡ q -\int p \nabla \log p^T \nabla \log q plogpTlogq ))被归入常数,为什么不影响优化结果?

  • 优化目标的等价性:得分匹配的目标是让 ( ∇ log ⁡ q ( x ) = ∇ log ⁡ p ( x ) \nabla \log q(x) = \nabla \log p(x) logq(x)=logp(x) )。无论交叉项系数是 ( − 3 -3 3) 还是 ( − 2 -2 2),只要损失函数的最优解(变分导数为零)保持一致,优化结果不变。
  • 变分导数:对 ( L ( q ) L(q) L(q) ) 求变分导数,忽略常数项:
    • 对于 (-3) 形式:
      δ L δ q = − 3 ∇ log ⁡ p + ∇ T ∇ log ⁡ q = 0 ⟹ ∇ log ⁡ q = 3 ∇ log ⁡ p \frac{\delta L}{\delta q} = -3 \nabla \log p + \nabla^T \nabla \log q = 0 \implies \nabla \log q = 3 \nabla \log p δqδL=3∇logp+Tlogq=0logq=3∇logp
      (错误,结果不匹配)。
    • 对于标准 ( − 2 -2 2) 形式:
      δ L δ q = − 2 ∇ log ⁡ p + ∇ T ∇ log ⁡ q = 0 ⟹ ∇ log ⁡ q = ∇ log ⁡ p \frac{\delta L}{\delta q} = -2 \nabla \log p + \nabla^T \nabla \log q = 0 \implies \nabla \log q = \nabla \log p δqδL=2∇logp+Tlogq=0logq=logp
      (正确,与目标一致)。
  • 修正原因:直接用 ( − 3 -3 3) 会导致错误的最优解。Hyvärinen (2005) 通过等价变换,保留原始定义的 ( − 2 -2 2),将分部积分引入的 ( − 1 -1 1) 归入常数,确保优化目标正确。这是因为 ( − ∫ p ∇ log ⁡ p T ∇ log ⁡ q -\int p \nabla \log p^T \nabla \log q plogpTlogq ) 虽含 ( q q q ),但在等价损失中不改变最小值点。

常数可以随便改吗(如 ( − 5 -5 5)、( − 6 -6 6))?

  • 不可以随便改:常数(如 ( const \text{const} const ))不影响优化结果,因为它不含 ( q q q ),对 ( q q q ) 的梯度为零。但交叉项系数(如 ( − 2 -2 2))直接影响 ( q q q ) 的优化路径。
  • 系数的作用:交叉项 ( − 2 ∫ p ∇ log ⁡ p T ∇ log ⁡ q d x -2 \int p \nabla \log p^T \nabla \log q \, dx 2plogpTlogqdx ) 是 ( q q q ) 的线性项,改变系数(如 ( − 5 -5 5)、( − 6 -6 6))会改变变分导数的结果:
    • 若改为 ( − 5 -5 5):
      δ L δ q = − 5 ∇ log ⁡ p + ∇ T ∇ log ⁡ q = 0 ⟹ ∇ log ⁡ q = 5 ∇ log ⁡ p \frac{\delta L}{\delta q} = -5 \nabla \log p + \nabla^T \nabla \log q = 0 \implies \nabla \log q = 5 \nabla \log p δqδL=5∇logp+Tlogq=0logq=5∇logp
      (错误)。
  • 结论:常数 ( const \text{const} const ) 可以是任意值(如 ( 5 5 5)、( − 6 -6 6)),不影响 ( q q q ) 的最优解。但交叉项系数必须是 ( − 2 -2 2),以保证 ( ∇ log ⁡ q = ∇ log ⁡ p \nabla \log q = \nabla \log p logq=logp )。多余的 ( − 1 -1 1) 被归入常数,是推导中分离无关项的结果。

后记

2025年2月25日15点36分于上海,在Grok 3大模型辅助下完成。

相关文章:

Fisher散度:从信息几何到机器学习的隐藏利器

Fisher散度:从信息几何到机器学习的隐藏利器 在机器学习和统计学中,比较两个概率分布的差异是常见任务,比如评估真实分布与模型预测分布的差距。KL散度(Kullback-Leibler Divergence)可能是大家熟悉的选择&#xff0c…...

深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )

🍨 本文为🔗365天深度学习训练营 中的学习记录博客Y1中的内容 🍖 原作者:K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金,恶意揣测偷懒用假的结果冒充真实打卡记录,在提出能够拿到视频录像…...

实体机器人在gazebo中的映射

这一部分目的是将真实的机器人映射到gazebo中,使得gazebo中的其他虚拟机器人能识别到真实世界的wheeltec机器人。 真实机器人的型号的wheeltec旗下的mini_mec。 一、在wheeltec官方百度云文档中找到URDF原始导出功能包.zip 找到对应的包 拷贝到工作空间下 在原有…...

【学习笔记】Kubernetes

一、 概览 Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。 Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用? 1.1 Kubernetes控制平面和工作节点的组件及…...

【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch

ping:检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat:查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…...

上海创智学院(测试)算法笔试(ACM赛制)部分例题

1.第一个题,大概题目意思是求n句话中最长的单词和最短的单词 这个题目做的有点磕巴,好几年没有写过c/c了,连string的复制都不会写了,哈哈哈,太笨了 后面一点点捡起来,还是写出来了,本身没啥&…...

【学术投稿-第四届材料工程与应用力学国际学术会议(ICMEAAE 2025】材料工程与应用力学的探讨

重要信息 官网:www.icmeaae.com 时间:2025年3月7-9日 地点:中国西安 简介 第四届材料工程与应用力学(ICMEAAE 2025)将于2025年3月7日至9日在中国西安召开。本次会议将重点讨论材料科学、应用力学等领域的最新研究进…...

2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务

前言: 关于EO边缘安全加速平台服务 参照:产品概述,具体如下: 边缘安全加速平台 EO(Tencent Cloud EdgeOne,下文简称为 EdgeOne)是国内首款基于全新架构的真正一体化的边缘安全加速平台。提供全面的安全防…...

力扣-动态规划-70 爬楼梯

思路 dp数组定义:爬到第i个台阶有多少种爬法递推公式: 当前台阶可能是从前一个或者前两个来的dp数组初始化:遍历顺序:顺序遍历时间复杂度: 代码 class Solution { public:int climbStairs(int n) {if(n 1) ret…...

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求,目前需要了解以下几个关键点及分步解决方案: --- 一、现状分析 1. Ollama 的限制: - 目前Ollama主要面向文本大模型,原生不支持直接上传/处理图片 …...

使用 pytest-mock 进行 Python 高级单元测试与模拟

一、单元测试与模拟的意义 在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致: 测试速度变慢测试结果不可控产生副作用(如真实发送邮件)模拟(Mocking) 技术通过创建虚拟对象替代真…...

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类:exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…...

《Linux 指令集:开启极客世界的钥匙_01》

一、命令行基础 (一)命令行提示符解析 当前用户:显示当前登录的用户名。例如,当前用户为 “ubuntu_user”,则在命令行提示符中会显示该用户名。 连接符:通常是 “”,用于分隔用户名和计算机名…...

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中,不可避免的需要遇到去与H5交互,甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息: 直接在浏览器地址栏输入 : chrome://inspect/#devices 直接连接手机usb,打开开发者模式…...

Deepseek 实战全攻略,领航科技应用的深度探索之旅

想玩转 Deepseek?这攻略别错过!先带你了解它的基本原理,教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧,结合案例加深理解,让你全面掌握,探索科技…...

《论区块链技术及应用》审题技巧 - 系统架构设计师

区块链技术及应用论题写作框架 一、考点概述 本论题“区块链技术及应用”主要考察软件测试工程师对区块链技术的理解及其在软件项目中的实际应用能力。论题涵盖了多个关键方面,首先要求考生对区块链技术有全面的认识,包括但不限于其作为分布式记账技术…...

ROS2 强化学习:案例与代码实战

一、引言 在机器人技术不断发展的今天,强化学习(RL)作为一种强大的机器学习范式,为机器人的智能决策和自主控制提供了新的途径。ROS2(Robot Operating System 2)作为新一代机器人操作系统,具有…...

【Python模块】——pymysql

pymysql是python操作mysql的标准库,可以通过pip install快速导入pymysql包操作数据库 使用pymysql操作mysql 简单demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…...

【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南

一、腾讯云的镜像 https://mirrors.cloud.tencent.com/AndroidSDK/ 二、 打开 Android Studio‌的SDK Manager 路径:Tools–>SDK Manager 在右侧找到 SDK Update Sites 列表‌‌,添加如下链接,像下面一样,一个一个添加 将下面几个链接都加上去 https:...

springboot实现多文件上传

springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...