TensorFlow 2.x 信息+熵+交叉熵

0. TensorFlow中的对数

  • TensorFlow中的对数是自然对数: math.log而不是以2为底的对数mat.log2

1. 信息 (Information)

  • 信息:量化单个事件的不确定性

  • 信息量直观理解

    • 事件发生的概率越小,信息量越大。即当越不可能的事件发生了,我们获取到的信息量就越大
    • 事件发生的概率越大,信息量越小。即越可能发生的事件发生了,我们获取到的信息量就越小
  • 信息量数学表示
    - P ( x ) P(x) P(x):表示事件 x x x发生的概率

    • I(x):信息量:
      I ( x ) = − l o g 2 P ( x ) I(x) = -log_2 P(x) I(x)=log2P(x)
  • 示例

事件概率信息量(直观)信息量(数学)
A: 早上太阳升起P(A) = 10 bits (没有任何新信息) − l o g 2 ( P ( A ) ) -log_2(P(A)) log2(P(A)) = 0
B: 硬币头朝上P(B)=0.51 bit (一点信息) − l o g 2 ( P ( B ) ) -log_2(P(B)) log2(P(B)) = 1.0
D:早上太阳没升起P(D) = 0∞ bits (很多很多信息) − l o g 2 ( P ( D ) ) -log_2(P(D)) log2(P(D)) = ∞

2. 熵(Entropy)

  • 信息量:仅用于描述单个事件的信息量

  • :可用于描述一系列事件的信息量,即每个事件的概率x本事件的信息量之后再相加 (即随机变量的数学期望)

  • 示例

    • 袋中2个红球,3个绿球,4 个蓝球,则随机取出一个球的信息量为:熵(Entropy)

    P ( r e d ) = 2 / 9 I ( r e d ) = − l o g 2 P ( r e d ) = 2.1699 P(red) = 2/9 \quad I(red) = -log_2 P(red) = 2.1699 P(red)=2/9I(red)=log2P(red)=2.1699
    P ( g r e e n ) = 3 / 9 I ( g r e e n ) = − l o g 2 P ( g r e e n ) = 1.5850 P(green) = 3/9 \quad I(green) = -log_2 P(green) = 1.5850 P(green)=3/9I(green)=log2P(green)=1.5850
    P ( b l u e ) = 4 / 9 I ( b l u e ) = − l o g 2 P ( b l u e ) = 1.1699 P(blue) = 4/9 \quad I(blue) = -log_2 P(blue) = 1.1699 P(blue)=4/9I(blue)=log2P(blue)=1.1699

    E n t r o p y = E [ I ( a l l b a l l s ) ] = − [ P ( r e d ) ∗ I ( r e d ) + P ( g r e e n ) ∗ I ( g r e e n ) + P ( b l u e ) ∗ I ( b l u e ) ] = 1.53 b i t s Entropy = E[I(all \quad balls)] \\=-[P(red) * I(red) + P(green) * I(green) + P(blue) * I(blue)] \\= 1.53 bits Entropy=E[I(allballs)]=[P(red)I(red)+P(green)I(green)+P(blue)I(blue)]=1.53bits

  • 熵定义
    H ( P ) = E x ∼ P [ − l o g 2 P ( x ) ] H(P) = E_{x \sim P}[-log_2 P(x)] H(P)=ExP[log2P(x)]

    • 上式中的x〜P表示值x取自分布P,如上例中的 P= (2 red, 3 green, 4 blue)

