交叉熵损失函数的不同定义

机器算法验证 神经网络 损失函数 软最大 交叉熵
2022-01-25 08:43:37

我从神经网络和深度学习 dot com 教程开始学习神经网络。特别是在第3 章中有一节关于交叉熵函数,并将交叉熵损失定义为:

C=1nxj(yjlnajL+(1yj)ln(1ajL))

然而,阅读Tensorflow 的介绍,交叉熵损失被定义为:

C=1nxj(yjlnajL)(使用与上述相同的符号时)

然后四处寻找发生了什么,我发现了另一组注释:(https://cs231n.github.io/linear-classify/#softmax-classifier)它​​使用了完全不同的交叉熵损失定义,尽管这是softmax 分类器而不是神经网络的时间。

有人可以向我解释这里发生了什么吗?顺便说一句,为什么会有差异。人们将交叉熵损失定义为什么?是否有一些总体原则?

2个回答

这三个定义本质上是相同的。

1)Tensorflow介绍

C=1nxj(yjlnaj).

2) 对于二元分类,它变为 并且由于约束,可改写为 第 3 章相同.j=2

C=1nx(y1lna1+y2lna2)
jaj=1jyj=1
C=1nx(y1lna1+(1y1)ln(1a1))

3) 此外,如果one-hot 向量(这通常是分类标签的情况),其中是唯一的非零元素,则相应样本的交叉熵损失为 yyk

Cx=j(yjlnaj)=(0+0+...+yklnak)=lnak.

cs231 注释中,一个样本的交叉熵损失与 softmax 归一化一起给出

Cx=ln(ak)=ln(efkjefj).

第三章中,等式 (63) 是应用于多个 sigmoid(可能不等于 1)的交叉熵,而在Tensoflow 介绍中,交叉熵是在 softmax 输出层上计算的。

正如dontloo所解释的,这两个公式对于两个类基本上是等价的,但在考虑两个以上的类时却不是这样。Softmax 对具有排他类的多类有意义(,当每个样本只有一个标签时,允许标签的 one-hot 编码),而(多个)sigmoid 可用于描述多标签问题(即样本可能为正)几个班级)。

另请参阅此其他dontloo 答案