softmax函数是用于多分类问题的激活函数,给定几种类别,通过softmax运算可以得出某一样本输入被划分到各个类别的概率分布。
比如我们给定三个类别:“猫”、“狗”、“猪”,线性层的输出o经过softmax运算得到属于三个类的概率为0.1、0.7、0.2,那么我们预测的类别为概率最大的一类,即“狗”。
softmax运算公式如下:
y j ^ = exp ( o j ) ∑ k exp ( o k ) \widehat{y_{j}}=\frac{\exp\left(o_{j}\right)}{\sum_{k}\exp\left(o_{k}\right)} yj =∑kexp(ok)exp(oj)
该运算通过指数函数保证了概率的非负性,再除以所有指数函数计算后之和,保证了各预测结果的概率和为1。
若有三个类别“猫”、“狗”、“猪”,划分为“猪”这一类的真实概率分布为0、0、1 ,一个样本数据经过线性层预测值为-1、2、3 ,那么经过softmax运算得出预测值的概率分布,计算如下:
exp ( − 1 ) exp ( − 1 ) + exp ( 2 ) + exp ( 3 ) ≈ 0.01 \frac{\exp \left(-1 \right)}{\exp \left(-1 \right)+\exp \left(2 \right)+\exp \left(3 \right)} \approx0.01 exp(−1)+exp(2)+exp(3)exp(−1)≈0.01
exp ( 2 ) exp ( − 1 ) + exp ( 2 ) + exp ( 3 ) ≈ 0.27 \frac{\exp \left(2\right)}{\exp \left(-1 \right)+\exp \left(2 \right)+\exp \left(3 \right)} \approx0.27 exp(−1)+exp(2)+exp(3)exp(2)≈0.27
exp ( 3 ) exp ( − 1 ) + exp ( 2 ) + exp ( 3 ) ≈ 0.72 \frac{\exp \left(3\right)}{\exp \left(-1 \right)+\exp \left(2 \right)+\exp \left(3 \right)} \approx0.72 exp(−1)+exp(2)+exp(3)exp(3)≈0.72
所以经过softmax运算可的出输入数据划分为“猫”、“狗”、“猪”的概率分布为0.01、0.27、0.72 。
交叉熵损失函数是分类问题中常用的损失函数,常与softmax函数搭配使用。主要用于度量两个概率分布间的差异性。
下面通过介绍信息论的基础来理解交叉熵损失。
“预测明天太阳从东边升起”,这个事件发生是必然的,没有任何不确定性,我们不会感到惊讶,那么理解为没有提供信息量。
“预测明天会下雨”,这个事件发生是不确定的,那就提供了一定的信息量。若该事件发生的概率较小,而事件的确发生了,那么我们的惊讶程度会较大,则信息量就大;若该事件发生 的概率较大,那么事件发生了,我们感到的惊讶程度就没有那么大,信息量就小。
从上面两个例子可以看出,信息量可以看作是量化这种惊讶程度,信息量的大小和事件发生的概率成反比。事件发生的概率越低,信息量越大;事件发生的概率越高,信息量越低。从而引出信息量I(X)表示:
I ( x ) = − log ( P ( x ) ) I(x)=-\log (P(x)) I(x)=−log(P(x))
其中P(X)表示事件X发生的概率。
信息熵的表示:
H ( X ) = − ∑ i = 1 n p ( x i ) log ( p ( x i ) ) H(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right) H(X)=−i=1∑np(xi)log(p(xi))
信息熵相当于信息量的期望,是事件发生的所有可能结果的信息量的期望。信息熵越大,说明事件越具有不稳定因素,越具有不确定性。
相对熵又称为Kullback-Leibler散度(KL散度)或信息散度(information divergence)。用于衡量两个概率分布之间的差异。两个概率分布的信息熵之差即为相对熵。
p(x)为样本真实的概率分布,q(x)为样本的预测概率分布。
p(x)分布的信息熵为:
H p p ( X ) = − ∑ i = 1 n p ( x i ) log ( p ( x i ) ) H_{p p}(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right) Hpp(X)=−i=1∑np(xi)log(p(xi))
q(x)分布的信息熵为:
H p q ( X ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) H_{pq}\left(X\right)=-\sum_{i=1}^{n}p\left(x_{i}\right)\log \left (q\left (x_{i}\right )\right ) Hpq(X)=−i=1∑np(xi)log(q(xi))
相对熵表示为:
D K L ( p ∥ q ) = H p q ( X ) − H p p ( X ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) − [ − ∑ i = 1 n p ( x i ) log ( p ( x i ) ) ] D_{K L}(p \| q)=H_{p q}(X)-H_{p p}(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)-\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)\right] DKL(p∥q)=Hpq(X)−Hpp(X)=−i=1∑np(xi)log(q(xi))−[−i=1∑np(xi)log(p(xi))]
可得相对熵表示为:
D K L ( p ∥ q ) = ∑ i = 1 n p ( x i ) log ( p ( x i ) q ( x i ) ) 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) DKL(p∥q)=i=1∑np(xi)log(q(xi)p(xi))
相对熵越小,表示p(x)和q(x)的分布更加接近。
由相对熵公式:
D K L ( p ∥ q ) = H p q ( X ) − H p p ( X ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) − H p p ( X ) D_{K L}(p \| q)=H_{p q}(X)-H_{p p}(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)-H_{p p}(X) DKL(p∥q)=Hpq(X)−Hpp(X)=−i=1∑np(xi)log(q(xi))−Hpp(X)
可知公式p(x)的信息熵是一个常量,而相对熵表示两个概率分布的差异,所以我们希望相对熵的值越小越好,那么最小化公式就可以使得相对熵达到最小。该公式就是交叉熵。
现在就知道相对熵其实就等于交叉熵减去信息熵。相对熵=交叉熵-信息熵
交叉熵的函数表示为:
H ( p , q ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) H_{\left(p,q\right)}=-\sum_{i=1}^{n}p\left(x_{i}\right)\log\left(q\left(x_{i}\right)\right) H(p,q)=−i=1∑np(xi)log(q(xi))
上式表示单个样本的交叉熵损失。当要计算一个小批量m个样本数据的交叉熵损失时,计算形式如下:
L o s s = − 1 m ∑ i = 1 m ∑ j = 1 n p ( x i j ) log ( q ( x i j ) ) Loss=-\frac{1}{m}\sum_{i=1}^{m}\sum_{j=1}^{n}p\left(x_{ij}\right)\log\left(q\left(x_{ij}\right)\right) Loss=−m1i=1∑mj=1∑np(xij)log(q(xij))
当交叉熵损失函数应用于二分类函数时,其表示形式如下:
L = − [ y log y ^ + ( 1 − y ) log ( 1 − y ^ ) ] L=-[y \log \widehat{y}+(1-y) \log (1-\widehat{y})] L=−[ylogy +(1−y)log(1−y )]
接着上个案例,得出预测概率分布为0.01、0.27、0.72,而真实概率分布为0、0、1 ,根据公式计算交叉熵损失:
L o s s = − [ 0 × log ( 0.01 ) + 0 × log ( 0.27 ) + 1 × log ( 0.72 ) ] ≈ 0.14 Loss=-[0\times \log \left(0.01\right)+0\times \log \left(0.27\right)+1\times \log \left(0.72\right)]\approx 0.14 Loss=−[0×log(0.01)+0×log(0.27)+1×log(0.72)]≈0.14
在处理多分类问题时,常使用softmax函数搭配交叉熵损失函数。线性层的输出结果经过softmax运算得到该输出样本划分到每类的概率,且各类概率之和等于1。交叉熵损失用于衡量同一个输入样本数据的真实概率分布与预测概率分布这两个概率分布之间的差异程度,交叉熵损失值越小 ,模型预测的效果就越好。
[1]https://blog.csdn.net/weixin_45665708/article/details/111299919
[2]https://blog.csdn.net/zhangt766/article/details/125454819