深度学习中应使用哪些损失函数和激活函数

2024年11月18日 | 阅读 8 分钟

引言

损失函数是深度学习领域中的关键组成部分,用于量化预期值与真实地面真实值之间的差异。这些函数对于在神经网络的训练阶段指导模型进行最佳参数调整至关重要。回归和分类任务需要不同的损失函数,因此选择正确的函数取决于学习任务的类型。

  • 损失函数简介

损失函数用于量化模型预测与实际目标值之间的差异。
在训练过程中尽可能地减少这种损失将提高模型在未知数据上的性能并提高其准确性。
某些任务,例如回归或分类,需要专门设计的独特损失函数来满足其需求。

  • 模型训练的重要性

在训练神经网络时,损失函数用作优化目标。
提高模型的预测准确性相当于最小化损失。
为了最小化所选的损失函数,在优化过程中会迭代地调整模型的参数。

  • 问题类型:分类与回归

回归问题是指预测连续数值,这需要均方误差 (MSE) 等损失函数。
另一方面,分类问题涉及将输入分类到离散类别中,需要不同的损失函数,例如分类交叉熵或二元交叉熵。
根据手头的具体学习任务,必须选择正确的损失函数。

常用损失函数

为了训练神经网络,损失函数(用于衡量预期值和实际值之间的差异)至关重要。问题的概念,例如衰减或特征化,决定了灾难能力。以下是一些常用的灾难能力:

1. 均方误差 (MSE)

这种选择通常用于回归损失。当预期的质量与实际质量之间的差异程度很重要时,它很有用,因为它比小错误更严厉地惩罚大错误。

2. 二元交叉熵

对于相似的特征化,通常使用二元交叉熵。它计算预测概率与实际二元标签之间的差异。

3. 分类交叉熵

或“直接交叉熵”,是用于多类别特征化问题的独特扩展。它评估每个类别的预期类别概率与实际类别概率之间的差异。

4. 稀疏分类交叉熵

当类别标签以整数而非独热编码向量的形式给出时,稀疏分类交叉熵是一个合适的选择。它与分类交叉熵相似。它基于目标表示工作,只需要实际类别的列表。

5. Hinge 损失 (SVM 损失)

支持向量机 (SVM) 和某些神经网络设计通常使用 Hinge 损失进行二元分类。它在鼓励准确分类的同时保持类之间的分离。

6. Huber 损失

该术语描述了均方误差和平均绝对误差之间的差异如何划分。它被描述为分段函数,对较大的误差使用 MAE,对较小的误差使用 MSE。因此,它比纯 MSE 对异常值更不敏感。

7. 库尔巴克-莱布勒散度 (KL 散度)

通常表示为 KL,当模型的输出被解释为概率分布时,使用 KL 散度。它通常用于概率模型以估计一个概率分布与另一个概率分布的偏差。

常用激活函数

  • Sigmoid 函数

Sigmoid 函数的特点是将输入值映射到 0 到 1 之间的范围。在二元分类问题的输出层中,由于其平滑和连续的特性,它特别有用,因为它将信息压缩为类似概率的解释。然而,在深度网络的 backpropagation 过程中,它很容易出现梯度消失问题。

  • 双曲正切 (tanh)

它是 Sigmoid 的扩展,将输入值映射到 -1 到 1 之间的范围。它的梯度范围更大。它通常用于隐藏层,与 Sigmoid 一样,并提供更中心化的输出,从而减少与梯度消失相关的问题。尽管有这些进步,它仍然面临与 Sigmoid 类似的问题,例如梯度消失问题。

  • ReLU (Rectified Linear Unit)

ReLU 因其有效性和简洁性而广受欢迎。通过将负输入值替换为 0,它为模型引入了非线性。ReLU 提供了高效的处理能力,并有助于解决梯度消失问题。然而,它并非没有问题;在训练过程中,它可能会出现“死亡神经元”,即经常输出零的神经元。

  • Leaky ReLU

Leaky ReLU 通过为负输入提供一个小的偏置来解决传统 ReLU 的死亡神经元问题。这种对负值的微小偏置在反向传播过程中保持了信息的流动。

  • Parametric ReLU (PReLU)

它是 Leaky ReLU 的扩展,其中训练期间的斜率是一个可学习的参数。由于其灵活性,模型可以选择最适合不同输入的斜率,从而提高性能。

  • Exponential Linear Unit (ELU)

对于负输入,ELU 会产生平滑的过渡。对于某些应用,通过添加指数项可以解决梯度消失问题并提高性能。

  • 快速切换(Swish)

Swish 是一种自门控激活函数,结合了 Sigmoid 和 ReLU 函数的特性。它的平滑性和非单调性被认为在复杂模型中具有提高性能的优势。

