Vai al contenuto principale

Softplus: la funzione di attivazione morbida che vale la pena conoscere

Questa guida spiega le proprietà matematiche di Softplus, i suoi vantaggi e compromessi, l’implementazione in PyTorch e quando passare da ReLU.
· 9 min leggi

Scopri con l'IA

ReLU è stata la funzione di attivazione di default nel deep learning per anni. E c’è un buon motivo: è semplice e funziona bene nella maggior parte dei casi. Ma quando i neuroni iniziano a restituire zero durante l’addestramento, smettono di imparare, i loro gradienti diventano zero e la backpropagation non può aggiornare i pesi. Nelle reti più profonde, questo problema può colpire più neuroni e ridurre la capacità del modello di catturare i pattern nei dati.

In parole povere: la rete smette di imparare.

Softplus offre un’alternativa liscia e differenziabile che affronta questo problema, mantenendo gran parte dei benefici di ReLU. Approssima il comportamento di ReLU per input positivi ma fornisce gradienti diversi da zero per valori negativi. Questo mantiene i neuroni attivi durante tutto l’addestramento.

In questo articolo scoprirai cos’è Softplus, come si confronta con ReLU dal punto di vista matematico e quando sceglierla rispetto ad altre funzioni di attivazione.

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 Softplus?

Softplus è una funzione di attivazione liscia che funge da approssimazione differenziabile di ReLU.

La funzione accetta come input qualsiasi numero reale e restituisce un valore positivo. Softplus non ha uno spigolo netto in corrispondenza dello zero come ReLU. Curva dolcemente attraverso quel punto di transizione.

Ecco la definizione matematica:

Formula di Softplus

Dove:

  • x è il valore di input
  • e è il numero di Eulero (circa 2,718)
  • ln è il logaritmo naturale

Per input positivi grandi, Softplus restituisce valori vicini all’input stesso. Per input negativi, restituisce piccoli valori positivi invece di zero.

Derivata di Softplus

La derivata di Softplus è la funzione sigmoide logistica.

Questo significa:

Derivata di Softplus

Dove σ(x) è la funzione sigmoide che probabilmente hai già visto. 

Questa proprietà della derivata rende Softplus utile quando ti serve un flusso di gradiente regolare durante la backpropagation. I gradienti non scendono mai a zero. Questo significa che i neuroni possono sempre aggiornare i pesi e continuare a imparare.

Comportamento agli estremi

Softplus si comporta in modo diverso a seconda che l’input sia molto positivo o molto negativo.

Per valori positivi grandi:

Comportamento di Softplus per valori positivi grandi

Per valori negativi grandi:

Immagine 4 - Comportamento di Softplus per valori negativi grandi

Ecco perché Softplus approssima così bene ReLU. Quando x è positivo e grande, entrambe le funzioni restituiscono approssimativamente lo stesso valore.

La differenza è visibile sugli input negativi. ReLU restituisce esattamente zero per input negativi, mentre Softplus restituisce piccoli valori positivi.

Questa piccola differenza evita il problema dei neuroni “morti”. I neuroni che usano Softplus possono riprendersi da attivazioni negative perché i loro gradienti non svaniscono mai del tutto.

Proprietà matematiche e computazionali

Softplus ha proprietà matematiche che è bene conoscere. La rendono più di una semplice versione liscia di ReLU.

Regolarità e differenziabilità

Softplus è infinitamente differenziabile in ogni punto.

Significa che puoi calcolare la derivata quante volte vuoi e la funzione resta liscia. In termini matematici, è una funzione analitica.

ReLU, invece, ha una piega in corrispondenza dello zero: un angolo netto in cui la derivata non esiste. Questo punto non differenziabile può creare problemi negli algoritmi di ottimizzazione che assumono gradienti lisci.

Nel deep learning, l’ottimizzazione funziona meglio quando la superficie della loss è liscia. Se usi metodi di ottimizzazione del secondo ordine o qualunque algoritmo che si affida a transizioni graduali dei gradienti, Softplus ti dà quella regolarità.

Stabilità numerica

Il calcolo di esponenziali può causare overflow quando gli input diventano grandi.

I framework di deep learning gestiscono questo aspetto con un parametro threshold. Quando l’input supera questa soglia, la funzione passa dal calcolo del logaritmo alla restituzione di un output lineare.

Ecco come funziona:

  • Per input piccoli: calcola Softplus direttamente
  • Per input grandi oltre la soglia: restituisce direttamente l’input

Questo evita l’overflow numerico mantenendo il comportamento desiderato. Per input positivi grandi, Softplus approssima comunque una funzione lineare, quindi il passaggio non influisce in modo significativo sull’output.

