什么是交叉熵?

the*_*ist 81 machine-learning cross-entropy

我知道有很多解释是什么__CODE__,但我仍然感到困惑.

它只是一种描述损失函数的方法吗?然后,我们可以使用例如梯度下降算法来找到最小值.或者整个过程还包括找到最小算法?

sta*_*010 207

交叉熵通常用于量化两个概率分布之间的差异.通常,"真实"分布(机器学习算法试图匹配的分布)用一热分布表示.

例如,假设对于特定的训练实例,标签是​​B(可能的标签A,B和C中).因此,此培训实例的单热分发是:

Pr(Class A)  Pr(Class B)  Pr(Class C)
        0.0          1.0          0.0
Run Code Online (Sandbox Code Playgroud)

您可以将上述"真实"分布解释为表示训练实例具有0%概率为A类,100%概率为B类,0%概率为C类.

现在,假设您的机器学习算法预测以下概率分布:

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.228        0.619        0.153
Run Code Online (Sandbox Code Playgroud)

预测分布与真实分布有多接近?这就是交叉熵损失决定的.使用此公式:

交叉熵损失公式

p(x)想要的概率和q(x)实际概率在哪里.总和超过A,B和C三类.在这种情况下,损失为0.479:

H = - (0.0*ln(0.228) + 1.0*ln(0.619) + 0.0*ln(0.153)) = 0.479
Run Code Online (Sandbox Code Playgroud)

这就是你的预测与真实分布"错误"或"遥远"的程度.

交叉熵是许多可能的损失函数中的一个(另一个流行的是SVM铰链损失).这些损失函数通常写为J(θ)并且可以在梯度下降中使用,梯度下降是将参数(或系数)移向最佳值的迭代框架.在下面的等式中,您将替换J(theta)H(p, q).但请注意,您需要首先计算H(p, q)相对于参数的导数.

梯度下降

所以直接回答你原来的问题:

它只是一种描述损失函数的方法吗?

正确的交叉熵描述了两个概率分布之间的损失.它是许多可能的损失函数之一.

然后我们可以使用例如梯度下降算法来找到最小值.

是的,交叉熵损失函数可以用作梯度下降的一部分.

进一步阅读:我的其他答案之一与TensorFlow有关.

  • @Stephen:如果看我给出的示例,则“ p(x)”将是每个类的真实概率列表,即“ [0.0、1.0、0.0”。同样,“ q(x)”是每个类别“ [0.228,0.619,0.153]”的预测概率的列表。那么H(p,q)是-(0 * log(2.28)+ 1.0 * log(0.619)+ 0 * log(0.153))`,结果为0.479。注意,通常使用Python的`np.log()`函数,它实际上是自然的日志。没关系 (2认同)

小智 5

简而言之,交叉熵(CE)是衡量您的预测值与真实标签之间的距离的度量。

这里的交叉是指计算两个或多个特征/真实标签(如 0、1)之间的熵。

术语熵本身是指随机性,所以它的大值意味着您的预测与真实标签相去甚远。

因此改变权重以减少 CE,从而最终导致预测和真实标签之间的差异减少,从而提高准确性。