3. 交叉熵(Cross-Entropy)

  • 交叉熵:用于衡量同一事件集上两个概率分布之间的相对熵
  • 直观理解:要计算P和Q之间的交叉熵,您只需使用P中的概率权重来计算Q的熵
  • 交叉熵定义
    H ( P , Q ) = E x ∼ P [ − l o g 2 Q ( x ) ] H(P, Q) = E_{x \sim P}[-log_2 Q(x)] H(P,Q)=ExP[log2Q(x)]
  • 示例
    • 概率分布 P = {2 red, 3 green, 4 blue}
    • 概率分布 P = {4 red, 4 green, 1 blue}
    • H ( P , Q ) = − [ 2 / 9 ∗ l o g 2 ( 4 / 9 ) + 3 / 9 ∗ l o g 2 ( 4 / 9 ) + 4 / 9 ∗ l o g 2 ( 1 / 9 ) ] H(P, Q) = -[2/9 * log_2 (4/9) + 3/9 * log_2 (4/9) + 4/9 * log_2 (1/9)] H(P,Q)=[2/9log2(4/9)+3/9log2(4/9)+4/9log2(1/9)]

4. 交叉熵作为损失函数(Cross-Entropy as Loss Function)

在这里插入图片描述

  • 上图中的log表示以2底的对数
  • 目的:度量预测值与Ground Truth值间的差异
  • 原理:取真实标签的概率分布作为P(概率向量),取预测标签的概率分布作为Q(概率向量), 交叉熵用于计算这两个概率向量的损失
  • 用途计算两个概率向量的损失
  • 示例
    • 分类器把样本分为3类:A, B, C
    • 令P为真实标签分布,Q为预测标签分布
    • 假设一个特定样本的真实标签为B,并且我们的分类器将A,B,C的概率预测为(0.15,0.60,0.25)
P(A)P(B)
真实标签分布P010
预测标签分布Q0.150.600.25
  • 交叉熵H(P,Q)
    H ( P , Q ) = − [ 0 ∗ l o g 2 ( 0.15 ) + 1 ∗ l o g 2 ( 0.60 ) + 0 ∗ l o g 2 ( 0.25 ) ] = 0.737 H(P, Q) = -[ 0 * log_2 (0.15) + 1 * log_2 (0.60) + 0 * log_2 (0.25) ] =0.737 H(P,Q)=[0log2(0.15)+1log2(0.60)+0log2(0.25)]=0.737

  • 交叉熵公式
    C r o s s − E n t r o p y = H ( P , Q ) = − ∑ x i P ( x i ) l o g 2 Q ( x i ) Cross-Entropy = H(P,Q) = -\sum_{x_i} P(x_i)log_2Q(x_i) CrossEntropy=H(P,Q)=xiP(xi)log2Q(xi)

  • 预测概率与损失的关系
    在这里插入图片描述

    • 当预测的概率为1时,其损失为0(即与真实标签相同)
    • 当预测的概率为0时,其损失为无穷大(即与真实标签完全相反)
  • 分类任务
    在这里插入图片描述

    • 总共有C个类别
    • 多类别分类(Multi-Class Classification)
      • 网络的输出层有C个神经元
      • 每个样本只能属于C个类别中的一个
      • 真实标签值(ground truth)向量是:one-hot向量
    • 多标签分类(Multi-Label Classification)
      • 网络的输出层有C个神经元
      • 每个样本可属于C个类别中的一个或多个类别
      • 真实标签值(ground truth)向量是:输出向量包含多个正的非0元素

4.1 分类交叉熵(CCE: Categorical Cross-Entropy)

  • 分类交叉熵:当标签值是单热点(one-hot vector)向量(只有一个元素为1,其它元素全为0)时,被称为分类交叉熵
  • 用途:用于计算 多分类(Multi-classification) 的交叉熵损失
  • 标签值概率向量
  • 公式
    • x i x_i xi:是在标签中值为1对应的类别
      C C E = − l o g 2 Q ( x i ) CCE = -log_2Q(x_i) CCE=log2Q(xi)

4.1.1 分类交叉熵损失(Categorical Cross-Entropy loss)

  • 分类交叉熵损失:又名Softmax Loss

  • 组成:Softmax activation + Cross-Entropy Loss

  • 用途
    在这里插入图片描述

    • 使用分类交叉熵损失,我们将训练CNN为每个图像输出C类的概率
    • 多类别分类(Multi-Class Classification):标签真值向量中只有一个非0元素,即one-hot

