【硬核数学】2.5 “价值标尺”-损失函数:信息论如何设计深度学习的损失函数《从零构建机器学习、深度学习到LLM的数学认知》

欢迎来到本系列硬核数学之旅的第十篇,也是我们对经典数学领域进行深度学习“升级”的最后一站。我们已经拥有了强大的模型架构(基于张量)、高效的学习引擎(反向传播)和智能的优化策略(Adam等)。但所有这些强大的工具,都需要一个明确的目标来引导。这个目标,就是由损失函数定义的。

损失函数,是AI模型的“价值标尺”和“道德罗盘”。它量化了模型预测与真实情况之间的差距。模型训练的全部意义,就是通过调整参数,来最小化这个“差距”。可以说,你选择什么样的损失函数,就决定了你的模型会学成什么样

那么,我们应该如何设计一个“好”的损失函数呢?我们能否找到一个比简单的“均方误差”更深刻、更具原则性的框架?答案就在信息论中。在第五篇中,我们用信息论来衡量不确定性并构建决策树。现在,我们将看到这些思想如何升华,成为设计深度学习损失函数的通用语言。我们将深入探索KL散度——衡量两个概率分布之间“距离”的工具,并由此引出深度学习的“万能损失函数”——交叉熵。最后,我们将看到互信息如何成为无监督学习中“表示学习”的理论灯塔。

第一部分:丈量信念的差距 —— KL散度

在深度学习,尤其是概率深度学习的世界里,我们经常处理两个核心的概率分布:

  1. 真实数据分布 P ( x ) P(x) P(x):这是客观世界中数据生成的真实规律。我们无法直接知道它,但我们拥有从它那里采样得到的大量训练数据。
  2. 模型分布 Q ( x ) Q(x) Q(x):这是我们的模型学习到的、对真实世界的“信念”或“近似”。例如,一个分类模型的Softmax输出,或一个生成模型的输出分布。

学习的目标,就是让我们的模型信念 Q ( x ) Q(x) Q(x) 尽可能地去逼近真实分布 P ( x ) P(x) P(x)。要实现这个目标,我们首先需要一个数学工具来量化两个概率分布之间的“差距”或“距离”。这个工具,就是KL散度 (Kullback-Leibler Divergence),也常被称为相对熵 (Relative Entropy)。

KL散度的数学定义与直观解读

对于两个离散概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x),从 Q Q Q P P P 的KL散度定义为:
D K L ( P ∣ ∣ Q ) = ∑ x P ( x ) log ⁡ ( P ( x ) Q ( x ) ) D_{KL}(P || Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right) DKL(P∣∣Q)=xP(x)log(Q(x)P(x))
对于连续分布,求和则变为积分。

这个公式看起来有些抽象,但我们可以从几个层面来深刻地理解它:

1. 从信息论的角度:编码的代价
KL散度最初的含义是:当我们用一个“错误”的分布 Q Q Q 来为来自“真实”分布 P P P 的事件进行编码时,所需要的平均额外比特数

  • log ⁡ P ( x ) Q ( x ) = log ⁡ P ( x ) − log ⁡ Q ( x ) = ( − log ⁡ Q ( x ) ) − ( − log ⁡ P ( x ) ) \log \frac{P(x)}{Q(x)} = \log P(x) - \log Q(x) = (-\log Q(x)) - (-\log P(x)) logQ(x)P(x)=logP(x)logQ(x)=(logQ(x))(logP(x))
  • − log ⁡ P ( x ) -\log P(x) logP(x) 是用最优编码(基于真实分布P)来编码事件 x x x 所需的比特数。
  • − log ⁡ Q ( x ) -\log Q(x) logQ(x) 是用次优编码(基于模型分布Q)来编码事件 x x x 所需的比特数。
  • 它们的差值,就是编码事件 x x x 的“浪费”。
  • D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q) 就是对所有可能的事件 x x x,根据其真实发生概率 P ( x ) P(x) P(x) 进行加权平均,得到的期望编码浪费

2. 从“意外”的角度:信念更新的惊讶程度
KL散度也可以被看作是,当我们发现真实分布是 P P P 而不是我们以为的 Q Q Q 时,我们感到的“平均惊讶程度”。

  • 比值 P ( x ) Q ( x ) \frac{P(x)}{Q(x)} Q(x)P(x) 衡量了在事件 x x x 上,真实概率与模型预测概率的差异。
  • 如果 P ( x ) P(x) P(x) 很大而 Q ( x ) Q(x) Q(x) 很小,意味着一个我们认为不太可能发生的事件,实际上很常发生。我们会非常“惊讶”,这个比值就很大,其对数也很大。
  • D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q) 就是根据真实概率 P ( x ) P(x) P(x) 加权的平均惊讶程度。

