分布
对于0-1点分布来说,假设有3红7绿,y代表类别,它们的分布称为q(y),如下:
图1:q(y),点的分布
熵(Entropy)
熵是与给定的分布q(y)相关的不确定性的量度。
如果我们所有的点都是绿色的,这种分布的不确定性是什么?零,对吗?毕竟,毫无疑问,点的颜色:它总是绿色!因此,熵为零!
另一方面,如果我们确切知道该点的一半是绿色和另一半是红色?那是最坏的情况,对吧?我们绝对不可能猜到一个点的颜色:它是完全随机的!在这种情况下,熵由下面的公式给出(我们有两个类(颜色)–红色或绿色-因此为2):
一半一半分布的熵
对于介于两者之间的所有其它情况,我们可以用以下公式计算分布的熵,例如q(y),其中C是类的数量:
熵
因此,如果我们知道随机变量的真实分布,则可以计算其熵。但是,如果是这样的话,为什么还要训练分类器呢?毕竟,我们知道真正的分布…
但是,如果我们不知道真实分布呢?我们可以尝试用其他一些分布(例如p(y))来近似真实分布吗?我们当然可以!:-)
交叉熵(Cross-Entropy)
假设我们的点遵循这个其它分布p(y) 。但是,我们知道它们实际上来自真(未知)分布q(y) ,对吧?
如果我们这样计算熵,我们实际上是在计算两个分布之间的交叉熵:
交叉熵
如果我们奇迹般地将p(y)与q(y)完美匹配,则交叉熵和熵的计算值也将匹配。
由于这可能永远不会发生,因此交叉熵将比在真实分布上计算出的熵具有更大的值。
交叉熵减去熵
事实上,交叉熵和熵之间的差还有个名字……
KL散度(Kullback-Leibler Divergence)
Kullback-Leibler Divergence,简称“ KL散度 ”,是两个分布之间差异的一种度量:
KL散度
这意味着,p(y)越接近q(y) ,差异越少,因此交叉熵也越小。
因此,我们需要找到一个合适的p(y)……但是,这不就是我们的分类器应该做的吗?确实如此!它寻找可能的最佳p(y),以最小化交叉熵的值。
损失函数
在训练过程中,分类器使用其训练集中的N个点中的每一个来计算交叉熵损失,从而有效地拟合分布p(y)!由于每个点的概率为1 / N,因此交叉熵的计算公式为:
交叉熵—点对点
我们需要在与每个点的实际类相关的概率上计算交叉熵。这意味着对正类(y = 1)中的点使用绿色条,对负类(y = 0)中的点使用红色的悬挂条,或者从数学角度看:
对应于图10的数学表达式 :-)
最后一步是计算两个正负类所有点的平均
二进制交叉熵-在正负类上计算
最后,我们通过一点小处理,正类或负类中任何一点都可以用相同的公式:
二进制交叉熵-通用公式
瞧!我们回到了二进制交叉熵/对数损失的原始公式 :-)