(一文理解)信息量、熵、KL散度、交叉熵及CrossEntropyLoss

深入理解交叉熵:原理、实现与机器学习应用 交叉熵是信息论中的核心概念,用于衡量两个概率分布之间的差异。其数学本质可以分解为熵与KL散度的组合,在机器学习中常被用作分类任务的损失函数。从工程实践角度看,交叉熵具有梯度计算高效、收敛速度快等技术优势,特别适合处理图像分类、自然语言处理等场景。现代深度学习框架如PyTorch和TensorFlow都内置了交叉熵的优化实现,同时衍生出标签平滑、Focal Loss等改进变体,有效应对类别不平衡、模型过拟合等实际问题。理解交叉熵的工作原理,对于设计高效的机器学习模型至关重要。 阅读详情

前言

本文首先重温了一些常见的对数函数运算法则,接着介绍了什么是信息量和熵,然后通过KL散度推出交叉熵损失函数的表达式,最后详解PyTorch常用的交叉熵损失函数CrossEntropyLoss()并进行代码实现。

对数函数运算法则

  • 乘法规则
    log ⁡ ( a ⋅ b ) = log ⁡ ( a ) + log ⁡ ( b ) \log(a \cdot b) = \log(a) + \log(b) log(a⋅b)=log(a)+log(b)
  • 除法规则
    log ⁡ ( a b ) = log ⁡ ( a ) − log ⁡ ( b ) \log\left(\frac{a}{b}\right) = \log(a) - \log(b) log(ba​)=log(a)−log(b)
  • 幂次规则
    log ⁡ ( b a ) = a ⋅ log ⁡ ( b ) \log(b^a) = a \cdot \log(b) log(ba)=a⋅log(b)
  • 对数的换底公式
    log ⁡ a ( N ) = log ⁡ b ( N ) log ⁡ b ( a ) = ln ⁡ ( N ) ln ⁡ ( a ) = lg ⁡ ( N ) lg ⁡ ( a ) \log_a(N) = \frac{\log_b(N)}{\log_b(a)} = \frac{\ln(N)}{\ln(a)} = \frac{\lg(N)}{\lg(a)} loga​(N)=logb​(a)logb​(N)​=ln(a)ln(N)​=lg(a)lg(N)​

自然对数 ln 是以常数 e 为底的对数,其中 e 是一个无理数,大约等于 2.71828。
对数 lg 是以常数 10 为底的对数。

信息量

  • 什么是信息量?
    信息量是对事件的不确定性的度量。

假设我们听到了两件事,分别如下:

事件A:巴西队进入了2018世界杯决赛圈。
事件B:中国队进入了2018世界杯决赛圈。


仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。

究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。

所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。(事件发生的概率越小,信息量越大;事件发生的概率越大,信息量越小。)

具体而言,对于一个离散随机事件 x,其发生的概率为 p(x),则该事件所包含的信息量 l(x) 定义为:
l ( x ) = log ⁡ ( 1 p ( x ) ) = − log ⁡ ( p ( x ) ) l(x)= \log\left(\frac{1}{p(x)}\right) = -\log(p(x)) l(x)=log(p(x)1​)=−log(p(x))

在这里,对数函数可以采用任意底数,常见的有自然对数(以 e 为底)和常用对数(以 2为底)。选择不同的对数底数会影响信息量的单位,比如使用常用对数时,信息量的单位是比特(bit);使用自然对数时,单位是纳特(nat)。

熵

  • 什么是熵?
    熵指的是随机变量的熵;熵是随机变量不确定度的度量。

设X是一个离散型随机变量,分布律为 p(x) = p(X = x) ,x ∈ X 为取值空间集合 ,则随机变量X的熵 H(X) 定义为: H ( X ) = − ∑ x ∈ X p ( x ) log ⁡ b p ( x ) \mathrm{H}(\mathrm{X})=-\sum_{\mathrm{x} \in \mathrm{X}} \mathrm{p}(\mathrm{x}) \log _{b} \mathrm{p}(\mathrm{x}) H(X)=−x∈X∑​p(x)logb​p(x)

  • 熵的单位
    单位取决于定义用到对数的底。
    当b = 2,熵的单位是比特(bit);
    当b = e,熵的单位是纳特(nat)。

  • 例子

