ReLU

2024 年 8 月 28 日 | 阅读 6 分钟

激活函数的选择对于确定神经网络的功能有多好至关重要。在众多可用的激活函数中,Rectified Linear Unit (ReLU) 是最有效且最常用的函数之一。由于其易用性、有效性和计算效率,它是现代神经网络拓扑结构的基本组成部分。

在深度学习模型中,最常使用的激活函数是 Rectified Linear Unit。如果函数接收到任何负输入,它将返回 0;否则,它将返回它接收到的值,如果为正,则为 x。因此,我们可以将其表示为 f(x)=max(0,x)。

换句话说,如果输入为负,ReLU 输出 0;如果输入为正,则输出 x。因此,ReLU 以有效的方式“关闭”负值,在保持计算效率的同时引入非线性。

令人惊讶的是,模型能够如此好地捕捉非线性关系和交互作用,特别是对于一个仅由两个线性组件组成的函数。然而,ReLU 函数非常受欢迎,因为它在大多数情况下表现良好。

ReLU 的工作原理

激活函数用于两个主要原因

  • 辅助将交互效应纳入模型:交互效应是指当 B 的值以不同方式影响预测,这取决于变量 A。例如,为了确定特定体重是否暗示患糖尿病的风险增加,我的模型需要知道一个人的身高。某些体重对于高个子来说意味着健康,但对于矮个子来说则意味着风险增加。因此,我们将声明体重和身高之间存在交互效应,并且体重基于身高对患糖尿病的风险有影响。
  • 辅助将非线性因素纳入模型:这仅仅意味着,如果我在水平轴上绘制一个变量,在垂直轴上绘制我的预测,那么我创建的图将不是一条直线。换句话说,预测变量的单位增加的影响取决于该预测变量的值。

ReLU 捕捉交互作用

假设一个只有一个节点的神经网络模型。为简单起见,假设它有两个输入 A 和 B。在我们的节点中,A 和 B 的权重分别为 2 和 3。因此,节点输出为 f(2A+3B)。对于我们的 f,我们将使用 ReLU 函数。因此,如果 2A+3B 为正,我们的节点的输出值也为 2A+3B。如果 2A+3B 为负,我们的节点的输出值为 0。

为清楚起见,考虑 A=1 且 B=1 的情况。结果是 2A+3B,并且它随着 A 的增加而同步增长。相反,如果 B 等于 -100,结果是 0,并且随着 A 逐渐增长,结果保持为 0。因此,A 可能但未必会增加我们的产量。B 的值是多少才最重要。

在这个简单的例子中,节点记录了一次交互。随着你添加更多的节点和层,交互的复杂性可能会变得更加复杂。但现在你应该能够看到激活函数是如何帮助捕捉交互作用的。

ReLU 捕捉非线性

如果一个函数的斜率不是恒定的,那么它就是非线性的。因此,ReLU 函数的斜率始终为 1(对于正值)或 0(对于负值),尽管它在 0 附近是非线性的。这种非线性非常有限。然而,深度学习模型的两个特征使我们能够基于 ReLU 节点的组合来生成各种非线性。

首先,大多数模型中的每个节点都有一个偏置项。偏置项只是一个在模型训练期间确定的常数值。为了简单起见,让我们看一个名为 A 的节点,它有一个偏置和一个输入。如果偏置项取值为 7,则节点输出为 f(7+A)。在这种情况下,如果 A 小于 -7,则输出为 0 且斜率为 0。当 A 超过 -7 时,节点的输出为 7+A,斜率为 1。

因此,我们可以移动斜率改变的位置。此时,我们似乎仍然只能有两种不同的斜率。但实际模型有更多的节点。每个节点(即使在单层中)都可以具有不同的偏置值,从而使每个节点在不同的输入值处改变其斜率。各个函数的总和会产生一个具有多个斜率修改的复合函数。

这些模型足够灵活,可以生成非线性函数并考虑交互作用(如果这样做能够获得更准确的预测)。随着我们增加每层节点的数量(或者,如果我们使用卷积模型,卷积的数量),模型将更有能力表示这些交互作用和非线性。

ReLU 的类型

由于其易用性和在解决梯度消失问题方面的效率,它已成为深度学习中的基本激活函数。尽管如此,ReLU 仍然经历了修改,以解决特定问题并在各种环境中最大化性能。以下是 ReLU 的各种变体:

  • Leaky ReLU:一种这样的变体,称为 Leaky ReLU,试图解决“死亡 ReLU”问题,即神经元在训练期间可能对负输入保持沉默,导致死神经元无法帮助学习。Leaky ReLU 通过为负输入添加一个小的斜率(通常为 0.01)来确保梯度即使在负值下也能流动。这使得所有神经元在训练期间都保持相关。这种微小的改变通过防止神经元饱和来鼓励更稳定有效的学习。
  • Parametric ReLU (PReLU):Leaky ReLU 由 Parametric ReLU (PReLU) 扩展而来,它为负输入的斜率添加了一个可学习的参数。与斜率固定的 Leaky ReLU 不同,PReLU 使网络能够灵活且高性能地适应各种数据集和任务,因为它允许网络在训练期间学习理想的斜率。PReLU 消除了手动调整的需要,并通过允许模型自动选择最佳激活函数参数来提高模型识别数据中复杂模式和变化的能力。
  • Exponential Linear Unit (ELU):ELU 是 ReLU 的另一种变体,它解决了 ReLU 的一些缺点,主要是其在零点的不连续性和缺乏负值。为了提供一个没有突然过渡的平滑曲线并允许激活函数取负值,ELU 用指数函数替换了 ReLU 对负输入的线性部分。通过提高模型对数据中噪声和异常值的抵抗力,平滑性有助于模型在训练期间更快地收敛,并产生更可靠、更准确的预测。
  • Randomized ReLU (RReLU):Randomized ReLU (RReLU) 在训练期间从均匀分布中随机选择斜率,为 ReLU 引入随机性。通过向网络注入噪声并防止其过拟合训练集,这种不可预测性起到了一种正则化的作用。RReLU 通过鼓励模型学习更鲁棒和可泛化的表示,帮助模型在未知数据上表现更好,并提高了其对其他数据集和任务的泛化能力。

简化梯度下降

深度学习模型历来以 S 形曲线(类似于 tanh 函数)开始。

tanh 函数似乎有几个优点。即使非常接近,它也从未完全变平。因此,其输入的任何变化都会在其输出中得到反映,这可能是一件好事。它也是非线性的,这意味着它在所有方向上都是弯曲的。激活函数的主要目标之一是考虑非线性。因此,我们期望非线性函数能够表现良好。

然而,在使用 tanh 函数时,研究人员发现创建多层模型非常困难。除了一个非常小的范围(大约 -2 到 2)之外,它相对平坦。除非输入落入这个有限的区域,否则函数的导数相对较小,因此由于这个平坦的导数,使用梯度下降来改进权重非常困难。模型中的层越多,这个问题就越严重。这就是所谓的梯度消失问题。

ReLU 函数的导数在其范围的一半以上或负值处为 0。正输入的导数为 1。

当在大小合适的批次上进行训练时,每个给定节点通常会接收来自某些数据点的正值。由于平均导数很少接近零,梯度下降可以继续。


下一主题简单指数平滑