Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Leaky ReLU

Leaky ReLU 会以较小的斜率(通常为 0.01)传递负输入,使梯度持续流动,并避免神经元陷入 ReLU 死亡问题。

Leaky ReLU(带泄漏的线性整流单元)是一种激活函数:输入为正时,它原样返回输入;输入为负时,它会乘以一个较小的固定斜率,例如 0.01。它是对标准 ReLU 的改进;标准 ReLU 对所有负输入都输出零,而 Leaky ReLU 让负值仍产生较小的输出,更重要的是,能在反向传播期间产生非零梯度。Andrew Maas、Awni Hannun 和 Andrew Ng 在 2013 年一项关于语音识别声学模型中整流激活函数的研究里介绍了该函数,并使用了 0.01 的斜率。它用于需要保持梯度流动的深度学习模型,从生成对抗网络判别器到较早期 YOLO 的目标检测器,以及运行分段线性激活量化模型的神经处理单元。

Leaky ReLU 的工作原理#

当 x > 0 和 x ≤ 0 分别满足 f(x) = x 和 f(x) = αx 时,Leaky ReLU 会计算相应的值;其中负斜率 α 是一个介于 0 和 1 之间的固定超参数。对于正输入,它的导数为 1;对于负输入,导数为 α,因此每个输入都会将一部分梯度传回生成它的权重。不同来源和框架使用的常见斜率有所不同:PyTorch 的 nn.LeakyReLU默认值为 0.01,TensorFlow 的 tf.nn.leaky_relu 默认值为 0.2,而 Keras 的 LeakyReLU 层默认值为 0.3。下面的代码将负输入分别传入 ReLU 和 Leaky ReLU,并计算各自的梯度:

import torch
from torch import nn

# Negative pre-activations, the inputs a ReLU unit turns into zeros
x = torch.tensor([-3.0, -1.0, -0.5], requires_grad=True)

for activation in (nn.ReLU(), nn.LeakyReLU(negative_slope=0.01)):
    y = activation(x)
    y.sum().backward()  # gradient that flows back toward the weights
    print(f"{activation}: output {y.detach().numpy()}, gradient {x.grad.numpy()}")
    x.grad = None

程序会打印 ReLU(): output [0. 0. 0.], gradient [0. 0. 0.] 和 LeakyReLU(negative_slope=0.01): output [-0.03 -0.01 -0.005], gradient [0.01 0.01 0.01]。ReLU 不会将梯度从这些输入传回,因此梯度下降无法改变生成这些输入的权重;Leaky ReLU 则会传回上游梯度的 1%。

ReLU 神经元死亡问题#

当 ReLU 神经元的权重和偏置发生偏移,以至于它对训练数据中的所有输入都产生负的预激活值时,该神经元就会死亡。此时,它的输出始终为零,梯度也始终为零,输入权重再也不会更新,因此该神经元会从神经网络中永久失效。较高的学习率或较大的负偏置更新会增加这种情况发生的可能性。Leaky ReLU 会在负值区域保留一个较小的梯度,因此偏移到负值区域的神经元仍有机会恢复:

ReLU 神经元死亡问题不同于梯度消失问题;后者指梯度在经过许多使用饱和函数的层(例如 sigmoid 或 tanh)时逐渐变小。

  • ReLU:对负输入输出精确的零值,因此激活结果稀疏、计算成本低,但神经元可能死亡。Leaky ReLU 则放弃了精确稀疏性,以换取处处存在的梯度。
  • 参数化 ReLU(PReLU):训练期间学习负斜率(通常每个通道一个值),而非将其固定。Kaiming He 及其同事将斜率初始化为 0.25,这也是 PyTorch 的 nn.PReLU 默认值。
  • SiLU 和 GELU:这两种平滑曲线在负输入时会略微低于零,并且在零点处没有尖角。SiLU 是现代 YOLO 模型的默认激活函数,GELU 则常见于 Transformer。两者每个值都需要进行一次指数运算,而 Leaky ReLU 只需比较和乘法。

Leaky ReLU 的应用场景#

  • DCGAN 判别器:DCGAN 架构在每个判别器层中都使用了斜率为 0.2 的 Leaky ReLU,因此即使判别器拒绝某张图像,生成器仍能获得有用的梯度;许多后续 GAN 也沿用了这一选择。
  • 早期 YOLO 检测器:原始 YOLO 在除最后一层外的所有层中都使用了斜率为 0.1 的 Leaky ReLU,YOLOv2 和 YOLOv3 也如此;YOLOv5 一直使用它,直到 2021 年 1 月发布的 v4.0 版本将其替换为 SiLU。
  • 图注意力网络:这类图神经网络使用斜率为 0.2 的 Leaky ReLU,为每个节点应该关注多少邻居节点进行评分。
  • 边缘 AI 加速器:运行量化模型的整数神经处理单元可以将分段线性激活融合到前面的卷积中。AMD 的 Xilinx DPU 会对 ReLU 和 Leaky ReLU 执行此操作,但会在主机 CPU 上运行 sigmoid,因此也会在主机上运行 SiLU。

Ultralytics YOLO 模型 YAML 文件接受一个 activation 键,可替换所有标准卷积块中的默认 SiLU,因此可以使用 activation: nn.LeakyReLU(0.1015625) 训练 YOLO26,使其匹配 DPU 固定的斜率 26/256。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来