理解「交叉熵」损失函数(包含自信息信息熵KL散度交叉熵概念整理)

Posted 虾米小馄饨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解「交叉熵」损失函数(包含自信息信息熵KL散度交叉熵概念整理)相关的知识,希望对你有一定的参考价值。

引言

KL散度、交叉熵通常被用来衡量两个分布之间的差异程度,可以用于衡量模型的“损失”。

要深入理解KL散度和交叉熵,首先要从信息论中的基础概念入手。

自信息(self-information)

假如有两条消息,一条内容是“今天太阳从东边升起”,另一条内容是“今天有日食”。

显然后一条消息的发生概率低,消息内容也更有信息量。

信息论的目标之一就是用最少的编码来传递信息。概率越低的事件,对应更高的信息量,概率越高的事件,对应更低的信息量。

所以在信息论中,把发生随机事件 X = x X=x X=x时的信息量进行量化,定义为自信息1
I ( x ) = l o g ( 1 P ( x ) ) = − l o g ( P ( x ) ) I(x) = log(\\frac{1}{P(x)})=-log(P(x)) I(x)=log(P(x)1)=log(P(x))

如果log的底数时e, I ( x ) I(x) I(x)单位是奈特(nats);
如果底数是2,则 I ( x ) I(x) I(x)的单位是比特(bit)或香农(shannons)。

信息熵/香农熵(Entropy)

自信息反映的是单个随机事件的信息量,如果要反映整个随机变量分布的信息量,可以用数学期望来衡量这个分布的信息总量,这就是香农熵,又称为信息熵:
H ( x ) = E x ~ P [ I ( x ) ) ] = − E x ~ P [ l o g P ( x ) ] H(x)=\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} P}[I(x))]=-\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} P}[logP(x)] H(x)=Ex~P[I(x))]=Ex~P[logP(x)]

信息熵给出了对分布为P的符号进行编码时的最优平均编码长度2。单位与自信息相同。

KL散度(Kullback-Leibler(KL)divergence)

KL散度也叫KL距离相对熵(Relative Entropy),用来表达以分布Q来近似分布P时的信息损失量。

D K L ( P , Q ) = E x ~ P ( l o g P ( x ) − l o g Q ( x ) ) D_{KL}(P,Q)=\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} P}{(log {P(x)}-log{Q(x)})} DKL(P,Q)=Ex~P(logP(x)logQ(x))
在机器学习中,通常用KL散度来衡量训练数据上的经验分布 P ^ d a t a \\hat{P}_{data} P^data和模型分布 P m o d e l P_{model} Pmodel之间的差异1
D K L ( P ^ d a t a ∣ ∣ P m o d e l ) = E x ~ P ^ d a t a ( l o g P ^ d a t a ( x ) − l o g P m o d e l ( x ) ) D_{KL}(\\hat{P}_{data}||P_{model})=\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} {\\hat{P}_{data}}}{(log{\\hat{P}_{data}{(\\boldsymbol{x})}}-log{P_{model}{(\\boldsymbol{x})}})} DKL(P^dataPmodel)=Ex~P^data(logP^data(x)logPmodel(x))

交叉熵(cross-entropy)

交叉熵 H ( P , Q ) H(P,Q) H(P,Q)与KL散度相比,少一项 H ( P ) H(P) H(P)

H ( P , Q ) = − E x ~ P l o g Q ( x ) H(P,Q)=-\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} P}{log{Q(x)}} H(P,Q)=Ex~PlogQ(x)
在给定分布P的情况下,如果分布Q和P越接近,交叉熵越小;如果分布Q和P越远,交叉熵就越大。

由于训练数据上的经验分布 P ^ d a t a \\hat{P}_{data} P^data是不变的,所以最小化两个分布之间的差异性,就相当于最小化两个分布之间的交叉熵
H ( P ^ d a t a , P m o d e l ) = − E x ~ P ^ d a t a l o g P m o d e l ( x ) ) H(\\hat{P}_{data},P_{model})=-\\mathbb{E}_{\\bold{x} \\text{\\textasciitilde} {\\hat{P}_{data}}}{log{P_{model}{(\\boldsymbol{x})}})} H(P^data,Pmodel)=Ex~P^datalogPmodel(x))

分类任务中的交叉熵损失

交叉熵可以衡量模型输出和标签之间的距离,所以机器学习、深度学习都常用交叉熵作为损失函数。

以分类任务为例,标签是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T,而模型的输出概率是 [ 0.3 , 0.3 , 0.4 ] T [0.3, 0.3, 0.4]^T [0.3,0.3,0.4]T,则交叉熵损失为 − ( 0 × l o g ( 0.3 ) + 0 × l o g ( 0.3 ) + 1 × l o g ( 0.4 ) ) = − l o g ( 0.4 ) -(0×log(0.3)+0×log(0.3)+1×log(0.4)) = -log(0.4) (0×log(0.3)+0×log(0.3)+1×log(0.4))=log(0.4)2

为了减少模型输出和标签之间的距离,模型学习的准则就是找到使经验风险最小化的参数。

经验风险用训练集 D D D上的平均损失来表示:
R D ( θ ) = 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) = 1 N ∑ n = 1 N ( − l o g f y ( n ) ( x ( n ) ; θ ) ) R_D(θ) = \\frac{1}{N}\\sum_{\\mathclap{n=1}}^NL(y^{(n)},f(\\boldsymbol{x}^{(n)};\\theta))=\\frac{1}{N}\\sum_{\\mathclap{n=1}}^N(-log{f_{y^{(n)}}}(\\boldsymbol{x}^{(n)};\\theta)) RD(θ)=N1n=1NL(y(n),f(x(n);θ))=N1n=1N(logf学习笔记之信息量熵KL散度交叉熵的一些介绍

损失函数

交叉熵与KL散度

交叉熵损失函数修正Huber损失极大似然估计负对数似然似然与交叉熵KL散度

一文弄懂交叉熵损失

KL散度交叉熵与极大似然 的友谊