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)
- I(x):信息量:
-
示例
事件 | 概率 | 信息量(直观) | 信息量(数学) |
---|---|---|---|
A: 早上太阳升起 | P(A) = 1 | 0 bits (没有任何新信息) | − l o g 2 ( P ( A ) ) -log_2(P(A)) −log2(P(A)) = 0 |
B: 硬币头朝上 | P(B)=0.5 | 1 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.1699E 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)=Ex∼P[−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)=Ex∼P[−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/9∗log2(4/9)+3/9∗log2(4/9)+4/9∗log2(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) | P© | |
---|---|---|---|
真实标签分布P | 0 | 1 | 0 |
预测标签分布Q | 0.15 | 0.60 | 0.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)=−[0∗log2(0.15)+1∗log2(0.60)+0∗log2(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) Cross−Entropy=H(P,Q)=−xi∑P(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)
-
x
i
x_i
xi:是在标签中值为1对应的类别
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)+(1−P(x))log2(1−Q(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=−[(1−P(x))log2(1−Q(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)]
-
x
x
x:表示图片中包含什么(如 dog)事件
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=1∑N[P(xi)log2(Q(xi)+(1−P(xi))log2(1−Q(xi)]
-
N
N
N:表示类别数量,如[dot, cat, panda]的N=3
5. 与最大似然的关系(Maximum Likelihood)
- 对于分类问题,使用交叉熵作为损失函数等效于最大化对数似然。
- 考虑以下二分类的情况,其中a,b,c,d表示概率:
0 | 1 | |
---|---|---|
真实标签 | a | c |
预测标签 | b | d |
- 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)=−[a∗log2(b)+c∗log2(d)]=−[a∗log2(b)+(1−a)∗log2(1−b)]=−[y∗log2(y^)+(1−y)∗log2(1−y^)]