深度学习中损失函数和激活函数的选择

发布于:2024-05-05 ⋅ 阅读:(30) ⋅ 点赞:(0)

文章目录


前言

本篇博客的目的是根据业务目标,为大家提供关于在构建神经网络时,如何根据需求选择合适的最终层激活函数和损失函数的指导和建议。

如果大家还没了解激活函数,可以参考:神经元和激活函数介绍


你需要解决什么问题?

和所有机器学习一样,业务目标决定了你应该如何评估是否成功。

你想预测数值吗?

例如:预测产品的合适价格,或预测每天的销售数量。

如果是这样,你需要用到“回归:预测数值”部分的知识。

你想预测分类结果吗?

比如,你想知道图片中有什么物体,或者对话是关于什么主题的。

如果是的话,接下来你需要考虑你的数据中有多少种不同的类别,以及你想为每个项目找到多少个标签。

如果你的数据是二元的,也就是说,每个项目要么属于某个类别,要么不属于(比如判断是否为欺诈行为、诊断结果、是否可能购买),那么你需要用到“分类:预测二元结果”这部分的知识。

如果你的数据有多个类别(比如,图片中可能有多个物体,电子邮件涉及多个主题,或者多种产品适合进行宣传),而且每个项目只能属于一个类别,那么你需要用到“分类:从多个类别中预测单个标签”这部分的知识。

最后,如果你的数据中的每个项目可能属于多个类别,也就是说,每个项目可以有多个标签,那么你需要用到“分类:从多类别中预测多个标签”这部分的知识。

回归:预测数值

例如:预测产品的价格。

神经网络的最终层将有一个神经元,它返回的值是一个连续的数值。

为了了解预测的准确性,它会与真实值进行比较,真实值也是一个连续的数字。

最终激活函数

线性——这将产生一个我们需要的数值。

ReLU——这将产生一个大于0的数值。

损失函数

均方误差(MSE)——这计算了预测值与真实值之间的平均平方差。

分类:预测二元结果

例如:预测一笔交易是否为欺诈。

神经网络的最终层将有一个神经元,并返回一个介于0到1之间的值,这个值可以被推断为概率。

为了了解预测的准确性,它会与真实值进行比较。如果数据属于该类,真实值为1,否则为0。

最终激活函数

Sigmoid——这将产生一个介于0和1之间的值,我们可以推断出模型对示例属于该类别的信心程度。

损失函数

二元交叉熵——交叉熵量化了两个概率分布之间的差异。

我们的模型预测了一个模型分布 {p,1-p},因为我们有一个二元分布。

我们使用二元交叉熵来将其与真实分布 {y,1-y} 进行比较。

分类:从多个类别中预测单个标签

神经网络的最终层将为每个类别有一个神经元,并返回一个介于0和1之间的值,这个值可以被推断为概率。

输出结果随后形成一个概率分布,因为其总和为1。

为了了解预测的准确性,每个输出都会与其对应的真实值进行比较。

真实值已经过独热编码,这意味着在对应正确类别的列中会出现1,否则会出现0。

最终激活函数

Softmax——这将为每个输出产生介于0和1之间的值,这些值的总和为1。

所以这可以被推断为概率分布。

损失函数

交叉熵——交叉熵量化了两个概率分布之间的差异。我们的模型预测了一个模型分布 {p1,p2,p3}(其中p1+p2+p3=1)。

我们使用交叉熵来将其与真实分布 {y1,y2,y3}进行比较。

分类:从多个类别中预测多个标签

例如:预测图像中动物的存在。

神经网络的最终层将为每个类别有一个神经元,并返回一个介于0和1之间的值,这个值可以被推断为概率。

为了了解预测的准确性,每个输出都会与其对应的真实值进行比较。如果真实值列中出现1,则表示数据中存在它所对应的类别;否则会为0。

最终激活函数

Sigmoid——这将产生一个介于0和1之间的值,我们可以推断出模型对于某个实例属于该类别的信心程度。

损失函数

二元交叉熵——交叉熵量化了两个概率分布之间的差异。对于每个类别,我们的模型都会预测一个模型分布 {p,1-p}(二元分布)。

我们使用二元交叉熵来将这些与每个类别的真实分布 {y,1-y}进行比较,并汇总它们的结果。

总结

以下表格总结了上述信息,以便您能够快速找到适用于您用例的最终层激活函数和损失函数。

参考: 人工智能学习指南