softmax损失函数-交叉熵

softmax常用来进行多分类,假如有一个4x1向量z^{[L]}=[5,2,-1,3],softmax的计算过程如下所示

输入向量z^{[L]}和中间向量t
softmax输出向量,结果的所有元素和为1


下式中y是标签,\hat{y} 是输出预测值。假设y=[0,1,0,0],\hat{y} =[0.3,0.4,0.1,0.2]

单个训练样本损失函数L(\hat{y} y)  =  —\sum_{j = 1}^4y_{j} \log_~\hat{y_j}

此损失函数本质上是交叉熵



酷文章:交叉熵


KL散度(相对熵)

说交叉熵之前,先引出KL散度,KL散度用于衡量对于同一个随机变量x的两个分布p(x)和q(x)之间的差异。 KL散度的值越小表示两个分布越接近。

1、对于离散事件我们可以定义事件A和B的差别为(2.1): 

公式(2.1)

2、对于连续事件,那么我们只是把求和改为求积分而已(2.2)。

公式(2.2)

从上两式中可以看出:1、如果P_A=P_B,那么AB的Kl散度等于0

                                    2、KL散度不具有对称性,即D_{KL}(A||B)\neq D_{KL}(B||A)


交叉熵

那既然我们默认了用KL散度来计算两个分布间的不同,那还要交叉熵做什么?

事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分(公式2.1):

    A与B的KL散度= -A的熵 + A和B的交叉熵

机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的

 A和B的交叉熵 =- A的熵+A与B的KL散度 
交叉熵公式
熵公式

此处最重要的观察是,如果 S(A)是一个常量,那么 D_{KL}(A||B)=H(A,B)也就是说KL散度和交叉熵在特定条件下等价。

在softmax学习时,我们把真实分布当做A,S(A)就是一个常量。此时最小化交叉熵就是最小化KL散度。



通过学习使非真实分布\hat{y_j}更接近真实分布{y_j},过程中交叉熵变小,所以最小化损失函数使预测的非真实分布更接近真实分布(标签)。

根据上面的例子,y_{j} j\neq 2时,式子值为0,j=2时,y_{j} =1,综上L(\hat{y} y)=-\log_~\hat{y_j} ,损失函数通过学习变小,\hat{y_j} 则变大,又softmax输出的所有概率和为1,所以理想状态下\hat{y_j} 会趋近于1


下式的\omega ^{(i)}b^{(i)}是softmax需要学习的权重和偏移。

训练集的损失函数J\omega ^{(i)}b^{(i)},... )= \frac{1}{m} \sum_{1}^mL(\hat{y_j} ^{(i)}y^{(i)})

整个训练集损失就是把训练算法对所有训练样本的预测都加起来,再除以样本数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。