softmax损失函数-交叉熵
softmax常用来进行多分类,假如有一个4x1向量=[5,2,-1,3],softmax的计算过程如下所示
文章图片
输入向量 和中间向量t
文章图片
softmax输出向量,结果的所有元素和为1
下式中是标签,是输出预测值。假设=[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.1)
2、对于连续事件,那么我们只是把求和改为求积分而已(2.2)。
文章图片
公式(2.2)
从上两式中可以看出:1、如果,那么AB的Kl散度等于0
2、KL散度不具有对称性,即
交叉熵
那既然我们默认了用KL散度来计算两个分布间的不同,那还要交叉熵做什么?
事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分(公式2.1):
A与B的KL散度= -A的熵 + A和B的交叉熵
机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的
文章图片
A和B的交叉熵 =- A的熵+A与B的KL散度
文章图片
交叉熵公式
文章图片
熵公式
此处最重要的观察是,如果 是一个常量,那么 也就是说KL散度和交叉熵在特定条件下等价。
【softmax损失函数-交叉熵】在softmax学习时,我们把真实分布当做A,S(A)就是一个常量。此时最小化交叉熵就是最小化KL散度。
通过学习使非真实分布更接近真实分布,过程中交叉熵变小,所以最小化损失函数使预测的非真实分布更接近真实分布(标签)。根据上面的例子,在2时,式子值为0,=2时,=1,综上L(,)=,损失函数通过学习变小,则变大,又softmax输出的所有概率和为1,所以理想状态下会趋近于1
下式的,是softmax需要学习的权重和偏移。
训练集的损失函数( ,,... )= (,)整个训练集损失就是把训练算法对所有训练样本的预测都加起来,再除以样本数。
推荐阅读
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- vue组件中为何data必须是一个函数()
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- 保险专家陈勇(关于大风造成损失的理赔建议)
- R语言|R语言 函数
- 2018-05-30闭包和函数