假设我们有一个离散随机变量 X,它有四个可能的结果:x1、x2、x3 和 x4,对应的概率分别为 0.1、0.2、0.3 和 0.4。我们要计算这个随机变量X的熵。

首先计算每个结果的信息量。根据信息量的定义,我们有:

I(x1) = -log(0.1)
I(x2) = -log(0.2)
I(x3) = -log(0.3)
I(x4) = -log(0.4)

然后,我们将这些信息量与对应的概率相乘,并将结果相加,得到随机变量 X 的熵:

H(X) = 0.1 * I(x1) + 0.2 * I(x2) + 0.3 * I(x3) + 0.4 * I(x4)

  • 信息量是事件的信息量,熵是随机变量的信息量;

相对熵(KL散度)

  • 什么是相对熵?
    相对熵又称KL散度,如果我们对于同一个随机变量 X 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。

  • KL散度的计算公式
    D K L ( p ∥ q ) = ∑ i = 1 n p ( x i ) log ⁡ ( p ( x i ) q ( x i ) ) D_{K L}(p \| q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right) DKL​(p∥q)=i=1∑n​p(xi​)log(q(xi​)p(xi​)​)
    n代表的是概率分布的样本空间的大小,即随机变量可能的取值个数。
    D K L {D_{KL}} DKL​的值越小,表示Q分布越接近P分布。

  • 在机器学习中的应用
    在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]。

交叉熵

  • 什么是交叉熵?
    交叉熵是一个衡量两个概率分布之间差异的很好的度量。

  • KL散度公式变形
    由于 log ⁡ ( q ( x i ) p ( x i ) ) = log ⁡ ( p ( x i ) ) − log ⁡ ( q ( x i ) ) \log \left(\frac{q(x_i)}{p(x_i)}\right) = \log(p(x_i)) - \log(q(x_i)) log(p(xi​)q(xi​)​)=log(p(xi​))−log(q(xi​))
    我们对KL散度的公式进行变形,可以得到:
    D K L ( p ∥ q ) = ∑ i = 1 n p ( x i ) log ⁡ ( p ( x i ) ) − ∑ i = 1 n p ( x i ) log ⁡ ( q ( x i ) ) D_{KL}(p \| q) = \sum_{i=1}^{n} p(x_i) \log(p(x_i)) - \sum_{i=1}^{n} p(x_i) \log(q(x_i)) DKL​(p∥q)=i=1∑n​p(xi​)log(p(xi​))−i=1∑n​p(xi​)log(q(xi​))
    这里,第一个求和项是概率分布 p {p} p的熵(在前面加个“-”号)(entropy),记作 H ( p ) H(p) H(p) :
    H ( p ) = ∑ i = 1 n p ( x i ) log ⁡ ( p ( x i ) ) = − H ( X ) H(p) = \sum_{i=1}^{n} p(x_i) \log(p(x_i))=-H(X) H(p)=i=1∑n​p(xi​)log(p(xi​))=−H(X)
    第二个求和项则是 p {p} p 相对于 q {q} q 的交叉熵,记做 H ( p , q ) {H(p,q)} H(p,q):
    H ( p , q ) = − ∑ i = 1 n p ( x i ) log ⁡ ( q ( x i ) ) H(p, q) = -\sum_{i=1}^{n} p(x_i) \log(q(x_i)) H(p,q)=−i=1∑n​p(xi​)log(q(xi​))
    因此,我们可以将KL散度重写为熵和交叉熵的差:
    D K L ( p ∥ q ) = H ( p ) − H ( p , q ) D_{KL}(p \| q) = H(p) - H(p, q) DKL​(p∥q)=H(p)−H(p,q)

  • 交叉熵损失函数
    由于 H ( p ) {H(p)} H(p),即熵,它描述了随机变量的不确定性。在机器学习中,训练数据的分布通常是固定的,因此 H ( p ) {H(p)} H(p)是一个常数,不影响模型的训练过程。我们的目标是使模型预测的概率分布 q {q} q尽可能接近真实分布
    p {p} p,就是最小化交叉熵 H ( p , q ) H(p, q) H(p,q),而不是去调整 H ( p ) {H(p)} H(p)。
    所以我们把交叉熵损失函数定义为:
    H ( p , q ) = − ∑ i = 1 n p ( x i ) log ⁡ ( q ( x i ) ) H(p, q) = -\sum_{i=1}^{n} p(x_i) \log(q(x_i)) H(p,q)=−i=1∑n​p(xi​)log(q(xi​))
    其中, n {n} n为类别数量, x i {x_i} xi​代表第 i {i} i个类别的示例, p ( x i ) {p({x_i})} p(xi​)是真实分布中属于第 i {i} i类的概率(对于二分类问题,如果示例属于正类,则 p ( x i ) = 1 {p({x_i})=1} p(xi​)=1,否则 p ( x i ) = 0 {p({x_i})=0} p(xi​)=0), q ( x i ) {q({x_i})} q(xi​)是模型预测的第 i {i} i类的概率。

    通常情况下,真实标签label( p ( x i ) {p({x_i})} p(xi​))是一个 1 ∗ n {1*n} 1∗n的向量,里面有 n {n} n个值,并且只有一个值是1,其他 n − 1 {n-1} n−1个值都是0。(即真实标签对应位置的那个值是1,其他都是0),所以这个公式有一个更简单的形式:
    H ( p , q ) = − l o g ( q ( x i ) ) H(p, q) = -log(q(x_i)) H(p,q)=−log(q(xi​))
    由于真实标签label( p ( x i ) {p({x_i})} p(xi​))中有且只有一个值是1,我们只需要计算真实值对应的概率熵值就可以了。

