怎样理解 Cross Entropy

通过一个简单的例子来解释和总结什么是 Cross Entropy 以及为什么使用 Cross Entropy.

第一个例子

假设随机从一个口袋里取硬币, 口袋里有一个蓝色的, 一个红色的, 一个绿色的, 一个橘色的. 取出一个硬币之后, 每次问一个问题, 然后做出判断, 目标是, 问最少的问题, 得到正确答案. 其中一个最好的策略如下:


每一个硬币有 \(\dfrac{1}{4}\) 的概率被选中, 回答问题的期望是 2.

# 第二个例子
例子变了, 变成了袋子中 \(\dfrac{1}{8}\) 的硬币是绿色的, \(\dfrac{1}{8}\) 的是橘色的, \(\dfrac{1}{4}\) 是红色的, \(\dfrac{1}{2}\) 是蓝色的, 这时最优的策略如下:

\(\dfrac{1}{2}\) 的概率是蓝色, 只需要 1 个问题就可以知道是或者不是, \(\dfrac{1}{4}\) 的概率是红色, 需要 2 个问题, 按照这个逻辑, 猜中硬币需要的问题的期望是 \(\dfrac{1}{2} \times 1 + \dfrac{1}{4} \times 2 + \dfrac{1}{8} \times 3 + \dfrac{1}{8} \times 3 = 1.75\)

第三个例子

假设袋子中全部是蓝色的硬币, 那么, 这时候, 需要 0 个问题就可以猜到硬币, 即 \(\log_2 1=0\). 需要注意的是, 只有当知道袋子中全部是蓝色的硬币的时候才会需要的问题是 0 个.

总结上面的例子, 假设一种硬币出现的概率是 \(p\), 那么, 猜中该硬币的所需要的问题数是 \(\log_2{\dfrac{1}{p}}\). 例如, \(p=\dfrac{1}{4}\), \(\log_2 4=2\).

在这个问题中, 问题个数的期望是 \(\sum_i{p_i \times \log_2{\dfrac{1}{p_i}}}\). 这个式子就是 entropy 的表达式. 简单来说, 其意义就是 在最优化策略下, 猜到颜色所需要的问题的个数. 不确定性越高, entropy 就越大.
现在已经了解了 entropy 是什么, 那么, 下面解释 cross entropy 的含义.
对于第二个例子, 如果任然使用第一个例子中的策略, 如下图:

\(\dfrac{1}{8}\) 的概率, 硬币是橘色, 需要两个问题, \(\dfrac{1}{2}\) 的概率是蓝色, 仍然需要两个问题, 平均来说, 需要的问题数是 \(\dfrac{1}{8} \times 2 + \dfrac{1}{8} \times 2 \dfrac{1}{4} \times 2 + \dfrac{1}{2} \times 2 = 2\). 因此, 在例子二中使用例子一的策略是一个比较差的策略. 其中 2 是这个方案中的 cross entropy.
给定一个策略, cross entropy 就是在该策略下猜中颜色所需要的问题的期望值. 给定一个方案, 约优的策略, 最终的 cross entropy 越低. 具有最低的 cross entropy 的策略就是最优化策略. 也就是上面定义的 entropy. 因此, 在机器学习中, 我们需要最小化 cross entropy.

数学上来讲, cross entropy 就是 \(\sum_i{p_i \times \log_2{\dfrac{1}{\hat{p}_i}}}\), 其中, \(p\) 是真正的概率, 例如例子二中, 橘色和绿色是 \(\dfrac{1}{8}\), 红色是\(\dfrac{1}{4}\), 蓝色是 \(\dfrac{1}{2}\). \(\hat{p}_i\) 是错误地假设了的概率, 例如, 在例子二中我们错误地假设了所有的颜色的概率都是 \(\dfrac{1}{4}\). \(p\) 和 \(\hat{p}\) 可能有点容易混淆. 记住一点, \(\log\) 是用来计算在 你的策略 下猜中所需要的问题数, 因此, \(log\) 中需要的是 你的预测概率 \(\hat{p}\).
在决策树中, 如果建立的数不是最优的, 结果就是对于输出的概率分布的假设是错误地, 导致的直接结果就是 cross entropy 很高.
cross entropy 不仅仅应用在决策树中, 在所有的分类问题中都有应用. 在二分类问题中, 标签 \(y\) 是 1 的似然是对于标签 \(y\) 的预测 \(\hat y\), 同样的, 标签是 0 的似然是 \(1-\hat y\). 我们需要最大化似然函数, 而且, 由于二分类问题的特殊性, 可以把似然函数写成 \({\hat y}^y{\left(1-\hat y\right)^{1-y}}\). 当 \(y=1\) 的时候, 第二项为 1, 因此, 优化的是 \(\hat y\), 当 \(y=0\) 的时候, 第一项为 1, 优化的是 \(1-\hat y\).
对上面的似然函数取对数, 结果是:
\[ \log{\hat y}^y{\left(1-\hat y\right)^{1-y}} = y\log \hat y + \left(1-y\right) \log \left(1-\hat y\right) \]
最大化似然函数, 就是对上面表达式取负然后最小化, 即最小化 \(-y\log \hat y + \left(1-y\right) \log \left(1-\hat y\right)\). 这就是 cross entropy 的表达式. cross entropy 有时候也被称为 log loss.
举例来说, 假设我有3枚硬币, 正正反, 记为 1,1,0. 预测结果是 0.8, 0.9, 0.3, 那么, cross entropy 的均值是:
\[ -\dfrac{1}{3}\left(1 \times \log 0.8 + 1 \times \log 0.9 + \left(1-0\right) \times log \left(1-0.3\right)\right) \]
假设有一个完美的算法, 直接预测出了 1,1,0, 那么 cross entropy 的结果就是 0.