Relazione con altre funzioni

Softplus è collegata ad alcune altre funzioni di attivazione e di probabilità. Ecco come:

  • Sigmoide: come visto prima, la derivata di Softplus è la funzione sigmoide. Questo significa che Softplus è l’integrale della sigmoide, il che ha senso se si osservano le loro forme.

  • LogSumExp: Softplus è in realtà un caso particolare della funzione LogSumExp. Per due input, LogSumExp(0, x) = ln(1 + e^x) = Softplus(x). Questo collega Softplus alle tecniche di stabilità numerica usate nel machine learning.

  • Softmax: LogSumExp è alla base di Softmax, quindi Softplus condivide la stessa discendenza. Entrambe usano il trucco log-exp per la stabilità numerica.

  • Funzione logit: il logit è l’inversa della sigmoide. Poiché la sigmoide è la derivata di Softplus, queste tre funzioni formano una famiglia connessa nella teoria della probabilità.

  • Coniugata convessa: nell’analisi convessa, la coniugata convessa di Softplus è l’entropia binaria negativa. Questo collega Softplus ai principi di massimizzazione dell’entropia usati nella teoria dell’informazione e nella modellazione probabilistica.

Se lavori con modelli probabilistici o framework bayesiani, questa connessione con l’entropia rende Softplus una scelta naturale per garantire che le attivazioni siano coerenti con i principi della massima entropia.

Vantaggi dell’uso di Softplus

Softplus risolve problemi specifici che ReLU non gestisce bene. Eccone quattro.

Liscia e differenziabile

Softplus è liscia in ogni punto della curva.

Questo significa che i gradienti scorrono continuamente durante la backpropagation senza salti o interruzioni improvvise. Durante l’addestramento, un flusso di gradiente regolare porta ad aggiornamenti dei pesi più stabili e a una migliore convergenza.

Lo spigolo netto di ReLU in corrispondenza dello zero può causare discontinuità nei gradienti. Softplus non ha questo problema.

Previene i neuroni “morti”

Softplus non restituisce mai esattamente zero, nemmeno per input negativi molto grandi.

Questo significa che ogni neurone può continuare a imparare perché i gradienti non svaniscono mai del tutto. Con ReLU, un neurone che inizia a restituire zero può restare bloccato lì per sempre: il suo gradiente è zero, quindi gli aggiornamenti dei pesi non lo spostano.

Softplus ti offre una rete di sicurezza. I neuroni possono riprendersi da attivazioni negative e tornare a contribuire alla rete.

Output sempre positivo

Softplus garantisce output non negativi per qualsiasi input.

Conta quando costruisci modelli che richiedono predizioni positive. I modelli di regressione di Poisson trattano dati di conteggio (clienti, eventi, clic) in cui i valori negativi non hanno senso. I modelli generativi spesso necessitano di output positivi per rappresentare probabilità o intensità.

Più adatta a certi compiti

Alcuni compiti beneficiano di un comportamento di attivazione liscio e continuo.

I compiti di regressione con funzioni target lisce funzionano meglio con attivazioni lisce. Se stai prevedendo valori continui come temperatura, prezzo o distanza, Softplus è più in linea con la regolarità sottostante dei dati.

Anche i modelli bayesiani e i framework probabilistici preferiscono funzioni lisce. Quando modelli l’incertezza o lavori con distribuzioni di probabilità, le derivate continue di Softplus rendono le operazioni matematiche più pulite e stabili.

Se lavori in questi ambiti, Softplus ti offre garanzie teoriche e risultati pratici migliori rispetto alle transizioni brusche di ReLU.

Limitazioni e compromessi

Ci sono alcune limitazioni da conoscere su Softplus prima di abbandonare ReLU per sempre. Eccone tre.

Costo computazionale più alto

ReLU usa una semplice operazione di massimo: max(0, x).

Softplus calcola esponenziali e logaritmi: ln(1 + e^x). Queste operazioni sono più lente, soprattutto quando le esegui milioni di volte su grandi reti con migliaia di neuroni.

La differenza si somma. Questo overhead computazionale può aumentare il tempo di addestramento.

Convergenza più lenta

Softplus ha gradienti più lisci, il che sulla carta suona bene.

Ma liscio non significa sempre veloce. Le transizioni brusche di ReLU creano attivazioni sparse: molti neuroni restituiscono esattamente zero. Questa sparsità aiuta i gradienti a propagarsi più rapidamente nella rete durante la backpropagation.

Softplus non ha questa sparsità. Ogni neurone restituisce un valore diverso da zero, il che significa più computazione e potenzialmente una convergenza più lenta nelle architetture profonde.

Meno comune nella pratica

