如何正确使用交叉熵损失与Softmax进行分类?

古尔扎尔

我想使用Pytorch训练多分类器。

遵循Pytorch官方文档,该文档显示了如何nn.CrossEntropyLoss()在最后一层type之后使用a nn.Linear(84, 10)

但是,我记得这是Softmax所做的。

这让我感到困惑。


  1. 如何以最佳方式训练“标准”分类网络?
  2. 如果网络具有最终的线性层,则如何推断每个类别的概率?
  3. 如果网络具有最终的softmax层,则如何训练网络(哪些损失以及如何损失)?

在Pytorch论坛上找到了该线程该线程可能回答了所有这些问题,但是我无法将其编译为有效且可读的Pytorch代码。


我假定的答案:

  1. 就像doc说的一样
  2. 线性层的输出的幂,实际上是对数(对数概率)。
  3. 我不明白
乔达格

我认为,至少从实际角度出发,了解softmax和交叉熵非常重要。一旦掌握了这两个概念,就应该清楚如何在ML上下文中“正确”使用它们。

交叉熵H(p,q)

交叉熵是比较两个概率分布的函数。从实践的角度来看,进入交叉熵的正式动机可能不值得,尽管如果您有兴趣的话,我会推荐Cover和Thomas撰写的《信息论元素》作为入门文章。这个概念很早就引入了(我相信第2章)。这是我在研究生院使用的介绍性文字,我认为它做得很好(当然,我也有一位出色的老师)。

要注意的关键是,交叉熵是一个函数,它以两个概率分布(q和p)作为输入,并在q和p相等时返回最小的值。q代表估计分布,p代表真实分布。

在ML分类的情况下,我们知道训练数据的实际标签,因此,真实/目标分布p的真实标签概率为1,其他位置为0,即p是一个热向量。

另一方面,估计分布(模型的输出)q通常包含一些不确定性,因此q中任何类别的概率将在0和1之间。通过训练系统以最小化交叉熵,我们告诉系统我们希望它尝试使估计的分布尽可能接近真实分布。因此,您的模型认为最可能的类别是与q的最大值对应的类别。

软最大

同样,有一些复杂的统计方法可以解释softmax,我们在这里将不讨论。从实践的角度来看,关键是softmax是一个函数,该函数将无界值列表作为输入,并在保持相对顺序的情况下输出有效的概率质量函数强调有关相对顺序的第二点很重要。这意味着softmax输入中的最大元素对应于softmax输出中的最大元素。

考虑一个被训练为最小化交叉熵的softmax激活模型。在这种情况下,在softmax之前,模型的目标是为正确的标签生成尽可能高的值,为不正确的标签生成尽可能低的值。

PyTorch中的CrossEntropyLoss

PyTorch中CrossEntropyLoss的定义是softmax和交叉熵的组合。特别

CrossEntropyLoss(x,y):= H(one_hot(y),softmax(x))

请注意,one_hot是一个采用索引y并将其扩展为单热向量的函数。

等效地,您可以将CrossEntropyLoss公式化为LogSoftmax和负对数可能性损失(即PyTorch中的NLLLoss)

LogSoftmax(x):= ln(softmax(x))

CrossEntropyLoss(x,y):= NLLLoss(LogSoftmax(x),y​​)

由于softmax的幂运算,与分阶段计算相比,有些计算“技巧”使直接使用CrossEntropyLoss更加稳定(更准确,更不可能获得NaN)。

结论

根据以上讨论,您问题的答案是

1.如何以最佳方式训练“标准”分类网络?

就像医生说的那样。

2.如果网络具有最终的线性层,则如何推断每个类别的概率?

将softmax应用于网络的输出以推断每个类的概率。如果目标只是找到相对排序或最高概率类,则只需将argsort或argmax直接应用于输出(因为softmax保持相对排序)。

3.如果网络具有最终的softmax层,如何训练网络(哪些损失以及如何损失)?

通常,出于上述稳定性原因,您不想训练输出软最大输出的网络。

就是说,如果由于某种原因绝对需要,您将获取输出日志并将其提供给NLLLoss

criterion = nn.NLLLoss()
...
x = model(data)    # assuming the output of the model is softmax activated
loss = criterion(torch.log(x), y)

从数学上讲,这等效于对使用softmax激活的模型使用CrossEntropyLoss