KL散度的关键性质

  1. 非负性 D K L ( P ∣ ∣ Q ) ≥ 0 D_{KL}(P || Q) \ge 0 DKL(P∣∣Q)0。两个分布之间的“距离”永远不会是负数。
  2. 同一性 D K L ( P ∣ ∣ Q ) = 0 D_{KL}(P || Q) = 0 DKL(P∣∣Q)=0 当且仅当 P = Q P=Q P=Q。只有当模型分布与真实分布完全相同时,它们之间的距离才为零。
  3. 不对称性 (Asymmetry):这是KL散度最重要也最独特的性质! D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P || Q) \ne D_{KL}(Q || P) DKL(P∣∣Q)=DKL(Q∣∣P)
    • 它不是一个真正的数学“距离”(因为距离需要满足对称性)。
    • 这种不对称性在AI中具有深刻的实际意义。

不对称性的深刻含义

让我们来仔细探究一下 D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q) D K L ( Q ∣ ∣ P ) D_{KL}(Q || P) DKL(Q∣∣P) 的不同。

  • D K L ( P ∣ ∣ Q ) = ∑ P ( x ) log ⁡ P ( x ) Q ( x ) D_{KL}(P || Q) = \sum P(x) \log \frac{P(x)}{Q(x)} DKL(P∣∣Q)=P(x)logQ(x)P(x) (Forward KL)

    • 看权重项 P ( x ) P(x) P(x)。这个散度重点关注的是真实分布 P P P 概率高的区域
    • 为了让这个散度变小,只要在 P ( x ) > 0 P(x) > 0 P(x)>0 的地方,我们必须保证 Q ( x ) Q(x) Q(x) 也不能太小(否则 log ⁡ P ( x ) Q ( x ) \log \frac{P(x)}{Q(x)} logQ(x)P(x) 会变得非常大)。
    • 它不怎么关心 P ( x ) P(x) P(x) 概率为0的地方, Q ( x ) Q(x) Q(x) 的取值。
    • 效果:这会驱使 Q Q Q覆盖 P P P 的主要模式(峰值)。如果 P P P 是一个多峰分布, Q Q Q 为了最小化散度,会倾向于选择其中一个峰值并很好地拟合它,而忽略其他峰值。这被称为**“模式寻求” (mode-seeking)** 或**“零避免” (zero-avoiding)** 行为。
  • D K L ( Q ∣ ∣ P ) = ∑ Q ( x ) log ⁡ Q ( x ) P ( x ) D_{KL}(Q || P) = \sum Q(x) \log \frac{Q(x)}{P(x)} DKL(Q∣∣P)=Q(x)logP(x)Q(x) (Reverse KL)

    • 看权重项 Q ( x ) Q(x) Q(x)。这个散度重点关注的是模型分布 Q Q Q 概率高的区域
    • 为了让这个散度变小,只要在 Q ( x ) > 0 Q(x) > 0 Q(x)>0 的地方,我们必须保证 P ( x ) P(x) P(x) 也必须大于0(否则 log ⁡ Q ( x ) P ( x ) \log \frac{Q(x)}{P(x)} logP(x)Q(x) 会趋向正无穷)。
    • 效果:这会驱使 Q Q Q 覆盖 P P P 的整个支撑集 Q Q Q 会倾向于变得非常宽广,以确保它有概率的地方,P也有概率。这被称为**“均值寻求” (mean-seeking)** 或**“零强制” (zero-forcing)** 行为。

在这里插入图片描述

这张图直观地展示了最小化不同方向的KL散度会导致截然不同的结果。这种选择在变分推断(通常用Forward KL)和某些强化学习算法中至关重要。

第二部分:深度学习的“万能”损失 —— 交叉熵

KL散度为我们提供了衡量模型分布与真实分布差距的理论工具。现在,我们要把它变成一个在实践中可以轻松使用的损失函数。这个转变的桥梁,就是交叉熵 (Cross-Entropy)

从KL散度到交叉熵的推导

让我们再次审视KL散度的公式,并展开对数项:
D K L ( P ∣ ∣ Q ) = ∑ x P ( x ) ( log ⁡ P ( x ) − log ⁡ Q ( x ) ) D_{KL}(P || Q) = \sum_x P(x) (\log P(x) - \log Q(x)) DKL(P∣∣Q)=xP(x)(logP(x)logQ(x))
D K L ( P ∣ ∣ Q ) = ∑ x P ( x ) log ⁡ P ( x ) − ∑ x P ( x ) log ⁡ Q ( x ) D_{KL}(P || Q) = \sum_x P(x) \log P(x) - \sum_x P(x) \log Q(x) DKL(P∣∣Q)=xP(x)logP(x)xP(x)logQ(x)
我们来分析这个表达式的两个部分:

  • 第一部分: ∑ x P ( x ) log ⁡ P ( x ) = − H ( P ) \sum_x P(x) \log P(x) = -H(P) xP(x)logP(x)=H(P)。这是真实数据分布 P P P负熵
  • 第二部分: − ∑ x P ( x ) log ⁡ Q ( x ) - \sum_x P(x) \log Q(x) xP(x)logQ(x)。这个形式在信息论中有一个专门的名字,叫做交叉熵 (Cross-Entropy),记作 H ( P , Q ) H(P, Q) H(P,Q)

