Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 什么是交叉熵?_Machine Learning_Cross Entropy - Fatal编程技术网

Machine learning 什么是交叉熵?

Machine learning 什么是交叉熵?,machine-learning,cross-entropy,Machine Learning,Cross Entropy,我知道有很多关于交叉熵的解释,但我还是很困惑 这只是描述损失函数的一种方法吗?我们能用梯度下降算法用损失函数求最小值吗?交叉熵常用于量化两个概率分布之间的差异。在机器学习的背景下,它是分类多类分类问题的误差度量。通常,“真实”分布(机器学习算法试图匹配的分布)表示为一个热分布 例如,假设对于一个特定的训练实例,真正的标签是B(在可能的标签a、B和C中)。因此,此培训实例的一个热点分布是: Pr(Class A) Pr(Class B) Pr(Class C) 0.0

我知道有很多关于交叉熵的解释,但我还是很困惑


这只是描述损失函数的一种方法吗?我们能用梯度下降算法用损失函数求最小值吗?

交叉熵常用于量化两个概率分布之间的差异。在机器学习的背景下,它是分类多类分类问题的误差度量。通常,“真实”分布(机器学习算法试图匹配的分布)表示为一个热分布

例如,假设对于一个特定的训练实例,真正的标签是B(在可能的标签a、B和C中)。因此,此培训实例的一个热点分布是:

Pr(Class A)  Pr(Class B)  Pr(Class C)
        0.0          1.0          0.0
您可以将上述真实分布解释为,培训实例具有0%的A类概率、100%的B类概率和0%的C类概率

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

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.228        0.619        0.153
预测分布与真实分布的接近程度如何?这就是交叉熵损失所决定的。使用以下公式:

其中,
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
对数底 请注意,只要始终使用相同的对数基数,使用什么样的对数基数并不重要。碰巧,pythonnumpy
log()
函数计算自然日志(log base e)

Python代码 下面是上面使用Numpy用Python表示的示例:

将numpy导入为np
p=np.数组([0,1,0])#真概率(一个热)
q=np.数组([0.228,0.619,0.153])#预测概率
交叉熵损失=-np.sum(p*np.log(q))
打印(交叉熵损失)
# 0.47965000629754095
因此,这就是你的预测与真实分布的“错误”或“遥远”程度。机器学习优化器将尝试最小化损失(即,它将尝试将损失从0.479减少到0.0)

损失单位 我们在上面的示例中看到,损失为0.4797。因为我们使用的是自然对数(对数基数e),单位为,所以我们说损失为0.4797纳特。如果日志为log base 2,则单位为位。有关详细说明,请参阅

更多例子 为了更直观地了解这些损失值反映了什么,让我们看一些极端的例子

同样,让我们假设真实(一个热)分布是:

Pr(Class A)  Pr(Class B)  Pr(Class C)
        0.0          1.0          0.0
现在假设你的机器学习算法做得非常好,并且很有可能预测到B类:

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.001        0.998        0.001
当我们计算交叉熵损失时,我们可以看到损失很小,只有0.002:

p=np.array([0,1,0])
q=np.数组([0.001,0.998,0.001])
打印(-np.sum(p*np.log(q)))
# 0.0020020026706730793
在另一个极端,假设您的ML算法做得很糟糕,并以很高的概率预测C类。由此产生的6.91损失将反映更大的误差

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.001        0.001        0.998
p=np.array([0,1,0])
q=np.数组([0.001,0.001,0.998])
打印(-np.sum(p*np.log(q)))
# 6.907755278982137
现在,在这两个极端中间发生了什么?假设您的ML算法无法下定决心,以几乎相等的概率预测这三个类

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.333        0.333        0.334
由此产生的损失为1.10

p=np.array([0,1,0])
q=np.数组([0.333,0.333,0.334])
打印(-np.sum(p*np.log(q)))
# 1.0996127890016931
适应梯度下降 交叉熵是许多可能损失函数中的一个(另一个流行的是SVM铰链损失)。这些损失函数通常写为J(θ),可以在梯度下降中使用,梯度下降是一种迭代算法,用于将参数(或系数)移向最佳值。在下面的等式中,您将
J(θ)
替换为
H(p,q)
。但请注意,首先需要计算
H(p,q)
对参数的导数

因此,要直接回答您最初的问题:

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

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

然后我们可以使用,例如,梯度下降算法来找到 最低限度

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

进一步阅读:我的一篇文章与TensorFlow有关。

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

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

熵这个词本身指的是随机性,所以它的大值意味着你的预测与真实的标签相去甚远


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

加上上述帖子,最简单的交叉熵损失形式称为二进制交叉熵(用作二元分类的损失函数,如逻辑回归),而广义版本是分类交叉熵(用作多类分类问题的损失函数,如神经网络)

想法仍然是一样的:

  • 当训练实例的目标标签的模型计算(softmax)类概率变得接近1时(用一个热编码表示,例如),相应的CCE损失减少到零

  • 否则,它会随着与目标类对应的预测概率变小而增加

  • 福洛维