CrossEntropyLoss

  • 参考文章

PyTorch常用的交叉熵损失函数CrossEntropyLoss()详解

  • CrossEntropyLoss
    CrossEntropyLoss是PyTorch中一个常用的损失函数,主要用于处理多分类问题。它结合了Softmax函数、对数损失(Log Loss)和负对数似然损失(Negative Log Likelihood Loss),使得模型能够学习到更精确的概率分布,从而提高分类性能。
  • 具体来说
    Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果。
    1、Softmax后的数值都在0~1之间,所以 ln 之后值域是负无穷到0。
    2、然后将Softmax之后的结果取log,将乘法改成加法减少计算量,同时保障函数的单调性 。
    3、NLLLoss 的结果就是把上面的输出与 Label 对应的那个值拿出来,去掉负号,再求均值。
  • 代码示例
    一个实例:直接使用pytorch中的 nn.CrossEntropyLoss() 计算得到的结果与 softmax-log-NLLLoss计算得到的结果是一致的。
import torch
import torch.nn as nn

x_input = torch.randn(3, 3)  # 随机生成输入
print('x_input:\n', x_input)
y_target = torch.tensor([1, 2, 0])  # 设置输出具体值 print('y_target\n',y_target)

# 计算输入softmax,此时可以看到每一行加到一起结果都是1
softmax_func = nn.Softmax(dim=1)
soft_output = softmax_func(x_input)
print('soft_output:\n', soft_output)

# 在softmax的基础上取log
log_output = torch.log(soft_output)
print('log_output:\n', log_output)

# 对比softmax与log的结合与nn.LogSoftmaxloss(负对数似然损失)的输出结果,发现两者是一致的。
logsoftmax_func=nn.LogSoftmax(dim=1)
logsoftmax_output=logsoftmax_func(x_input)
print('logsoftmax_output:\n', logsoftmax_output)

# pytorch中关于NLLLoss的默认参数配置为:reducetion=True、size_average=True
nllloss_func = nn.NLLLoss()
nlloss_output = nllloss_func(logsoftmax_output, y_target)
print('nlloss_output:\n', nlloss_output)

