机器学习中的 Leaky ReLU 激活函数是什么?2025年2月28日 | 阅读 7 分钟 现在,我们将注意力转向神经网络,它是机器学习中一个强大的工具,能够解决从图像识别到自然语言处理等各种复杂问题。从根本上说,这些神经网络有一个非常重要的组成部分,称为激活函数。尽管它们看似微不足道,但这些函数对于决定网络学习和表示复杂模式的能力至关重要,并且能够从数据中进行泛化。 在众多激活函数中,ReLU 实际上是深度学习架构的基石:简单而有效。ReLU 的出现极大地改变了人们对激活函数的整体认知,并部分解决了困扰之前模型的“梯度消失”问题。尽管 ReLU 被广泛使用,但它也存在缺点。最普遍的问题之一是“死亡 ReLU”问题;即神经元会死亡并变得不活跃,从而停止所有的学习。为了解决这些问题,人们开发了多种 ReLU 的变体。其中一个非常重要的变体是 Leaky ReLU。它允许负输入值有一个微小的斜率,通过让神经元继续为模型的学习做出贡献来保持神经元的活性。 激活函数激活函数是神经网络的生命线,是神经元之间的决策者,决定一个神经元是否被触发或激活。换句话说,它们在网络中引入了非线性,使得网络能够学习和建模输入与其对应输出之间复杂的关系。没有激活函数,神经网络与线性回归模型无异,其捕捉数据潜在模式的能力将受到严重限制。非线性是至关重要的,因为现实世界数据的大多数特征本质上是非线性的。例如,线性模型无法真正找出图像像素与其对象之间的关系。ReLU、Sigmoid 和 Tanh 提供的这些非线性映射使神经网络在解决图像识别、语音处理甚至玩游戏等复杂任务方面如此强大。 所使用的激活函数的类型会显著影响训练过程和收敛速度,最终影响神经网络的性能。虽然线性激活函数在某些情况下很有用,但无法模拟大多数机器学习任务的复杂性。非线性激活函数使网络能够在训练过程中从错误中学习并进行调整,从而能够做出更准确的预测,并能很好地泛化到新数据。 ReLU 问题ReLU 激活函数以其简单的数学表达式 f(x) = max(0, x) 极大地革新了深度学习,因为它简单且计算效率高。然而,没有任何系统是完美的,总会存在一些缺陷。使用 ReLU 时出现的一个关键问题被称为“死亡 ReLU”问题。当网络中的大部分神经元永久“死亡”时,就会发生这个问题,意味着它们将继续输出零,而不管输入给神经元的值是多少。 当输入为负时,函数的行为不可避免地导致了死亡 ReLU 问题。由于 ReLU 对任何小于零的输入都输出零,因此在训练期间网络权重更新导致 ReLU 函数的输入落入负数范围时,神经元实际上会“死亡”。一旦神经元死亡,它就会停止对学习过程的贡献,因为它的梯度变为零,并且在反向传播过程中不会再有任何更新。随着时间的推移,越来越多的神经元死亡,网络的学习能力会下降,这可能会严重影响模型性能,尤其是在深度网络中,因为学习能力在那里非常重要。 死亡 ReLU 问题会导致网络中的整个部分变得不活跃,并导致模型中有效神经元和层数量的减少。这不仅会减慢学习过程,还会影响模型从训练数据泛化到未见数据的能力,从而完全降低整个网络的性能。 死亡 ReLU 问题暴露了严重依赖 ReLU 的深度学习架构的一个严重漏洞。因此,机器学习社区一直在努力寻找和开发能够保留 ReLU 的优点(包括简单性和高效计算),同时消除其缺点的其他激活函数。 这为替代方案奠定了基础,因为它旨在在训练过程中保持神经元的激活状态,从而维持学习和适应能力。创建替代方案的目的是保留 ReLU 提供的非线性,但目的是在输入为负时使神经元恢复,而不是进入永久不活跃状态。这导致了 ReLU 的许多变体,每种变体都以不同的方式克服了死亡 ReLU 问题。其中,Leaky ReLU 被证明是一个有前途的解决方案,它对标准 ReLU 函数进行了简单而有效的修改。Leaky ReLU 允许负输入值产生一个不等于零的微小输出,因此确保神经元即使在接收负输入时也保持活跃,从而减轻了神经元死亡的风险并提高了神经网络的整体鲁棒性。 Leaky ReLU 激活函数Leaky ReLU 是对传统 ReLU 激活函数的一种修改,旨在解决死亡 ReLU 问题。与传统 ReLU 函数对任何负输入都输出零不同,该函数对小于零的输入值提供了一个微小的斜率;因此,与负输入完全关闭不同,由 Leaky ReLU 激活的神经元会产生一个非零但很小的输出。 如果 x>0 则 f(x)=x 否则 如果 x<=0 则 f(x)=αx 在此激活函数中,x 用作输入变量或实体。α 是一个小的正常量,它决定了函数对其负输入的斜率。α 的典型默认值为 0.01,尽管可以根据神经网络的特定要求进行调整。 Leaky ReLU 可以避免死亡 ReLU 问题,因为神经元仍然可以在输入为负数的情况下更新其权重。在标准 ReLU 中,神经元对负输入输出零,梯度也会为零;因此,这些神经元将不会有任何学习。另一方面,由于在负输入的情况下 Leaky ReLU 具有非零斜率,因此即使在负数范围内,梯度也非零并且可以进行更新。即使只是一个小但重要的调整,这对学习过程也有很大的影响:首先,所有神经元都有机会从负输入中恢复;因此,这反过来有助于避免网络的大部分区域处于空状态。其次,因此,它保持了 ReLU 在计算效率方面的优势,并且/或者避免了 Sigmoid 和 Tanh 激活函数相关的梯度消失问题。 Leaky ReLU 中最关键的参数是 α。具有较小 α 值可确保网络保留 ReLU 的大部分优势。α 值越大,负输入神经元可能会获得更显著的更新,这可能会为某些问题带来更快的收敛。然而,α 的适当值非常重要,因为如果其值过大,网络将像线性模型一样运行,而过小可能无法解决死亡 ReLU 问题。 对于 Leaky ReLU 的实现,可以使用底层代码。 此输出显示了 Leaky ReLU 如何通过应用一个小斜率(alpha = 0.01)而不是将其归零来处理负值。 Leaky ReLU 已在大多数深度学习框架中实现,并且在模型中使用它非常容易。以下是同时使用 TensorFlow 和 PyTorch 的 Leaky ReLU 的示例。 在 TensorFlow 中,将使用 tf.keras.layers.LeakyReLU 层。下面显示了一个简单的示例 在 PyTorch 中,可以通过名为 LeakyReLU 的 torch.nn 模块实现 Leaky ReLU。以上示例为 下一个主题使用机器学习进行潜在客户生成 |
我们请求您订阅我们的新闻通讯以获取最新更新。