资源行业动态损失函数详解

损失函数详解

2020-01-19 | |  96 |   0

原标题:损失函数详解

来源:AI 研习社          链接:https://www.yanxishe.com/TextTranslation/2174


在任何深度学习项目中,配置损失函数都是确保模型以预期方式工作的最重要步骤之一。 损失函数可以为神经网络提供很多实用的灵活性,它将定义网络输出与网络其余部分的连接方式。


神经网络可以执行多种任务,从预测连续值(如每月支出)到对离散类别(如猫和狗)进行分类。 每个不同的任务将需要不同的损失函数类型,因为输出格式将不同。 对于非常专业的任务,我们要如何定义损失。


从非常简化的角度来看,损失函数(J)可以定义为具有两个参数的函数:  


1.预测输出

2.真实输出

01.png

神经网络损失可视化


通过将模型的预测值与实际值进行比较,该函数将实质上计算出模型的执行效果。如果Y_pred与Y相差很远,那么Loss值将非常高。但是,如果两个值几乎相似,则“损失”值将非常低。因此,我们需要保持一个损失函数,该函数在对数据集进行训练时可以有效地惩罚模型。


如果损失非常大,那么这个值将在训练过程中通过网络传播,权重的变化将比平时多一点。如果太小,则权重不会发生太大变化,因为网络已经训练的很好了。


这种情况有点类似于学习考试。如果一个人在考试中表现不佳,我们可以说损失很高,那个人将不得不改变自己内部的很多东西,以便下次获得更好的成绩。但是,如果考试顺利进行,那么他们将不会做与下一次考试已经做的非常不同的事情。


现在,让我们将分类视为一项任务,并了解在这种情况下损失函数的工作方式。


分类损失

当神经网络试图预测离散值时,我们可以将其视为分类模型。 这可能是网络试图预测图像中存在哪种动物,或者电子邮件是否为垃圾邮件。 首先,让我们看看分类神经网络的输出表示方式。

02.png  

分类神经网络输出格式

输出层的节点数将取决于数据中存在的类数。 每个节点将代表一个类。 每个输出节点的值本质上表示该类别为正确类别的概率。

Pr(Class 1) = Probability of Class 1 being the correct class

一旦获得所有不同类别的概率,我们就将具有最高概率的类别视为该实例的预测类别。 首先,让我们探讨如何进行二进制分类。


二分类

在二分类中,即使我们将在两个类之间进行预测,在输出层中也将只有一个节点。 为了获得概率格式的输出,我们需要应用一个激活函数。 由于概率要求取0到1之间的值,因此我们将使用S型函数,该函数可以将任何实际值压缩为0到1之间的值。

03.png  

sigmoid函数图可视化

随着sigmoid的输入变大并趋于正无穷大,的输出趋向于1。输入变小而趋向于负无穷大,输出将趋于0。现在我们保证总是得到一个介于0到1之间的值,这正是我们需要的值,因为我们需要概率。

如果输出高于0.5(概率为50%),我们将认为它属于正类别;如果输出低于0.5,则我们将认为它属于负类别。例如,如果我们正在训练一个在猫和狗之间进行分类的网络,则可以为狗分配正类,并且在狗的数据集中的输出值将为1,类似地,将为猫分配负类,而对猫的输出值将为为0。

我们用于二进制分类的损失函数称为二进制交叉熵(BCE)。该功能有效地惩罚了用于二进制分类任务的神经网络。让我们看一下此功能的外观。

04.png

 二元交叉熵损失图

如您所见,有两个单独的函数,每个Y值一个。当我们需要预测正类(Y = 1)时,我们将使用

Loss = -log(Y_pred)

当我们需要预测负类(Y = 0)时,我们将使用

Loss = -log(1-Y_pred)