# 直接使用pytorch中的loss_func=nn.CrossEntropyLoss()看与经过NLLLoss的计算是不是一样
crossentropyloss = nn.CrossEntropyLoss()
crossentropyloss_output = crossentropyloss(x_input, y_target)
print('crossentropyloss_output:\n', crossentropyloss_output)

代码运行结果:

x_input:
 tensor([[ 0.3321,  0.5043, -1.1833],
        [-2.1702, -1.8563,  1.0706],
        [ 1.7341,  0.2554, -1.3358]])
soft_output:
 tensor([[0.4153, 0.4934, 0.0913],
        [0.0358, 0.0490, 0.9152],
        [0.7847, 0.1789, 0.0364]])
log_output:
 tensor([[-0.8787, -0.7064, -2.3940],
        [-3.3295, -3.0155, -0.0886],
        [-0.2424, -1.7212, -3.3123]])
logsoftmax_output:
 tensor([[-0.8787, -0.7064, -2.3940],
        [-3.3295, -3.0155, -0.0886],
        [-0.2424, -1.7212, -3.3123]])
nlloss_output:
 tensor(0.3458)
crossentropyloss_output:
 tensor(0.3458)

binary_cross_entropy

  • 说明
    binary_cross_entropy 是二分类的交叉熵,实际是多分类 CrossEntropyLoss 的一种特殊情况,当多分类中,类别只有两类时,即 0 或者 1,即为二分类,二分类也是一个逻辑回归问题,也可以套用逻辑回归的损失函数。
  • 使用
    在PyTorch中,可以通过torch.nn.functional模块中的binary_cross_entropy函数来实现这一损失函数。
  • 代码示例
import torch
import torch.nn as nn
input = torch.rand(1, 3, 3)
target = torch.rand(1, 3, 3).random_(2)
print(input)
print(target)
input = torch.sigmoid(input)
output = torch.nn.functional.binary_cross_entropy(input, target)
print(output)

代码运行效果:

# input
tensor([[[0.0091, 0.8304, 0.5860],
         [0.8770, 0.7744, 0.5909],
         [0.3012, 0.0784, 0.7481]]])
# target
tensor([[[1., 1., 0.],
         [0., 0., 0.],
         [1., 0., 0.]]])
# output
tensor(0.8790)
  • 实际在计算中如果使用binary_cross_entropy_with_logits 就不需要先做softmax处理。

在机器学习中,binary_cross_entropy 和 binary_cross_entropy_with_logits 都是用于二分类问题的损失函数,但它们在处理模型输出方面有所不同。

binary_cross_entropy 通常用于处理已经通过 sigmoid 或其他激活函数转换过的模型输出,这些输出表示为概率值,范围在 0 到 1 之间。在这种情况下,损失函数直接比较模型预测的概率分布和真实标签。

然而,binary_cross_entropy_with_logits 适用于处理未经激活函数转换的原始模型输出,也称为 logits。在这种情况下,损失函数内部会自动应用 sigmoid 函数将 logits 转换为概率值,然后再计算损失。这意味着在使用 binary_cross_entropy_with_logits 时,开发者无需手动对模型输出进行 sigmoid 转换。

  • 代码示例
    不需要对输入进行sigmoid处理,因为binary_cross_entropy_with_logits函数会自动对输入进行sigmoid处理。以下是修改后的代码:
import torch
import torch.nn as nn
input = torch.rand(1, 3, 3)
target = torch.rand(1, 3, 3).random_(2)
print(input)
print(target)
output = torch.nn.functional.binary_cross_entropy_with_logits(input, target)
print(output)

代码运行效果:

tensor([[[0.7857, 0.6012, 0.4140],
         [0.0689, 0.9600, 0.7193],
         [0.9429, 0.6011, 0.7957]]])
tensor([[[0., 1., 1.],
         [1., 0., 1.],
         [1., 1., 1.]]])
