多分类交叉熵

news2025/4/7 16:32:13
1. 基本概念:熵与交叉熵

要理解多分类交叉熵损失的由来,首先需要掌握信息论中的两个基础概念:(Entropy)和交叉熵(Cross-Entropy)。

  • 熵(Entropy)
    熵衡量一个随机变量的不确定性。对于一个离散随机变量 X X X(例如类别分布),其熵定义为: H ( X ) = − ∑ i = 1 C p i log ⁡ ( p i ) H(X) = -\sum_{i=1}^{C} p_i \log(p_i) H(X)=i=1Cpilog(pi)

    • C C C:可能的类别数。
    • p i p_i pi:类别 i i i 发生的真实概率。
    • 意义:熵越大,分布的不确定性越高。例如,若所有类别概率相等,熵最大;若某类别概率为 1,其余为 0,熵为 0。
  • 交叉熵(Cross-Entropy)
    交叉熵衡量两个概率分布 P P P(真实分布)和 Q Q Q(预测分布)之间的差异,定义为: H ( P , Q ) = − ∑ i = 1 C p i log ⁡ ( q i ) H(P, Q) = -\sum_{i=1}^{C} p_i \log(q_i) H(P,Q)=i=1Cpilog(qi)

    • p i p_i pi:真实分布 P P P 中类别 i i i 的概率。
    • q i q_i qi:预测分布 Q Q Q 中类别 i i i 的概率。
    • 意义:交叉熵越小,说明预测分布 Q Q Q 越接近真实分布 P P P。交叉熵总是大于等于熵 H ( P ) H(P) H(P)(根据 KL 散度的非负性)。

在分类问题中,交叉熵损失函数正是基于这一概念,用于量化模型预测概率与真实标签之间的差距。


2. 多分类问题的设置

在多分类任务中,假设有 C C C 个类别,每个样本属于其中一个类别。以下是问题的数学建模:

  • 真实标签
    真实标签通常采用 one-hot 编码 表示:

    • 如果样本属于第 k k k 类,则标签为 y = [ y 1 , y 2 , … , y C ] y = [y_1, y_2, \dots, y_C] y=[y1,y2,,yC],其中 y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0 i ≠ k i \neq k i=k)。
    • 因此,真实分布 P P P 是确定的: p i = y i p_i = y_i pi=yi
  • 模型预测
    模型通过 softmax 函数 将线性输出转化为概率分布: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi

    • z i = θ i T x z_i = \theta_i^T x zi=θiTx:第 i i i 类的线性输出(logit),其中 θ i \theta_i θi 是类别 i i i 的参数向量, x x x 是输入特征。
    • p i p_i pi:模型预测样本属于第 i i i 类的概率,且满足 ∑ i = 1 C p i = 1 \sum_{i=1}^{C} p_i = 1 i=1Cpi=1
    • 意义:softmax 将任意实数 z i z_i zi 转换为概率,确保输出是一个合法的概率分布。

3. 交叉熵损失的推导

多分类交叉熵损失的推导基于信息论中的交叉熵定义,结合分类问题的特性。

  • 交叉熵定义
    根据交叉熵的公式,真实分布 P P P(由 y i y_i yi 表示)和预测分布 Q Q Q(由 p i p_i pi 表示)之间的交叉熵为: H ( P , Q ) = − ∑ i = 1 C y i log ⁡ ( p i ) H(P, Q) = -\sum_{i=1}^{C} y_i \log(p_i) H(P,Q)=i=1Cyilog(pi)

  • 损失函数
    在机器学习中,我们将交叉熵直接作为损失函数 L L L L = H ( P , Q ) = − ∑ i = 1 C y i log ⁡ ( p i ) L = H(P, Q) = -\sum_{i=1}^{C} y_i \log(p_i) L=H(P,Q)=i=1Cyilog(pi)

    • 解释:由于 y i y_i yi 是 one-hot 编码,只有真实类别 k k k y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0。因此,损失简化为: L = − log ⁡ ( p k ) L = -\log(p_k) L=log(pk)
      • k k k:真实类别的索引。
      • 意义:损失只与模型对正确类别的预测概率 p k p_k pk 有关。 p k p_k pk 越接近 1, − log ⁡ ( p k ) -\log(p_k) log(pk) 越小,损失越低。
  • 推导过程

    1. 真实分布 P P P 是确定的(例如, [ 0 , 0 , 1 , 0 ] [0, 0, 1, 0] [0,0,1,0]),由标签 y i y_i yi 给出。
    2. 预测分布 Q Q Q 是模型通过 softmax 输出的概率分布 p i p_i pi
    3. 目标:最小化 H ( P , Q ) H(P, Q) H(P,Q),使 p i p_i pi 接近 y i y_i yi