于是,我们得到了一个黄金关系式:
D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P || Q) = H(P, Q) - H(P) DKL(P∣∣Q)=H(P,Q)H(P)
或者写成:
H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) H(P, Q) = H(P) + D_{KL}(P || Q) H(P,Q)=H(P)+DKL(P∣∣Q)
这个关系式告诉我们:交叉熵 = 真实分布的熵 + KL散度

现在,考虑一个典型的监督学习场景。真实数据分布 P P P 是由我们的训练数据集给定的,它是固定不变的。因此,它的熵 H ( P ) H(P) H(P) 是一个常数

这意味着,当我们通过调整模型参数来最小化KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q) 时,由于 H ( P ) H(P) H(P) 是常数,这在数学上完全等价于最小化交叉熵 H ( P , Q ) H(P, Q) H(P,Q)

这是一个里程碑式的结论。我们找到了一个比KL散度更简单、计算更方便的替代品——交叉熵,它可以作为我们优化模型的目标。这就是为什么在深度学习中,我们总是听到“交叉熵损失”,而不是“KL散度损失”。

交叉熵在分类任务中的应用

交叉熵损失是所有分类任务的标准损失函数。让我们看看它在实践中是如何工作的。

考虑一个多分类问题(例如,识别图片是猫、狗还是鸟)。

  • 真实分布 P P P:对于一张真实的猫的图片,其标签是“猫”。在数学上,我们将其表示为一个独热编码 (one-hot encoding) 的向量。假设类别顺序是[猫, 狗, 鸟],那么 P = [ 1 , 0 , 0 ] P = [1, 0, 0] P=[1,0,0]
  • 模型分布 Q Q Q:神经网络的最后一层通常是一个线性层,输出原始的得分(logits)。这些logits通过一个Softmax函数,被转换成一个表示概率的向量。例如, Q = [ 0.7 , 0.2 , 0.1 ] Q = [0.7, 0.2, 0.1] Q=[0.7,0.2,0.1]

现在,我们计算这两个分布之间的交叉熵损失:
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=1CPilogQi
代入我们的例子:
H ( [ 1 , 0 , 0 ] , [ 0.7 , 0.2 , 0.1 ] ) = − ( 1 ⋅ log ⁡ ( 0.7 ) + 0 ⋅ log ⁡ ( 0.2 ) + 0 ⋅ log ⁡ ( 0.1 ) ) = − log ⁡ ( 0.7 ) H([1,0,0], [0.7,0.2,0.1]) = - (1 \cdot \log(0.7) + 0 \cdot \log(0.2) + 0 \cdot \log(0.1)) = -\log(0.7) H([1,0,0],[0.7,0.2,0.1])=(1log(0.7)+0log(0.2)+0log(0.1))=log(0.7)
我们发现了一个惊人的简化:对于one-hot形式的真实标签,交叉熵损失函数直接简化为了“正确类别的负对数概率”

这个结果与我们在第三篇文章中学习的最大似然估计 (Maximum Likelihood Estimation, MLE) 思想不谋而合。最小化交叉熵损失,就是在最大化模型赋予正确标签的对数概率。信息论和概率论在这里殊途同归,为我们提供了同一个强大而优雅的损失函数。

优化更新
损失计算
分类模型
优化器 Adam
真实标签 独热编码
交叉熵损失函数
标量损失值
CNN骨干网络
图像张量
线性层输出 Logits
Softmax函数
预测概率分布
样例: -0.35, -1.6, -2.3
样例: 0.7, 0.2, 0.1
样例: 1, 0, 0
样例: 0.357

这个流程图清晰地展示了交叉熵损失在分类模型训练闭环中的核心位置。它是连接模型预测和真实标签的桥梁,是优化器进行梯度下降的目标。

交叉熵在序列预测中的应用

交叉熵的威力远不止于单标签分类。在自然语言处理(NLP)中,尤其是在大型语言模型(LLM)中,它同样是核心。

一个LLM的任务本质上是一个序列预测任务:给定前面的词,预测下一个最可能的词。这可以看作是在词汇表这个拥有数万个“类别”的集合上进行分类。

  • 在每个时间步 t t t
    • 真实分布 P t P_t Pt:一个覆盖整个词汇表的one-hot向量,其中值为1的位置对应着训练文本中真实的下一个词。
    • 模型分布 Q t Q_t Qt:LLM在时间步 t t t 的输出,经过Softmax层后,得到的在整个词汇表上的概率分布。
  • 损失计算:在每个时间步,我们都计算一个交叉熵损失 H ( P t , Q t ) H(P_t, Q_t) H(Pt,Qt)。整个句子的总损失通常是所有时间步损失的平均值。

