【AIGC】信息量、熵、交叉熵、KL散度、二值交叉熵(Binary Cross-Entropy,BCE)

本文详细的推导了二值交叉熵(BCE)和二值交叉熵损失函数(BCE Loss)之间的关系。

一、 理论基础

A : = f ( ⋅ ) A:=f(\cdot) A:=f() 表示 A A A定义为 f ( ⋅ ) f(\cdot) f(),这是人们为了某些目的而将 A A A定义成 f ( ⋅ ) f(\cdot) f()的,有意义的定义往往能揭示一些规律。

1. 信息量

对于事件 x x x,假设它的信息量表示为 I ( x ) I(x) I(x),它发生的概率表示为 p ( x ) p(x) p(x)

基于我们的常识可以知道:

  1. 一个事件 x i x_i xi发生的概率越小,它包含的信息量 I ( x i ) I(x_i) I(xi)应该越大 = > I =>I =>I应该和 p p p成反比 = > => => I I I 1 p \frac{1}{p} p1成正比
  2. 两个事件 x i , x j x_i, x_j xi,xj的信息量 I ( x i ) + I ( x j ) I(x_i)+I(x_j) I(xi)+I(xj)相加,应该和这两个事件同时发生有关(注意:两个事件同时发生的概率等于两个事件的概率之积 p ( x i ) p ( x j ) p(x_i)p(x_j) p(xi)p(xj) = > I =>I =>I应该能把加法转换为乘法 = > => =>可用 l o g log log实现

基于上面两个性质,可以有 I ( x ) : = l o g 1 p ( x ) I(x):=log\frac{1}{p(x)} I(x):=logp(x)1 ,log的底取任何>1的值其实都没关系,但为了让它更有意义,通常取 2 2 2为底,因为这样,就能使得抛硬币正面朝上这样只有 1 2 \frac{1}{2} 21 概率的事件的信息量刚好为1,并且可以赋予其"比特"的单位(注意,单位也是定义的,人们会把一些有意义的事情给上单位)。所以说,抛硬币正面朝上的信息量为1比特。

所以,最终定义信息量为:
I ( x ) : = l o g 2 1 p ( x ) = − l o g 2 p ( x ) I(x):=log_2\frac{1}{p(x)}=-log_2p(x) I(x):=log2p(x)1=log2p(x)

2. 熵(也叫香农熵)

熵这个概念是针对一个事件集合 X X X而定义的(即有一系列事件 x ∈ X x \in X xX),

熵定义为这些事件携带信息量的平均值(也叫期望)。所以有:
H ( p ( x ) ) : = ∑ x ∈ X p ( x ) I ( x ) = − ∑ x ∈ X p ( x ) l o g 2 p ( x ) H(p(x)):=\sum_{x\in X}p(x)I(x)=-\sum_{x\in X}p(x)log_2p(x) H(p(x)):=xXp(x)I(x)=xXp(x)log2p(x)
或简写版:
H ( p ) : = ∑ p x I x = − ∑ p x l o g 2 p x H(p):=\sum p_xI_x=-\sum p_xlog_2p_x H(p):=pxIx=pxlog2px
这样,熵越大,表示这个系统包含的信息越多,系统越不稳定。

熵越小,表示这个系统包含的信息越少,系统越稳定。

在这里插入图片描述
如上图所示,中国和法国比赛悬念比较小,所以信息量少,结果比较稳定。(虽然中国赢了有更大的信息量,但发生的概率太小,整体基本上是法国赢)

而德国对荷兰的比赛则55开,比较不稳定,谁最终夺冠是个信息量很大的事。

所以德国VS荷兰这个系统的熵>法国VS中国的熵

3. 交叉熵

对于事件 x x x
假设它发生的真实概率(ground truth probability)表示为 p ( x ) p(x) p(x)
假设它的观测概率为 q ( x ) q(x) q(x)(即通过多次试验得到的概率或者通过算法预测出来的概率)

则交叉熵定义为:
H ( p ( x ) , q ( x ) ) : = ∑ x ∈ X p ( x ) I q ( x ) = − ∑ x ∈ X p ( x ) l o g 2 q ( x ) H(p(x),q(x)):=\sum_{x\in X}p(x)I^q(x)=-\sum_{x\in X}p(x)log_2q(x) H(p(x),q(x)):=xXp(x)Iq(x)=xXp(x)log2q(x)
或简写版:
H ( p , q ) : = ∑ p x I x q = − ∑ p x l o g 2 q x H(p,q):=\sum p_xI^q_x=-\sum p_xlog_2q_x H(p,q):=pxIxq=pxlog2qx

I q ( x ) I^q(x) Iq(x)表示以 q q q为概率的信息量。

举个例子:
假设抛硬币正面为 h h h,反面为 t t t。我们知道真实概率 p ( h ) = p ( t ) = 0.5 p(h)=p(t)=0.5 p(h)=p(t)=0.5
现在有两枚硬币,由于粘了不同程度的泥土导致抛出的概率不一样。通过实验,得到:
在这里插入图片描述
这里,我们就可以看出一点点门道了,即观测概率 q q q越接近真实概率 p p p。交叉熵相对越小。而这个结论是可以被证明的(见后面的KL散度)。
简化版

4. KL散度(或相对熵)

KL散度定义为交叉熵和香农熵的差。
D ( p ( x ) ∣ ∣ q ( x ) ) = H ( p ( x ) , q ( x ) ) − H ( p ( x ) ) = ∑ x ∈ X p ( x ) I q ( x ) − ∑ x ∈ X p ( x ) I ( x ) = ∑ x ∈ X p ( x ) l o g 2 1 q ( x ) − ∑ x ∈ X p ( x ) l o g 2 1 p ( x ) = ∑ x ∈ X p ( x ) l o g 2 p ( x ) q ( x ) \begin{aligned} D(p(x)||q(x))=H(p(x),q(x))-H(p(x))&=\sum_{x\in X}p(x)I^q(x)-\sum_{x\in X}p(x)I(x)\\ &=\sum_{x\in X}p(x)log_2\frac{1}{q(x)}-\sum_{x\in X}p(x)log_2\frac{1}{p(x)}\\ &=\sum_{x\in X}p(x)log_2\frac{p(x)}{q(x)} \end{aligned} D(p(x)∣∣q(x))=H(p(x),q(x))H(p(x))=xXp(x)Iq(x)xXp(x)I(x)=xXp(x)log2q(x)1xXp(x)log2p(x)1=xXp(x)log2q(x)p(x)
简写版:
D ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) = ∑ p x I x q − ∑ p x I x = ∑ p x l o g 2 1 q x − ∑ p x l o g 2 1 p x = ∑ p x l o g 2 p x q x \begin{aligned} D(p||q)=H(p,q)-H(p)&=\sum p_xI^q_x-\sum p_xI_x\\ &=\sum p_xlog_2\frac{1}{q_x}-\sum p_xlog_2\frac{1}{p_x}\\ &=\sum p_xlog_2\frac{p_x}{q_x} \end{aligned} D(p∣∣q)=H(p,q)H(p)=pxIxqpxIx=pxlog2qx1pxlog2px1=pxlog2qxpx

