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

本文围绕二值交叉熵和二值交叉熵损失函数展开,先介绍信息量、熵、交叉熵、KL散度等理论基础,推导各概念公式及性质,强调事件空间概念。后阐述二值交叉熵是交叉熵特殊情况,推导其与损失函数关系,说明损失函数设计目的是拟合真实概率。

本文详细的推导了二值交叉熵(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):=px

### 分类交叉熵损失函数的数学公式 分类交叉熵损失函数(Binary Cross-Entropy Loss Function, BCE)用于衡量预测概率与真实标签之间的差异。其数学表达形式如下: 对于单个样本 \(i\) 的损失计算,假设模型输出的概率为 \(\hat{y}_i\) (通常通过sigmoid激活函数得到),而真实的标签为 \(y_i\) (范围为 {0, 1}),则该样本对应的BCE损失可以表示为: \[ L_{BCE}(y_i, \hat{y}_i) = -[ y_i \log (\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)] \] 当扩展到整个数据集时,总损失是对所有样本损失求平均或者求和的形式。如果训练集中有\(N\)个样本,则总的BCE损失可写成: \[ L_{total} = -\frac{1}{N}\sum_{i=1}^{N}[ y_i \log (\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)]. \] 上述公式的推导基于信息论中的概念[^5],其中目标是最小化预测分布与实际分布间的相对(KL),从而使得模型能够更好地拟合数据。 在PyTorch框架下实现此功能时,可以通过调用`torch.nn.functional.binary_cross_entropy(sigmoid_output, true_labels)`完成相应操作[^1]。 ```python import torch import torch.nn.functional as F # Example tensors for demonstration purposes only sigmoid_output = torch.tensor([0.7, 0.3], requires_grad=True) true_labels = torch.tensor([1., 0.]) loss_bce = F.binary_cross_entropy(sigmoid_output, true_labels) print(f"BCE Loss: {loss_bce.item()}") ``` 以上代码片段展示了如何利用PyTorch库来计算给定预测和真下的交叉熵损失。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值