交叉熵(Cross Entropy) 被普遍应用在深度学习的损失函数中

二值交叉熵函数(BinaryCrossEntropyLoss) 可用于二值分类任务中的损失函数

SoftmaxCrossEntropyLoss, 采用 softmax 来输出每一类的概率值, 再将 softmax 输出结果, 送入交叉熵损失函数.

1. 二值交叉熵(BinaryCrossEntropy)

假设训练数据 ${ D = \lbrace (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) \rbrace }$ ,

其中,

${ x \in R^n }$ - 训练样本, 如图片;

${ y \in \lbrace 0, 1\rbrace }$ - 标签labels, 只有 0 和 1, 二值分类问题.

假设已经有训练模型 ${ f(x, \theta) }$, 在给定 ${ x }$ 时, 输出 ${ y }$ 的概率. ${ f(x, \theta) }$ 是深度 CNN 模型或传统机器学习模型, ${ \theta }$ 是模型参数.

基于 最大似然(Maximum Likelihood) 思想, 其目的是为了寻找能够最大化 ${ P(D | \theta) }$ 的参数 ${ \theta }$.

假设数据服从伯努利分布(Bernoulli distribution), 且 ${ \lbrace (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) \rbrace }$ 相互独立, 则有:

${ P(D | \theta) = \prod _{i=1}^{n} f(x_i, \theta)^{y_i} \cdot (1- f(x_i, \theta))^{(1- y_i)} }$ (1)

取 log,

${ log P(D | \theta) = log ( \prod _{i=1}^n f(x_i, \theta)^{y_i} \cdot (1- f(x_i, \theta))^{(1- y_i)} ) }$ (2)

简化,

${ log P(D | \theta) = \sum_{i=1}^n y_i logf(x_i, \theta) + (1- y_i)log(1- f(x_i, \theta)) }$ (3)

相比于直接最大化等式 (1) 进行优化, 一般采用对其 log 等式 (3) 的负值进行最小化优化:

${- log(P(D | \theta)) =- \sum_{i=1}^n y_i logf(x_i, \theta) + (1- y_i)log(1- f(x_i, \theta)) }$ (4)

因此, 可以得到二值交叉熵函数 , 如下:

${- \sum_{i=1}^n y_i logf(x_i, \theta) + (1- y_i)log(1- f(x_i, \theta)) }$ (5)

二值交叉熵函数可用于二值分类任务中的损失函数.

CNN 中, 输出层可以采用 sigmoid 作为激活函数, 并将 sigmoid 输出结果, 送入二值交叉熵损失函数.

2. 交叉熵(CrossEntropy)

根据二分类的二值交叉熵,可以延展到多分类 multi-classification 任务.

假设标签labels ${ y \in \lbrace 0, 1, ..., k\rbrace }$, ${ k }$ 个类别.

假设 ${ k }$ 个类别中, 每个类别包含的样本数分别为 ${ n_1, n_2, ..., n_k }$, 且 ${ \sum_{i=1}^{k} n_i = n }$.

同样基于 最大似然(Maximum Likelihood) 思想,

假设数据服从多项式分布(Multinomial distribution), 且 ${ \lbrace (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) \rbrace }$ 相互独立, 则有:

${ P(D | \theta) = \frac{n!}{n_1! \cdot n_2! \cdot ... \cdot n_k! } \prod _{i=1}^{n} f(x_i, \theta)^{y_i} }$ (6)

取 log,

${ P(D | \theta) = log n!-logn_1! \cdot n_2! \cdot ... \cdot n_k! + log \prod_{i=1}^{n} f(x_i, \theta)^{y_i} }$ (7)

简化,

${ P(D | \theta) = log n!-logn_1! \cdot n_2! \cdot ... \cdot n_k! + \sum_{i=1}^{n} y_i logf(x_i, \theta) }$ (8)

由于 ${ log n!- logn_1! \cdot n_2! \cdot ... \cdot n_k! }$ 是与模型参数 ${ \theta }$ 无关的项, 作为常数项, 可以忽略, 则有:

${ P(D | \theta) = \sum_{i=1}^{n} y_i logf(x_i, \theta) }$ (9)

同样地, 最小化等式 (8) 的负值, 进行优化:

${- P(D | \theta) =- \sum_{i=1}^{n} y_i logf(x_i, \theta) }$ (10)

因此,可以得到交叉熵函数, 如下:

${- \sum_{i=1}^{n} y_i logf(x_i, \theta) }$ (11)

交叉熵函数可用于多分类multi-classification任务中的损失函数.

CNN 中, 输出层可以采用 softmax 来输出每一类的概率值, 再将 softmax 输出结果, 送入交叉熵损失函数.

Categorical CrossEntropy 多分类的对数损失函数

3. 信息论&熵&交叉熵

信息论中, 信号所包含的信息量多少, 可理解为:

  • 如果发生可能性很高的事情发生了, 则包含的信息量较少, 价值不大;</p>
  • 如果发生的可能性很低的事情发生了, 则包含的信息量较多, 价值更大.</p>

自信息定义为:

${ I(x) = -log(P(x)) }$

则, ${ P(x) }$ 值较大, 则 ${ I(x) }$ 值较小;反之, ${ P(x) }$ 值较小, 则 ${ I(x) }$ 值较大. 很好的反映了 ${ P(x) }$ 的信息量.

是信息量的期望值, 度量了随机变量的确定性.

${ H(x) = -E(P(x)) * log(P(x)) }$

以二分类为例, label X 值只能为 0 或 1, 则其熵为:

${ H(x) = -[P(X=0) * log(P(X=0)) + (1- P(X=1))* log(1- P(X=1))] }$

交叉熵 是对于两个分布的度量,

${ H(P, Q) = -E(P(x)) * log(Q(x)) }$

其中, ${ P(x) }$ 和 ${ Q(x) }$ 表示两个分布, 如模型预测分布和真实标签分布.

当两个分布相同, 差别较小时, 即 ${ P(x) }$ 的位置, ${ Q(x) }$ 发生的概率非常确定为1, 则 ${ -log(Q(x)) = -log(1) = 0 }$, 二者的交叉熵为 ${ H(P, Q) = 0 }$.

当两个分布很不相同, 差别较大时, 即${ P(x) }$ 的位置, ${ Q(x) }$ 发生的概率非常小, 则 ${ -log(Q(x)) }$ 值会较大, 随之二者的交叉熵也较大.

相对熵, 也叫 KL 散度, 用于分析两个分布的差异程度. 也是交叉熵可以作为 loss 的原因.

将交叉熵减去训练样本的熵, 有:

${ H(P, Q)- H(P) =-E(P(x)) * log(Q(x))- (-E(P(x)) * log(P(x))) }$

${ H(P, Q)- H(P) =-E(P(x)) * log(Q(x)) + E(P(x)) * log(P(x)) }$

${ H(P, Q)- H(P) =-E(P(x)) (log(Q(x))- log(P(x)) ) }$

${ H(P, Q)- H(P) =-E(P(x)) log \frac{Q(x)}{P(x)} }$

其中, 训练样本的熵 ${ P(x) }$ 是固定的, 因为样本是固定的.

Related

[1] - CaffeLoss - SigmoidCrossEntropyLoss 推导与Python实现

[2] - CaffeLoss - SigmoidCrossEntropyLossLayer

[3] - Caffe源码 - SoftmaxWithLossLayer

[4] - CaffeLoss - LossLayers简述

[5] -CaffeLoss - HingelossLayer

Last modification:June 13th, 2022 at 03:12 pm