性质1:

D ( p ∣ ∣ q ) ≥ 0 D(p||q)\ge 0 D(p∣∣q)0 当且仅当 q = p q=p q=p时等号成立。
证明:吉布斯不等式

性质2:

D ( p ∣ ∣ q ) ≠ D ( q ∣ ∣ p ) D(p||q)\neq D(q||p) D(p∣∣q)=D(q∣∣p)

性质3:

由于 H ( p ) H(p) H(p)是个常量,q是一个变量,通常可表示为函数 f ( θ ) f(\theta) f(θ),所以通过选取不同 q θ q_\theta qθ(简便起见,这么写,不代表 θ \theta θ是事件)最小化 D ( p ∣ ∣ q θ ) D(p||q_\theta) D(p∣∣qθ)等价于最小化 H ( p , q θ ) H(p,q_\theta) H(p,qθ),即:
▽ θ D ( p ∣ ∣ q θ ) = ▽ θ H ( p , q θ ) − ▽ θ H ( p ) = ▽ θ H ( p , q θ ) \triangledown_\theta D(p||q_\theta)=\triangledown_\theta H(p,q_\theta)-\triangledown_\theta H(p)=\triangledown_\theta H(p,q_\theta) θD(p∣∣qθ)=θH(p,qθ)θH(p)=θH(p,qθ)

关于事件空间的误解

(注意,很多教程没有讲清楚事件空间和采样试验(见下一节) 的区别,这里拉出来强调下。)

事件空间是指 X X X,即事件 x x x的可取值的集合。

由于观测值样本空间只能是真实值样本空间的子集,所以不存在有些教程里说的要确定取值的问题。比如下面:

当观测值和真实值一样时:
在这里插入图片描述
如果观测数更多:
在这里插入图片描述
如果观测数更少:
在这里插入图片描述

总是取事件空间更大的值。(注意上面的图在事件空间体现这块是有问题的,横轴表示事件空间。不可能出现观测值在真实值中不存在的情况,比如第一幅图,真实值只有1,它却观测到了0.4或者0.8;最后一幅图,观测到的是1,真实值从图上看又没有1。)