4. 为什么使用交叉熵损失?

交叉熵损失在多分类问题中被广泛采用,有以下几个原因:

  • 与最大似然估计(MLE)的联系

    • 在统计学中,最大似然估计的目标是最大化数据的似然函数。
    • 对于一个样本,似然函数是模型正确预测的概率: L = p k L = p_k L=pk k k k 是真实类别)。
    • 对数似然: log ⁡ ( L ) = log ⁡ ( p k ) \log(L) = \log(p_k) log(L)=log(pk)
    • 最小化交叉熵 − log ⁡ ( p k ) -\log(p_k) log(pk) 等价于最大化对数似然。
    • 推导
      • 假设有 N N N 个独立样本,总对数似然为: log ⁡ L ( θ ) = ∑ n = 1 N log ⁡ ( p n , k n ) \log L(\theta) = \sum_{n=1}^{N} \log(p_{n,k_n}) logL(θ)=n=1Nlog(pn,kn)
      • 最小化平均交叉熵: L = − 1 N ∑ n = 1 N ∑ i = 1 C y n , i log ⁡ ( p n , i ) = − 1 N ∑ n = 1 N log ⁡ ( p n , k n ) L = -\frac{1}{N} \sum_{n=1}^{N} \sum_{i=1}^{C} y_{n,i} \log(p_{n,i}) = -\frac{1}{N} \sum_{n=1}^{N} \log(p_{n,k_n}) L=N1n=1Ni=1Cyn,ilog(pn,i)=N1n=1Nlog(pn,kn)
      • 因此,最小化交叉熵等价于最大化似然。
  • 梯度计算简便

    • 交叉熵损失与 softmax 函数结合时,梯度形式非常简洁: ∂ L ∂ z k = p k − y k \frac{\partial L}{\partial z_k} = p_k - y_k zkL=pkyk
    • 意义:梯度直接是预测概率与真实标签的差值,便于反向传播和参数优化。
  • 惩罚错误预测

    • p k p_k pk 很小时(即模型对正确类别的置信度低), − log ⁡ ( p k ) -\log(p_k) log(pk) 变得很大,从而对错误预测施加较大惩罚。
    • 这激励模型提高对正确类别的预测概率。

5. 总结

多分类交叉熵损失函数的由来和推导可以总结为:

  • 信息论基础:交叉熵衡量真实分布与预测分布的差异。
  • 多分类建模:真实标签用 one-hot 编码表示,预测概率通过 softmax 函数生成。
  • 损失函数 L = − ∑ i = 1 C y i log ⁡ ( p i ) L = -\sum_{i=1}^{C} y_i \log(p_i) L=i=1Cyilog(pi),对于单个样本简化为 L = − log ⁡ ( p k ) L = -\log(p_k) L=log(pk)
  • 优化联系:最小化交叉熵等价于最大化对数似然。
  • 梯度简洁:结合 softmax,梯度为 p k − y k p_k - y_k pkyk,便于梯度下降优化。

通过这一损失函数,模型能够有效学习多分类任务中的类别分布,提高分类准确性。

1. 多分类交叉熵损失函数的定义

对于多分类任务,假设有 C C C 个类别,交叉熵损失函数的公式为:

CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

  • 变量说明

    • C C C:类别总数。
    • y i y_i yi:真实标签的 one-hot 编码。如果样本属于第 k k k 类,则 y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0
    • p i p_i pi:模型预测样本属于第 i i i 类的概率,通常通过 softmax 函数计算: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi
      • z i = θ i T x z_i = \theta_i^T x zi=θiTx:第 i i i 类的线性输出。
      • θ i \theta_i θi:第 i i i 类对应的参数向量。
      • x x x:输入特征向量。
  • 目标:通过调整参数 θ i \theta_i θi(每个类别对应一组参数),使预测概率 p i p_i pi 尽可能接近真实标签 y i y_i yi


2. 梯度下降的基本原理

梯度下降通过以下公式更新模型参数:

θ new = θ − η ∇ L ( θ ) \theta_{\text{new}} = \theta - \eta \nabla L(\theta) θnew=θηL(θ)

  • η \eta η:学习率,控制参数更新的步长。
  • ∇ L ( θ ) \nabla L(\theta) L(θ):损失函数 L ( θ ) L(\theta) L(θ) 对参数 θ \theta θ 的梯度。

在多分类问题中,参数 θ \theta θ 通常是一个矩阵,形状为 ( C , 特征数 ) (C, \text{特征数}) (C,特征数),每行对应一个类别的参数向量。梯度 ∇ L ( θ ) \nabla L(\theta) L(θ) 也具有相同的形状。


3. 多分类交叉熵损失的梯度计算

我们需要计算损失函数 CE \text{CE} CE 对每个类别参数 θ k \theta_k θk 的梯度,即 ∂ CE ∂ θ k \frac{\partial \text{CE}}{\partial \theta_k} θkCE。由于 θ k \theta_k θk 是一个向量,梯度也是一个向量。

推导过程

使用链式法则分解梯度:

∂ CE ∂ θ k = ∂ CE ∂ z k ⋅ ∂ z k ∂ θ k \frac{\partial \text{CE}}{\partial \theta_k} = \frac{\partial \text{CE}}{\partial z_k} \cdot \frac{\partial z_k}{\partial \theta_k} θkCE=zkCEθkzk

(1) 计算 ∂ CE ∂ z k \frac{\partial \text{CE}}{\partial z_k} zkCE

损失函数为:

CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

z k z_k zk 求偏导数:

∂ CE ∂ z k = − ∑ i = 1 C y i ⋅ 1 p i ⋅ ∂ p i ∂ z k \frac{\partial \text{CE}}{\partial z_k} = -\sum_{i=1}^{C} y_i \cdot \frac{1}{p_i} \cdot \frac{\partial p_i}{\partial z_k} zkCE=i=1Cyipi1zkpi

  • 计算 ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi
    由于 p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi 是 softmax 函数,我们需要分别考虑 i = k i = k i=k i ≠ k i \neq k i=k 的情况:

    • i = k i = k i=k 时: ∂ p k ∂ z k = p k ( 1 − p k ) \frac{\partial p_k}{\partial z_k} = p_k (1 - p_k) zkpk=pk(1pk) (softmax 对自身变量的导数类似于 sigmoid)。
    • i ≠ k i \neq k i=k 时: ∂ p i ∂ z k = − p i p k \frac{\partial p_i}{\partial z_k} = -p_i p_k zkpi=pipk (由于 p i p_i pi 的分母包含 e z k e^{z_k} ezk,增加 z k z_k zk 会减少 p i p_i pi)。
  • 代入损失函数的导数
    ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi 代入:

    ∂ CE ∂ z k = − [ y k ⋅ 1 p k ⋅ p k ( 1 − p k ) + ∑ i ≠ k y i ⋅ 1 p i ⋅ ( − p i p k ) ] \frac{\partial \text{CE}}{\partial z_k} = -\left[ y_k \cdot \frac{1}{p_k} \cdot p_k (1 - p_k) + \sum_{i \neq k} y_i \cdot \frac{1}{p_i} \cdot (-p_i p_k) \right] zkCE= ykpk1pk(1pk)+i=kyipi1(pipk)

    化简:

    • 第一项: y k ( 1 − p k ) y_k (1 - p_k) yk(1pk)
    • 第二项: ∑ i ≠ k y i ⋅ ( − p k ) = − p k ∑ i ≠ k y i \sum_{i \neq k} y_i \cdot (-p_k) = -p_k \sum_{i \neq k} y_i i=kyi(pk)=pki=kyi

    合并: ∂ CE ∂ z k = − y k ( 1 − p k ) − p k ∑ i ≠ k y i \frac{\partial \text{CE}}{\partial z_k} = -y_k (1 - p_k) - p_k \sum_{i \neq k} y_i zkCE=yk(1pk)pki=kyi

  • 利用 one-hot 编码特性
    因为 y y y 是 one-hot 向量, ∑ i = 1 C y i = 1 \sum_{i=1}^{C} y_i = 1 i=1Cyi=1,且如果 y k = 1 y_k = 1 yk=1,则 ∑ i ≠ k y i = 0 \sum_{i \neq k} y_i = 0 i=kyi=0;如果 y k = 0 y_k = 0 yk=0,则 ∑ i ≠ k y i = 1 \sum_{i \neq k} y_i = 1 i=kyi=1。我们可以进一步化简: ∂ CE ∂ z k = − y k ( 1 − p k ) + p k ( 1 − y k ) \frac{\partial \text{CE}}{\partial z_k} = -y_k (1 - p_k) + p_k (1 - y_k) zkCE=yk(1pk)+pk(1yk) 展开: = − y k + y k p k + p k − y k p k = p k − y k = -y_k + y_k p_k + p_k - y_k p_k = p_k - y_k =yk+ykpk+pkykpk=pkyk

    结果 ∂ CE ∂ z k = p k − y k \frac{\partial \text{CE}}{\partial z_k} = p_k - y_k zkCE=pkyk

    这个结果非常简洁,表示损失对 z k z_k zk 的变化率等于预测概率与真实标签的差值。

