Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Licenza YOLO
Torna al glossario di Ultralytics

ReLU (Rectified Linear Unit)

ReLU (unità lineare rettificata) restituisce max(0, x), lasciando passare gli input positivi e azzerando quelli negativi. Include gradiente, ReLU morente, varianti e codice PyTorch.

L'unità lineare rettificata (ReLU) è la funzione di attivazione f(x) = max(0, x): lascia invariati gli input positivi e restituisce zero per tutti gli altri. Questo semplice confronto fornisce a una rete neurale (NN) la non linearità necessaria per apprendere schemi curvi, con un costo computazionale pressoché nullo. ReLU è diventata la funzione di attivazione predefinita per gli strati nascosti nel deep learning, dopo il suo utilizzo da parte di Vinod Nair e Geoffrey Hinton nel 2010 e la vittoria, nella sfida ImageNet del 2012, di AlexNet, una rete neurale convoluzionale (CNN) basata su ReLU. Resta il riferimento con cui si confrontano funzioni di attivazione più recenti come SiLU e GELU.

Come funziona ReLU#

La derivata di ReLU è 1 per gli input positivi e 0 per quelli negativi. Esattamente a zero la derivata non è definita e framework come PyTorch usano 0. Questi due valori spiegano le proprietà principali di ReLU:

  • Calcolo economico: il passaggio forward è un confronto con zero e quello backward è una maschera, senza esponenziali come in sigmoid o tanh.
  • Nessuna saturazione per gli input positivi: un gradiente esattamente pari a 1 attraversa inalterato ogni unità attiva, quindi i segnali di errore non si riducono mentre risalgono molti strati; ciò contrasta il problema del gradiente evanescente causato dalle funzioni saturanti.
  • Attivazioni sparse: ogni input negativo diventa esattamente zero, perciò in un dato momento è attiva solo una parte dello strato. Con pesi inizializzati casualmente, circa metà delle unità di uno strato restituisce zero per un dato input.
  • Lineare a tratti: una rete costruita con ReLU calcola una funzione lineare a tratti dell'input, con molte regioni lineari che si uniscono nei punti in cui le unità si attivano o si disattivano.

L'esempio PyTorch qui sotto applica nn.ReLU e usa autograd per calcolare il gradiente negli stessi punti:

import torch
from torch import nn

relu = nn.ReLU()

# Inputs on both sides of zero, tracked so PyTorch can compute gradients
x = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0], requires_grad=True)
y = relu(x)

# Backpropagate a gradient of 1 from each output to its input
y.sum().backward()

print(f"Output:   {y.tolist()}")
print(f"Gradient: {x.grad.tolist()}")

Stampa i risultati [0.0, 0.0, 0.0, 0.5, 2.0] e i gradienti [0.0, 0.0, 0.0, 1.0, 1.0]. Gli input positivi passano senza alterare il gradiente; gli input negativi e lo zero non ricevono alcun gradiente, origine sia della sparsità di ReLU sia del suo principale modo di fallimento.

Il problema delle ReLU inattive#

Un'unità ReLU il cui input è negativo per ogni esempio nei dati di addestramento restituisce zero e riceve un gradiente nullo; i suoi pesi non cambiano più e l'unità è di fatto morta. In genere le unità muoiono quando un aggiornamento ampio dei pesi, spesso dovuto a un tasso di apprendimento elevato, spinge il bias molto al di sotto dello zero. Poche unità morte hanno un impatto ridotto, mentre un addestramento mal configurato può uccidere una parte consistente di uno strato. L'inizializzazione He, che scala i pesi iniziali per gli strati ReLU, insieme a tassi di apprendimento moderati e alla normalizzazione dei batch, mantiene attive la maggior parte delle unità; le varianti leaky eliminano il problema impedendo al gradiente di azzerarsi.

Varianti di ReLU#

  • Leaky ReLU: moltiplica gli input negativi per una piccola pendenza fissa, in genere 0,01, così anche le unità inattive ricevono un gradiente.
  • PReLU: apprende la pendenza negativa durante l'addestramento. Kaiming He e i colleghi la introdussero nel 2015, nello stesso articolo in cui proposero l'inizializzazione He.
  • ReLU6: limita l'output a 6, min(max(0, x), 6), mantenendo le attivazioni in un intervallo rappresentato bene dall'aritmetica a precisione ridotta. La usano MobileNetV1 e MobileNetV2.
  • ELU: sostituisce il lato negativo con una curva esponenziale regolare che satura a −1, avvicinando a zero la media delle attivazioni.
  • SiLU e GELU: curve regolari, x · σ(x) e x · Φ(x), che si comportano come ReLU per input grandi, ma lasciano passare valori negativi piccoli e non presentano discontinuità angolari a zero. Hanno un costo maggiore per elemento; l'articolo su GELU ha riportato miglioramenti rispetto a ReLU in tutte le attività di visione, linguaggio e riconoscimento vocale valutate.

ReLU, sigmoid e tanh a confronto#