实际上根据公式 x ∈ X x\in X xX这里的 X X X指的是真实事件空间。对于 p p p不存在的情况 i i i p i p_i pi取0,对于 q q q不存在的情况 j j j q j q_j qj取0代入公式即可,不必要关注所谓的取大取小的问题。

5. 二值交叉熵(Binary Cross-Entropy,BCE)和BCE损失函数

二值交叉熵是交叉熵的一种特殊情况,即真实样本空间只有两个取值,一般来说是 [ 0 , 1 ] [0,1] [0,1]。有 p ( 0 ) + p ( 1 ) = 1 , q ( 0 ) + q ( 1 ) = 1 p(0)+p(1)=1,q(0)+q(1)=1 p(0)+p(1)=1,q(0)+q(1)=1
H ( p ( x ) , q ( x ) ) = ∑ x ∈ [ 0 , 1 ] p ( x ) I q ( x ) = p ( 0 ) I q ( 0 ) + p ( 1 ) I q ( 1 ) = − ( p ( 0 ) l o g 2 q ( 0 ) + ( 1 − p ( 0 ) ) l o g x ( 1 − q ( 0 ) ) ) 或 = − ( ( 1 − p ( 1 ) ) l o g x ( 1 − q ( 1 ) ) + p ( 1 ) l o g 2 q ( 1 ) ) = − ( p ( x ) l o g 2 q ( x ) + ( 1 − p ( x ) ) l o g x ( 1 − q ( x ) ) ) \begin{aligned} H(p(x),q(x))=\sum_{x\in [0,1]}p(x)I^q(x)&=p(0)I^q(0)+p(1)I^q(1)\\ &=-(p(0)log_2q(0)+(1-p(0))log_x(1-q(0)))或=-((1-p(1))log_x(1-q(1))+p(1)log_2q(1))\\ &=-(p(x)log_2q(x)+(1-p(x))log_x(1-q(x))) \end{aligned} H(p(x),q(x))=x[0,1]p(x)Iq(x)=p(0)Iq(0)+p(1)Iq(1)=(p(0)log2q(0)+(1p(0))logx(1q(0)))=((1p(1))logx(1q(1))+p(1)log2q(1))=(p(x)log2q(x)+(1p(x))logx(1q(x)))
其中x可取0或者1。

或简写版:
H ( p , q ) = − ( p x l o g 2 q x + ( 1 − p x ) l o g 2 ( 1 − q x ) ) H(p,q)=-(p_xlog_2q_x+(1-p_x)log_2(1-q_x)) H(p,q)=(pxlog2qx+(1px)log2(1qx))
其中 x x x可取 0 0 0 1 1 1

有两点要注意:

  1. H中的累加符号没有了
  2. 也就是说,我们可以只关注一种结果,0或者1。

为什么我们在其他文献或者教材里看到的BCE是长下面这样呢?
1 N ∑ i = 0 N ( y i l o g 2 y ^ i + ( 1 − y i ) l o g 2 ( 1 − y ^ i ) ) \frac{1}{N}\sum_{i=0}^N(y_ilog_2\hat{y}_i+(1-y_i)log_2(1-\hat{y}_i)) N1i=0N(yilog2y^i+(1yi)log2(1y^i))
其中: N N N为采样数, y i y_i yi为真实标签(0或1), y ^ i \hat{y}_i y^i为预测概率。

事实上,严格的来说,上面的公式并不是交叉熵,而是基于交叉熵构造的BCE损失函数 q ( x ) q(x) q(x)这个观测值或者预测值是由未知变量的函数决定的(比如sigmoid函数 q ( x ) ( θ ) = 1 1 + e − θ x ^ q(x)(\theta)=\frac{1}{1+e^{-\theta \hat{x}}} q(x)(θ)=1+eθx^1),假设做了N次实验,那么损失函数定义为:
L o s s ( θ ) : = 1 N ∑ i = 0 N H ( p i ( x ) , q i ( x ) ) = 1 N ∑ i = 0 N H ( p i ( x ) , q i ( x ) ( θ ) ) Loss(\theta):=\frac{1}{N}\sum_{i=0}^NH(p_i(x),q_i(x))=\frac{1}{N}\sum_{i=0}^NH(p_i(x),q_i(x)(\theta)) Loss(θ):=N1i=0NH(pi(x),qi(x))=N1i=0NH(pi(x),qi(x)(θ))
代入BCE公式得:
L o s s ( θ ) = − 1 N ∑ i = 0 N ( p i ( x ) l o g 2 q i ( x ) ( θ ) + ( 1 − p i ( x ) ) l o g x ( 1 − q i ( x ) ( θ ) ) ) Loss(\theta)=-\frac{1}{N}\sum_{i=0}^N(p_i(x)log_2q_i(x)(\theta)+(1-p_i(x))log_x(1-q_i(x)(\theta))) Loss(θ)=N1i=0N(pi(x)log2qi(x)(θ)+(1pi(x))logx(1qi(x)(θ)))