ReLU domina il deep learning da anni.

Questo significa più documentazione, problemi/soluzioni e risorse in generale. Softplus non riceve lo stesso trattamento. Meno persone la usano, quindi c’è meno conoscenza nella community, meno risposte su Stack Overflow e meno modelli pre-addestrati che la impiegano.

Quando scegli Softplus, imbocchi una strada con meno supporto e potenzialmente più debugging da solo.

Softplus in PyTorch

PyTorch rende Softplus facile da usare con supporto integrato e due parametri che ne controllano il comportamento.

Per riferimento, questa è la versione di PyTorch che sto usando:

import torch
import torch.nn as nn

print(torch.__version__)

Versione PyTorch 2.8.0

Ecco l’implementazione di base:

# Create a Softplus activation function
softplus = nn.Softplus(beta=1, threshold=20)

# Apply it to some input
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
output = softplus(x)

print(output)

Softplus applicata a un tensore

Abbastanza semplice. Ma quei due parametri - beta e threshold - cambiano il comportamento della funzione. Vediamoli più nel dettaglio.

Il parametro beta

Il parametro beta controlla la “morbidezza” della curva di Softplus.

Aumentando beta, la funzione diventa più ripida e più vicina a ReLU. Diminuendolo, la funzione diventa più liscia e graduale. Ecco come funziona in codice:

x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])

# Steeper activation (closer to ReLU)
softplus_steep = nn.Softplus(beta=2, threshold=20)
output_steep = softplus_steep(x)

# Smoother activation
softplus_smooth = nn.Softplus(beta=0.5, threshold=20)
output_smooth = softplus_smooth(x)

print("Softplus - Steeper activation")
print(output_steep)

print()

print("Softplus - Smoother activation")
print(output_smooth)

Regolare il parametro beta

Il valore di default beta=1 va bene nella maggior parte dei casi. Lo modificheresti solo se devi regolare la “bruschezza” dell’attivazione per compiti specifici.

Il parametro threshold

Il parametro threshold evita l’overflow numerico per input grandi.

Ricordi come il calcolo di e^x possa esplodere per valori di x grandi? Quando l’input supera la soglia, PyTorch passa dal calcolo della formula completa di Softplus a restituire direttamente l’input:

softplus = nn.Softplus(beta=1, threshold=20)

# Large input bypasses the exponential
large_input = torch.tensor([25.0])
print(softplus(large_input))

Regolare il parametro threshold

Il valore di default threshold=20 funziona nella maggior parte degli scenari. A quel punto, Softplus approssima già una funzione lineare, quindi il passaggio non influisce sui risultati.

Quando usare Softplus

Scegli Softplus quando ti serve regolarità del gradiente per l’ottimizzazione. Se usi metodi di ottimizzazione del secondo ordine o algoritmi che assumono superfici di loss lisce, Softplus offre le derivate continue su cui questi metodi fanno affidamento.

Usala quando il tuo modello richiede output non negativi. I dati di conteggio, i valori di intensità e i parametri di probabilità devono restare positivi. Softplus lo gestisce naturalmente senza vincoli aggiuntivi.

Reti poco profonde traggono più beneficio da Softplus rispetto a quelle profonde. Quando hai solo pochi strati, perdere anche un solo neurone per via del problema dei ReLU “morti” penalizza le prestazioni. Softplus mantiene tutti i neuroni attivi e in apprendimento.

Puoi anche scegliere Softplus per modelli probabilistici e framework bayesiani. I gradienti lisci e le connessioni con l’entropia rendono le operazioni matematiche più pulite. Anche i modelli basati su energia beneficiano della natura continua di Softplus.

I modelli in cui devi interpretare gradienti continui funzionano meglio con Softplus. Se analizzi come la rete risponde ai cambiamenti di input o studi il flusso dei gradienti, le derivate lisce offrono intuizioni più chiare rispetto alle transizioni brusche di ReLU.

Quando ReLU è ancora migliore

Non passare a Softplus solo perché sulla carta suona meglio o perché è una novità scintillante.

  • Reti grandi e profonde si addestrano più velocemente con ReLU. L’overhead computazionale di Softplus si accumula su centinaia di layer e milioni di parametri. La sparsità di ReLU aiuta anche con memoria e velocità.
  • Sistemi in produzione spesso preferiscono ReLU perché le ottimizzazioni hardware sono mirate specificamente a essa. Sulla stessa macchina, l’addestramento può essere più lento del 10-20% con Softplus.
  • Task standard di computer vision e NLP di solito non traggono beneficio da Softplus. La community ha passato anni a ottimizzare architetture intorno a ReLU, e cambiare funzione di attivazione significa ricostruire quel patrimonio di conoscenze.

