自然语言处理学习——介绍一个很好的损失函数

原文链接在这里:https://kexue.fm/archives/4293

文本情感分类其实就是一个二分类问题,事实上,对于分类模型,都会存在这样一个毛病:优化目标跟考核指标不一致。通常来说,对于分类(包括多分类),我们都会采用交叉熵作为损失函数,它的来源就是最大似然估计(参考《梯度下降和EM算法:系出同源,一脉相承》)。但是,我们最后的评估目标,并非要看交叉熵有多小,而是看模型的准确率。一般来说,交叉熵很小,准确率也会很高,但这个关系并非必然的。

要平均,不一定要拔尖 #

一个更通俗的例子是:一个数学老师,在努力提高同学们的平均分,但期末考核的指标却是及格率(60分及格)。假如平均分是100分(也就意味着所有同学都考到了100分),那么自然及格率是100%,这是最理想的。但现实不一定这么美好,平均分越高,只要平均分还没有达到100,那么及格率却不一定越高,比如两个人分别考40和90,那么平均分就是65,及格率只有50%;如果两个人的成绩都是60,平均分就是60,及格率却有100%。这也就是说,平均分可以作为一个目标,但这个目标并不直接跟考核目标挂钩。

那么,为了提升最后的考核目标,这个老师应该怎么做呢?很显然,首先看看所有学生中,哪些同学已经及格了,及格的同学先不管他们,而针对不及格的同学进行补课加强,这样一来,原则上来说有很多不及格的同学都能考上60分了,也有可能一些本来及格的同学考不够60分了,但这个过程可以迭代,最终使得大家都在60分以上,当然,最终的平均分不一定很高,但没办法,谁叫考核目标是及格率呢?

 

更好的更新方案 #

对于二分类模型,我们总希望模型能够给正样本输出1,负样本输出0,但限于模型的拟合能力等问题,一般来说做不到这一点。而事实上在预测中,我们也是认为大于0.5的就是正样本了,小于0.5的就是负样本。这样就意味着,我们可以“有选择”地更新模型,比如,设定一个阈值为0.6,那么模型对某个正样本的输出大于0.6,我就不根据这个样本来更新模型了,模型对某个负样本的输出小于0.4,我也不根据这个样本来更新模型了,只有在0.4~0.6之间的,才让模型更新,这时候模型会更“集中精力”去关心那些“模凌两可”的样本,从而使得分类效果更好,这跟传统的SVM思想是一致的。

不仅如此,这样的做法理论上还能防止过拟合,因为它防止了模型专门挑那些容易拟合的样本来“拼命”拟合(使得损失函数下降),这就好比老师只关心优生,希望优生能从80分提高到90分,而不想办法提高差生的成绩,这显然不是一个好老师。

修正的交叉熵损失 #

怎样才能达到我们上面说的目的呢?很简单,调整损失函数即可,这里主要借鉴了hinge loss和triplet loss的思想。一般常用的交叉熵损失函数是:

Lold=−∑yytruelogypredLold=−∑yytruelog⁡ypred

 

选定一个阈值m=0.6m=0.6,这个阈值原则上大于0.5均可。引入单位阶跃函数θ(x)θ(x)

θ(x)=⎧⎩⎨⎪⎪⎪⎪1,x>012,x=00,x<0θ(x)={1,x>012,x=00,x<0

 

那么,考虑新的损失函数:

Lnew=−∑yλ(ytrue,ypred)ytruelogypredLnew=−∑yλ(ytrue,ypred)ytruelog⁡ypred

其中
λ(ytrue,ypred)=1−θ(ytrue−m)θ(ypred−m)−θ(1−m−ytrue)θ(1−m−ypred)λ(ytrue,ypred)=1−θ(ytrue−m)θ(ypred−m)−θ(1−m−ytrue)θ(1−m−ypred)

LnewLnew就是在交叉熵的基础上加入了修正项λ(ytrue,ypred)λ(ytrue,ypred),这一项意味着什么呢?当进入一个正样本时,那么ytrue=1ytrue=1,显然
λ(1,ypred)=1−θ(ypred−m)λ(1,ypred)=1−θ(ypred−m)

这时候,要是ypred>mypred>m,那么λ(1,ypred)=0λ(1,ypred)=0,这时候交叉熵自动为0(达到最小值),反之,ypred<mypred<m则有λ(1,ypred)=1λ(1,ypred)=1,这时候保持交叉熵,也就是说,正样本如果输出已经大于mm了,那就不更新了(因为达到了最小值,可以认为最小值梯度是0),小于mm才继续更新;类似地可以分析负样本的情形,结论是负样本如果输出已经小于1−m1−m了,那就不更新了,大于1−m1−m才继续更新

 

这样一来,只要将原始的交叉熵损失,换成修正的交叉熵LnewLnew,就可以达到我们开始设计的目的了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化橙同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值