科普 | shāng?熵?交叉熵?我只知道好忧shāng
编者按:大家在学习深度学习的过程中,都会碰到cross-entropy这个词,中文叫“交叉熵”,多么高大上的名词!然而这个“熵”到底是干啥用的,实际上很多人包括我,在一开始都没好好琢磨过。
在面试算法工程师的过程中,经常会被问道这样的问题:“什么是熵?”无从下口?别担心,微软智汇学院来教你怎么回答。
信息熵?
热力学那个先不说,这里准确的说是“信息熵”。而要知道什么是信息熵,我们得知道什么是信息。
网上的“太阳从东边升起来”的例子大家应该都看过了。我们说,这是一句毫无信息量的话,因为他没有消除任何不确定性。
前女友对你说“我结婚了”,这句话包含了信息量,去除了不确定性。但如果前女友和你说“我是女的”,这句话就毫无信息量,这就是废话。
信息熵,泛泛的说是用来衡量一段信息的信息量大小的。
这个定义我之前也不理解,直到我看见一个说法,突然茅塞顿开:信息熵是用来衡量表达一个随机变量需要的最少的比特位数。
在信息论的世界里,我们追求的是用最经济实惠的方法表达信息(“好话不说二遍”嘛)。
对一个不确定的信息(随机变量)来说,怎么最经济实惠的表达它呢,即如何用最少的比特位表达?
你肯定是看这个随机变量的各个可能的值,概率最大的值,你就用最短的位数去表达,概率越小,你就用越长的位。
而表达位数的期望值,即表达这个随机变量用的比特位数的平均值,就是该随机变量的信息熵。
如果上文看着还是绕,我们做这样一个解释:
假设有两艘军舰在海上航行,它们相隔一定的距离,然后也非常落后没有其他通信手段,两艘军舰相约每隔一分钟就用闪探照灯的方法互相确认一下有没有在附近发现敌人,现在船长让你来具体设计这个方法,你怎么设计呢?
因为大多数时间海上是没敌人的,所以为了节省时间,为了不频繁闪灯被敌人发现,你肯定倾向于用最简单的方式来表示绝大部分时间的情况,比如说只闪一下,而等到真正敌人出现的时候,你再连续的闪烁。
舰娘之间、啊不是,军舰之间如何沟通?
明白了以上道理,信息熵的公式也不难推导出了:
其中x是随机变量,p是x的概率分布函数,logp(1/xi)是该概率下需要的比特位(为啥?香农定理,背就对了)。
从定义我们可以看得出来,对一个随机变量来说,如果它的信息熵越大,一般表示这个随机变量取值越多,概率分布越均匀,“混乱程度”就越高;如果信息熵越小则反之,就像刚才军舰探照灯的例子,因为很可能大部分时间这个随机变量都是一个值。
交叉熵?
终于到正题了,前边咱们费这么大劲说了信息熵。懂了信息熵,交叉熵就简单啦。
从上边的公式我们可以得到一个很简单的结论,就是一个随机变量的信息熵只取决于它的概率分布。
既然是概率分布,肯定就分真假,有真实分布(就是随机变量真正的分布),也有因为各种原因导致的非真实分布(比如样本太小啦,数数没数对,或者深度学习中网络没训练好的时候算出来的概率分布)。
那咱们怎么衡量非真实分布和真实分布的差别呢?这时候就轮到交叉熵的出场了:
这个公式是不是看着眼熟多了?这不就是深度学习里的loss function嘛!
其中p和q就是真实分布和非真实分布。如果随机变量的真实分布和非真实分布的交叉熵越小,那表明他们的分布越接近。
咦,这不正适合当深度学习的损失函数嘛!
实际上我们通过形式也很容易看出,大部分深度学习的损失函数就长这个样子,p就是y(就是1或者0),而q就是y帽(就是网络算出来的概率),换了个马甲而已。
--END--
想要了解更多前沿科技领域干货,欢迎点击👇:
© 微软智汇学院