tensor(0.6205)
【示波器专题】无源探头的常用附件 使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率 阅读详情

相关推荐

基于STM32智能震动报警器震动检测声光报警系统设计

*单片机设计介绍,基于STM32智能震动报警器震动检测声光报警系统设计。

2201_75940997的博客 2144

从信息量到KL散度:手撕公式,理解Transformer损失函数本质

在信息论中,信息量是度量事件不确定性的基本单位,定义为事件概率的负对数,其核心在于满足独立可加性。基于信息量的期望,我们得到信息熵,它衡量了整个概率分布的不确定性,并代表了数据最优编码的平均长度。当使用一个分布(如模型预测)去编码另一个分布(如真实数据)时,所需的平均编码长度即为交叉熵,它衡量了因使用“错误”编码方案而产生的信息损耗。交叉熵与信息熵的差值,即KL散度,精确量化了两个概率分布之间的差异。这一系列概念构成了机器学习中损失函数的核心数学基础,尤其在Transformer模型、自回归语言模型和生成式

weixin_30616969的博客 365

1.STM32H743VGT6最小系统板

此款MCU具备较大算力进行频谱运算,为复杂数据运算提供更高效的保障。该MCU具备REV-V和REV-Y两个型号,后者为新版本。

Audiation88的博客 3776

信息量与熵

目录 熵和信息的定义 信息量获取的三种手段(本质都是正确的调整每个可能情况的概率) 相关例子 信息的性质 相关例子 概率和熵的不同 无效信息情况 易出现的概念偷换 熵的由来 举例 信息熵普遍形式 至此,我做一个简单的比较 例子,下面所举例子的总前提: 一个选择题,他有四个选项,正确答案是C,但小明在做这道选择题时,完全不知道这道题该怎么做,他选择ABCD选项的概...

mjiansun的专栏 5506

固件测试工具选型需要考察的功能点汇总

通过专业的固件测试工具可以帮助我们提高测试效率、提升测试的覆盖度、确保测试的准确性,保障产品的安全和质量。本文我们讲固件测试工具的功能点进行梳理和汇总,方便大家在采购固件测试工具时进行选型比对。

daopuyun的博客 2105

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1667

信息量|KL散度|交叉熵损失 三者的关系

目录 1、信息量 2、信息熵 3、相对熵(KL散度) 4、交叉熵(cross entropy) 5、二值交叉熵(binary cross entropy) 在机器学习领域,交叉熵是一种常用的 loss 函数,但是交叉熵是怎么来的?跟信息量又有什么联系?为什么计算公式长这样?这么写有什么意义?下面将逐一介绍 1、信息量 信息量反映了事件的不确定性或者说发生的概率。概率越小不确定性越大,则其蕴含的信息量越大。 如果一件一定会发生的事件发生了,呢么从这件事中我们获取的信息量是0,因为我们事前已经

Flag_ing的博客 1789

CANOe实战指南 - 从入门到精通的全流程解析

本文是CANOe实战指南,全面解析从入门到精通的全流程。内容涵盖CANOe软件的核心功能仿真、测试与分析,详细指导安装配置、工程创建、CAN信号收发、UDS诊断通信、CAPL自动化编程以及Panel面板设计。通过实战案例,帮助汽车电子工程师快速掌握这一行业标杆工具,构建自动化测试环境,提升开发与测试效率。

pear55的博客 566

一文读懂信息量、信息熵、相对熵(KL散度)和交叉熵

在人工智能深度学习的应用中,损失函数绝对是模型网络学习质量的关键。我们使用损失函数来表示的真实值与预测值之间的距离,进而指导模型的收敛方向。对于标量来说,我们能够很容易想到使用方差来描述误差。那么,如何表示向量之间的误差呢? 交叉熵(cross-entropy)就是用来描述向量之间的误差的损失函数,首先来看它的公式: 很多人工智能初学者可能觉得这个公式不太好理解,不像方差公式那样简单易懂。要理解这...

ClarkCC的博客 3412