困惑度 (Perplexity, PPL) 是评估语言模型性能的一个常用指标,它与交叉熵直接相关:
Perplexity = exp ⁡ ( H ( P , Q ) ) \text{Perplexity} = \exp(H(P, Q)) Perplexity=exp(H(P,Q))
困惑度可以被直观地理解为模型在预测下一个词时,平均面临的“有效选项数”。一个困惑度为100的语言模型,其表现大致相当于在每一步都在100个可能的词之间进行猜测。困惑度越低,模型性能越好。最小化交叉熵损失,也就是在直接优化(最小化)困惑度。

第三部分:从无到有 —— 互信息与表示学习

到目前为止,我们讨论的都是监督学习,即我们有明确的标签(真实分布P)。但在很多情况下,我们拥有海量的数据,却没有标签。我们能否从这些无标签数据中学习到有意义的表示 (Representation) 呢?这就是自监督学习 (Self-Supervised Learning) 的目标,而互信息 (Mutual Information) 为此提供了理论指导。

互信息:再探变量间的关联

我们在第五篇文章中已经介绍过互信息 I ( X ; Y ) I(X; Y) I(X;Y),它衡量了两个变量之间共享的信息量。我们现在用KL散度的语言来重新定义它:
I ( X ; Y ) = D K L ( P ( x , y ) ∣ ∣ P ( x ) P ( y ) ) I(X; Y) = D_{KL}(P(x, y) || P(x)P(y)) I(X;Y)=DKL(P(x,y)∣∣P(x)P(y))
这个定义极其深刻。它表明,互信息衡量的是变量的联合分布 P ( x , y ) P(x,y) P(x,y) 与“假设它们相互独立时的分布” P ( x ) P ( y ) P(x)P(y) P(x)P(y) 之间的KL散度。互信息越大,说明变量 X X X Y Y Y 的关联程度越高,离“相互独立”的状态越远。

用互信息最大化进行表示学习

自监督学习的一个核心思想是:从一个数据样本中,创造出两个或多个不同的“视图 (views)”,然后强迫模型认为这两个视图的表示应该包含相同的信息

例如,对于一张图片,它的两个不同视图可以是:

  • 同一张图片经过两次不同的随机裁剪、颜色抖动、旋转等数据增强操作后得到的两张新图片。

我们希望模型学习一个编码器函数 f f f,它能将一张图片 x x x 映射到一个表示向量 z = f ( x ) z=f(x) z=f(x)。我们的目标是,让来自同一个原始图片的两个视图 x 1 x_1 x1 x 2 x_2 x2 的表示 z 1 = f ( x 1 ) z_1=f(x_1) z1=f(x1) z 2 = f ( x 2 ) z_2=f(x_2) z2=f(x2) 之间的互信息 I ( z 1 ; z 2 ) I(z_1; z_2) I(z1;z2) 最大化

最大化互信息,意味着我们希望 z 1 z_1 z1 中包含了尽可能多的关于 z 2 z_2 z2 的信息,反之亦然。这迫使编码器 f f f 学习到数据中那些对于数据增强操作来说不变的、本质的特征(例如,猫的轮廓和纹理,而不是它在图片中的具体位置或颜色)。

对比学习:互信息最大化的实践

直接最大化互信息是困难的,因为它需要计算和操作概率分布。对比学习 (Contrastive Learning),如SimCLR、MoCo等框架,提供了一种极其聪明的代理方法。

其核心思想是将问题转化为一个“识别”任务:

  1. 取一个“锚点”样本 x i x_i xi 和它的一个“正”样本 x j x_j xj(来自同一原始图片的不同视图)。
  2. 再取一堆“负”样本 { x k } \{x_k\} {xk}(来自其他不同的图片)。
  3. 将所有这些样本通过编码器得到表示向量 { z i , z j , z k } \{z_i, z_j, z_k\} {zi,zj,zk}
  4. 目标:在表示空间中,让 z i z_i zi z j z_j zj 的相似度尽可能高,同时让 z i z_i zi 和所有 z k z_k zk 的相似度尽可能低。

这个目标可以用一个叫做InfoNCE (Noise Contrastive Estimation) 的损失函数来实现,它在形式上非常像一个分类任务的交叉熵损失:
L i , j = − log ⁡ exp ⁡ ( sim ( z i , z j ) / τ ) exp ⁡ ( sim ( z i , z j ) / τ ) + ∑ k exp ⁡ ( sim ( z i , z k ) / τ ) L_{i,j} = -\log \frac{\exp(\text{sim}(z_i, z_j)/\tau)}{\exp(\text{sim}(z_i, z_j)/\tau) + \sum_k \exp(\text{sim}(z_i, z_k)/\tau)} Li,j=logexp(sim(zi,zj)/τ)+kexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)

  • sim ( ⋅ , ⋅ ) \text{sim}(\cdot, \cdot) sim(,) 是相似度函数,通常是余弦相似度。
  • τ \tau τ 是一个温度超参数,用于调节相似度分布的锐利程度。

