Vai al contenuto principale

Funzione Tanh: perché le uscite centrate sullo zero contano nelle reti neurali

Questa guida spiega l’intuizione matematica dietro la funzione tanh, come si confronta con sigmoid e ReLU, i suoi vantaggi e compromessi e come implementarla in modo efficace nel deep learning.
· 8 min leggi

Scopri con l'IA

La tua rete neurale è bloccata al 60% di accuratezza e non capisci perché?

Hai ritoccato il learning rate, aggiunto più layer e giocato con la batch size. Niente funziona. La training loss si muove appena dopo le prime epoche. Inizi a mettere in discussione tutta la configurazione. Forse i dati sono scadenti, forse l’architettura è sbagliata. Ma in realtà la tua funzione di attivazione sta spingendo tutte le uscite in un’unica direzione, rendendo impossibile alla rete apprendere pattern bilanciati.

Tanh (tangente iperbolica) risolve il problema centrando le uscite attorno allo zero, con valori da -1 a 1. Questo aiuta i modelli a convergere più velocemente e mantiene i gradienti che scorrono in modo simmetrico durante la backpropagation.

In questo articolo imparerai cos’è la tanh, come funziona matematicamente, quando usarla al posto di ReLU o sigmoid e come implementarla in PyTorch. Se sei alle prime armi con il deep learning, dai un’occhiata alla nostra guida approfondita sulle funzioni di attivazione nelle reti neurali.

Che cos’è la funzione Tanh?

La funzione tanh mappa qualsiasi input in un valore compreso tra -1 e 1.

È una curva liscia a forma di S definita dalla seguente formula:

equazione della funzione tanh

Funzione Tanh illustrata

Funzione Tanh. Immagine dell’autore

La funzione si comporta in modo prevedibile agli estremi. Se le dai un numero grande e positivo, restituisce qualcosa vicino a 1. Per un numero grande e negativo, otterrai qualcosa vicino a -1.

Intorno allo zero, tanh si comporta quasi linearmente. Questo significa che i gradienti scorrono fluidamente durante la backpropagation, invece di essere schiacciati o distorti.

Per confronto, sigmoid produce solo valori positivi tra 0 e 1. Tanh restituisce sia numeri positivi che negativi. Mantiene le attivazioni bilanciate attorno allo zero, il che aiuta l’ottimizzazione a convergere più rapidamente in molte architetture di rete.

Vedrai spesso tanh nelle reti ricorrenti e ovunque le attivazioni centrate migliorino la stabilità.

Proprietà matematiche e computazionali

Tanh ha alcune proprietà matematiche che ogni aspirante machine learning engineer deve conoscere.

Liscia e derivabile

Tanh è infinitamente derivabile ed è liscia ovunque.

Questo è importante per l’ottimizzazione basata sui gradienti. Non incontrerai spigoli vivi come con ReLU, dove la derivata salta da 0 a 1 istantaneamente. Gradienti morbidi significano aggiornamenti dei pesi più prevedibili durante la backpropagation.

Uscita centrata sullo zero

Sigmoid produce valori tra 0 e 1. Tanh produce valori tra -1 e 1.

Quando le attivazioni restano bilanciate attorno allo zero, la tua rete converge più velocemente. Gli aggiornamenti dei pesi non sono polarizzati in una direzione, e i gradienti scorrono più uniformemente attraverso i layer.

Limitata e stabile

L’intervallo di uscita di tanh è fisso tra -1 e 1.

Questi limiti prevengono instabilità numeriche. Se stai lavorando con reti che non tollerano attivazioni esplosive, tanh tiene tutto sotto controllo senza clipping o gestione speciale.

Comportamento agli estremi

Per valori positivi grandi, tanh si avvicina a 1. Per valori negativi grandi, si avvicina a -1.

