首頁 » 整流线性单元 (ReLU) 初学者指南

整流线性单元 (ReLU) 初学者指南

整流线性单元  激活函数(例如整流线性单元 (ReLU))是现代神经网络的基石。如果没有它们,许多现实世界的 AI 应用(从图像识别到推荐系统)都无法实现。本指南探讨了 ReLU 的基础知识、其优势、局限性和实现。

ReLU 基础知识

如果没有人工神经网络,人工智能的一些最整流线性单元强大的应用将无法实现。神经网络是受人脑启发的计算模型。这些网络由相互连接的节点或“神经元”组成,它们共同处理信息并做出决策。神经网络“深度”的原因是输入和输出之间的层数。深度神经网络有多个层,使其能够学习更复杂的特征并做出更准确的预测。

深度神经网络

深度神经网络。来源:DataCamp

然而,这些模型远不止简单的层。其他组件对于神经网络的发挥也至关重要。

这些组件之一是激活函数。你可以将激活函数视为决策者;它们决定哪些信息应该传递到下一层,从而提供新的复杂程度,使神经网络能够做出细致入微的决策。

在这里,我们将介绍最流行和最广泛使用的激活函数之一:整流线性单元 (ReLU)。我们将解释此激活函数的基础知识及其一些变体、其优点和局限性,以及如何使用 Pytorch 实现它们。继续阅读?

什么是激活函数?

激活函数是神经网络不可或缺的组成部分。它们将神经网络中节点的输入信号转换为输出信号,然后将其传递到下一层。如果没有激活函数,神经网络将只能通过矩阵乘法等方式对输入和输出之间的线性关系进行建模。

然而,大多数现实世界的数据无法用线性建模。非线性捕捉到的模式包括,从没有孩子到一个孩子对银行交易的影响可能与从三个孩子到四个孩子的影响不同。如果神经网络没有激活函数,它们就无法学习现实世界事件中存在的复杂非线性模式。

线性函数与非线性函数

线性函数与非线性函数。来源:DataCamp

激活函数通过引入非线性行为使神经网络能够整流线性单元学习关系。换句话说,激活函数会创建一个数值阈值来决定是否激活某个神经元,从而引入一定程度的灵活性,而这对于神经网络建模复杂且细微的数据至关重要。

什么是 ReLU?

最流行和广泛使用的激活 WhatsApp 号码数据 函数之一是 ReLU(整流线性单元)。与其他激活函数一样,它为模型提供非线性 号码数据 更好的计算性能。

ReLU 激活函数的形式为:

f(x)= 最大值(0,x)

ReLU 函数输出其输入和零之间的最大值,如图所示。对于正输入,函数的输出等于输入。对于严格为负的输出,函数的输出等于零。

整流线性单元 (ReLU) 激活函数。

整流线性单元 (ReLU) 激活函数。来源:DataCamp

使用 ReLU 的优点

ReLu 最显著的优势之一是它有助于缓解消失梯度问题。消失梯度问题是使用反向传播训练深度神经网络时出现的挑战。当用于更新网络 聊天机器人构建器 权重的梯度在网络中移动时变得非常小或“消失”时,就会发生这种情况。这会阻止权重正确更新,从而减慢或停止学习过程。您可以在我们的PyTorch 深度学习入门课程中阅读有关消失梯度问题的完整解释。

由于 ReLU 函数没有上限,并且当 x 值较高时梯度不会收敛到零,因此 ReLU 克服了梯度消失问题,该问题在使用 sigmoid 和 softmax 激活函数时很常见。请查看我们的单独文章以了解其他流行的激活函数。

此外,由于 ReLU 对所有负输入都输出零,因此它自然会导致稀疏激活。换句话说,由于在训练期间只有一部分神经元被激活,因此这会导致更高效的计算。

最后,与 tanh 或 sigmoid 等更复杂的函数相比,这种行为允许网络扩展到多层,而不会显著增加计算负担。这使得 ReLU 成为最常见的默认激活函数,如果您不确定在模型中使用哪种激活函数,通常是一个不错的选择。

在 PyTorch 中实现 ReLU

在 PyTorch 中实现 ReLU 相当容易。你只需要使用该nn.ReLU()函数创建函数并将其添加到你的模型中。

在下面的例子中,我们将 ReLU 函数应 命中資料庫 用于整流线性单元一个简单的神经元,并计算负值情况下的梯度。
供电
请注意,输入值为 -1,ReLU 函数返回零。回想一下,对于 x 的负值,ReLU 的输出始终为零,事实上,梯度在任何地方都为零,因为对于任何 x 的负值,函数都不会发生变化。

ReLU 的变体

ReLU 可以说是最常用的激活函数,但有时它可能不适用于您要解决的问题。幸运的是,深度学习研究人员已经开发了一些 ReLU 变体,可能值得在您的模型中进行测试。以下是最受欢迎的替代方案

泄漏的 ReLU

f(x)= 最大值(0.01x,x)

Leaky ReLU 的目标是解决所谓的“Dyi整流线性单元ng ReLU”问题。我们已经提到,ReLU 对于负输入总是输出空值。当这种情况发生时,具有负值的节点的梯度将在剩余的训练中设置为零,这将阻止该参数学习。为了克服这一挑战,Leaky ReLU 对负输入使用乘数。因此,函数不会为零,而是具有较小的负斜率,如下图所示:

泄漏的 ReLU 激活函数。

Leaky ReLU 激活函数。来源:DataCamp

参数 ReLU (PReLU)

Leaky ReLU 提供了一个乘数来克服 Deying ReLU 问题。参数化 ReLU (PReLU) 更进一步,提供了一个可学习的参数 (a),而不是一个简单的常数来计算负输入的值:

f(x)= 最大值(ax,x)

虽然 PReLU 在准确性和适应性方面比 ReLU 和 Leaky ReLU 有所改进(它特别适合在复杂任务中捕捉模式,例如计算机视觉或语音识别),但它也增加了模型的复杂性。训练此参数可能很耗时,并且需要仔细调整和正则化。

参数 ReLU 激活函数

参数 ReLU 激活函数。来源:DataCamp

指数线性单元(ELU)。

ReLU 的另一个很好的替代品是指数线性整流线性单元单元 (ELU),其公式如下:

 

与 ReLU 相比,ELU 具有负值,这使得它们可以将平均单位激活推近零,从而使它们不易出现梯度消失。此外,使平均激活更接近零可以加快学习和收敛速度。

ELU 激活函数

ELU 激活函数。来源:DataCamp

ReLU 的常见问题

ReLU 是一个很棒的激活函数,但它并不是万能的。具体来说,ReLU 可能存在两个众所周知的问题。

第一个是 ReLU 死亡问题。如前所述,ReLU 总是为负输入输出空值。这可能导致权重以某种方式更新,以至于神经元永远不会再在任何数据点上激活。

如果发生这种情况,那么从那一刻起,流经该单元的梯度将永远为零,从而阻止该参数进行学习。ReLU 变体(例如 Leaky ReLU 和 PReLU)就是为解决此问题而创建的。

另一方面,不稳定的梯度也可能出现

整流线性单元

。梯度爆炸问题发生在梯度越来越大时,导致参数更新量巨大,训练发散。

在这种情况下,较大的误差梯度会累积,模型权重会变得过大。此问题会导致更长的训练时间和较差的模型性能。有几种技术可以解决梯度爆炸问题,包括梯度裁剪和批量归一化。

返回頂端