路由三大分类:直连路由、静态路由、动态路由

直连路由、静态路由和动态路由各有其独特的特点和适用场景。直连路由适用于简单的直接连接网络,静态路由提供了精确的路径控制,而动态路由则在大型复杂网络中展现出强大的适应性和自动化能力。了解和掌握这三种路由类型的配置和管理,对于网络管理员来说,是确保网络高效、安全运行的重要技能。

网络技术联盟站 4690

【VS Code插件开发】通用功能(二)

本篇主要从command(命令)、menus(菜单)、快捷键三个方面讲解,都归于通用功能。

编码世界 1万+

信息量、信息熵、KL散度、交叉熵

简单介绍信息量、信息熵、KL散度、交叉熵以及交叉熵损失函数

junfoot的博客 1043

YOLO26改进策略【卷积层】| HWD,引入`Haar小波变换`到下采样模块中,减少信息丢失

本文记录的是。传统的卷积神经网络中常用的最大池化平均池化和步长为2的卷积等操作进行下采样可能会导致信息丢失,为了解决信息丢失问题,HWD作者受无损信息变换方法的启发,引入Haar小波变换到下采样模块中,

Limiiiing的博客 337

信息量与信息熵

信息量与信息熵

liugan528的博客 3730

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

通俗理解交叉熵和KL散度(包括标签平滑的pytorch实现)

本文介绍了熵、信息量、交叉熵、KL散度,通俗易懂。并给出pytorch中torch.nn.CrossEntropyLoss,NLLLoss(),torch.nn.KLDivLoss的使用。利用pytorch实现了一个基于标签平滑的KL损失。

cdLiang的博客 3776

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

熵、KL散度和交叉熵

首先我们需要知道,所有的模型都可以看作是一个概率分布模型,包括人脑进行图像分类时也可以看作是一种完美的模型。

xu.hyj 793

整理:熵、KL散度、交叉熵、nn.CrossEntropyLoss()、nn.LogSoftmax()、nn.NLLLoss()

一、信息量、熵、相对熵(KL散度)、交叉熵 二、Softmax 与 交叉熵 三、pytorch中的交叉熵损失 nn.CrossEntropyLoss() 四、pytorch中的LogSoftmax()与nn.NLLLoss() 一、信息量、熵、相对熵(KL散度)、交叉熵 二、Softmax 与 交叉熵 三、pytorch中的交叉熵损失 nn.CrossEntropyLoss() 四、pytorch中的LogSoftmax...

liupc的学习笔记 1266

熵、KL散度与交叉熵学习笔记

记录一下遇到交叉熵时的学习笔记,此处为本文主要参考链接。 1、熵(Entropy) 对于一个特定事件,它的概率p越小,那它所蕴含的信息量就越大,反之,p越大,表明信息量越小。此外,对于相互独立的事件,信息量可以叠加。熵就是依据对应的期望值对一系列信息量求期望值。 信息熵可以理解为对事件不确定性的测量,熵越大,不确定性也就越大,熵的公式定义为S(x)=−∑iP(xi)logbP(xi)S(x) = -\sum_{i}P(x_i) log_bP(x_i) S(x)=−i∑​P(xi​)logb​P(xi​)其中

weixin_44070509的博客 633

KL散度、交叉熵与JS散度:3种分布差异度量的数学直觉与代码实现对比

本文深入解析了KL散度、交叉熵与JS散度三种概率分布差异度量方法,从数学原理到代码实现全面对比。详细探讨了KL散度的非对称特性、交叉熵在深度学习中的应用以及JS散度的对称优势,并提供了Python实现示例,帮助读者理解不同度量在机器学习任务中的适用场景与选择策略。

weixin_34221073的博客 370

信息论实战:用熵、交叉熵和KL散度诊断模型问题