Questa simmetria mantiene le attivazioni centrate e previene lo spostamento di bias che vedi con funzioni non centrate sullo zero come sigmoid. Nelle reti profonde, questa proprietà aiuta gli aggiornamenti dei pesi a propagarsi più uniformemente attraverso i layer: la rete non sviluppa una preferenza per valori positivi o negativi.

Derivata di tanh

La derivata di tanh è:

derivata della funzione tanh

Derivata della tanh rappresentata graficamente

Derivata della tanh. Immagine dell’autore.

Questo significa che i gradienti sono forti vicino allo zero ma si riducono verso i bordi man mano che la funzione satura. Quando tanh(x) è vicino a 1 o -1, la derivata tende a zero, il che rallenta l’apprendimento di quei neuroni.

In pratica, ottieni un apprendimento stabile per input moderati ma potenziali gradienti vanescenti quando gli input sono troppo grandi o troppo piccoli. Ecco perché le reti molto profonde spesso preferiscono ReLU: non satura per valori positivi.

Tanh vs. altre funzioni

Tanh non è l’unica funzione di attivazione disponibile, e capire come si confronta con le alternative ti aiuta a scegliere quella giusta per la tua rete.

Sigmoid è una stretta parente della tanh. In effetti, tanh è solo una versione scalata e traslata della sigmoid:

Equazione della Tanh come sigmoid scalata e traslata

Dove σ(x) è la funzione sigmoid.

Immagine 3 - Funzione Sigmoid

Funzione Sigmoid. Immagine dell’autore

La differenza chiave è che Sigmoid produce valori tra 0 e 1, mentre tanh tra -1 e 1. Questa centratura sullo zero fa sì che tanh converga più velocemente nella maggior parte dei casi.

ReLU adotta un approccio diverso. Restituisce zero per input negativi e lascia invariati gli input positivi. Questo crea sparsità, cioè molti neuroni restano inattivi, il che accelera l’addestramento. Ma ReLU azzera i gradienti per i valori negativi. Tanh non ha questo problema perché mantiene gradienti non nulli per input negativi. Tuttavia satura a entrambi gli estremi, cosa che può rallentare l’apprendimento quando gli input diventano troppo grandi o troppo piccoli.

Immagine 4 - Funzione ReLU

Funzione ReLU. Immagine dell’autore

Softsign appare simile a tanh. Entrambe sono curve lisce a forma di S. Ma tanh converge più velocemente vicino allo zero perché la sua pendenza è più ripida. Questo significa gradienti più forti nelle prime fasi di addestramento, il che può aiutare la rete a imparare più rapidamente prima che gli input raggiungano le zone di saturazione.

Immagine 5 - Funzione Softsign

Funzione Softsign. Immagine dell’autore

Qui sto solo scalfendo la superficie di queste funzioni di attivazione. Se ti interessano alternative a Tanh e ReLU, leggi le nostre guide approfondites su Softmax e Softplus.

Vantaggi di Tanh

Se stai decidendo se vale la pena provare Tanh, ecco alcuni vantaggi da considerare che potrebbero portarti a un modello più accurato.

Uscita centrata sullo zero

Tanh produce uscite bilanciate attorno allo zero.

Questo riduce i bias negli aggiornamenti dei pesi. Quando le attivazioni sono centrate attorno allo zero, invece di essere spostate verso il positivo come con sigmoid, i gradienti non tirano i pesi più in una direzione che nell’altra. Il risultato è una convergenza più rapida e un addestramento più stabile.

Gradienti più forti vicino allo zero

Tanh ha una pendenza ripida vicino allo zero.

Questo significa gradienti più forti durante la backpropagation rispetto a sigmoid. La tua rete impara più velocemente nelle prime fasi di addestramento, quando la maggior parte delle attivazioni si trova vicino allo zero. Al contrario, la pendenza più dolce di Sigmoid rende quegli aggiornamenti iniziali più deboli e lenti.

Flusso di gradiente fluido

Le derivate di tanh sono continue ovunque.

