损失函数
2021-11-20

 

交叉熵损失函数

二分类

以逻辑回归为例,Sigmoid函数的输出表示当前样本被预测为1的概率为:

(1)y^=P(y=1x)

因此,被预测为0的概率为:

(2)1y^=P(y=0x)

将上述公式整合,如下:

(3)P(yx)=y^y(1y^)1y

期望:概率P(yx)越大越好。

为了容易计算,考虑的log运算不影响函数的单调性,对概率P(yx)取对数得:

(4)logP(yx)=log(y^y(1y^)1y)=ylogy^+(1y)log(1y^)

期望logP(yx)越大越好,换言之,logP(yx)越小越好。由此,定义损失函数如下:

(5)Loss=logP(yx)=[ylogy^+(1y)log(1y^)]

以上为单个样本的损失,如果是多个样本叠加即可,损失函数为:

(6)Loss={i=1Ny(i)logy^(i)+(1y(i))log(1y^(i))}

多分类

  1. 信息量

    香农认为:信息是用来消除不确定性的东西。因此,衡量信息量的大小,就是看这个信息消除不确定性的程度。

    “太阳从东方升起”:因为太阳肯定从东方升起,因此没有减少不确定性,信息量为0。

    “张三把狗咬了”:因为张三咬狗这件事存在很大不确定性,而这句话消除了不确定性,因此,信息量很大。

    设某件事发生的概率为P(x),其信息量定义为:

    (7)I(x)=logP(x)
  2. 信息熵

    信息熵也被称为熵,用来表示所有信息量的期望。

    X为离散型随机变量,则其信息熵为:

    (8)H(X)=i=1nP(xi)logP(xi)(X=x1,x2,,xn)
  3. 相对熵(KL散度)

    如果对同一个随机变量X有两个单独的概率分布P(x)Q(x),则可以使用KL散度来衡量两个概率之间的差异。

    (9)DKL(pq)=i=1np(xi)log(p(xi)q(xi))

    在机器学习中,通常使用P(x)表示样本的真实分布,Q(x)表示模型的预测分布。例如,在三分类任务中,猫狗马分类,使用x=(x1,x2,x3)分别表示猫狗马,使用one-hot表示,如果一张猫的图片真实分布为P(x)=[1,0,0],预测分布Q(x)=[0.7,0.2,0.1],计算KL散度为:

    (10)DKL(pq)=i=1np(xi)log(p(xi)q(xi))=p(x1)log(p(x1)q(x1))+p(x2)log(p(x2)q(x2))+p(x3)log(p(x3)q(x3))=1log(10.7)=0.36

    KL散度越小,表示P(x)Q(x)的分布越接近,可以通过反复训练Q(x),使得Q(x)的分布接近P(x)

     

    KL散度不对称,为了解决该问题,对KL散度进行变体可得到 JL散度:

    (11)DJS(pq)==0.5[DKL(pp+q2)+DKL(qp+q2)]=0.5[ip(xi)log2p(xi)p(xi)+q(xi)+iq(xi)log2q(xi)p(xi)+q(xi)]
  4. 交叉熵

    将KL散度公式进行拆解:

    (12)DKL(pq)=i=1np(xi)log(p(xi)q(xi))=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=H(p(x))+[i=1np(xi)log(q(xi))]=[i=1np(xi)log(q(xi))]H(p(x))

    前者表示为交叉熵,后者为信息熵。

    因此,KL散度 = 交叉熵 - 信息熵

    交叉熵公式为:

    (13)H(p,q)=i=1np(xi)log(q(xi))

    在机器学习中,输入数据的标签通常已经确定,那么真实概率分布P(x)也就确定了,因此信息熵为常量。由于KL散度的值表示真实概率分布P(x)与预测概率分布Q(x)之间的差异,KL散度值越小表示预测结果越好,所以需要最小化KL散度。而KL散度等于交叉熵减去一个常量,且交叉熵公式相对更简单,因此最小化KL散度等价于最小化交叉熵。所以,在机器学习中,经常使用交叉熵损失计算loss

    3中的猫狗马三分类任务,交叉熵Loss为:

     loss =(0log(0.2)+1log(0.7)+0log(0.1))=0.36

    假设有m个样本,类别数为n,那么交叉熵损失函数为:

    (14)Loss=1mj=1mi=1np(xji)log(q(xji))

    在分类问题中,交叉熵损失函数通常与softmax搭配。softmax将预测值映射为概率,使多个分类的预测值和为1,类别的真实值使用one-hot表示,然后使用交叉熵计算损失值。