损失函数 | 使用场景 |
---|---|
二分类交叉熵损失函数 | 二分类 |
交叉熵损失函数 | 多分类 |
KL散度 | 回归 |
信息熵-百度百科通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。
不确定性函数 f f f 的定义应满足:
满足上述两个条件的 f f f 是对数函数: f ( P ) = log 1 P = − log P f(P) = \log \frac{1}{P} = - \log P f(P)=logP1=−logP并且必是对数函数,证明可参考 为什么香农要将信息熵公式要定义成 -Σp·log₂§ 或 -∫p·log₂§dp
在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。
若信源符号有n种取值: U 1 , … , U i , … , U n U_1,…,U_i,…,U_n U1,…,Ui,…,Un,对应概率为: P 1 , … , P i , … , P n P_1,…,P_i,…,P_n P1,…,Pi,…,Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性 − log P i -\log P_i −logPi 的统计平均值(E),可称为信息熵,即: H ( U ) = E ( − log p i ) = − ∑ i = 1 n p i log p i H(U) = E(- \log p_i) = - \sum_{i=1}^n p_i \log p_i H(U)=E(−logpi)=−i=1∑npilogpi式中对数底一般取2,也可取其他值。
交叉熵: 度量两个概率分布间的差异性信息
torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
ℓ ( x , y ) = { mean ( L ) , if reduction = ’mean’ sum ( L ) , if reduction = ’sum’ \ell(x, y)=\left\{\begin{array}{ll} \operatorname{mean}(L), & \text { if reduction }=\text { 'mean' } \\ \operatorname{sum}(L), & \text { if reduction }=\text { 'sum' } \end{array}\right. ℓ(x,y)={mean(L),sum(L), if reduction = ’mean’ if reduction = ’sum’
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
loss ( x , class ) = − log ( exp ( x [ class ] ) ∑ j exp ( x [ j ] ) ) = − x [ class ] + log ( ∑ j exp ( x [ j ] ) ) \operatorname{loss}(x, \text { class })=-\log \left(\frac{\exp (x[\text { class }])}{\sum_{j} \exp (x[j])}\right)=-x[\text { class }]+\log \left(\sum_{j} \exp (x[j])\right) loss(x, class )=−log(∑jexp(x[j])exp(x[ class ]))=−x[ class ]+log(j∑exp(x[j]))
torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)
D K L ( P , Q ) = E X ∼ P [ log P ( X ) Q ( X ) ] = E X ∼ P [ log P ( X ) − log Q ( X ) ] = ∑ i = 1 n P ( x i ) ( log P ( x i ) − log Q ( x i ) ) \begin{aligned} D_{\mathrm{KL}}(P, Q)=\mathrm{E}_{X \sim P}\left[\log \frac{P(X)}{Q(X)}\right] &=\mathrm{E}_{X \sim P}[\log P(X)-\log Q(X)] \\ &=\sum_{i=1}^{n} P\left(x_{i}\right)\left(\log P\left(x_{i}\right)-\log Q\left(x_{i}\right)\right) \end{aligned} DKL(P,Q)=EX∼P[logQ(X)P(X)]=EX∼P[logP(X)−logQ(X)]=i=1∑nP(xi)(logP(xi)−logQ(xi))
具体参数介绍以及使用示例参见深入浅出Pyotch_3.6损失函数
交叉熵可在神经网络(机器学习)中作为损失函数,p
表示真实标记的分布,q
则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p
与q
的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid
函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
参考:
知乎-能否简单说明 PyTorch 所支持的损失函数定义与使用场景(选4个)?
百度百科-交叉熵
知乎-为什么香农要将信息熵公式要定义成 -Σp·log₂§ 或 -∫p·log₂§dp?
百度文库-信息熵、交叉熵公式理解
损失函数详解
深入浅出Pyotch_3.6损失函数