摘要:本篇内容和大家一起学习下机器学习和深度学习中常用到的几种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损失函数。

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

一起学习ML和DL中常用的几种loss函数的更多相关文章

  1. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  2. python中常用的九种预处理方法

    本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...

  3. 如何理解JavaScript中常用的4种排序算法?

      如何理解JavaScript中常用的4种排序算法? 冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍: ...

  4. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  5. C#中常用的几种读取XML文件的方法

    1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/

  6. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  7. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  8. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  9. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...

  10. 请写出JavaScript中常用的三种事件。

    请写出JavaScript中常用的三种事件. 解答: onclick,onblur,onChange

随机推荐

  1. C++中const和constexpr的多文件链接问题

    C++语言支持分离编译,在多文件编程中:变量或函数可以被声明多次,但却只能被定义一次.如果要在多个文件中使用同一个变量,变量的定义能且只能出现在一个文件中,在其他使用该变量的文件中需要声明该变量.如果 ...

  2. python爬虫入门(1)-开发环境配置

    所谓的爬虫,就是通过模拟点击浏览器发送网络请求,接收站点请求响应,获取互联网信息的一组自动化程序. 也就是,只要浏览器(客户端)能做的事情,爬虫都能够做.      现在的互联网大数据时代,给予我们的 ...

  3. Html文本学习内容-2

    (一)文本 1.大小写转换 text-transform属于处理文本的大小写,有4个值: none(默认值) uppercase(全部大写) lowercase(全部小写) capitalize(首字 ...

  4. Centos7安装msf

    文章来自:https://blog.csdn.net/weixin_44268918/article/details/129771330 1. 前言在日常使用中,模拟攻击以及测试的时候都是直接使用本地 ...

  5. 全网最详细4W字Flink全面解析与实践(下)

    本文已收录至GitHub,推荐阅读 Java随想录 微信公众号:Java随想录 原创不易,注重版权.转载请注明原作者和原文链接 承接上篇未完待续的话题,我们一起继续Flink的深入探讨 Flink S ...

  6. DM数据库 回表优化案例

    京华开发一哥们找我优化条SQL,反馈在DM数据库执行时间很慢需要 40s 才能出结果,安排. 原SQL: SELECT A.IND_CODE, A.IND_NAME AS "specialN ...

  7. Educational Codeforces Round 103 (Rated for Div. 2) A~D题解

    写在前边 链接:Educational Codeforces Round 103 (Rated for Div. 2) A. K-divisible Sum 链接:A题链接 题目大意: 要求构造一个\ ...

  8. 快速认识,后端王者语言:Java

    Java作为最热门的开发语言之一,长居各类排行榜的前三.所以,就算你目前不是用Java开发,你应该了解Java语言的特点,能用来做什么,以备不时之需. Java 是一种高级.多范式编程语言,以其编译为 ...

  9. [ABC317G] Rearranging

    Problem Statement There is a grid with $N$ rows and $M$ columns. The square at the $i$-th row from t ...

  10. [USACO2007OPENS] City Horizon S

    题目描述 Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the cit ...