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

【硬核数学】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 时,就意味着它们之间的互信息很高。因此,通过优化对比损失这个代理任务,我们就在间接地推动模型去最大化正样本对表示之间的互信息,从而学习到数据中不变的、本质的特征。

相关文章:

  • OpenCV学习3
  • 《平行宇宙思维如何让前端错误处理无懈可击》
  • (七)集成学习
  • python 使用 pyenv 管理 python 版本
  • 常用指令合集(DOS/Linux/git/Maven等)
  • 高并发电商返利 APP 架构设计:从淘客佣金模型到分布式导购系统的技术落地
  • [分布式并行] 流水线并行 PP(NaivePP/GPipe/F-then-B/PipeDream/1F1B)
  • CppCon 2017 学习:Type Punning in C++17 Avoiding Pun-defined Behavior
  • 设计模式-外观模式、适配器模式
  • Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • TCP/IP模型、OSI模型与C# Socket编程详解
  • (LeetCode 每日一题) 1498. 满足条件的子序列数目 (双指针)
  • Leetcode 3600. Maximize Spanning Tree Stability with Upgrades
  • ROS的可视化工具rviz介绍
  • 第十一节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 角色菜单授权
  • 智能座舱HMI语音自动化测试技术和实现
  • Linux下的调试器-gdb(16)
  • 【Canvas与标志】圆规脚足球俱乐部标志
  • 机器学习在智能供应链中的应用:需求预测与库存优化