如您在图表中所见。 对于第一个函数,当Y_pred等于1时,损失等于0,这是有道理的,因为Y_pred与Y完全相同。随着Y_pred值变得更接近0,我们可以观察到Loss值以非常高的速度增加。 速率,当Y_pred变为0时,趋于无穷大。 这是因为,从分类的角度来看,0和1必须相反,因为它们各自代表完全不同的类。 因此,当Y_pred为0且Y为1时,为了使网络更有效地了解错误,损失将非常大。

05.png

二进制分类损失比较

我们可以在数学上将整个损失函数表示为一个方程式,如下所示:

1579431090867073.png

 二元交叉熵全方程

此损失函数也称为对数损失。 这就是为二进制分类神经网络设计损失函数的方式。 现在,让我们继续来看如何为多类别分类网络定义损失。


多分类

当我们需要我们的模型每次预测一个可能的类输出时,多分类是合适的。 现在,由于我们仍在处理概率,因此将sigmoid应用于所有输出节点可能有意义,这样我们对于所有输出都获得介于0到1之间的值,但这是有问题的。 在考虑多个类别的概率时,我们需要确保所有单个概率的总和等于1,因为这是定义概率的方式。 应用S形(sigmoid)不能确保总和始终等于1,因此我们需要使用另一个激活函数。


我们在这种情况下使用的激活函数是softmax。 此功能确保所有输出节点的值都在0-1之间,并且所有输出节点值的总和始终等于1。 softmax的公式如下:

1579431127441756.png

Softmax公式

接下来可视化一个例子:

08.png

Softmax例子可视化


如您所见,我们只是将所有值传递给指数函数。 之后,要确保它们都在0-1的范围内,并确保所有输出值的总和等于1,我们只需将每个指数除以所有指数的总和即可。


那么,为什么在归一化每个值之前必须将它们传递给指数呢? 为什么我们不能仅将值本身标准化? 这是因为softmax的目标是确保一个值非常高(接近1),而所有其他值都非常低(接近0)。 Softmax使用指数来确保发生这种情况。 然后我们再归一化,因为我们需要概率。


现在我们的输出格式正确,让我们继续研究如何为此配置损失函数。 好消息是损失函数与二进制分类的函数基本相同。 我们将针对每个输出节点将其对数损耗应用到各自的目标值,然后我们将在所有输出节点上求和。

09.png


分类交叉熵可视化

这种损失称为分类交叉熵。 现在,让我们进入一种称为多标签分类的特殊分类情况。


多标签分类

当模型需要预测多个类别作为输出时,便完成了多标签分类。 例如,假设您正在训练神经网络,以预测某些食物图片中的成分。 我们需要预测多种成分,因此Y中将有多个1'。


为此,我们不能使用softmax,因为softmax始终只会迫使一个类别变为1,而其他类别变为0。因此,由于我们试图预测每个类别的个体概率,因此可以简单地在所有输出节点值上保持sigmoid。


至于损失,我们可以直接在每个节点上使用对数损失进行求和,类似于在多类分类中所做的。


现在我们已经介绍了分类,现在让我们继续进行回归。


回归损失

在回归中,我们的模型正在尝试预测连续值。 回归模型的一些示例是:


房价预测

人年龄预测

在回归模型中,我们的神经网络将为每个我们试图预测的连续值提供一个输出节点。 通过在输出值和真实值之间进行直接比较来计算回归损失。


我们用于回归模型的最流行的损失函数是均方误差损失函数。 在此,我们仅计算Y和Y_pred之差的平方,并对所有数据求平均值。 假设有n个数据点:

1579431218756512.png

均方误差损失函数


在这里,Y_i和Y_pred_i指的是数据集中第i个Y值,以及来自神经网络的相同数据的相应Y_pred。


到此结束本文。 希望现在您对深度学习中各种任务如何配置损失函数有更深入的了解。 感谢您的阅读!

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:使用python进行强化学习

下一篇:推荐系统综述(协同过滤、KNN、深度学习、转移学习、Tfidf....)

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...