What is cross-entropy?
我知道有很多关于交叉熵的解释,但是我仍然很困惑。
仅仅是描述损失函数的一种方法吗? 我们可以使用梯度下降算法通过损失函数找到最小值吗?
-
不太适合SO。 这是数据科学姊妹网站上的类似问题:datascience.stackexchange.com/questions/9302/
交叉熵通常用于量化两个概率分布之间的差异。通常,"真实"分布(您的机器学习算法正在尝试匹配的分布)以单热点分布表示。
例如,假设对于特定的训练实例,标签为B(可能的标签A,B和C中的标签)。因此,此培训实例的一个热点分布是:
1 2
| Pr(Class A) Pr(Class B) Pr(Class C)
0.0 1.0 0.0 |
您可以将上述"真实"分布解释为意味着训练实例具有0%的概率是A类,100%的概率是B类和0%的概率是C类。
现在,假设您的机器学习算法可以预测以下概率分布:
1 2
| Pr(Class A) Pr(Class B) Pr(Class C)
0.228 0.619 0.153 |
预测分布与真实分布有多接近?这就是交叉熵损失所决定的。使用以下公式:
其中p(x)是所需概率,而q(x)是实际概率。总和超过三个类别A,B和C。在这种情况下,损失为0.479:
1
| H = - (0.0*ln(0.228) + 1.0*ln(0.619) + 0.0*ln(0.153)) = 0.479 |
这就是您的预测与真实分布有"错误"或"遥不可及"的地方。
交叉熵是许多可能的损失函数之一(另一个流行的函数是SVM铰链损失)。这些损失函数通常写为J(θ),并且可以在梯度下降中使用,梯度下降是一种将参数(或系数)移向最佳值的迭代算法。在下面的公式中,您可以将J(theta)替换为H(p, q)。但是请注意,您首先需要针对参数计算H(p, q)的导数。
因此,直接回答您的原始问题:
Is it only a method to describe the loss function?
正确的交叉熵描述了两个概率分布之间的损失。它是许多可能的损失函数之一。
Then we can use, for example, gradient descent algorithm to find the
minimum.
是的,交叉熵损失函数可以用作梯度下降的一部分。
进一步阅读:我的其他与TensorFlow相关的答案之一。
-
因此,交叉熵用每个示例X的概率之和来描述损失。
-
因此,我们可以将误差描述为两个向量之间的夹角(余弦相似度/角距离),并尽量减小该角度,而不是将误差描述为交叉熵吗?
-
@theateist:通常不使用余弦(不相似)。
-
显然,它不是最佳解决方案,但从理论上讲,我只是想知道是否可以使用cosine (dis)similarity通过角度描述误差,然后尝试最小化角度。
-
@ stackoverflowuser2010我们不使用余弦相似度,因为它的误差表面不平滑,对吗?如果我们的交叉熵达到零,是否也意味着余弦相似度为1?
-
@nadre:我不知道第一个问题的答案。对于第二个问题:交叉熵通常用于比较分布(如果两个分布相同,则交叉熵为0.0)。余弦相似度通常用于比较向量或表示为向量的特征(如果两个向量相同,则余弦为1.0)。
-
@ stackoverflowuser2010,但非正式地说,分布只是一个总和为1的向量,因此,如果我们比较交叉熵为0(它们是相同的)的两个"分布向量",这也意味着它们的余弦相似度是1还是我遗漏了一点?
-
@nadre:是的,您是正确的。但是通常,您不会在文献中看到以这种方式使用余弦相似度。
-
只是为了检查我的理解,在H(p,q)的方程式中,p(x)和q(x)是什么?我认为p(x)(一旦填入x,实际上就是P(A)或P(B)等)是该培训示例上课的实际概率,因此始终为0或1。 q(x)是该类别的预测概率。因此,在所述问题中,我们基本上将每个训练示例的3个值求和,如果我们有1000个训练示例,则该方程对于梯度下降的一次迭代重复1000次。我可以吗?
-
@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。请注意,通常使用Pythons np.log()函数,这实际上是自然日志。没关系。
-
@ stackoverflowuser2010也许我晚上很慢,但是交叉熵不应该是?0.691吗? H(p, q)应该是- ((0 * log2(0.228)) + (1.0 * log2(0.619)) + (0 * log2(0.153))),这将给出0.691对吗?我确实注意到,您的第一个日志中有2.28。
-
@Beardo:我的计算是使用自然对数,而您的计算是以2为底的对数。在实践中,只要您始终一致地使用同一功能,就没有关系。
-
@ stackoverflowuser2010啊,谢谢您的澄清。
-
那么交叉熵只能在一个热分布下起作用吗?
-
@吴环宇:是的。一热分布仅表示所有类别概率均为0.0,一个为1.0。只需将这些数字替换为总计为1.0的其他概率。
-
@ stackoverflowuser2010可以说我得到的真实分布为0.2 0.3.0.5,然后我通过模型和一些出色的算法找出了真实分布。我计算了它的交叉熵,发现它不是零,但这与交叉熵是谓词分布和真实分布之间的距离的理解相矛盾。
-
@吴环宇:如果损失为0.0,那么您将拥有一个完美的匹配。如果结果> 0.0,则它们是不同的。如果真是这样,那么这意味着您的发行版与实际发行版有所不同。
-
听起来可能很愚蠢,但是当我们知道其他类仅对真实类atm的概率分布感兴趣时,为什么还要对其他类进行计算(单次编码)? ln(0.619)结果相同。
-
@HAr:对于真实标签的一键编码,我们只关心一个非零类。然而,交叉熵可以比较任何两个概率分布;其中之一不一定具有单发概率。
-
公式中是否需要使用对数运算?如果没有对数,则公式仅是两个概率分布的内积(带有负号)的定义:一个热编码的地面真相标签和预测的soft-max分布;内积越大,表示两个分布的匹配度越高,而负号表示的损失较小;另一方面,内积较小的值表示较差的匹配,负号表示损失较大。因此,它仍然是损失计算的有效方法吗?唯一的区别是,我们现在获得负值作为损失。
-
@Francis,我相信您所描述的几乎完全是铰链损耗(实际上是1-inner_product)。因此,是的,正如您所描述的,它可能是一个损失函数,但是原始问题中的一个是一个特定的损失,即交叉熵和熵,与信息论和物理学一样,总是对数。
-
交叉熵的最佳答案everrrrrrrrrrrrr