1. 信息熵

信息熵就是信息的不确定程度,信息熵越小,信息越确定
=xx信息熵=\sum 事件x发生的概率*验证事件x需要的信息量

事件发生的概率越低,需要越多的信息去验证,所以验证真假需要的信息量和事件发生的概率成反比,假设信息量为I(x)I(x)
I(x)=logp(x)I(x) = -log\, p(x)

其中负号是用来保证信息量是正数或者零,p(x)p(x)是事件xx发生的概率,I(x)I(x) 也被称为随机变量 $x $的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量

信息熵即所有信息量的期望
H(X)=xp(x)log(p(x))=i=1np(xi)log(p(xi))H(X)=-\sum_{x} p(x) \log (p(x))=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)

其中 nn 为事件的所有可能性

2. 相对熵(KL散度)

相对熵又称KL散度,如果对于同一个随机变量xx有两个单独的概率分布p(x)p(x)q(x)q(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)

DKLD_{KL}越小,表示 p(x)p(x)q(x)q(x) 的分布越近

3. 交叉熵

交叉熵公式
H(p,q)=i=1np(xi)log(q(xi))H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)

相对熵的推导:

DKL(pq)=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=H(X)+[i=1np(xi)log(q(xi))]=[i=1np(xi)log(q(xi))]H(X)\begin{aligned} & D_{K L}(p \| q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) \\ =&-H(X)+\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)\right] \\ =&\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)\right]-H(X) \end{aligned}

所以:
                    \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,相对熵 = 交叉熵 - 信息熵

在机器学习中,往往用 p(x)p(x) 用来描述真实分布q(x)q(x) 用来描述模型预测的分布;计算损失,理应使用相对熵来计算概率分布的差异,然而由相对熵推导出的结果看,相对熵 = 交叉熵 - 信息熵,而信息熵描述的是消除 pp (即真实分布) 的不确定性所需信息量的度量,所以其值应该是固定的,那么,优化减小相对熵也就是优化交叉熵,所以在机器学习中使用交叉熵就可以了

小结
相对熵描述的是两个概率分布分布之间的差异,所以本应该是使用相对熵来计算真实分布与预测分布之间的差异。但是,相对熵 = 交叉熵 - 信息熵,而信息熵描述的是消除 pp (即真实分布) 的不确定性所需信息量,是个固定值,因此优化相对熵可以简化为优化交叉熵,故机器学习中使用交叉熵作为损失函数

4.分类问题中为什么使用交叉熵而不适用均方误差

如下,为前向传播中的线性部分和非线性部分:
z=wx+by^=a=σ(z)\begin{aligned} z &=w x+b \\ \hat{y} &=a=\sigma(z) \end{aligned}

均方误差损失函数为:
L1(y,a)=12(ya)2L_{1}(y, a)=\frac{1}{2}(y-a)^{2}

交叉熵损失函数为:
L2(y,a)=(ylog(a)+(1y)log(1a))L_{2}(y, a)=-(y \log (a)+(1-y) \log (1-a))

使用梯度下降来更新自变量,使得损失函数最小
w=wαL(y,a)wb=bαL(y,a)w\begin{array}{l} w=w-\alpha \frac{\partial L(y, a)}{\partial w} \\ \\ b=b-\alpha \frac{\partial L(y, a)}{\partial w} \end{array}

均方差对参数的偏导:
L1(y,a)w=yσ(z)σ(z)xL1(y,a)b=yσ(z)σ(z)\begin{array}{l} \frac{\partial L_{1}(y, a)}{\partial w}=-|y-\sigma(z)| \sigma^{\prime}(z) x \\ \\ \frac{\partial L_{1}(y, a)}{\partial b}=-|y-\sigma(z)| \sigma^{\prime}(z) \end{array}

交叉熵对参数的偏导:
L2(y,a)w=x[σ(z)y]L2(y,a)w=σ(z)y\begin{array}{l} \frac{\partial L_{2}(y, a)}{\partial w}=x[\sigma(z)-y] \\ \\ \frac{\partial L_{2}(y, a)}{\partial w}=\sigma(z)-y \end{array}

此处推导时注意:令f(x)f(x)是sigmoid函数,则f(x)=f(x)(1f(x))f^{\prime}(x) = f(x)(1-f(x))

从上可以看出均方差对参数的偏导的结果都乘了sigmoid的导数σ′(z),而sigmoid导数在其变量值很大或很小时趋近于0,所以偏导数很有可能接近于0;偏导很小时,参数更新速度会变得很慢,而当偏导接近于0时,参数几乎就不更新了

而交叉熵对参数的偏导就没有sigmoid导数,所以不存在这个问题。这就是选择交叉熵而不选择均方差的原因

分类问题为什么要用交叉熵

图1. sigmoid函数及其导数

如上图,蓝色为sigmoid函数,红色为其导数图像

小结
使用交叉熵作为分类器的损失函数而不用均方误差的原因是:均方误差损失函数对自变量求偏导的结果带有sigmoid导数因子项,而当自变量值较大时,sigmoid导数值会趋向0,这样整个梯度会变得很小,再用梯度下降法更新自变量时,迭代速度会很慢,导致迟迟不能达到最优值;而交叉熵函数求导后不带sigmoid函数导数项,梯度下降时更新很快

reference

为什么用交叉熵做损失函数

相关文章:

  • 2022-12-23
  • 2021-10-05
  • 2022-12-23
  • 2021-11-28
  • 2022-12-23
  • 2021-05-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-17
  • 2021-09-29
  • 2021-08-08
  • 2021-06-12
  • 2021-08-11
  • 2021-10-07
相关资源
相似解决方案