Gated Recurrent Unit (GRU)
Eine gesteuerte rekurrente Einheit (GRU) ist eine rekurrente Zelle, deren Aktualisierungs- und Rücksetz-Gates steuern, was sie sich merkt. Behandelt ihre Gleichungen, GRU vs. LSTM und Code.
Eine gegatete rekurrente Einheit (GRU) ist eine Zelle eines rekurrenten neuronalen Netzes (RNN), die eine Sequenz Schritt für Schritt verarbeitet. Mithilfe zweier erlernter Gates – eines Update-Gates und eines Reset-Gates – entscheidet sie bei jedem Schritt, wie viel ihres Zustands erhalten und wie viel überschrieben wird. Kyunghyun Cho und Kollegen stellten sie 2014 in einem RNN-Encoder-Decoder für maschinelle Übersetzung vor. Die Gates lassen Gradienten über viele Zeitschritte hinweg fließen, sodass eine GRU Abhängigkeiten über größere zeitliche Abstände erlernt als ein einfaches RNN, das unter dem Problem des verschwindenden Gradienten leidet. Die GRU ist eine vereinfachte Variante des Langzeit-Kurzzeitgedächtnisnetzes (LSTM): Sie hat einen statt zwei verborgenen Zuständen und drei Gewichtsblöcke statt vier. Sie wird für Zeitreihenanalysen, Sprache und andere Sequenzdaten eingesetzt.
So funktioniert eine GRU#
Bei jedem Zeitschritt t kombiniert eine GRU die aktuelle Eingabe xₜ mit ihrem vorherigen verborgenen Zustand hₜ₋₁. Zwei Gates verwenden die Funktion Sigmoid, um für jedes Element des Zustands einen Wert zwischen 0 und 1 auszugeben:
- Reset-Gate: rₜ = σ(Wᵣxₜ + Uᵣhₜ₋₁ + bᵣ) legt fest, wie viel des vorherigen Zustands beim Vorschlagen neuer Inhalte verwendet wird. Werte nahe 0 ermöglichen es der Zelle, ihre Vorgeschichte zu ignorieren. Das hilft an Übergängen, etwa am Anfang einer neuen Formulierung.
- Update-Gate: zₜ = σ(W_z xₜ + U_z hₜ₋₁ + b_z) legt fest, wie viel des vorherigen Zustands erhalten bleibt. Werte nahe 1 übernehmen den alten Zustand nahezu unverändert. So bleiben Informationen über lange Abschnitte hinweg erhalten.
- Kandidatenzustand: h̃ₜ = tanh(Wxₜ + U(rₜ ⊙ hₜ₋₁) + b) schlägt neue Inhalte aus der Eingabe und dem durch das Reset-Gate skalierten vorherigen Zustand vor. Dafür wird tanh verwendet, damit die Werte zwischen −1 und 1 liegen.
- Neuer Zustand: hₜ = (1 − zₜ) ⊙ h̃ₜ + zₜ ⊙ hₜ₋₁ kombiniert elementweise den Kandidaten mit dem alten Zustand.
Bleibt das Update-Gate nahe 1, ist der neue Zustand fast eine Kopie des alten. Der Gradient wird durch diese Kopie zurückgeleitet und nimmt dabei nur wenig ab. Dieser additive Pfad erfüllt dieselbe Funktion wie der Zellzustand eines LSTM. Die obigen Gleichungen folgen dem Originalartikel, in dem zₜ den alten Zustand gewichtet. Manche Texte vertauschen die Rollen von zₜ und 1 − zₜ, beschreiben damit aber dieselbe Zelle. PyTorchs nn.GRU verwendet dieselbe Kombination, wendet das Reset-Gate jedoch nach der Matrixmultiplikation an: rₜ ⊙ (Uhₜ₋₁ + b). Das ist eine weitverbreitete Variante des Kandidatenzustands.
GRU in PyTorch#
Das folgende Beispiel führt eine GRU über eine Sequenz von Merkmalsvektoren aus, beispielsweise von Bild zu Bild berechnete Merkmale eines Videos, und vergleicht ihre Größe mit einem gleich breiten 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")Die Ausgabe lautet Outputs: (1, 5, 128), final state: (1, 1, 128) und GRU: 74,496 parameters, LSTM: 99,328 parameters. Die GRU gibt pro Bild einen 128-dimensionalen Zustand sowie den Endzustand zurück, der die gesamte Sequenz für einen nachgelagerten Klassifikator zusammenfasst. Sie benötigt genau drei Viertel der Parameter eines LSTM.
GRU, LSTM und Transformer im Vergleich#
- LSTM: Behält zusätzlich zum verborgenen Zustand einen separaten Zellzustand und verwendet drei Gates (Eingabe-, Vergessens- und Ausgabe-Gate). Die GRU führt die beiden Zustände zusammen und lässt das Ausgabe-Gate weg. Dadurch trainiert sie pro Schritt schneller und benötigt weniger Parameter. In einem empirischen Vergleich von Junyoung Chung und Kollegen aus dem Jahr 2014 erzielten GRUs bei der Modellierung polyphoner Musik und Sprachsignale vergleichbare Ergebnisse wie LSTMs. In der Praxis ist keines der beiden Verfahren über alle Aufgaben hinweg durchgehend überlegen.
- Einfaches RNN: Überschreibt seinen gesamten Zustand bei jedem Schritt, ohne Gates zu verwenden. Dadurch verschwinden oder explodieren die Gradienten über lange Sequenzen hinweg, und das Netz kann Ereignisse, zwischen denen große zeitliche Abstände liegen, nur schwer verknüpfen.
- Transformer: Verarbeitet alle Positionen einer Sequenz parallel mithilfe von Attention. Dadurch trainiert er auf GPUs deutlich schneller und erfasst längerfristigen Kontext besser. Deshalb haben Transformer rekurrente Netze bei den meisten Sprachaufgaben ersetzt. Eine GRU behält unabhängig von der Sequenzlänge einen Zustand fester Größe und gleichbleibende Kosten pro Schritt bei. Daher eignet sie sich weiterhin für Audio in Echtzeit, Sensordaten und kleine Geräte.
Anwendungen#
- Optischer Fluss: RAFT, das den Preis für den besten Beitrag auf der ECCV 2020 erhielt, verfeinert seine Flussschätzung über viele Iterationen mithilfe einer faltenden GRU. Bei dieser GRU werden die Matrixmultiplikationen durch Faltungen ersetzt, sodass ihr Zustand eine Feature-Map ist.
- Vorausschauende Wartung und Prognosen: GRUs verarbeiten fortlaufend Schwingungs-, Temperatur- oder Nachfragedaten und sagen Ausfälle oder zukünftige Werte voraus. Sie eignen sich häufig für eingebettete Hardware, bei der ein kleines Modell wichtig ist.
- Sprache und Audio: Audiomodelle auf dem Gerät verwenden GRUs, weil sie Audio Bild für Bild mit einem kleinen, festen Speicherbedarf verarbeiten. Der Rauschunterdrücker RNNoise führt seine GRU-Schichten in Echtzeit auf einer gewöhnlichen CPU aus.
- Aktionserkennung: Eine GRU verarbeitet eine Sequenz von Merkmalen oder Schlüsselpunkten pro Bild und gibt eine Aktionsklasse für den Clip aus. YOLO26 vergibt im Tracking-Modus jeder Person über mehrere Bilder hinweg eine dauerhafte ID. Dadurch entstehen Sequenzen von Bounding-Boxen oder Poseschlüsselpunkten pro Person, die eine solche GRU klassifiziert.