信息论是数据科学中描述不确定性与分布差异的基础理论,其核心概念——熵衡量系统固有不确定性,交叉熵量化预测对真实分布的编码成本,KL散度则刻画模型近似真实分布时不可挽回的信息损失。这些指标并非抽象数学,而是可计算、可监控、可嵌入工程流水线的实用工具:熵可作为数据质量‘听诊器’,交叉熵是分类任务默认损失函数的理论根基,KL散度则广泛用于分布漂移检测与模型校准。在推荐系统、风控建模、天气预报等真实场景中,它们能穿透准确率假象,定位‘高危误判’或‘尾部失效’等业务敏感问题。本文聚焦Python实操,从安全数值计算、

weixin_34218890的博客 406

熵、交叉熵、KL散度、Softmax 与分类损失函数

熵 H(P):真实分布 P 自己的不确定性。交叉熵 H(P,Q):真实分布是 P,但用模型分布 Q 去描述它的总代价。KL 散度 D_KL(P||Q):用 Q 描述 P 时,比用 P 自己描述自己多出来的额外代价。信息量表示某个事件发生后带来的意外程度,概率越小,信息量越大。熵是一个分布自身的平均信息量,可以理解为系统自己描述自己。交叉熵是用另一个分布 Q 去描述真实分布 P 的平均代价。KL 散度是用 Q 描述 P,相比用 P 自己描述自己,多出来的额外信息代价。

annsjajnzjj的博客 209

深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)

flyfish

二分掌柜的 1219

深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)

参考资料: 极大似然估计 —— Maximum Likelihood Estimation Negative log likelihood explained 深度理解机器学习中常见损失函数 交叉熵、相对熵和负对数似然的理解

zhuguiqin1的专栏 4649

从信息熵到KL散度:深入理解Transformer损失函数的核心数学原理

在机器学习和深度学习领域,损失函数是模型优化的核心驱动力。从信息论基础概念切入,信息熵量化了概率分布的不确定性,而交叉熵则衡量了使用一个分布去编码另一个分布所产生的平均信息量。其技术价值在于为模型提供了明确的优化目标,即最小化预测分布与真实分布之间的差异。这一原理在工程实践中直接对应了分类任务的标准训练流程。KL散度作为交叉熵与信息熵的差值,纯粹地度量了两个概率分布之间的差异,具有非负性和不对称性等重要性质。在Transformer等复杂模型的训练中,最小化交叉熵损失的本质就是最小化KL散度,这一思想也自然

weixin_33868027的博客 332

pytorch中的交叉熵nn.CrossEntropyLoss()

引言: 在使用pytorch中的损失函数时,经常会使用到: nn.CrossEntropyLoss() 该损失函数整合了nn.LogSoftmax()和nn.NLLLoss(),常用于训练分类任务。特别是在神经网络做分类问题时,经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid(或softmax)函数一起出现。 我们用神经网络最后一层输出的情况,来看一眼整个模型预测、获得损失和学习的流程: 神经网络最后一层得到每个类别的得分scores(

万物并作,吾以观复 2475

损失函数——交叉熵损失函数(CrossEntropy Loss)

损失函数——交叉熵损失函数(CrossEntropy Loss) 交叉熵函数为在处理分类问题中常用的一种损失函数,其具体公式为: 1.交叉熵损失函数由来 交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。首先我们来了解几个概念。 1.1信息量 信息论奠基人香农(Shannon)认为“信息是用来消除随机不确定性的东西”。也就是说衡量信息量大小就看这个信息消除不确定性的程度。 “太阳从东方升起了”这条信息没有减少不确定性。因为太阳肯定从东面升起。这是句废话,信息量为0。 “六

weixin_45665708的博客 11万+

关于交叉熵在loss函数中使用的理解

原文出处:https://blog.csdn.net/tsyccnh/article/details/79163834 关于交叉熵在loss函数中使用的理解 交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距。以前做一些分类问题的时候,没有过多的注意,直接调用现成的库,用起来也比较方便。最近开始研究起对抗...

m0_38144126的博客 412
上一篇: 基于PyTorch的线性回归的简洁实现
下一篇: 激活函数(Activation Function)
这个函数可导
博客等级 码龄5年 1万+粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值