可以证明,最小化InfoNCE损失,等价于最大化互信息 I ( z i ; z j ) I(z_i; z_j) I(zi;zj) 的一个下界。通过这种方式,对比学习巧妙地将一个无监督的互信息最大化问题,转化成了一个有监督的、类似分类的代理任务,并可以用我们熟悉的交叉熵损失和反向传播来高效优化。

在这里插入图片描述

这幅AI生成的图像,生动地描绘了表示学习的精髓:从左侧混乱的原始数据中,通过一个核心的“表示”(发光水晶),提取出右侧有序的、结构化的信息。对比学习正是通过最大化互信息,来学习如何打造这个“发光水晶”。

融会贯通:信息论——深度学习的“立法者”

今天,我们完成了对信息论的深度学习升级,也为我们整个系列的基础数学篇章画上了一个圆满的句号。我们看到,信息论不再仅仅是用于计算熵和信息增益的工具,它已经升华为深度学习领域的“立法者”,为我们设计核心目标函数提供了坚实的理论依据。

  1. KL散度:它是衡量模型信念与客观现实之间“差距”的理论基石。它的不对称性为不同的AI任务(如生成模型)提供了灵活的设计选择。
  2. 交叉熵:它是KL散度在监督学习实践中的“完美代理人”。由于其计算的便捷性和与最大似然估计的深刻联系,它成为了分类和序列预测任务中无可争议的王者损失函数。当你使用torch.nn.CrossEntropyLoss时,你实际上是在应用深刻的信息论原理。
  3. 互信息:它为无监督的表示学习指明了方向。通过最大化不同视图表示之间的互信息,对比学习等方法能够从海量无标签数据中学习到强大而泛化的特征,这正是AIGC和大型模型预训练的基石之一。

从线性代数的空间,到微积分的变化,到概率论的不确定性,到优化理论的寻路,再到信息论的价值标尺,这五大数学支柱共同构成了我们理解AI的坚固地基。掌握了它们,你就不再是一个只会调用API的“调包侠”,而是一个能够理解模型行为、诊断训练问题、甚至设计新算法的“AI建筑师”。

我们的旅程远未结束。接下来,我们将踏入更广阔的领域,探索那些让深度学习真正“深”起来的理论,以及驱动着像GPT-4这样的大型语言模型(LLM)的更前沿的数学思想。


习题

第1题:KL散度与交叉熵
假设有两个概率分布 P = [ 0.2 , 0.8 ] P=[0.2, 0.8] P=[0.2,0.8] Q = [ 0.5 , 0.5 ] Q=[0.5, 0.5] Q=[0.5,0.5]
A. 请计算KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q)
B. 请计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
C. 请计算 P P P 的熵 H ( P ) H(P) H(P),并验证它们是否满足关系 H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) H(P, Q) = H(P) + D_{KL}(P || Q) H(P,Q)=H(P)+DKL(P∣∣Q)。(使用自然对数 ln ⁡ \ln ln

第2题:损失函数选择
你正在做一个图像分类任务,你的模型最后一层输出了三个类别的logits(原始得分)为 [2.0, 1.0, 0.1]。真实标签是第0类。请问,在使用标准的交叉熵损失函数(通常结合了Softmax)时,计算出的损失值是多少?(请写出计算步骤,使用自然对数)

第3题:对比学习的概念
在自监督的对比学习框架(如SimCLR)中,我们说它的目标是让“正样本对”的表示更近,让“负样本对”的表示更远。请问:
A. “正样本对”指的是什么?
B. “负样本对”指的是什么?
C. 为什么说这种方法是在间接地最大化互信息?


答案

第1题答案:
A. 计算KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P || Q) DKL(P∣∣Q)
D K L ( P ∣ ∣ Q ) = P 1 ln ⁡ P 1 Q 1 + P 2 ln ⁡ P 2 Q 2 D_{KL}(P || Q) = P_1 \ln\frac{P_1}{Q_1} + P_2 \ln\frac{P_2}{Q_2} DKL(P∣∣Q)=P1lnQ1P1+P2lnQ2P2
D K L ( P ∣ ∣ Q ) = 0.2 ln ⁡ 0.2 0.5 + 0.8 ln ⁡ 0.8 0.5 D_{KL}(P || Q) = 0.2 \ln\frac{0.2}{0.5} + 0.8 \ln\frac{0.8}{0.5} DKL(P∣∣Q)=0.2ln0.50.2+0.8ln0.50.8
D K L ( P ∣ ∣ Q ) = 0.2 ln ⁡ ( 0.4 ) + 0.8 ln ⁡ ( 1.6 ) D_{KL}(P || Q) = 0.2 \ln(0.4) + 0.8 \ln(1.6) DKL(P∣∣Q)=0.2ln(0.4)+0.8ln(1.6)
D K L ( P ∣ ∣ Q ) ≈ 0.2 × ( − 0.916 ) + 0.8 × ( 0.470 ) = − 0.1832 + 0.376 = 0.1928 D_{KL}(P || Q) \approx 0.2 \times (-0.916) + 0.8 \times (0.470) = -0.1832 + 0.376 = 0.1928 DKL(P∣∣Q)0.2×(0.916)+0.8×(0.470)=0.1832+0.376=0.1928

