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

Gated Recurrent Unit (GRU)

门控循环单元(GRU)是一种循环单元,其更新门和重置门会控制它记住的内容。涵盖方程、GRU 与 LSTM 的比较以及代码。

门控循环单元(GRU)是一种循环神经网络(RNN)单元,它逐步处理序列,并使用两个可学习的门(更新门和重置门)来决定每一步保留多少记忆、覆盖多少记忆。Kyunghyun Cho 及其同事于 2014 年在用于机器翻译的 RNN 编码器-解码器中提出了 GRU。这些门让梯度可以跨越许多时间步传播,因此相比受梯度消失问题困扰的简单 RNN,GRU 能学习更长距离的依赖关系。GRU 是长短期记忆网络(LSTM)的简化版本:它只有一个隐藏状态,而不是两个;只有三个权重块,而不是四个。GRU 可用于时间序列分析、语音和其他序列数据。

GRU 的工作原理#

在每个时间步 t,GRU 会结合当前输入 xₜ 和前一个隐藏状态 hₜ₋₁。两个门使用 sigmoid 函数为状态中的每个元素输出 0 到 1 之间的值:

  • 重置门:rₜ = σ(Wᵣxₜ + Uᵣhₜ₋₁ + bᵣ),用于决定生成新内容时要使用多少先前状态。接近 0 的值会让单元忽略历史信息,这在新短语开头等边界位置很有帮助。
  • 更新门:zₜ = σ(W_z xₜ + U_z hₜ₋₁ + b_z),用于决定要保留多少先前状态。接近 1 的值会让旧状态几乎原样传递,这正是信息能够在长序列中留存的方式。
  • 候选状态:h̃ₜ = tanh(Wxₜ + U(rₜ ⊙ hₜ₋₁) + b),根据输入和经过重置门缩放的历史信息生成新的候选内容,并使用 tanh 将值限制在 −1 到 1 之间。
  • 新状态:hₜ = (1 − zₜ) ⊙ h̃ₜ + zₜ ⊙ hₜ₋₁,逐元素将候选状态与旧状态混合。

当更新门保持接近 1 时,新状态几乎就是旧状态的副本,梯度会沿副本反向传递,衰减很小。这条加法路径发挥的作用与 LSTM 中的单元状态相同。以上公式遵循原始论文,其中 zₜ 对旧状态加权;有些资料会互换 zₜ 和 1 − zₜ 的作用,但描述的仍是同一个单元。PyTorch 的 nn.GRU 使用相同的混合方式,但在矩阵乘法后应用重置门,即 rₜ ⊙ (Uhₜ₋₁ + b),这是广泛使用的候选状态变体。

PyTorch 中的 GRU#

下面的代码片段会让 GRU 处理一系列特征向量,例如视频中每一帧的特征,并比较它与相同宽度的 LSTM 的参数规模:

import torch
from torch import nn

# A sequence of 64-dim features from 5 video frames: (batch, time, features)
frames = torch.randn(1, 5, 64)

# A GRU with a 128-dim hidden state, and an LSTM of the same size for comparison
gru = nn.GRU(input_size=64, hidden_size=128, batch_first=True)
lstm = nn.LSTM(input_size=64, hidden_size=128, batch_first=True)

# outputs holds the hidden state at every step; h_n is the final state
outputs, h_n = gru(frames)
print(f"Outputs: {tuple(outputs.shape)}, final state: {tuple(h_n.shape)}")

# GRU weights cover 3 blocks (reset, update, candidate); LSTM weights cover 4
gru_params = sum(p.numel() for p in gru.parameters())
lstm_params = sum(p.numel() for p in lstm.parameters())
print(f"GRU: {gru_params:,} parameters, LSTM: {lstm_params:,} parameters")

它会输出 Outputs: (1, 5, 128), final state: (1, 1, 128) 和 GRU: 74,496 parameters, LSTM: 99,328 parameters。GRU 会为每一帧返回一个 128 维状态,以及一个概括整个序列、可供下游分类器使用的最终状态;其参数量恰好是 LSTM 的四分之三。

GRU 与 LSTM 和 Transformer#

  • LSTM:除了隐藏状态,还保留单独的单元状态,并使用三个门(输入门、遗忘门和输出门)。GRU 合并这两个状态并去掉输出门,因此每一步的训练速度更快,参数也更少。Junyoung Chung 及其同事在 2014 年进行的实证比较中发现,GRU 在复调音乐和语音信号建模任务上的表现与 LSTM 相当;实际上,两者并没有哪一个能在所有任务中始终胜出。
  • 简单 RNN:每一步都会覆盖整个状态,没有任何门,因此在长序列中梯度会消失或爆炸,也难以关联间隔很长的事件。
  • Transformer:使用注意力并行处理序列中的所有位置,在 GPU 上训练速度快得多,也更擅长处理长距离上下文,因此 Transformer 已在大多数语言任务中取代循环网络。无论序列有多长,GRU 都能保持固定大小的状态和每步固定的计算成本,因此仍适用于流式音频、传感器数据和小型设备。

应用场景#

  • 光流:获得 ECCV 2020 最佳论文奖的 RAFT 使用卷积 GRU,通过多次迭代不断优化光流估计。卷积 GRU 会用卷积替代矩阵乘法,因此其状态是特征图。
  • 预测性维护与预测:GRU 会读取振动、温度或需求数据流,并预测故障或未来数值;这类模型通常部署在嵌入式硬件上,因为小模型很重要。
  • 语音和音频:设备端音频模型会使用 GRU,因为它能以较小且固定的内存逐帧处理音频。RNNoise 降噪器会在普通 CPU 上实时运行其 GRU 层。
  • 动作识别:GRU 会读取逐帧特征或关键点序列,并为视频片段输出动作标签。YOLO26 的跟踪模式会为每个人分配跨帧保持不变的 ID,从而生成每个人对应的边界框或姿态关键点序列,供 GRU 进行分类。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 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 的未来!

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