Non ci sono salti improvvisi o discontinuità. Questo ti offre un’ottimizzazione più stabile rispetto a funzioni a tratti come ReLU, dove la derivata passa bruscamente da 0 a 1 allo zero. Gradienti lisci significano aggiornamenti dei pesi prevedibili per tutto l’addestramento.

Ideale per reti ricorrenti

RNN, LSTM e GRU si affidano a tanh nei loro layer nascosti.

Queste architetture devono mantenere stati interni fluidi nel tempo. Tanh lascia scorrere sia segnali positivi che negativi mantenendo i valori limitati. Questo equilibrio previene attivazioni esplosive e aiuta la rete a ricordare informazioni su sequenze più lunghe.

Limitazioni e compromessi

Prima di passare al codice, vediamo un paio di aree in cui Tanh potrebbe non essere all’altezza.

Gradienti vanescenti

Quando gli input si allontanano dallo zero, i gradienti tendono a zero.

Questo succede perché tanh satura a -1 e 1. Una volta che le attivazioni raggiungono questi estremi, la derivata diventa piccolissima e gli aggiornamenti dei pesi rallentano molto. Nelle reti molto profonde, il problema si amplifica perché i gradienti si riducono mentre fanno backpropagation attraverso ogni layer finché l’apprendimento praticamente si ferma.

Addestramento più lento

Tanh non crea sparsità.

Ogni neurone resta attivo in una certa misura, a differenza di ReLU dove gli input negativi producono uscita zero. Questo significa che la tua rete elabora più informazioni per ogni passaggio in avanti, il che sembra positivo ma in realtà rallenta le cose. La sparsità di ReLU rende l’addestramento più veloce perché i neuroni inattivi saltano completamente il calcolo.

Meno ottimizzata dall’hardware

I framework moderni e gli acceleratori hardware favoriscono ReLU.

Le operazioni tanh coinvolgono esponenziali, più costosi da calcolare rispetto alla semplice operazione max(0, x) di ReLU. I kernel GPU e i chip AI specializzati sono ottimizzati per ReLU perché è diventata di fatto lo standard in molte architetture. Questo significa che tanh girerà più lentamente sullo stesso hardware, anche con architetture di rete identiche.

Tanh in PyTorch

PyTorch fornisce nativamente un’implementazione della funzione Tanh, quindi non devi scriverla da zero.

Ecco come usarla come funzione di attivazione in una semplice rete neurale:

import torch
import torch.nn as nn

model = nn.Sequential(
    nn.Linear(10, 20),
    nn.Tanh(),
    nn.Linear(20, 1)
)

x = torch.randn(5, 10)
output = model(x)
print(output)
tensor([[ 0.0910],
               [-0.0994],
               [-0.0583],  
               [-0.2177],
               [-0.2546]], grad_fn=<AddmmBackward0>)

Puoi anche applicare tanh direttamente ai tensori:

x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = torch.tanh(x)
print(output)
tensor([-0.9640, -0.7616, 0.0000, 0.7616, 0.9640])

Nota come le uscite siano simmetriche attorno allo zero: gli input negativi producono uscite negative e la funzione tratta entrambe le parti in modo equivalente. Questa distribuzione bilanciata mantiene la rete stabile durante l’addestramento e previene lo spostamento di bias che vedresti con funzioni come sigmoid.

Quando si usa Tanh

Scegli la funzione Tanh quando il tuo modello beneficia di attivazioni centrate o quando lavori con reti più piccole o ricorrenti.

È particolarmente efficace quando:

  • Stai addestrando RNN o LSTM che necessitano di attivazioni bilanciate. Queste architetture si affidano a Tanh per mantenere stati interni fluidi tra i time step consentendo il passaggio sia di segnali positivi che negativi.
  • Stai modellando target continui o regolari. Il flusso di gradiente regolare di Tanh funziona bene quando le uscite devono essere continue e limitate, ad esempio prevedere valori che ricadono naturalmente in un intervallo.
  • Vuoi gradienti stabili e derivabili ma non ti serve la sparsità di ReLU. Se la tua rete non è abbastanza profonda da beneficiare del vantaggio di velocità di ReLU, Tanh offre un comportamento di addestramento più prevedibile.

