Gated Recurrent Unit (GRU)
Un'unità ricorrente con porte (GRU) è una cella ricorrente in cui le porte di aggiornamento e di reset controllano ciò che viene ricordato. Panoramica delle equazioni, del confronto tra GRU e LSTM e del codice.
Un'unità ricorrente con gating (GRU) è una cella di rete neurale ricorrente (RNN) che elabora una sequenza un passo alla volta e usa due gate appresi, un gate di aggiornamento e un gate di reset, per decidere a ogni passo quanta memoria conservare e quanta sovrascrivere. Kyunghyun Cho e colleghi l'hanno introdotta nel 2014 in un encoder-decoder RNN per la traduzione automatica. I gate consentono ai gradienti di propagarsi attraverso molti passi temporali, così una GRU apprende dipendenze a lungo raggio meglio di una RNN semplice, che soffre del problema del gradiente evanescente. La GRU è una versione semplificata della rete a memoria a lungo e breve termine (LSTM): ha uno stato nascosto invece di due e tre blocchi di pesi invece di quattro, ed è usata per l'analisi delle serie temporali, il riconoscimento vocale e altri dati sequenziali.
Come funziona una GRU#
A ogni passo temporale t, una GRU combina l'input corrente xₜ con il precedente stato nascosto hₜ₋₁. Due gate usano la funzione sigmoide per restituire valori compresi tra 0 e 1 per ogni elemento dello stato:
- Gate di reset: rₜ = σ(Wᵣxₜ + Uᵣhₜ₋₁ + bᵣ) determina quanto dello stato precedente usare quando si propone un nuovo contenuto. Valori vicini a 0 consentono alla cella di ignorare la propria storia, il che è utile ai confini, per esempio all'inizio di una nuova frase.
- Gate di aggiornamento: zₜ = σ(W_z xₜ + U_z hₜ₋₁ + b_z) determina quanta parte dello stato precedente conservare. Valori vicini a 1 copiano quasi invariato lo stato precedente, consentendo alle informazioni di persistere per intervalli lunghi.
- Stato candidato: h̃ₜ = tanh(Wxₜ + U(rₜ ⊙ hₜ₋₁) + b) propone nuovi contenuti a partire dall'input e dalla storia scalata dal reset, usando tanh per mantenere i valori tra −1 e 1.
- Nuovo stato: hₜ = (1 − zₜ) ⊙ h̃ₜ + zₜ ⊙ hₜ₋₁ combina elemento per elemento lo stato candidato con quello precedente.
Quando il gate di aggiornamento resta vicino a 1, il nuovo stato è quasi una copia di quello precedente e il gradiente si propaga all'indietro attraverso quella copia con poca attenuazione. Questo percorso additivo svolge lo stesso ruolo dello stato della cella in una LSTM. Le equazioni sopra seguono l'articolo originale, in cui zₜ pesa lo stato precedente; alcuni testi scambiano i ruoli di zₜ e 1 − zₜ, descrivendo la stessa cella. nn.GRU di PyTorch usa la stessa combinazione, ma applica il gate di reset dopo la moltiplicazione matriciale, come rₜ ⊙ (Uhₜ₋₁ + b): una variante molto usata dello stato candidato.
GRU in PyTorch#
Il frammento seguente esegue una GRU su una sequenza di vettori di caratteristiche, come le caratteristiche per fotogramma di un video, e ne confronta le dimensioni con quelle di una LSTM della stessa ampiezza:
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")Stampa Outputs: (1, 5, 128), final state: (1, 1, 128) e GRU: 74,496 parameters, LSTM: 99,328 parameters. La GRU restituisce uno stato a 128 dimensioni per ogni fotogramma, oltre allo stato finale che riassume l'intera sequenza per un classificatore a valle; richiede esattamente tre quarti dei parametri di una LSTM.
GRU a confronto con LSTM e transformer#
- LSTM: Mantiene uno stato della cella separato accanto allo stato nascosto e usa tre gate (input, dimenticanza e output). La GRU unisce i due stati ed elimina il gate di output, quindi si addestra più velocemente a ogni passo con meno parametri. In un confronto empirico del 2014 condotto da Junyoung Chung e colleghi, le GRU hanno eguagliato le LSTM nella modellazione della musica polifonica e dei segnali vocali; nella pratica, nessuna delle due prevale in modo costante in tutti i compiti.
- RNN semplice: Sovrascrive l'intero stato a ogni passo senza usare gate, quindi i gradienti svaniscono o esplodono nelle sequenze lunghe e la rete fatica a collegare eventi separati da intervalli ampi.
- Transformer: Elabora in parallelo tutte le posizioni di una sequenza usando l'attenzione, si addestra molto più rapidamente sulle GPU e gestisce meglio il contesto a lungo raggio; per questo i transformer hanno sostituito le reti ricorrenti nella maggior parte dei compiti linguistici. Una GRU mantiene uno stato di dimensioni costanti e un costo costante per passo, indipendentemente dalla lunghezza della sequenza, il che resta utile per audio in streaming, dati dei sensori e dispositivi piccoli.
Applicazioni#
- Flusso ottico: RAFT, vincitore del premio per il miglior articolo a ECCV 2020, perfeziona la stima del flusso attraverso molte iterazioni usando una GRU convoluzionale, una GRU in cui le moltiplicazioni matriciali sono sostituite da convoluzioni, così che il suo stato sia una mappa di caratteristiche.
- Manutenzione predittiva e previsione: Le GRU leggono flussi di dati su vibrazioni, temperatura o domanda e prevedono guasti o valori futuri, spesso su hardware integrato dove è importante avere un modello piccolo.
- Riconoscimento vocale e audio: I modelli audio eseguiti sul dispositivo usano GRU perché elaborano l'audio fotogramma per fotogramma con una memoria ridotta e fissa. Il sistema di soppressione del rumore RNNoise esegue i suoi livelli GRU in tempo reale su una normale CPU.
- Riconoscimento delle azioni: Una GRU legge una sequenza di caratteristiche o punti chiave per fotogramma e restituisce un'etichetta di azione per la clip. YOLO26 in modalità di tracciamento assegna a ogni persona un ID persistente tra i fotogrammi; ciò produce le sequenze per persona di riquadri o punti chiave della posa che una GRU di questo tipo classifica.