(2) 计算 ∂ z k ∂ θ k \frac{\partial z_k}{\partial \theta_k} θkzk

线性输出定义为:

z k = θ k T x z_k = \theta_k^T x zk=θkTx

θ k \theta_k θk 求梯度:

∂ z k ∂ θ k = x \frac{\partial z_k}{\partial \theta_k} = x θkzk=x

  • 解释 z k z_k zk θ k \theta_k θk x x x 的内积,梯度是一个向量,与输入特征 x x x 相同。
(3) 合并梯度

应用链式法则:

∂ CE ∂ θ k = ∂ CE ∂ z k ⋅ ∂ z k ∂ θ k = ( p k − y k ) x \frac{\partial \text{CE}}{\partial \theta_k} = \frac{\partial \text{CE}}{\partial z_k} \cdot \frac{\partial z_k}{\partial \theta_k} = (p_k - y_k) x θkCE=zkCEθkzk=(pkyk)x

  • 完整梯度
    对于每个类别 k k k k = 1 , 2 , . . . , C k = 1, 2, ..., C k=1,2,...,C),梯度为: ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x

4. 梯度下降的训练过程

在多分类问题中,训练过程包括以下步骤:

  1. 前向传播

    • 对于每个类别 i i i
      • 计算线性输出 z i = θ i T x z_i = \theta_i^T x zi=θiTx
      • 通过 softmax 函数计算概率: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi
  2. 计算损失

    • 使用预测概率 p i p_i pi 和真实标签 y i y_i yi 计算交叉熵损失: CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)
  3. 反向传播

    • 计算损失对每个类别参数 θ k \theta_k θk 的梯度: ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x
  4. 更新参数

    • 对每个类别的参数 θ k \theta_k θk 进行更新: θ k = θ k − η ( p k − y k ) x \theta_k = \theta_k - \eta (p_k - y_k) x θk=θkη(pkyk)x
      • η \eta η 是学习率。
  5. 重复迭代

    • 对训练数据集重复上述步骤,直到损失收敛或达到预设的迭代次数。

5. 总结

多分类交叉熵损失函数在梯度下降中的应用过程可以概括为:

  • 损失函数 CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

  • 梯度 ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x

  • 参数更新 θ k = θ k − η ( p k − y k ) x \theta_k = \theta_k - \eta (p_k - y_k) x θk=θkη(pkyk)x

  • 关键点

    • 梯度 ( p k − y k ) x (p_k - y_k) x (pkyk)x 表明参数调整方向取决于预测概率 p k p_k pk 与真实标签 y k y_k yk 的差值。
    • 这种形式与二分类问题中的梯度 ( p − y ) x (p - y) x (py)x 类似,但多分类中需要为每个类别分别计算。

通过不断迭代,梯度下降使模型的预测概率分布逐渐接近真实标签分布,从而提高分类性能。

6. 交叉熵损失的梯度推导(简要说明)**