B. 计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
H ( P , Q ) = − ( P 1 ln ⁡ Q 1 + P 2 ln ⁡ Q 2 ) H(P, Q) = -(P_1 \ln Q_1 + P_2 \ln Q_2) H(P,Q)=(P1lnQ1+P2lnQ2)
H ( P , Q ) = − ( 0.2 ln ⁡ ( 0.5 ) + 0.8 ln ⁡ ( 0.5 ) ) H(P, Q) = -(0.2 \ln(0.5) + 0.8 \ln(0.5)) H(P,Q)=(0.2ln(0.5)+0.8ln(0.5))
H ( P , Q ) = − ( ln ⁡ ( 0.5 ) × ( 0.2 + 0.8 ) ) = − ln ⁡ ( 0.5 ) ≈ − ( − 0.693 ) = 0.693 H(P, Q) = -(\ln(0.5) \times (0.2 + 0.8)) = -\ln(0.5) \approx -(-0.693) = 0.693 H(P,Q)=(ln(0.5)×(0.2+0.8))=ln(0.5)(0.693)=0.693

C. 计算熵 H ( P ) H(P) H(P) 并验证
H ( P ) = − ( P 1 ln ⁡ P 1 + P 2 ln ⁡ P 2 ) H(P) = -(P_1 \ln P_1 + P_2 \ln P_2) H(P)=(P1lnP1+P2lnP2)
H ( P ) = − ( 0.2 ln ⁡ ( 0.2 ) + 0.8 ln ⁡ ( 0.8 ) ) H(P) = -(0.2 \ln(0.2) + 0.8 \ln(0.8)) H(P)=(0.2ln(0.2)+0.8ln(0.8))
H ( P ) ≈ − ( 0.2 × ( − 1.609 ) + 0.8 × ( − 0.223 ) ) = − ( − 0.3218 − 0.1784 ) = 0.5002 H(P) \approx -(0.2 \times (-1.609) + 0.8 \times (-0.223)) = -(-0.3218 - 0.1784) = 0.5002 H(P)(0.2×(1.609)+0.8×(0.223))=(0.32180.1784)=0.5002
验证 H ( P ) + D K L ( P ∣ ∣ Q ) ≈ 0.5002 + 0.1928 = 0.693 H(P) + D_{KL}(P || Q) \approx 0.5002 + 0.1928 = 0.693 H(P)+DKL(P∣∣Q)0.5002+0.1928=0.693。这与我们直接计算的交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 的值相等。关系成立。

第2题答案:

  1. 第一步:应用Softmax函数
    首先,将logits [2.0, 1.0, 0.1] 转换为概率分布。
    S 0 = e 2.0 ≈ 7.389 S_0 = e^{2.0} \approx 7.389 S0=e2.07.389
    S 1 = e 1.0 ≈ 2.718 S_1 = e^{1.0} \approx 2.718 S1=e1.02.718
    S 2 = e 0.1 ≈ 1.105 S_2 = e^{0.1} \approx 1.105 S2=e0.11.105
    总和 S t o t a l = 7.389 + 2.718 + 1.105 = 11.212 S_{total} = 7.389 + 2.718 + 1.105 = 11.212 Stotal=7.389+2.718+1.105=11.212
    概率 Q 0 = S 0 / S t o t a l ≈ 7.389 / 11.212 ≈ 0.659 Q_0 = S_0 / S_{total} \approx 7.389 / 11.212 \approx 0.659 Q0=S0/Stotal7.389/11.2120.659
    概率 Q 1 = S 1 / S t o t a l ≈ 2.718 / 11.212 ≈ 0.242 Q_1 = S_1 / S_{total} \approx 2.718 / 11.212 \approx 0.242 Q1=S1/Stotal2.718/11.2120.242
    概率 Q 2 = S 2 / S t o t a l ≈ 1.105 / 11.212 ≈ 0.099 Q_2 = S_2 / S_{total} \approx 1.105 / 11.212 \approx 0.099 Q2=S2/Stotal1.105/11.2120.099
    所以,模型的预测概率分布 Q ≈ [ 0.659 , 0.242 , 0.099 ] Q \approx [0.659, 0.242, 0.099] Q[0.659,0.242,0.099]

  2. 第二步:计算交叉熵损失
    真实标签是第0类,所以真实分布 P = [ 1 , 0 , 0 ] P = [1, 0, 0] P=[1,0,0]
    损失 L = H ( P , Q ) = − ∑ P i ln ⁡ Q i = − ( 1 ⋅ ln ⁡ ( Q 0 ) + 0 ⋅ ln ⁡ ( Q 1 ) + 0 ⋅ ln ⁡ ( Q 2 ) ) L = H(P, Q) = - \sum P_i \ln Q_i = - (1 \cdot \ln(Q_0) + 0 \cdot \ln(Q_1) + 0 \cdot \ln(Q_2)) L=H(P,Q)=PilnQi=(1ln(Q0)+0ln(Q1)+0ln(Q2))
    L = − ln ⁡ ( Q 0 ) ≈ − ln ⁡ ( 0.659 ) ≈ − ( − 0.417 ) = 0.417 L = -\ln(Q_0) \approx -\ln(0.659) \approx -(-0.417) = 0.417 L=ln(Q0)ln(0.659)(0.417)=0.417
    所以,计算出的损失值约为 0.417。
    (注:在PyTorch等框架中,CrossEntropyLoss 会自动完成Softmax和计算负对数似然这两个步骤。)

