分布

对于0-1点分布来说,假设有3红7绿,y代表类别,它们的分布称为q(y),如下:

RNN定义二元交叉熵损失函数_拟合

 图1:q(y),点的分布

熵(Entropy)

熵是与给定的分布q(y)相关的不确定性的量度。

如果我们所有的点都是绿色的这种分布的不确定性是什么?,对吗?毕竟,毫无疑问,点的颜色:它总是绿色!因此,熵为零

另一方面,如果我们确切知道该点的一半绿色另一半是红色?那是最坏的情况,对吧?我们绝对不可能猜到一个点的颜色:它是完全随机的!在这种情况下,熵由下面的公式给出(我们有两个类(颜色)–红色或绿色-因此为2):

RNN定义二元交叉熵损失函数_算法_02

一半一半分布的熵

对于介于两者之间的所有其它情况,我们可以用以下公式计算分布,例如q(y),其中C是类的数量:

RNN定义二元交叉熵损失函数_算法_03

因此,如果我们知道随机变量的真实分布,则可以计算其。但是,如果是这样的话,为什么要训练分类器呢?毕竟,我们知道真正的分布…

但是,如果我们不知道真实分布呢?我们可以尝试用其他一些分布(例如p(y))近似真实分布吗?我们当然可以!:-)

交叉熵(Cross-Entropy)

假设我们的点遵循这个其它分布p(y) 。但是,我们知道它们实际上来自真未知)分布q(y) ,对吧?

如果我们这样计算,我们实际上是在计算两个分布之间的交叉熵

RNN定义二元交叉熵损失函数_RNN定义二元交叉熵损失函数_04

交叉熵

如果我们奇迹般地p(y)q(y)完美匹配,则交叉熵的计算值也将匹配

由于这可能永远不会发生,因此交叉熵将比在真实分布上计算出的熵具有更大的值

RNN定义二元交叉熵损失函数_深度学习_05

交叉熵减去熵

事实上,交叉熵之间的差还有个名字……

KL散度(Kullback-Leibler Divergence)

Kullback-Leibler Divergence,简称“ KL散度 ”,是两个分布之间差异的一种度量:

RNN定义二元交叉熵损失函数_深度学习_06

KL散度

这意味着,p(y)越接近q(y) ,差异越少,因此交叉熵也越小

因此,我们需要找到一个合适的p(y)……但是,这不就是我们的分类器应该做的吗?确实如此!它寻找可能最佳p(y),以最小化交叉熵的值

损失函数

在训练过程中,分类器使用其训练集中的N个点中的每一个来计算交叉熵损失,从而有效地拟合分布p(y)!由于每个点的概率为1 / N,因此交叉熵的计算公式为:

RNN定义二元交叉熵损失函数_ci_07

交叉熵—点对点

我们需要在每个点的实际类相关概率上计算交叉熵。这意味着对正类y = 1)中的点使用绿色条,对负类y = 0)中的点使用红色的悬挂,或者从数学角度看:

RNN定义二元交叉熵损失函数_算法_08

对应于图10的数学表达式 :-)

最后一步是计算两个正负类所有点的平均

RNN定义二元交叉熵损失函数_ci_09

二进制交叉熵-在正负类上计算

最后,我们通过一点小处理,正类或负类中任何一点都可以用相同的公式:

RNN定义二元交叉熵损失函数_RNN定义二元交叉熵损失函数_10

二进制交叉熵-通用公式

!我们回到了二进制交叉熵/对数损失原始公式 :-)