Al contrario, evita Tanh in architetture molto profonde dove i gradienti vanescenti sono un problema. In quel caso ReLU o GELU sono scelte migliori perché non saturano per valori positivi.

Conclusione

In sintesi, la funzione Tanh si colloca tra la semplicità di Sigmoid e la velocità di ReLU.

È liscia, simmetrica e ancora rilevante nel deep learning, soprattutto dove contano di più le attivazioni bilanciate. Non la troverai in ogni architettura moderna, ma ha il suo posto quando servono uscite centrate e flusso di gradiente stabile.

Se non sei sicuro se usare Tanh o meno, segui queste linee guida:

  • Usa ReLU per reti grandi e profonde. È più veloce, funziona bene con l’hardware moderno ed evita i gradienti vanescenti per i valori positivi.
  • Usa Tanh quando ti servono stabilità, simmetria e un flusso di gradiente più regolare. Vale a dire reti ricorrenti, architetture più piccole e casi in cui le attivazioni centrate sullo zero migliorano la convergenza.

Esegui esperimenti, confronta i risultati e lascia che siano i tuoi dati a decidere quale attivazione si adatta meglio al tuo compito. Vuoi saperne di più? Iscriviti al nostro percorso Machine Learning Scientist in Python per padroneggiare supervised, unsupervised e deep learning.

Dario Radečić

Autore

Dario Radečić

Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.
Dario Radečić

Autore

Dario Radečić

Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.

FAQ

Che cos’è la funzione di attivazione tanh?

Tanh (tangente iperbolica) è una funzione di attivazione che mappa qualsiasi input in un valore compreso tra -1 e 1. È definita come tanh(x) = (e^x - e^-x) / (e^x + e^-x) e crea una curva a forma di S simile a sigmoid. La differenza principale è che tanh è centrata sullo zero, cioè restituisce sia valori positivi che negativi, il che aiuta le reti neurali a convergere più velocemente durante l’addestramento.

Quando dovrei usare tanh invece di ReLU?

Usa tanh quando stai costruendo reti ricorrenti (RNN, LSTM, GRU) che necessitano di attivazioni bilanciate e centrate sullo zero. È anche migliore per reti più piccole in cui servono gradienti lisci e derivabili senza la sparsità offerta da ReLU. Evita tanh in reti feedforward molto profonde dove la velocità di ReLU e la resistenza ai gradienti vanescenti la rendono una scelta migliore.

Quali sono i principali vantaggi di tanh rispetto a sigmoid?

L’uscita centrata sullo zero di Tanh (compresa tra -1 e 1) previene lo spostamento di bias che si verifica con l’intervallo 0–1 di sigmoid. Questo porta ad aggiornamenti dei pesi più bilanciati e a una convergenza più rapida. Tanh ha anche una pendenza più ripida vicino allo zero, il che significa gradienti più forti durante la backpropagation rispetto a sigmoid.

Perché tanh causa gradienti vanescenti?

Tanh satura a -1 e 1, cioè la sua derivata tende a zero quando gli input sono lontani dallo zero. Nelle reti profonde, questi gradienti minuscoli si moltiplicano durante la backpropagation, riducendosi esponenzialmente a ogni layer fino a svanire di fatto. Questo rende difficile l’apprendimento dei primi layer, motivo per cui ReLU è preferita nelle architetture molto profonde.

Come implemento tanh in PyTorch?

PyTorch fornisce tanh tramite nn.Tanh() come layer o torch.tanh() come funzione. Puoi aggiungerla al tuo modello o applicarla direttamente ai tensori. Entrambi gli approcci funzionano allo stesso modo e offrono il calcolo automatico dei gradienti per la backpropagation.

Argomenti

Correlato