一起学习ml和dl中常用的几种loss函数

华为云开发者联盟 华为云开发者联盟     2022-12-08     697

关键词:

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

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

学习java绝对要懂的,java编程中最常用的几种排序算法!

...一下Java中几种常见的排序算法的Java代码推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!  ,群里有免费的学习视频和项目给大家练手。大神有空时也会带带大家的,学Java的过程中一定要多问多记,不要... 查看详情

ajaxjquery中ajax请求常见常用的几种方法(代码片段)

文章目录jQuery中AJAX请求常见常用的几种方法1.$.ajax()方法2.$.get()方法和$.post(方法)3.$.getJSON()方法jQuery中AJAX请求常见常用的几种方法1.$.ajax()方法可以在服务器端请求失败后依然调用回调函数 $.ajax( "url":"send/array/one.html&... 查看详情

ml/dl重要基础概念:偏差和方差

...础概念:偏差和方差作者:饼干Japson0前言在机器学习中,过拟合和欠拟合都会使训练好的机器学习模型在真实的数据中出现错误。我们可以将错误分为**偏差(Bias)和方差(Variance)**两类。下面就来... 查看详情

javascript学习12js中定义对象的几种方式

avaScript学习12JS中定义对象的几种方式  转自: http://www.cnblogs.com/mengdd/p/3697255.html  JavaScript中没有类的概念,只有对象。  在JavaScript中定义对象可以采用以下几种方式:  1.基于已有对象扩充其属性和方法  2.... 查看详情

javascript代码简写的几种常用方式汇总

本文主要介绍一些工作中常用的JavaScript编码技巧。非常有用,建议大家看完赶快实践,keepitinyourmind!首先推荐一个vscode的插件,Quokka.js,调试代码神器,插件的作用是:立即执行你键入的JavaScript代码或者TypeScript代码javascript代码... 查看详情

pytorch自定义loss函数的几种方法(代码片段)

1.让张量使用Variable类型,如下所示1fromtorch.autogradimportVariable23inp=torch.zeros(2,3)4inp=Variable(inp).type(torch.LongTensor)5print(inp)Variable类型包装了Tensor类型,并提供了backward()接口使用Variable类型的好处是,可以按照论文公式来直接使用,并... 查看详情

数组常用的几种方法

...的最后一项拼接:concat:把一个数组和另一个数组拼接在一起返回拼接好的 查看详情

逆战班学习总结js的几种继承方式

...私有属性指向某子节点继承,缺点是其他相同子类会同时一起改变属性 2.继承方式二:借用构造函数functionFather()this.arr=[1,2,3]functionSon()//call的第一个函数是this指向的对象,即构造函数的实例对象Father.call(this)/*上面代码等同于... 查看详情

数组的几种常用方法总结

1、arrayObject.slice(start,end) 索引,返回新数组2、arrayObject.splice(index,howmany,item1,.....,itemX),改变原始数组迭代器1、forEach2、every:接受一个返回值为布尔类型的函数,对数组中的每个元素使用这个函数,如果对于所有的元素,该... 查看详情

深度学习中常用的几种卷积(上篇):标准二维卷积转置卷积1*1卷积(附pytorch测试代码)(代码片段)

卷积分类一、标准二维卷积1.卷积核和过滤器2.标准二维卷积3.调用方式4.实例二、1×1卷积1.介绍2.实例三、转置卷积(去卷积)1.介绍2.调用方式3.实例4.缺点参考资料膨胀卷积、可分离卷积等详见下篇:https://blog.csdn.net... 查看详情

js中常用的几种时间格式处理-笔记整理

 //此处整理点平时常用到的时间格式处理方法-------------------------------------------1//时间格式化函数2Date.prototype.format=function(format){3varo={4"M+":this.getMonth()+1,//month5"d+":this.getDate(),//day6"h+":this.getHo 查看详情

ai-一些概念

...ML与DL的关系从涵盖范围上来讲,人工智能(AI)大于机器学习(ML)大于深度学习(DL)人工智能(AI):能够感知、推理、行动和适应的程序;机器学习(ML):能够随着数据量的增加不断改进性能的算法;深度学习(DL):是... 查看详情

开发java中常用的几种数据类型

JAVA中常用的数据结构(java.util.中) java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要的关系(继... 查看详情

[吃药深度学习随笔]损失函数(代码片段)

神经元模型   常用的激活函数(激励函数): 神经网络(NN)复杂度:多用神经网络层数和神经网络参数个数来表示  层数=隐藏层层数+1个输出层  参数个数=总W(权重)+总B(偏置)  比如     &nb... 查看详情

认识:人工智能ai机器学习ml深度学习dl

...能的定义可以分为两部分,即“人工”和“智能”。机器学习1.   什么是机器学习根据等人事 查看详情

重构之--重新组织函数的几种方法

...s(过长的函数),下边就介绍一下关于重新组织函数的几种常用手法1ExtractMethod(提炼函数)解释:一个函数中有部分代码可以被提取出来单独抽成一个函数,并起一个能表达函数用途的函数名,这就是提炼函数(一个大函数可以提出... 查看详情

.net中常用的几种解析json方法

一、基本概念json是什么?JSON:JavaScript对象表示法(JavaScriptObjectNotation)。JSON是一种轻量级的数据交换格式,是存储和交换文本信息的语法。类似XML。JSON比XML更小、更快,更易解析。 序列化和反序列化是怎么回事?序列化... 查看详情

reactjs学习笔记-条件判断的几种形式

...组件的HTML标签与生成这些标签的代码内在地紧密联系在一起。这意味着你可以轻松的利用javascript强大的魔力,比如循环和条件判断等。想要在组件中添加条件判断,似乎是件比较困难的事情,因为if/else逻辑很难用HTM... 查看详情