为了完整性,我们简要说明梯度计算过程:

  • 目标:计算 L = − ∑ i = 1 C y i log ⁡ ( p i ) L = -\sum_{i=1}^{C} y_i \log(p_i) L=i=1Cyilog(pi) 对线性输出 z k z_k zk 的偏导数。

  • 链式法则 ∂ L ∂ z k = ∑ i = 1 C ∂ L ∂ p i ⋅ ∂ p i ∂ z k \frac{\partial L}{\partial z_k} = \sum_{i=1}^{C} \frac{\partial L}{\partial p_i} \cdot \frac{\partial p_i}{\partial z_k} zkL=i=1CpiLzkpi

    • ∂ L ∂ p i = − y i p i \frac{\partial L}{\partial p_i} = -\frac{y_i}{p_i} piL=piyi
    • ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi
      • i = k i = k i=k ∂ p k ∂ z k = p k ( 1 − p k ) \frac{\partial p_k}{\partial z_k} = p_k (1 - p_k) zkpk=pk(1pk)
      • i ≠ k i \neq k i=k ∂ p i ∂ z k = − p i p k \frac{\partial p_i}{\partial z_k} = -p_i p_k zkpi=pipk
  • 合并 ∂ L ∂ z k = − y k p k ⋅ p k ( 1 − p k ) + ∑ i ≠ k ( − y i p i ) ⋅ ( − p i p k ) \frac{\partial L}{\partial z_k} = -\frac{y_k}{p_k} \cdot p_k (1 - p_k) + \sum_{i \neq k} (-\frac{y_i}{p_i}) \cdot (-p_i p_k) zkL=pkykpk(1pk)+i=k(piyi)(pipk) 化简后: ∂ L ∂ z k = p k − y k \frac{\partial L}{\partial z_k} = p_k - y_k zkL=pkyk

  • 对参数的梯度 ∂ L ∂ θ k = ( p k − y k ) x \frac{\partial L}{\partial \theta_k} = (p_k - y_k) x θkL=(pkyk)x

    • x x x:输入特征向量。

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

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

相关文章

【速写】Transformer-encoder-decoder深度解析

文章目录 一、理论分析1. Transformers概述2. Transformer的输入部分具体是如何构成?2.1 单词 Embedding2.2 位置 Embedding 3 自注意力原理3.1 自注意力结构3.2 QKV的计算3.3 自注意力的输出3.4 多头注意力 4 Encoder结构4.1 AddNorm4.2 前馈4.3 组成Encoder 二、代…

MyBatis八股文-执行流程、延迟加载、一级与二级缓存

(一)执行流程 mybatis-config.xml核心配置文件的作用: 在MyBatis框架的核心配置文件中需要去指定当前的环境配置、指定需要操作的是哪个数据库,并且输入当前的用户名与密码,只有配置了他才能真正操作数据库。同时还去加载了SQL映射文件&#…

基于Spark的哔哩哔哩舆情数据分析系统

【Spark】基于Spark的哔哩哔哩舆情数据分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python和Django框架进行开发,为了便于广大用户针对舆情进行个性化分析处…

【Linux】日志模块实现详解

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

Java基础:面向对象高级(四)

内部类(类中五大成分之一) 四种形式 成员内部类【了解】 静态内部类【了解】 局部内部类【了解】 匿名内部类【重点】 枚举 泛型 什么是泛型 泛型类-模拟ArrayList 泛型接口-操作学生,老师增删改查 泛型方法 泛型擦除和注意事项

easy-poi 一对多导出

1. 需求: 某一列上下两行单元格A,B值一样且这两个单元格, 前面所有列对应单元格值一样的话, 就对A,B 两个单元格进行纵向合并单元格 1. 核心思路: 先对数据集的国家,省份,城市...... id 身份证进行排序…

python通过调用海康SDK打开工业相机(全流程)

首先打开海康机器人-机器视觉-下载中心 下载最新版的 MVS 安装后打开目录找到 ...\MVS\Development\Samples\Python 将MvImport内所有文件拷贝至工作目录 然后到 C:\Program Files (x86)\Common Files\MVS\Runtime 找到适合自己系统的版本,将整个文件夹拷贝至工…

manim,制作专业的数学公式动画

manim是一个Python第三方库,全称是mathematical animation engine(数学动画引擎)。manim用于解说线性代数、微积分、神经网络、黎曼猜想、傅里叶变换以及四元数等数学概念。 manim使你能够以编程的方式创建精确的数学图形、动画和场景。与传统的几何画板等绘图软件不同,man…

小刚说C语言刷题——第15讲 多分支结构

1.多分支结构 所谓多分支结构是指在选择的时候有多种选择。根据条件满足哪个分支,就走对应分支的语句。 2.语法格式 if(条件1) 语句1; else if(条件2) 语句2; else if(条件3) 语句3; ....... else 语句n; 3.示例代码 从键盘输入三条边的长度,…