第3题答案:
A. “正样本对” 指的是由同一个原始数据样本通过不同的数据增强(如随机裁剪、旋转等)所生成的两个不同“视图”。模型被期望学习到这两个视图在本质上是相同的。
B. “负样本对” 指的是一个“锚点”样本(来自某个原始数据)和所有其他不同原始数据的样本。模型被期望学习到它们是不同的。
C. 为什么是间接最大化互信息:互信息 I ( z 1 ; z 2 ) I(z_1; z_2) I(z1;z2) 衡量了两个视图的表示 z 1 z_1 z1 z 2 z_2 z2 之间共享的信息量。对比学习的目标是让正样本对的表示相似,负样本对的表示不相似。这本质上是在强迫编码器学习一种表示方法,使得一个视图的表示 z 1 z_1 z1 包含了足够多的信息来“识别”出它的配对伙伴 z 2 z_2 z2(从一大堆负样本中),反之亦然。当 z 1 z_1 z1 能够很好地预测 z 2 z_2 z2 时,就意味着它们之间的互信息很高。因此,通过优化对比损失这个代理任务,我们就在间接地推动模型去最大化正样本对表示之间的互信息,从而学习到数据中不变的、本质的特征。

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

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

相关文章

雷卯针对灵眸科技EASY EAI nano RV1126 开发板防雷防静电方案

一、应用场景 1. 人脸检测 2. 人脸识别 3. 安全帽检测 4. 人员检测 5. OCR文字识别 6. 人头检测 7. 表情神态识别 8. 人体骨骼点识别 9. 火焰检测 10. 人脸姿态估计 11. 人手检测 12. 车辆检测 13. 二维码识别 二、 功能概述 1 CPU 四核ARM Cortex-A71.5GHz 2 …

【记录】Ubuntu|Ubuntu服务器挂载新的硬盘的流程(开机自动挂载)

简而言之,看这张图片就好(可以存一下,注意挂载点/data可以自定义,挂载硬盘的位置/dev/sdb要改成步骤1中检查的时候查到的那个位置,不过这个图的自动挂载漏了UUID,可以通过blkid指令查找)&#x…

六、软件操作手册

建议在飞书平台阅读此文。 我将沿着初来乍到的用户的浏览路径介绍“诤略参谋”应用。 目录 一、用户信息1.1 注册、登录、自动登录、忘记密码、修改用户名、修改密码、退出登录与个性化设置1.2 认识主界面与任务系统1.3 语义审查、Knowledge Cutoff 审查1.4 重要内容未保存提醒…

电脑键盘不能打字了怎么解决 查看恢复方法

电脑键盘打不了字,这是我们电脑使用过程中,偶尔会遇到的电脑故障问题。一般来说,电脑键盘打不出字,可能是硬件故障、驱动问题或系统设置错误等多种原因引起。本文将详细介绍一些常见的原因和解决方法,帮助用户恢复正常…

基于STM32的土豆种植自动化灌溉系统设计与实现