Per la maggior parte dei progetti, parti da ReLU. Passa a Softplus solo quando incontri problemi specifici che le sue proprietà risolvono.

Conclusione

In breve, Softplus ti offre un’alternativa liscia a ReLU quando serve.

Non sostituirà ReLU come funzione di attivazione di default, e non è necessario. Softplus risolve problemi specifici: neuroni “morti” nelle reti poco profonde, modelli che richiedono output non negativi e compiti in cui il flusso regolare del gradiente è importante per l’ottimizzazione.

Ottieni proprietà matematiche migliori al costo della velocità computazionale. Per la maggior parte dei progetti di deep learning, la semplicità e la velocità di ReLU prevalgono. Ma quando lavori con modelli probabilistici, framework bayesiani o compiti di regressione con funzioni target lisce, Softplus diventa la scelta migliore.

Prova entrambe. Esegui esperimenti. Lascia che sia il tuo problema specifico a guidare la decisione.

Vuoi saperne di più? Dai un’occhiata alle nostre ottime risorse:

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 su Softplus

Che cos’è la funzione di attivazione Softplus?

Softplus è una funzione di attivazione liscia definita come f(x) = ln(1 + e^x) che funge da approssimazione differenziabile di ReLU. A differenza di ReLU, che ha uno spigolo netto in corrispondenza dello zero, Softplus curva dolcemente attraverso il punto di transizione. Per input positivi grandi restituisce valori vicini all’input stesso, mentre per input negativi restituisce piccoli valori positivi invece di zero. Questo la rende utile per prevenire il problema dei neuroni “morti” nelle reti neurali.

Quando dovrei usare Softplus invece di ReLU?

Scegli Softplus quando ti serve regolarità del gradiente per l’ottimizzazione, ad esempio con metodi del secondo ordine o algoritmi che assumono superfici di loss lisce. È ideale anche quando il modello richiede output non negativi (come dati di conteggio o parametri di probabilità) e per reti poco profonde in cui perdere anche un neurone a causa del problema dei ReLU “morti” peggiora le prestazioni. Softplus funziona bene per modelli probabilistici, framework bayesiani e compiti di regressione con funzioni target lisce. Tuttavia, resta su ReLU per reti grandi e profonde e per task standard di visione artificiale o NLP in cui la velocità conta di più.

Quali sono i principali vantaggi di Softplus rispetto a ReLU?

Softplus offre quattro vantaggi chiave: è liscia e differenziabile in ogni punto, prevenendo discontinuità nei gradienti; evita i neuroni “morti” non restituendo mai esattamente zero, così tutti i neuroni possono continuare a imparare; garantisce output non negativi per qualsiasi input; ed è più adatta a compiti che richiedono un comportamento di attivazione liscio e continuo, come la regressione e la modellazione probabilistica. Il flusso di gradiente continuo porta ad aggiornamenti dei pesi più stabili e a una migliore convergenza durante l’addestramento.

Come funzionano i parametri beta e threshold nella Softplus di PyTorch?

Il parametro beta controlla la “morbidezza” della curva di Softplus: aumentando beta la funzione diventa più ripida e più vicina a ReLU, mentre diminuendolo diventa più liscia e graduale. Il parametro threshold evita l’overflow numerico per input grandi passando dal calcolo della formula completa di Softplus alla restituzione diretta dell’input quando l’input supera la soglia. I valori predefiniti (beta=1, threshold=20) funzionano bene nella maggior parte degli scenari.

Qual è la differenza di costo computazionale tra Softplus e ReLU?

Softplus ha un costo computazionale più alto di ReLU perché calcola esponenziali e logaritmi (ln(1 + e^x)) invece della semplice operazione di massimo di ReLU (max(0, x)). Queste operazioni sono più lente, soprattutto quando eseguite milioni di volte su grandi reti con migliaia di neuroni. Questo overhead computazionale può aumentare il tempo di addestramento del 10-20% sullo stesso hardware, motivo per cui ReLU resta preferita per i sistemi in produzione e per reti grandi e profonde in cui la velocità è critica.

Perché una rete neurale ha bisogno di una funzione di attivazione?

Una rete neurale ha bisogno di una funzione di attivazione per introdurre non linearità nel modello. Senza di essa, la rete eseguirebbe solo trasformazioni lineari—indipendentemente dal numero di layer—rendendola incapace di apprendere pattern o relazioni complesse nei dati. Le funzioni di attivazione permettono alle reti neurali di approssimare funzioni non lineari, consentendo loro di affrontare compiti come il riconoscimento di immagini, la comprensione del linguaggio e il decision-making.

 
 

Argomenti

Correlato