criterion = nn.CrossEntropyLoss()
...
x = model(data)    # assuming the output of the model is NOT softmax activated
loss = criterion(x, y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用model.predict进行分类交叉熵?

来自分类Dev

Pytorch分类交叉熵损失函数行为

来自分类Dev

如何加快tf.nn.softmax_cross_entropy_with_logits()中交叉熵损失的计算

来自分类Dev

在计算BCEWithLogitLoss的损失后使用Softmax Activation函数(二进制交叉熵+ Sigmoid激活)

来自分类Dev

如何创建加权交叉熵损失?

来自分类Dev

Keras分类交叉熵softmax输入.dim_size错误

来自分类Dev

如何使用具有交叉熵损失的一键编码?

来自分类Dev

如何在PyTorch中计算自举交叉熵损失?

来自分类Dev

为什么 softmax 交叉熵损失在张量流中永远不会给出零值?

来自分类Dev

如何手工计算分类交叉熵?

来自分类Dev

分类交叉熵背后的直觉

来自分类Dev

Caffe S型交叉熵损失

来自分类Dev

交叉熵损失对F分数的影响

来自分类Dev

“稀疏交叉熵损失”中稀疏的含义?

来自分类Dev

Tensorflow 加权 vs sigmoid 交叉熵损失

来自分类Dev

对象检测上的 Sigmoid 与 Softmax 交叉熵

来自分类Dev

对数损失和交叉熵损失的结果不同

来自分类Dev

pytorch多类问题如何在交叉熵损失中设置目标

来自分类Dev

使用PyTorch的交叉熵损失函数是否需要一键编码?

来自分类Dev

在哪里使用二进制二进制交叉熵损失

来自分类Dev

如何优化此函数计算两个 numpy 数组的分类交叉熵

来自分类Dev

与Keras一样获得pytorch中的交叉熵损失

来自分类Dev

y - aprob 的 Karpathy Pong 交叉熵/对数损失解释

来自分类Dev

在theano中遇到softmax和交叉熵的错误

来自分类Dev

在theano中遇到softmax和交叉熵的错误

来自分类Dev

二元和分类交叉熵的结果不同

来自分类Dev

如何从PyTorch中的概率计算交叉熵?

来自分类Dev

如何计算像素级预测的交叉熵

来自分类Dev

火炬的交叉熵损失与喀拉拉邦的“ categorical_crossentropy”不同吗?

Related 相关文章

  1. 1

    如何使用model.predict进行分类交叉熵?

  2. 2

    Pytorch分类交叉熵损失函数行为

  3. 3

    如何加快tf.nn.softmax_cross_entropy_with_logits()中交叉熵损失的计算

  4. 4

    在计算BCEWithLogitLoss的损失后使用Softmax Activation函数(二进制交叉熵+ Sigmoid激活)

  5. 5

    如何创建加权交叉熵损失?

  6. 6

    Keras分类交叉熵softmax输入.dim_size错误

  7. 7

    如何使用具有交叉熵损失的一键编码?

  8. 8

    如何在PyTorch中计算自举交叉熵损失?

  9. 9

    为什么 softmax 交叉熵损失在张量流中永远不会给出零值?

  10. 10

    如何手工计算分类交叉熵?

  11. 11

    分类交叉熵背后的直觉

  12. 12

    Caffe S型交叉熵损失

  13. 13

    交叉熵损失对F分数的影响

  14. 14

    “稀疏交叉熵损失”中稀疏的含义?

  15. 15

    Tensorflow 加权 vs sigmoid 交叉熵损失

  16. 16

    对象检测上的 Sigmoid 与 Softmax 交叉熵

  17. 17

    对数损失和交叉熵损失的结果不同

  18. 18

    pytorch多类问题如何在交叉熵损失中设置目标

  19. 19

    使用PyTorch的交叉熵损失函数是否需要一键编码?

  20. 20

    在哪里使用二进制二进制交叉熵损失

  21. 21

    如何优化此函数计算两个 numpy 数组的分类交叉熵

  22. 22

    与Keras一样获得pytorch中的交叉熵损失

  23. 23

    y - aprob 的 Karpathy Pong 交叉熵/对数损失解释

  24. 24

    在theano中遇到softmax和交叉熵的错误

  25. 25

    在theano中遇到softmax和交叉熵的错误

  26. 26

    二元和分类交叉熵的结果不同

  27. 27

    如何从PyTorch中的概率计算交叉熵?

  28. 28

    如何计算像素级预测的交叉熵

  29. 29

    火炬的交叉熵损失与喀拉拉邦的“ categorical_crossentropy”不同吗?

热门标签

归档