损失函数

来源:互联网 发布:安全生产事故数据 编辑:程序博客网 时间:2024/04/27 15:05

损失函数

当在训练神经网络模型的时候,特别是一些线性分类器,往往需要定义一个损失函数L(yˆ,y) ,函数用来表征模型的预测yˆ 与真实的输出y 之间的损失,而模型的训练就是要通过样本将损失函数最小化。可以说损失函数就是一个评分函数,用以对模型预测准确性进行打分,所以损失函数没有负值,当函数值为0时,说明模型预测与真实值完全相符。

原则上是可以使用任意的函数用来映射这种评分函数,但是在实际优化过程中,更倾向于损失函数易于求梯度,这对模型的优化具有重要作用。

Hinge Loss

Hinge Loss损失函数,也被称为“最大距离损失”函数,之所以称为距离损失,因为其优化的目的可以认为是将距离最大化,这个思想在SVM优化中得到应用。
Hinge Loss二分类:对于二分类问题,神经网络模型往往输出一个变量yˆ ,而真实的输出y,其取值{-1,+1},只有两种取值。二类分类中使用sign(yˆ),并认为yyˆ>0 表示分类正确
这里写图片描述
损失函数的数学表达式:

Lhinge(binary)(yˆ,y)=max(0,1yyˆ)

可以想象,当分类器输出正确且|yˆ|1 时,损失函数为0,否则,函数值线性增大。换句话说,该损失函数的优化是为了获得一个正确的分类器,通过使距离至少为1。
此处注意:yˆ 作为预测输出,其值得大小并不固定,如yˆ=xw+b ,而y 作为正确值却又固定值域{-1,+1}。
这里写图片描述

Hinge Loss多分类:对于多分类问题,yˆ=yˆ1,...,yˆnyˆ 是一个向量,可以将其视为一个one-hot形式的向量。如手写体识别,共0~9,10个数字,输出想象为[0.1, 0.2, 0.12, 0.13, 0.61, 0.23, 0.14, 0.31, 0.11, 0.23],代表识别数字为4,所以在分类时,选择向量中最大分数的值得下标,即为类别。

prediction=argmaxiyˆ

假设用t=argmaxiy 表示正确的类别,此外k=argmaxityˆ ,获取输出中除正确分类下标后最高得分项,且kt。 那么多分类问题的hinge loss为:
Lhinge(multicalss)((ˆy),y)=max(0,1(yˆtyˆk))

该损失函数最小化,就是要让正确分类下标项尽可能的大,而其他的项尽可能的小。其距离也是如上所述,最小为1。

Cross-entropy Loss

第三种损失函数——交叉熵损失函数
交叉熵损失函数二分类:对于二分类问题,以逻辑回归模型为例。

J(w)=iyilog(yˆ)+(1yi)log(1yˆ),yi(0,1)

yˆ=11+e(wTx+b)

上式求和,前半部分代表分类概率偏向1,后一个偏向0,每次i 取值只有一个式子有值,另一个为0,即对应分类的0,1。
交叉熵损失函数多分类问题:对于多分类问题,交叉熵以概率的方式进行解释。
y=y1,...,yn 为基于类别标签1,…,n的多项式分布向量表示,yˆ=yˆ1,...,yˆnyˆ 通过softmax 函数生成的神经网络输出向量,其每个分量代表类别的条件分布:yˆi=P(y=i|x) ,而交叉熵损失函数表达的是真实的类别概率分布与预测的类别概率分布之间的差异:
Lcrossentropy(yˆ,y)=iyilogyˆi

对于交叉熵的含义可以参看如何通俗的解释交叉熵与相对熵
对于hard分类问题,即每个样本都有一个确定的类别固定,如手写体识别问题,每张图,其有一个确定的类别,其余类别都为0。那么交叉熵损失函数可以简化为:
Lcrossentropy(yˆ,y)=logyˆt

其中t 代表正确的类别下标,此公式的含义可以理解为对于softmax 函数生出的输出,通过最小化就是要让对应下标得预测输出尽可能的大,同时其他部分的概率就会变小。
举个例子来说明:以手写体识别为例
假设有10个样本,(x1,y1),...,(x10,y10),定义y=[0123456789],10个样本对应的正确分类,则:
这里写图片描述
损失函数就对应了简化的交叉熵损失函数:
这里写图片描述
其中D代表样本空间。

Ranking losses

在某型领域,我们并没有给定的监督样本,即没有样本的对应标签,毕竟监督数据是昂贵的,此时拥有的是正确样本x和不正确样本x,训练的目标就变成了使正确样本的得分尽量高于不正确样本的得分。这似乎有点像上面Hinge(multiclass),但其实有时候训练是连不正确样本都没有的,而只有正确样本,这更倾向于无监督分析。不正确样本需要我们自动生成,从而打乱原始样本空间。

Lranking(margin)(x,x)=max(0,1(NN(x)NN(x)))

其中NN(x) 是对于输入向量x,经过神经网络模型后产生的得分。公式的含义同Hing(multiclass)。
该损失函数的另一个变种,使用log 的方式:
Lranking(log)(x,x)=log(1+exp((NN(x)NN(x))))

这种损失函数的训练方法在词向量Word Embedding训练过程中得到充分的应用,Mikolov在其论文【1】中提出Negative Sampling模型中应用,并附上该模型讲解分析博客【2】,感谢博主深入的分析,让我受益匪浅。

Squared loss

在线性回归和线性分类器中,经常用到Squared loss(平方误差),即将模型输出y 与真实y 相比较得出误差。

Lsquaredloss=(yy)2

损失函数讲义

查看链接【3】
参考:
1. Sridhar V K R. Unsupervised Text Normalization Using Distributed Representations of Words and Phrases[C]// The Workshop on Vector Space Modeling for Natural Language Processing. 2015:8-16.
2. http://blog.csdn.net/itplus/article/details/37998797
3. 一份不错的损失函数讲义
4. 手写识别案例
5. 如何通俗的解释交叉熵与相对熵

0 0