经典损失函数——交叉熵损失函数(cross-entropy loss function)

为了更好的理解交叉熵的意义,先介绍一下相对熵的概念

1、相对熵

  • 基本概念
    相对熵又称为KL散度(Kullback–Leibler divergence),用来描述两个概率分布的差异性。假设有对同一变量xxq(x)q(x)p(x)p(x)两个概率分布,那么两者之间的相对熵可由以下定义:
    DKL(pq)=i=1Np(xi)log(p(xi)q(xi)) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)
    对于实际应用,p(x)p(x)是目标分布,q(x)q(x)是预测的匹配分布。

  • 理解相对熵(参考
    因为p(x)p(x)是目标分布,所以用pp来表示该事件是最好的。但是现在用了q(x)q(x),多了一些不确定性因素,这个增加的信息量就是相对熵。

  • 性质
    相对熵有一个性质:两个分布差异越大,KL散度越大。实际应用需要两个分布尽可能的相等,于是就需要KL散度尽可能的小

  • 相对熵的非负性
    根据Jensen不等式,当ff是一个凸函数时,满足以下函数:
    f(θ1x1++θnxn)θ1f(x1)++θnf(xn),0θi1,θ1++θn=1 f\left(\theta_{1} x_{1}+\ldots+\theta_{n} x_{n}\right) \leq \theta_{1} f\left(x_{1}\right)+\ldots+\theta_{n} f\left(x_{n}\right) ,0 \leq \theta_{i} \leq 1, \theta_{1}+\ldots+\theta_{n}=1
    对照相对熵的表达式,这里做几个映射关系:

Jensen不等式 相对熵
θi\theta_{i} p(xi)p(x_i)
xix_{i} q(xi)p(xi)\frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}
f()f() log()-log()

根据上表中的关系得到下式:
DKL(pq)=i=1Np(xi)log(p(xi)q(xi))=i=1Np(xi)log(q(xi)p(xi))log(i=1Np(xi)q(xi)p(xi))=0 D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)=\sum_{i=1}^{N} p\left(x_{i}\right) \cdot-\log \left(\frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}\right) \geq -\log \left(\sum_{i=1}^{N} p\left(x_{i}\right) \cdot \frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}\right)=0
显然,只有当q(x)q(x)=p(x)p(x)时,才有最小值。

  • 与交叉熵的关系
    DKL(pq)=i=1Np(xi)log(p(xi)q(xi))=i=1Np(xi)logp(xi)i=1Np(xi)logq(xi)=H(p)+H(p,q) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)=\sum_{i=1}^{N} p\left(x_{i}\right) \log p\left(x_{i}\right)-\sum_{i=1}^{N} p\left(x_{i}\right) \log q\left(x_{i}\right)=-H(p)+H(p, q)
    上式中的H(p,q)H(p, q),而当一个目标事件确定后,H(p)H(p)便为一个常数,所以最小化相对熵的问题化简成了计算H(p,q)H(p, q)的最小值。

2、交叉熵

  • 简单概念
    交叉熵是信息熵论中的概念,它原本是用来估算平均编码长度的。在深度学习中,可以看作通过概率分布q(x)q(x)表示概率分布p(x)p(x)的困难程度。其表达式为:
    H(p,q)=i=1np(xi)log1q(xi)=i=1np(xi)logq(xi) H(p, q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \frac{1}{q\left(x_{i}\right)}=-\sum_{i=1}^{n} p\left(x_{i}\right) \log {q\left(x_{i}\right)}
  • 简单性质
    交叉熵刻画的是两个概率分布的距离,也就是说交叉熵值越小(相对熵的值越小),两个概率分布越接近(该说法需要证明)。
    下面将给出两个具体样例来直观地说明通过交叉熵可以判断预测答案和真实答案之间的距离。假设有个三分类问题,某个正确答案和一个经过softmaxsoftmax回归后的预测答案如下:
x1x_1 x2x_2 x3x_3
p(xi)p(x_i) 1 0 0
q1(xi)q_1(x_i) 0.5 0.4 0.1
q2(xi)q_2(x_i) 0.8 0.1 0.1

那么p(x)p(x)q1(x)q_1(x)的交叉熵为:
H((1,0,0),(0.5,0.4,0.1))=(1×log0.5+0×log0.4+0×log0.1)0.3 \mathrm{H}((1,0,0),(0.5,0.4,0.1))=-(1 \times \log 0.5+0 \times \log 0.4+0 \times \log 0.1) \approx 0.3
p(x)p(x)q2(x)q_2(x)的交叉熵为:
H((1,0,0),(0.8,0.1,0.1))=(1×log0.8+0×log0.1+0×log0.1)0.1 \mathrm{H}((1,0,0),(0.8,0.1,0.1))=-(1 \times \log 0.8+0 \times \log 0.1+0 \times \log 0.1) \approx 0.1
从直观上可以看到第二个预测的结果要优于第一个,并且通过计算交叉熵,结果也是一致的。

  • TensorFlow中实现交叉熵
cross_entropy = -tf.reduce_mean( y_ * tf.log(tf.clip.by_value(y, 1e-10, 1.0)))

其中y_代表正确结果,y代表预测结果。

3、Logistic回归风险函数与交叉熵

在Logistic回归任务中,常见的输出定义为:
y^=σ(wTx+b), where σ(z)=11+ez \widehat{y}=\sigma \left( {{w}^{T}}x+b \right),\text{ }where\text{ }\sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}}
定义y=1y=1的例子的后验概率为
P(y=1x)=y^=σ(wTx+b) P(y=1|x)=\widehat{y}=\sigma \left( {{w}^{T}}x+b \right)
以及y=0y=0的例子的后验概率为
P(y=0x)=1y^=1σ(wTx+b) P(y=0|x)=1-\widehat{y}=1-\sigma \left( {{w}^{T}}x+b \right)
那么可以定义后验概率P(yx)P(y|x)如下:
P(yx)=y^y(1y^)(1y) P\left( y|x \right)={{\widehat{y}}^{y}}{{\left( 1-\widehat{y} \right)}^{\left( 1-y \right)}}
回归的目标应为该后验概率越大越好,根据最大似然估计,在所有样本满足独立同分布的情况下,可以确定一组参数使得上述概率最大。

因为loglog函数是单调递增函数,所以求上述函数的最大化,等价于求log(P(yx))log(P(y|x))的最大化。

对上述概率对数化可得:
log(P(yx))=ylog(y^)+(1y)log(1y^)\log \left( P\left( y|x \right) \right)=y\log \left( \widehat{y} \right)+\left( 1-y \right)\log \left( 1-\widehat{y} \right)
即逻辑回归的目标是最大化上述函数。对于代价函数来说,一般都是最小化函数,所以可以增加一个负号。那么,对于mm个样本来说,代价函数即为交叉熵函数:
J(w,b)=i=1m(ylogy^+(1y)log(1y^)) J\left( w,b \right)=-\sum\limits_{i=1}^{m}{\left( y\log \widehat{y}+\left( 1-y \right)\log \left( 1-\widehat{y} \right) \right)}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章