[ctfshow web入门] web6

前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗,我们输入url/xxx,其中如果url/xxx存在,那么访问成功,证明存在这样一个入口点;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx,…

简单程序语言理论与编译技术·22 实现一个从AST到RISCV的编译器

本文是记录专业课“程序语言理论与编译技术”的部分笔记。 LECTURE 22(实现一个从AST到RISCV的编译器) 一、问题分析 1、完整的编译器(如LLVM)需先完成AST到IR的转换,并进行代码优化,再到汇编&#xff0…

lua和C的交互

1.C调用lua例子 #include <iostream> #include <lua.hpp>int main() {//用于创建一个新的lua虚拟机lua_State* L luaL_newstate();luaL_openlibs(L);//打开标准库/*if (luaL_dofile(L, "test.lua") ! LUA_OK) {std::cerr << "Lua error: &…

Css:如何解决绝对定位子元素内容被父级元素overflow:hidden属性剪裁

一、问题描述 今天小伙伴提了一个bug&#xff0c;在点击列表项的“…”按钮应该出现的悬浮菜单显示不完整&#xff1a; 二、问题排查 一般这种问题&#xff0c;是由于悬浮菜单采用的是绝对定位&#xff0c;而父级采用了overflow:hidden属性。但需要注意的是&#xff0c;这里的…

RoMo: Robust Motion Segmentation Improves Structure from Motion

前言 看起来像是一篇投稿CVPR的文章&#xff0c;不知道被哪个瞎眼审稿人拒了。同期还有一篇CVPR被接收的工作Segment Any Motion in Videos&#xff0c;看起来不如这篇直白&#xff08;也可能是因为我先看过spotlesssplats的缘故&#xff09;&#xff0c;后面也应该一并介绍了…

MCP 极简入门 - 三分钟 Cline + Smithery 运行 time 服务

文章目录 一、&#x1f680; 初识Smithery&#xff1a;AI服务的新大陆找到心仪的服务 二、Cline 编辑配置文件&#x1f527;1、打开配置文件2. 添加Time Server配置3. 验证配置效果 三、&#x1f4ac; 实战对话&#xff1a;让AI告诉你时间四、服务管理小技巧&#x1f504;&…

基本机动飞行性能

机动飞行时描述飞机在给定构型和发动机工作状态下改变飞行速度、飞行高度和飞行方向的能力 1. 水平加&#xff08;减&#xff09;速 水平加&#xff08;减&#xff09;速性能反映飞机在水平面内改变直线飞行速度的能力。描述水平加&#xff08;减&#xff09;速性能的参数包括…

【Linux】进程间通信、匿名管道、进程池

一.什么是通信 进程间通信(Inter-Process Communication&#xff0c;IPC),是指在操作系统中&#xff0c;不同进程之间进行数据交换和同步的机制。由于每个进程通常拥有独立的内存空间&#xff0c;进程间无法直接访问对方的内存&#xff0c;因此需要通过特定的机制来实现通信和…

【MATLAB定位例程】TDOA(到达时间差)的chan-tylor,三维环境,附完整代码

该代码实现了基于三维空间的动态目标TDOA定位,结合了Chan算法(解析解)与Taylor级数展开法(迭代优化)的双重优势。 文章目录 运行结果MATLAB代码代码讲解代码功能概述核心算法原理代码结构解析可视化与结果分析运行结果 定位示意图: 三轴状态曲线: 三轴误差曲线: MA…

数字化转型中的开源AI智能客服与S2B2C商城小程序的融合创新

摘要 数字经济时代&#xff0c;企业需通过技术重构用户交互与供应链体系。本文以“开源AI智能客服”“AI智能名片”及“S2B2C商城小程序”为核心&#xff0c;研究三者如何通过技术协同与场景化应用实现企业营销、客户服务与供应链管理的智能化升级。通过案例分析、技术架构设…

重生之我是去噪高手——diffusion model

diffusion model是如何运作的&#xff1f; 想象一下&#xff0c;你有一张清晰的图片。扩散模型的核心思想分为两个过程&#xff1a; 前向过程&#xff08;Forward Process / Diffusion Process&#xff09;&#xff1a;逐步加噪反向过程&#xff08;Reverse Process / Denois…