注意这里的 i i i代表的事每次实验。举个例子,假设下面有N张照片,我们预测它是不是猫。即x=1表示是猫,x=0表示不是猫。那么i就表示第i张照片。注意每个 x i x_i xi都有两个取值。

在这里插入图片描述

由第4节的性质3可知,最小化上面的损失函数,其实就是最小化每一个KL散度 ▽ θ D ( p i ∣ ∣ q i ( θ ) ) \triangledown_\theta D(p_i||q_i(\theta)) θD(pi∣∣qi(θ))
即设计这么个损失函数就是为了找最好的 θ \theta θ使得 q i ( θ ) q_i(\theta) qi(θ)在每个测试点上都能拟合真实的 p i p_i pi

现在只剩下疑问:原公式中只有概率,标签怎么出现到公式里的?

首先,我们要明确这里的真实事件空间是什么。

如果我们把事件定义成"a=它是1”,“b=它是0”,
类比“h=抛硬币正面朝上”和"t=抛硬币反面朝上", p ( h ) = p ( t ) = 0.5 p(h)=p(t)=0.5 p(h)=p(t)=0.5
那么对于一张照片,它是不是猫,真实概率要么是100%要么是0%。

所以 p ( a ) = 100 % = 1 p(a)=100\%=1 p(a)=100%=1或者 p ( a ) = 0 % = 0 p(a)=0\%=0 p(a)=0%=0刚好和标签0,1对应上

那么,
H ( p ( x ) , q ( x ) ) = − ( p ( x ) l o g 2 q ( x ) + ( 1 − p ( x ) ) l o g x ( 1 − q ( x ) ) ) = − ( x l o g 2 q ( x ) + ( 1 − x ) l o g x ( 1 − q ( x ) ) ) \begin{aligned} H(p(x),q(x))&=-(p(x)log_2q(x)+(1-p(x))log_x(1-q(x)))\\ &=-(xlog_2q(x)+(1-x)log_x(1-q(x))) \end{aligned} H(p(x),q(x))=(p(x)log2q(x)+(1p(x))logx(1q(x)))=(xlog2q(x)+(1x)logx(1q(x)))
x x x 1 1 1 0 0 0,即对应图片是不是猫的真实标签。

这样,标签的值就写进公式了。

即:
L o s s ( θ ) = − 1 N ∑ i = 0 N ( p i ( x ) l o g 2 q i ( x ) ( θ ) + ( 1 − p i ( x ) ) l o g x ( 1 − q i ( x ) ( θ ) ) ) = − 1 N ∑ i = 0 N ( x i l o g 2 q i ( x ) ( θ ) + ( 1 − x i ) l o g 2 ( 1 − q i ( x ) ( θ ) ) ) \begin{aligned} Loss(\theta)&=-\frac{1}{N}\sum_{i=0}^N(p_i(x)log_2q_i(x)(\theta)+(1-p_i(x))log_x(1-q_i(x)(\theta)))\\ &=-\frac{1}{N}\sum_{i=0}^N(x_ilog_2q_i(x)(\theta)+(1-x_i)log_2(1-q_i(x)(\theta))) \end{aligned} Loss(θ)=N1i=0N(pi(x)log2qi(x)(θ)+(1pi(x))logx(1qi(x)(θ)))=N1i=0N(xilog2qi(x)(θ)+(1xi)log2(1qi(x)(θ)))

或简写版
L o s s ( θ ) = = − 1 N ∑ i = 0 N ( x i l o g 2 q x i ( θ ) + ( 1 − x i ) l o g 2 ( 1 − q x i ( θ ) ) ) \begin{aligned} Loss(\theta)&= &=-\frac{1}{N}\sum_{i=0}^N(x_ilog_2q_{x_i}(\theta)+(1-x_i)log_2(1-q_{x_i}(\theta))) \end{aligned} Loss(θ)==N1i=0N(xilog2qxi(θ)+(1xi)log2(1qxi(θ)))

参考

可视化理解Binary Cross-Entropy
【10分钟】了解香农熵,交叉熵和KL散度
打包理解“信息量”、“比特”、“熵”、“KL散度”
Understanding binary cross-entropy / log loss: a visual explanation
维基百科-Cross Entropy
个视频彻底搞懂交叉熵、信息熵、相对熵、KL散度、交叉熵损失、交叉熵

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值