深度学习中最佳损失函数

分类交叉熵在深度学习中表现出色,是多类别分类任务的最佳选择。其有效性源于几个关键特性。首先,它为反向传播提供了可解释的梯度,通过以可理解的方式指导模型参数的变化,从而使优化更有效。基于信息论的损失促进了对预测的概率解释,这与类别目标一致。分类交叉熵是深度学习框架中广泛使用的标准,因为它易于使用,并且在各种分类任务中始终表现良好。尽管它考虑了类别独立性和对类别不平衡敏感性的假设,但其可解释性、灵活性和广泛使用使其成为深度学习领域中强大而灵活的解决方案。

为什么?

  • 可解释的梯度: 当任务需要将输入分配到多个类别时,分类交叉熵效果很好。在反向传播过程中,它会计算真实类别概率与预测类别概率之间的差异,从而生成可解释的梯度。
  • 概率解释: 模型预测的概率解释与基于信息论原理的损失一致。它促使模型为正确的类别分配更高的概率,为错误的类别分配更低的概率。
  • 处理多类别: 二元交叉熵可以扩展以处理多类别。通过对每个类别的所有单个交叉熵项求和,它提供了对模型在整个类别范围内性能的全面评估。

优点和缺点

优点

  • 可理解的梯度

在反向传播过程中,分类交叉熵提供了可理解的梯度,从而促进了有效的优化。这种可解释性使得更清晰地理解模型参数应如何调整成为可能。

  • 基于概率的解释

该损失源于信息论,促进以概率方式解释模型预测。为正确分类分配更高的概率,为错误分类分配更低的概率是分类问题的目标,这与之非常契合。

  • 处理多类别分类

分类交叉熵,专门为多类别分类问题设计,将二元交叉熵的概念应用于有两个以上不同类别的场景。

缺点

  • 假设类别独立

该损失假设类别是独立的,这在某些存在类间关系的现实世界场景中可能不成立。在某些情况下,其他损失函数可能更合适。

  • 对类别不平衡敏感

分类交叉熵对类别不平衡的敏感性可能会有所不同。如果数据集中某个类别的样本数量远远多于其他类别,模型可能会倾向于更可靠地预测多数类别。

  • 不适用于回归任务

由于分类交叉熵旨在用于分类任务,因此它不适合预测连续数值的回归场景。

深度学习中最佳激活函数

ReLU (Rectified Linear Unit) 由于其易用性、低计算开销以及缓解梯度消失问题的能力,是深度学习激活函数的一个特别合适的选择。ReLU 通过将负输入值替换为 0 来引入非线性,从而在训练过程中促进更快的收敛。由于其计算效率和快速计算,深度神经网络训练受益于其简单性。此外,ReLU 的架构通过允许梯度更自由地流过正输入来促进有效学习,从而解决了梯度消失问题。

为什么?

  • 效率与简洁性

ReLU 易于理解且计算效率高。它通过将任何负值替换为 0 来仅允许正数通过。在神经网络中,这种简单性可以实现更快的训练和收敛。

  • 缓解梯度消失问题

梯度消失问题,即在反向传播过程中梯度变得非常小并阻碍有效学习,是深度学习中的一个主要问题。ReLU 通过为正输入提供非饱和激活来减轻这个问题,从而允许梯度更自由地流动。

  • 稀疏性和稀疏性诱导

由于每个负输入都被转换为零,ReLU 在神经元激活中产生稀疏性。利用稀疏激活的两个优点是提高计算效率和降低模型复杂性。

优点和缺点

  • 计算效率

由于其分段线性结构和简洁性,ReLU 的训练时间比更复杂的激活函数更快,这有助于其计算效率。

  • 减少梯度消失问题

ReLU 在反向传播过程中允许梯度更自由地流过正输入,通过解决梯度消失问题,使深度神经网络能够更有效地进行训练。

  • 稀疏性诱导

ReLU 将负输入映射到 0,从而在神经元激活中引起稀疏性。稀疏激活可以提高计算效率并降低模型复杂性,尤其是在内存资源有限的情况下。

缺点

  • ReLU 死亡问题

当某些神经元在训练过程中休眠并经常输出 0 时,这被称为“ReLU 死亡”问题。较大的梯度被认为是这种现象的原因,因为它们会导致导致神经元完全休眠的权重更新。

  • 输出饱和

ReLU 对于非常大的正输入可能会饱和,始终产生激活函数的最大值。这可能导致训练期间出现问题,例如梯度爆炸。

  • 并非适用于所有任务

并非所有任务都可以使用 ReLU 完成,特别是那些需要网络中激活负值的任务。在某些情况下,其他激活函数,如 Leaky ReLU 或其变体,可能更合适。