写点什么

一起学习 ML 和 DL 中常用的几种 loss 函数

  • 2022 年 9 月 13 日
    中国香港
  • 本文字数:1611 字

    阅读完需:约 5 分钟

一起学习ML和DL中常用的几种loss函数

本文分享自华为云社区《【MindSpore易点通】网络实战之交叉熵类Loss函数》,作者:Skytier 。


本篇内容和大家一起学习下机器学习和深度学习中常用到的几种 loss 函数,根据计算分类方式以及场景的不同,我分为了以下三部分进行分析。

CrossEntropy Loss


交叉熵函数是在分类模型中常用的一种损失函数,其表达式为:



其中用到了信息熵的概念,信息量是一个事件发生所带来的信息,而信息熵则是在结果出来之前对可能产生的信息量的期望,考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。

因此我们可以得到信息熵的计算表达式为:



其中 P(xi)表示为在时间点 x 的发生概率,信息熵是用来衡量事物不确定性的。信息熵越大,事物越具不确定性,事物越复杂。


可以理解为对于同一个随机变量 x,有两个概率分布,判断这两个概率分布的差异。假设两个概率分布对应为 p(x),q(x), 如何表示这两个分布的差异,我们可以使用信息熵判断,于是相对熵产生。


p(x)分布的信息熵为:



q(x)分布的信息熵为:



相对熵为:



p(x)为样本真实分布,q(x)为预测分布


于是得到相对熵公式为:




交叉熵的函数表示为:



我们观察可以看出,这里与相对熵较为相似,由于我们进行模型训练,有监督训练,样本标签已经确定,相当于真实的概率的分布 P(x)已经得知,因此这边的为固定值,相当于常量,那么可以继续优化表达式。

在我们模型训练中完整的相对熵表达式为:



对于其做为损失函数,常量可以忽略,因此得到了交叉熵的表现形式。



对于在二分类损失函数中应用,交叉熵损失函数为以下形式。



了解完交叉熵的基本计算原理,下面关联下另一种以交叉熵为基础的 loss 函数:BCELoss、BCEWithLogitsLoss 和 softmax_cross_entropy_with_logits。


BCELoss 和 SoftMarginLoss


这两种函数都是基于交叉熵的二分类 loss 函数,所以放在一起分析。


BCELoss 中文名称是二分类交叉熵损失,它是用于做二分类模型的损失函数,因为是二分类,可以用 0、1 表示两个类别。如果想用于多分类的模型,可以将类别拆分成两两一组进行使用。先来看下 BCELoss 的表达式。



式子中的 pt 表示模型的预测值;target 表示真实值,;w 是权重值,一般是 1。因为用 0、1 表示两个类别,所以在预测值和真实值相同时,其中一项将会为 0,上面这个表达式是计算的单个样本。当一个 batch 的 N 个样本时,还需要累加再取平均数。



SoftMarginLoss 对于包含 N 个样本的 batch 数据 D(x,y), x 代表模型输出, y 代表真实的类 ,表达式如下:



  • 式子中的 x.nelement( )代表 x 中元素的个数 N

  • 如果单个样本对应一个二分类,则 x.nelement( )=N

  • 如果单个样本对应 M 个二分类,则 x.nelement( )=M∗N

  • 我们通过累加前的单个加数来分析



·当 x[i]与 y[i]同号,即预测正确时,x[i]与 y[i]乘积越大,那么 loss 会越小,分类确信度就会越高;

·同理,当 x[i]与 y[i]异号,即预测错误时,loss 越大。


BCEWithLogitsLoss 和 softmax_cross_entropy_with_logits


BCEWithLogitsLoss 将 sigmoid 操作和与 BCELoss 组合到了一起使用。计算过程和原理是与 BCELoss 类似的,在 BCELoss 的计算表达计算式的基础中增加一个 sigmoid 计算,表达式如下。



softmax_cross_entropy_with_logits 是在交叉熵前做一次 softmax 计算。具体的执行流程大概分为两个部分:


第一部分是对网络模型最后一层的输出做一个 softmax,softmax 的用处通常是求取输出属于某一类的概率,对于单样本而言,输出就是一个 num_classes 大小的向量([Y1,Y2,Y3,...]其中 Y1,Y2,Y3,...分别代表了是属于该类的概率)。softmax 的计算表达式如下:



第二部分是将 softmax 的输出向量[Y1,Y2,Y3,...]和样本的实际标签做一个交叉熵计算



y`i 指实际标签中第 i 个的值;yi 指 softmax 的输出向量[Y1,Y2,Y3...]中,第 i 个元素的值。从而可以计算出 loss 值。

总结


本篇首先对交叉熵原理做了解析,再基于交叉熵的基础,引出了第二部分 BCELoss 和 SoftMarginLoss 的二分类 loss 函数,以及第三部分可用于多分类场景的 BCEWithLogitsLoss 和 softmax_cross_entropy_with_logits 损失函数。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
一起学习ML和DL中常用的几种loss函数_人工智能_华为云开发者联盟_InfoQ写作社区