📌 项目简介 随着农业现代化发展及水资源短缺问题日益突出,传统土豆种植方式在浇灌效率与用水科学性方面暴露出诸多问题。本文基于STM32F103C8T6微控制器,设计并实现了一种智能化的土豆种植自动灌溉系统,集成多种环境传感器(温湿度、土壤湿度、光照)、控制设备(水泵、…

第8篇:Gin错误处理——让你的应用更健壮

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web应用开发中,错误处理是保证系统稳定性和用户体验的关键环节。Gin作为高性能的Go Web框架,提供了灵活的错误处理机制,但许多开发者在实际项目中仍会遇到错误处理混乱、异…

【PyCharm】Python安装路径查找

PyCharm应用笔记 第一章 Python安装路径查找 文章目录 PyCharm应用笔记前言一、电脑设置查找二、资源管理器查找 前言 本文主要介绍几种Python安装路径查找的方法。 一、电脑设置查找 简述过程:设置》应用》安装的应用》搜索框输入Python。 注:电脑使用…

数据结构:递归:汉诺塔问题(Tower of Hanoi)

目录 问题描述 第一性原理分析 代码实现 第一步:明确函数要干什么 第二步:写好递归的“结束条件” 第三步:写递归步骤 🌳 递归调用树 🔍复杂度分析 时间复杂度:T(n) 2^n - 1 空间复杂度分析 问题描…

synetworkflowopenrestydpdk

一.skynet 1. Skynet 的核心架构是什么?简述其进程与服务模型。 Skynet 采用多进程多服务架构。主进程负责管理和监控,多个工作进程(worker)负责实际服务运行。每个服务(service)是一个独立的 Lua 虚拟机&…

【甲方安全视角】安全防御体系建设

文章目录 前言一、云安全防护能力第一阶段:搭建安全防护设施第二阶段:安全防护设施的精细化运营第三阶段:安全运营周报输出二、IT安全防护能力(一)办公网安全设施建设(二)办公网安全运营三、基础安全防护能力(一)物理安全(二)运维安全(三)安全应急响应四、总结前言…

计算机组成原理与体系结构-实验一 进位加法器(Proteus 8.15)

目录 一、实验目的 二、实验内容 三、实验器件 四、实验原理 4.1 行波进位加法器 4.2 先行进位加法器 4.3 选择进位加法器(尝试猜测原理) 五、实验步骤与思考题 一、实验目的 1、了解半加器和全加器的电路结构。 2、掌握串行进位加法器和并行进…

react+antd Table实现列拖拽,列拉宽,自定义拉宽列

主要插件Resizable,dnd-kit/core,dnd-kit/sortable,dnd-kit/modifiers 其中官网有列拖拽,主要结合Resizable 实现列拉宽,isResizingRef 很重要防止拖拽相互影响 1.修改TableHeaderCell const isResizingRef useRef(…

光照解耦和重照明

项目地址: GitHub - NJU-3DV/Relightable3DGaussian: [ECCV2024] 可重新照明的 3D 高斯:使用 BRDF 分解和光线追踪的实时点云重新照明 可优化参数 gaussians.training_setup(opt) if is_pbr:: direct_env_light.training_setup…

Kafka 运维与调优篇:构建高可用生产环境的实战指南

🛠️ Kafka 运维与调优篇:构建高可用生产环境的实战指南 导语:在生产环境中,Kafka集群的稳定运行和高性能表现是业务成功的关键。本篇将深入探讨Kafka运维与调优的核心技术,从监控管理到性能优化,再到故障排…

AR 地产互动沙盘:为地产沙盘带来变革​

在科技飞速发展的今天,AR(增强现实)技术应运而生,为解决传统地产沙盘的困境提供了全新的思路和方法。AR 技术,简单来说,是一种将计算机生成的虚拟信息与真实环境相融合的技术。它通过摄像头、传感器等设备获…

端到端自动驾驶系统关键技术

一、感知决策一体化模型架构 单一神经网络整合全流程 端到端神经网络能够直接将传感器输入映射为控制输出,消除了传统模块化架构中感知、规划、控制等独立模块之间的割裂。传统架构中,感知模块负责识别环境信息,决策模块根据感知结果进行路…

Vue Vue-route (2)

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue-route重定向和声明式导航 目录 Vue-route路由 重定向 首页默认访问 不存在匹配 声明式导航 路由原理 使用示例 自定义class类 Tag设置 版本4路由 改变 示例 总结 Vue-route路由 重定向 首页默认访问 希望访…

Mabl 基于云端的智能化自动化测试平台

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 </

Linux/Dog

Dog Enumeration nmap 第一次扫描发现系统对外开放了22、80端口&#xff0c;端口详细信息如下 ┌──(kali㉿kali)-[~/Desktop/vegetable/HTB] └─$ nmap -sC -sV -p 22,80 -oA nmap 10.10.11.58 Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-26 03:36 EDT Nmap s…

青少年编程与数学 02-022 专业应用软件简介 01 设计与创意类软件:Adobe Creative Cloud

青少年编程与数学 02-022 专业应用软件简介 01 设计与创意类软件&#xff1a;Adobe Creative Cloud **一、Adobe公司介绍**&#xff08;一&#xff09;Adobe的创立与早期发展&#xff08;二&#xff09;Adobe的市场地位与影响力&#xff08;三&#xff09;Adobe的创新文化 **二…