Prima di ReLU, gli strati nascosti usavano sigmoid o tanh. Entrambe saturano: per input molto positivi o negativi le loro curve si appiattiscono e le derivate si avvicinano a zero; inoltre, la derivata di sigmoid non supera mai 0,25, nemmeno nel punto di massima pendenza. Moltiplicare queste derivate attraverso molti strati priva gli strati iniziali del gradiente. Nell'articolo su AlexNet, una CNN a quattro strati con ReLU ha raggiunto un errore di addestramento del 25% su CIFAR-10 sei volte più rapidamente della stessa rete con unità tanh. Sigmoid e tanh restano utili quando servono i loro intervalli limitati: sigmoid negli strati di output per le probabilità e nei gate delle cellule ricorrenti, tanh negli stati nascosti ricorrenti.

ReLU nei modelli moderni#

ResNet e la maggior parte delle CNN della sua epoca usano ReLU in tutti gli strati; il Transformer originale del 2017 la usava negli strati feedforward. Molti modelli più recenti sono passati a funzioni più regolari: GELU in BERT e nei transformer per la visione, e SwiGLU in molti modelli linguistici di grandi dimensioni attuali; ReLU resta diffusa dove velocità e supporto hardware sono prioritari. YOLO26 usa SiLU per impostazione predefinita nei suoi blocchi Conv; una riga activation: nn.ReLU() nel file YAML del modello sostituisce ReLU a SiLU in ogni blocco Conv prima dell'addestramento, soluzione adatta ad acceleratori come la AMD Zynq UltraScale+ DPU, che esegue ReLU nativamente ma non SiLU. In PyTorch, nn.ReLU(inplace=True) sovrascrive il tensore di input con il risultato, risparmiando la memoria necessaria per un tensore di output separato.

Esplora le soluzioni

La visione artificiale nello sport

La visione artificiale nello sport

Scopri come Ultralytics YOLO alimenta la computer vision nello sport con il tracciamento di giocatori e palloni, l'analisi delle prestazioni, gli approfondimenti per gli allenatori e la riabilitazione degli atleti.
Scopri di più
Computer vision per immagini aeree

Computer vision per immagini aeree

Trasforma immagini aeree e riprese da drone in informazioni utili in tempo reale per agricoltura, acquacoltura, conservazione e analisi geospaziale con Ultralytics YOLO.
Scopri di più
Computer vision nel settore aerospaziale

Computer vision nel settore aerospaziale

Applica la visione artificiale nel settore aerospaziale con Ultralytics YOLO per l'ispezione degli aeromobili, il rilevamento di FOD sulle piste, le operazioni di terra aeroportuali e il rilevamento di difetti nei materiali compositi.
Scopri di più
Visione artificiale nella sicurezza

Visione artificiale nella sicurezza

Proteggi ogni sito con i modelli Ultralytics YOLO. L'IA visiva alimenta il monitoraggio perimetrale, il rilevamento delle minacce, il riconoscimento delle targhe e la sicurezza sul lavoro.
Scopri di più
Visione artificiale nella robotica

Visione artificiale nella robotica

Dai più potenza alle macchine intelligenti con i modelli Ultralytics YOLO. Nell'ambito della robotica, l'IA visiva alimenta la navigazione autonoma, la percezione, il tracciamento degli oggetti e il controllo in tempo reale.
Scopri di più
Visione artificiale nella logistica

Visione artificiale nella logistica

Semplifica la logistica con i modelli Ultralytics YOLO. L'IA per la visione consente l'ispezione dei pacchi, la selezione, il tracciamento dei veicoli e il monitoraggio della sicurezza nei magazzini in tempo reale.
Scopri di più
Visione artificiale nel commercio al dettaglio

Visione artificiale nel commercio al dettaglio

Ripensa il commercio al dettaglio con i modelli Ultralytics YOLO. L'IA per la visione consente di tracciare le scorte, monitorare gli scaffali, gestire le code e ottenere informazioni più approfondite sui clienti.
Scopri di più
Visione artificiale in ambito sanitario

Visione artificiale in ambito sanitario

Crea soluzioni sanitarie con i modelli Ultralytics YOLO. In ambito sanitario, l'IA per la visione consente di elaborare più rapidamente le immagini mediche, migliorare la diagnostica e monitorare i pazienti.
Scopri di più
Computer vision nella produzione

Computer vision nella produzione

Ottimizza la produzione con i modelli Ultralytics YOLO. La visione basata sull'IA migliora il controllo qualità, il rilevamento dei difetti, la conformità ai requisiti sui DPI e l'automazione delle linee di assemblaggio.
Scopri di più
Computer vision nel settore automobilistico

Computer vision nel settore automobilistico

Applica la computer vision al settore automobilistico con i modelli Ultralytics YOLO. La visione basata sull'IA migliora la sicurezza stradale, i sistemi di assistenza alla guida e l'automazione dei veicoli, per strade più intelligenti.
Scopri di più
Visione artificiale in agricoltura

Visione artificiale in agricoltura

Porta l'IA visiva nell'agricoltura intelligente con i modelli Ultralytics YOLO. Gestisci il monitoraggio delle colture, il tracciamento del bestiame e l'agricoltura di precisione per ottenere raccolti più abbondanti e intelligenti.
Scopri di più

Costruiamo insieme il futuro dell'IA!

Inizia il tuo percorso verso il futuro del machine learning