softmax常用来进行多分类,假如有一个4x1向量=[5,2,-1,3],softmax的计算过程如下所示
下式中是标签,
是输出预测值。假设
=[0,1,0,0],
=[0.3,0.4,0.1,0.2]
单个训练样本损失函数
(
,
) = —
此损失函数本质上是交叉熵
酷文章:交叉熵
KL散度(相对熵)
说交叉熵之前,先引出KL散度,KL散度用于衡量对于同一个随机变量x的两个分布p(x)和q(x)之间的差异。 KL散度的值越小表示两个分布越接近。
1、对于离散事件我们可以定义事件A和B的差别为(2.1):
2、对于连续事件,那么我们只是把求和改为求积分而已(2.2)。
从上两式中可以看出:1、如果
,那么AB的Kl散度等于0
2、KL散度不具有对称性,即
交叉熵
那既然我们默认了用KL散度来计算两个分布间的不同,那还要交叉熵做什么?
事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分(公式2.1):
A与B的KL散度= -A的熵 + A和B的交叉熵
机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的
此处最重要的观察是,如果
是一个常量,那么
也就是说KL散度和交叉熵在特定条件下等价。
在softmax学习时,我们把真实分布当做A,S(A)就是一个常量。此时最小化交叉熵就是最小化KL散度。
通过学习使非真实分布
更接近真实分布
,过程中交叉熵变小,所以最小化损失函数使预测的非真实分布更接近真实分布(标签)。
根据上面的例子,在
2时,式子值为0,
=2时,
=1,综上L(
,
)=
,损失函数通过学习变小,
则变大,又softmax输出的所有概率和为1,所以理想状态下
会趋近于1
下式的,
是softmax需要学习的权重和偏移。
训练集的损失函数
(
,
,... )=
(
,
)
整个训练集损失就是把训练算法对所有训练样本的预测都加起来,再除以样本数。