Sigmoid
La funzione sigmoide mappa qualsiasi numero reale in un valore compreso tra 0 e 1. Include la formula, il gradiente, le probabilità in uscita, i gate e il codice PyTorch.
La funzione sigmoide, σ(x) = 1 / (1 + e^(−x)), mappa qualsiasi numero reale in un valore tra 0 e 1 lungo una curva a S: gli input molto negativi producono output vicini a 0, quelli molto positivi producono output vicini a 1 e un input pari a 0 produce esattamente 0.5. Nell'apprendimento automatico (ML), «sigmoide» indica quasi sempre questa funzione logistica, la stessa curva che trasforma un punteggio lineare in una probabilità nella regressione logistica. All'interno di una rete neurale (NN), la sigmoide svolge tre ruoli: è stata la funzione di attivazione originale dei livelli nascosti, trasforma il punteggio finale in una probabilità per gli output binari e multi-etichetta e funge da interruttore graduale nei gate delle cellule ricorrenti e di altri livelli con gate. Da allora, nei livelli nascosti si sono affermate funzioni come ReLU, perciò nei modelli attuali la sigmoide si trova soprattutto negli output e nei gate.
Formula e proprietà#
La sigmoide è simmetrica rispetto al punto medio, σ(−x) = 1 − σ(x), e la sua inversa è la funzione logit, log(p / (1 − p)), che riconverte una probabilità in log-odds. Per questo l'output grezzo di una rete prima della sigmoide si chiama logit. La derivata ha una forma compatta, σ′(x) = σ(x)(1 − σ(x)): raggiunge il massimo di 0.25 quando x = 0 e tende a zero quando la curva si appiattisce a entrambe le estremità, un fenomeno chiamato saturazione. Il frammento di codice PyTorch qui sotto calcola gli output e i gradienti in cinque punti:
import torch
x = torch.tensor([-6.0, -2.0, 0.0, 2.0, 6.0], requires_grad=True)
y = torch.sigmoid(x)
# Backpropagate to get the derivative sigmoid(x) * (1 - sigmoid(x)) at each input
y.sum().backward()
print(f"Sigmoid: {[round(v, 4) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 4) for v in x.grad.tolist()]}")Stampa i valori della sigmoide [0.0025, 0.1192, 0.5, 0.8808, 0.9975] e i gradienti [0.0025, 0.105, 0.25, 0.105, 0.0025]. In corrispondenza di ±6, l'output dista meno di 0.0025 dal suo limite e il gradiente è 100 volte più piccolo che in zero; quindi un input in quell'intervallo modifica appena i pesi che lo hanno prodotto.
La sigmoide nei livelli nascosti#
Le prime reti multistrato usavano la sigmoide in ogni livello nascosto, causando due problemi. La retropropagazione moltiplica una derivata di attivazione per ogni livello e, poiché la derivata della sigmoide non supera mai 0.25, in dieci livelli sigmoide le sole derivate riducono il gradiente al massimo di un fattore 0.25¹⁰, inferiore a un milionesimo: è il problema del gradiente evanescente. Inoltre, gli output della sigmoide sono sempre positivi; quindi, a ogni aggiornamento, tutti i gradienti dei pesi di un neurone che li riceve hanno lo stesso segno e i pesi possono soltanto oscillare verso il loro valore ottimale. Tanh centra gli output sullo zero e Xavier Glorot e Yoshua Bengio hanno dimostrato nel 2010 che la media positiva della sigmoide porta al regime di saturazione il livello nascosto superiore di una rete profonda inizializzata casualmente. ReLU ha eliminato entrambi i problemi ed è diventata la funzione predefinita per i livelli nascosti; le sue varianti più morbide, come SiLU, x · σ(x), continuano comunque a usare la sigmoide al loro interno come gate.
La sigmoide come livello di output#
Per la classificazione binaria, un singolo output z diventa p = σ(z), la probabilità prevista della classe positiva; applicare a p una soglia di 0,5 equivale ad applicare a z una soglia di 0. L'addestramento abbina la sigmoide all'entropia incrociata binaria, il cui gradiente rispetto al logit è semplicemente p − y, ossia la probabilità prevista meno l'etichetta. Per stabilità numerica, i framework fondono i due calcoli: BCEWithLogitsLoss di PyTorch accetta logit grezzi e applica internamente il trucco log-sum-exp, evitando di calcolare il logaritmo di una probabilità arrotondata esattamente a 0 o 1.
Quando le etichette possono coesistere, un modello usa una sigmoide per etichetta: questa configurazione si chiama classificazione multi-etichetta. La softmax, invece, fa competere le classi per un'unica probabilità totale pari a 1, caratteristica adatta a etichette che si escludono a vicenda:
import torch
# Logits from a classifier for the labels "person", "backpack", and "car"
logits = torch.tensor([2.0, 1.5, -3.0])
# Sigmoid scores each label on its own; softmax makes the labels compete for one total
sigmoid_probs = torch.sigmoid(logits)
softmax_probs = torch.softmax(logits, dim=0)
print(f"Sigmoid: {[round(p, 3) for p in sigmoid_probs.tolist()]}, sum {sigmoid_probs.sum():.3f}")
print(f"Softmax: {[round(p, 3) for p in softmax_probs.tolist()]}, sum {softmax_probs.sum():.3f}")I punteggi della sigmoide [0.881, 0.818, 0.047] sommano a 1.746, quindi sia «persona» sia «zaino» superano 0.5; la softmax suddivide gli stessi logit in [0.62, 0.376, 0.004] e solo «persona» resta sopra 0.5. I modelli di rilevamento YOLO26 calcolano il punteggio di ogni classe con una sigmoide indipendente, addestrata con BCEWithLogitsLoss; i punteggi delle classi di un riquadro non devono quindi sommare a 1. I modelli pose di YOLO26 applicano una sigmoide al logit di visibilità di ogni keypoint per produrre la probabilità che il keypoint sia visibile.
La sigmoide come gate#
Poiché il suo output è compreso tra 0 e 1, la sigmoide può scalare un altro segnale elemento per elemento, bloccandolo del tutto o lasciandolo passare completamente, mantenendo al contempo la differenziabilità:
- Le cellule LSTM e GRU: i gate sigmoide decidono quanta memoria precedente conservare, quanto nuovo contenuto scrivere e quanta parte dello stato esporre a ogni passo temporale, mentre tanh modella il contenuto stesso.
- SwiGLU: i livelli feed-forward di molti modelli linguistici di grandi dimensioni (LLM) moltiplicano una proiezione appresa per una seconda proiezione attivata da SiLU: un gate basato sulla sigmoide.
- SigLIP: questo modello immagine-testo assegna a ogni coppia immagine-didascalia del batch un punteggio tramite una sigmoide, che indica la probabilità binaria che ci sia una corrispondenza; la sua loss non richiede quindi una normalizzazione sull'intero batch.
Sigmoide e funzioni correlate#
- Funzione logistica: nell'apprendimento automatico è un sinonimo di sigmoide. In matematica, «sigmoide» indica anche altre curve a S, tra cui tanh e la funzione errore.
- Softmax: normalizza un vettore intero in probabilità la cui somma è 1. Per due classi, applicare softmax ai logit (z₁, z₂) dà per la prima classe σ(z₁ − z₂); quindi una softmax a due output e una sigmoide a un output descrivono lo stesso modello.
- Tanh: sigmoide riscalata, tanh(x) = 2σ(2x) − 1, con output da −1 a 1 centrati sullo zero e derivata massima pari a 1.
- Sigmoide hard: approssimazione lineare a tratti che evita l'esponenziale sull'hardware mobile. MobileNetV3 usa ReLU6(x + 3) / 6, che vale 0 per x < −3, 1 per x > 3 e varia linearmente nell'intervallo intermedio.