4.2 二元交叉熵(BCE:Binary Cross-Entropy)

  • 二元交叉熵:当标签值(标量)要么为0,要么为1时,被称为二元交叉熵
  • 用途:用于计算 二元分类(Binary-classification) 的交叉熵损失
  • 标符值标量(取0或1)
  • 公式
    • x x x:表示图片中包含什么(如 dog)事件
      B C E = − [ P ( x ) l o g 2 Q ( x ) + ( 1 − P ( x ) ) l o g 2 ( 1 − Q ( x ) ) ] BCE = -[P(x) log_2 Q(x) + (1-P(x))log_2(1-Q(x))] BCE=[P(x)log2Q(x)+(1P(x))log2(1Q(x))]
    • 当标签值为0时,BCE:
      B C E = − [ ( 1 − P ( x ) ) l o g 2 ( 1 − Q ( x ) ) ] BCE = -[(1-P(x))log_2(1-Q(x))] BCE=[(1P(x))log2(1Q(x))]
    • 当标签值为1时,BCE:
      B C E = − [ P ( x ) l o g 2 Q ( x ) ] BCE = -[P(x) log_2 Q(x)] BCE=[P(x)log2Q(x)]

4.2.1 二元交叉熵损失(Binary Cross-Entropy Loss)

  • 二元交叉熵损失:又名Sigmoid Cross-Entropy Loss

  • 组成:Sigmoid activation + Cross-Entropy Loss

  • 特点

    • 与Softmax损失不同,它对于每个矢量分量(类)都是独立的,这意味着为每个CNN输出矢量分量计算的损失不受其他分量值的影响
    • 这就是为什么将其用于多标签分类的原因,因为对属于某个类别的元素的洞察力不应影响对另一个类别的决策
  • 用途
    在这里插入图片描述

    • 二元分类(Binary-Class Classification):标签真值是标量,其值为0或1

4.3 多标签分类(MLC:Multi-label classification)

  • 多标签分类:标签同时表示多个类别,在类别向量中,每一个元素表示二分类,如:[1, 0, 1] ([dog, cat, panda])表示有dog, 没有cat, 有panda
  • 公式
    • N N N:表示类别数量,如[dot, cat, panda]的N=3
      M L C = − ∑ i = 1 N [ P ( x i ) l o g 2 ( Q ( x i ) + ( 1 − P ( x i ) ) l o g 2 ( 1 − Q ( x i ) ] MLC = -\sum_{i=1}^N [P(x_i)log_2(Q(x_i) + (1-P(x_i))log_2(1-Q(x_i)] MLC=i=1N[P(xi)log2(Q(xi)+(1P(xi))log2(1Q(xi)]

5. 与最大似然的关系(Maximum Likelihood)

  • 对于分类问题,使用交叉熵作为损失函数等效于最大化对数似然。
  • 考虑以下二分类的情况,其中a,b,c,d表示概率:
01
真实标签ac
预测标签bd
  • H(True, Predicted)
    • y y y:真实标签值
    • y ^ \hat y y^:预测标签值
      H ( T r u e , P r e d i c t e d ) = − [ a ∗ l o g 2 ( b ) + c ∗ l o g 2 ( d ) ] = − [ a ∗ l o g 2 ( b ) + ( 1 − a ) ∗ l o g 2 ( 1 − b ) ] = − [ y ∗ l o g 2 ( y ^ ) + ( 1 − y ) ∗ l o g 2 ( 1 − y ^ ) ] H(True, Predicted) \\=-[a*log_2 (b) + c * log_2 (d)] \\= -[a*log_2 (b) + (1-a) * log_2 (1-b)]\\= -[y*log_2 (\hat y) + (1-y) * log_2 (1-\hat y)] H(True,Predicted)=[alog2(b)+clog2(d)]=[alog2(b)+(1a)log2(1b)]=[ylog2(y^)+(1y)log2(1y^)]

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值