Che cosa sono softmax e cross-entropia? Dai logits alle probabilità e alla perdita di addestramento
Softmax e cross-entropia sono una combinazione che permette a una rete neurale multiclasse di esprimere sotto forma di probabilità quale classe sia corretta tra più candidate e valutare numericamente quanto tale previsione differisca dalla risposta corretta. Softmax converte gli output grezzi del modello, chiamati logits, in una distribuzione di probabilità la cui somma è 1. La cross-entropia calcola come perdita la differenza tra quella distribuzione di probabilità e la distribuzione target. L'addestramento è il processo di modifica dei pesi del modello per ridurre questa perdita.
Per esempio, si supponga di classificare un'immagine come gatto, cane o uccello. Spesso il modello non risponde inizialmente con qualcosa come “70% di probabilità di gatto”. Produce invece logits: punteggi comparativi per le tre classi. Softmax normalizza questi punteggi in probabilità confrontabili, mentre la cross-entropia assegna una penalità in base a quanta probabilità il modello ha attribuito alla risposta effettiva. Comprendere entrambi insieme può ridurre la confusione comune sul layer di output finale, sui formati delle etichette e sulla configurazione della funzione di perdita.
Che cosa fa la funzione softmax?
Softmax è una funzione che converte un vettore di logits per classi nelle probabilità di classe . La probabilità della classe viene calcolata come segue.
Qui, la funzione esponenziale assegna un peso relativo maggiore alle classi con punteggi più alti. Poiché il denominatore è la somma dei punteggi esponenziati di tutte le classi, ogni output è compreso tra 0 e 1 e la probabilità totale è pari a 1. L'output di softmax rappresenta quindi la probabilità relativa che un input appartenga a ciascuna classe come un'unica distribuzione di probabilità. La documentazione di PyTorch descrive analogamente softmax come una riscalatura di ogni elemento di input nell'intervallo da 0 a 1, in modo che la somma degli elementi sia 1. docs.pytorch.org
Softmax è particolarmente appropriata quando le candidate sono mutuamente esclusive. Ossia, se una è vera, le altre non possono essere la risposta corretta. Alcuni esempi sono classificare un'immagine il cui animale principale sia esattamente uno tra gatto, cane o uccello, oppure assegnare una frase a esattamente una categoria di sentiment predefinita.
Al contrario, le probabilità softmax non sono indipendenti tra loro. Se aumenta la probabilità di gatto, la probabilità di cane o uccello deve diminuire relativamente per mantenere la somma delle tre probabilità pari a 1. Questa caratteristica di solito non è appropriata nei casi in cui più etichette possano essere vere contemporaneamente, come in un problema in cui in un'immagine possano comparire sia una persona sia una bicicletta. In quel caso, si consideri l'applicazione indipendente della sigmoid a ciascuna classe.
In che cosa differiscono i logits dalle probabilità?
Un logit è un punteggio non normalizzato prodotto da un layer lineare finale o da un componente simile. I logits possono essere negativi o maggiori di 1, e la somma dei logits tra le classi non ha alcun significato particolare. Per esempio, può essere un insieme di logits per tre classi, ma non è un vettore di probabilità.
Una caratteristica importante dei logits è che le differenze tra le classi contano più dei loro valori assoluti. Aggiungere la stessa costante a ogni logit non modifica il risultato di softmax.
Ciò avviene perché sia il numeratore sia il denominatore vengono moltiplicati per il fattore comune , che si annulla. Pertanto, i logits e possono sembrare punteggi grezzi differenti, ma producono le stesse probabilità softmax. Softmax trasforma in probabilità le differenze relative tra candidate, anziché il punto di riferimento dei punteggi.
Che cosa misura la cross-entropia?
La cross-entropia è una perdita che indica quanto la distribuzione target effettiva differisca dalla distribuzione predetta dal modello. La sua forma multiclasse di base è la seguente.
Qui, è il peso che l'etichetta effettiva assegna alla classe , mentre è la probabilità predetta dal modello per la classe . Una perdita minore significa che la distribuzione predetta è più vicina alla distribuzione target. Quando viene usato il logaritmo naturale, l'unità è il nat.
Questa formula non è semplicemente un calcolo che separa le risposte corrette e quelle errate come 0 o 1. Riflette non solo se il modello abbia ottenuto la risposta corretta, ma anche quanto fosse sicuro che la risposta fosse corretta. Una previsione che assegna 0,51 alla classe corretta e una che assegna 0,99 possono avere la stessa accuratezza se la classe con probabilità più alta è corretta in entrambi i casi. Tuttavia, la cross-entropia assegna una perdita minore alla seconda. Ecco perché l'addestramento incoraggia il modello non solo a classificare per prima la risposta corretta, ma anche ad assegnarle una probabilità più alta.
Perché la formula si semplifica per le etichette one-hot?
I target per la classificazione mutuamente esclusiva sono spesso rappresentati come vettori one-hot. Se la prima classe è corretta tra tre classi, l'etichetta è . Poiché solo la classe target ha e le altre hanno valore 0, la cross-entropia si riduce a quanto segue.
In altre parole, la perdita è determinata soltanto dalla probabilità predetta della classe corretta. Quando si avvicina a 1, si avvicina a 0. Al contrario, quando diminuisce, la perdita cresce rapidamente. Per questa proprietà, durante l'addestramento ricevono una grande penalità le previsioni che assegnano una bassa probabilità alla risposta corretta, in particolare quelle che prevedono una risposta errata con confidenza molto elevata.
Teoricamente, se la probabilità della classe corretta è esattamente 0, non è definito e la perdita diverge all'infinito. Le implementazioni reali di reti neurali usano di solito calcoli stabili basati sui logits, evitando di produrre esplicitamente una probabilità pari a 0 e poi calcolarne il logaritmo.
Come si collegano softmax e cross-entropia?
La parte finale di un tipico modello multiclasse può essere compresa in tre passaggi.
- Il layer lineare finale produce i logits di classe .
- Softmax converte i logits nelle probabilità .
- La cross-entropia confronta le probabilità con l'etichetta target per calcolare la perdita .
Per un target one-hot, questa connessione può essere sviluppata come segue.
Questa espressione viene spesso chiamata softmax cross-entropy o cross-entropia categoriale. Il primo termine, , diminuisce all'aumentare del logit della classe corretta, mentre il secondo termine, , considera anche i punteggi di ogni classe concorrente. Il modello impara quindi ad aumentare il punteggio della classe corretta, rendendolo al contempo relativamente più prominente rispetto alle classi errate.
Qui, softmax e cross-entropia dovrebbero essere distinte concettualmente. Softmax è una funzione che modifica il modo in cui gli output sono rappresentati, mentre la cross-entropia è una perdita che quantifica l'obiettivo dell'addestramento. Nei framework pratici, tuttavia, i due passaggi sono spesso forniti come un'unica funzione di perdita combinata, il che può farli apparire come una singola funzione.
Che cosa mostra il calcolo con i numeri?
Si consideri un problema a tre classi con logits . Applicando softmax si ottengono probabilità approssimative di . L'esempio di softmax di TensorFlow presenta le stesse probabilità approssimative per questi logits. docs.pytorch.org
Se la prima classe è corretta, l'etichetta one-hot è e la perdita è la seguente.
La prima classe ha la probabilità più alta tra le tre candidate, e tale probabilità è circa 0,665, quindi la perdita è relativamente piccola. Tuttavia, “piccola” non indica una soglia assoluta di superamento. Un'entità di perdita appropriata può variare in base al numero di classi, alla difficoltà dei dati, all'incertezza delle etichette e al fatto che la perdita sia sommata o mediata su un batch.
Se, con gli stessi logits, fosse effettivamente corretta la terza classe, la perdita sarebbe e quindi molto maggiore. Il modello considerava la terza classe come la candidata meno probabile. In questo modo, la cross-entropia riflette sensibilmente non solo se una previsione sia errata, ma anche quanto sia errata con sicurezza.
Perché il ranking delle probabilità e il valore della perdita dovrebbero essere considerati insieme?
L'accuratezza seleziona di solito la singola classe con la probabilità maggiore e conta se corrisponde alla risposta corretta. Di conseguenza, una previsione di quando la prima classe è corretta e una previsione di quando la prima classe è corretta vengono entrambe conteggiate come una previsione corretta.
La cross-entropia non le tratta allo stesso modo. La prima previsione distingue appena tra le tre classi, mentre la seconda assegna una probabilità molto alta alla risposta corretta. Viceversa, quando la classe con probabilità più alta è errata, la perdita varia anche in base a quanto fosse bassa la probabilità della classe corretta. Per questo motivo, l'addestramento minimizza generalmente la cross-entropia, mentre la valutazione controlla anche metriche separate come l'accuratezza, secondo l'obiettivo dell'attività.
Perché i logits dovrebbero essere passati direttamente alla funzione di perdita di addestramento?
Le funzioni di perdita combinate di molti framework di deep learning accettano in input i logits, non le probabilità softmax. Per esempio, softmax_cross_entropy_with_logits di TensorFlow, come indica il nome, accetta logits ed esegue internamente i calcoli corrispondenti a softmax e cross-entropia. La relativa documentazione avverte di non fornire output ai quali sia già stata applicata softmax. www.tensorflow.org
Se si viola questa regola applicando softmax alla fine del modello e passando poi il risultato a una funzione di perdita pensata per i logits, le probabilità possono essere interpretate di nuovo come logits anziché ricevere l'unica applicazione softmax prevista. Ciò modifica il significato della perdita e dei suoi gradienti, rendendo non corretta la configurazione dell'addestramento. Se una perdita “include internamente softmax” oppure “accetta probabilità già convertite” deve essere verificato nel contratto di input dell'API, non nel solo nome della funzione.
Lo scopo dell'inferenza o della visualizzazione è differente. Dopo l'addestramento, è possibile applicare softmax ai logits quando si vogliono mostrare le probabilità di classe o eseguire post-elaborazioni basate sulle probabilità. Il punto chiave non è che softmax non debba mai essere usata, ma che deve essere applicata esattamente una volta nella fase di input prevista dalla perdita di addestramento.
Perché è importante la stabilità numerica?
La formula softmax contiene esponenziali e logaritmi. Se i logits sono estremamente grandi o piccoli, il calcolo di può superare l'intervallo rappresentabile da un computer, creando un rischio di overflow o underflow. Calcolare prima le probabilità e poi applicare separatamente i logaritmi può essere vulnerabile a questi problemi.
Le funzioni di perdita combinate e le implementazioni della famiglia log_softmax usano generalmente modi stabili per calcolare . La documentazione di PyTorch spiega inoltre che log_softmax ha proprietà numeriche migliori rispetto al calcolo separato di softmax e logaritmo. docs.pytorch.org
Anche la proprietà di traslazione costante descritta in precedenza può essere usata per la stabilizzazione. Sottrarre il valore massimo da ogni logit non modifica il risultato di softmax.
Questo rende il termine esponenziale più grande pari a , riducendo la necessità di gestire numeri inutilmente grandi. Nel codice di produzione, tuttavia, è generalmente preferibile usare una perdita combinata fornita dal framework e basata sui logits o un'operazione log-softmax stabile, anziché implementare separatamente i componenti.
Le etichette devono essere vettori one-hot o interi?
La rappresentazione delle etichette è collegata al contratto di input della funzione di perdita. I formati comuni includono etichette one-hot o di probabilità ed etichette intere sparse.
| Formato dell'etichetta | Esempio quando la prima classe è corretta su tre | Caratteristiche |
|---|---|---|
| Etichetta one-hot | [1, 0, 0] | Un vettore della stessa lunghezza del numero di classi; solo la posizione corretta vale 1. |
| Etichetta di probabilità | [0.8, 0.1, 0.1] | Una distribuzione target i cui elementi sono non negativi e hanno somma pari a 1. |
| Etichetta intera sparsa | 0 | Memorizza solo l'indice della classe corretta. |
Le etichette one-hot corrispondono direttamente alla formula di base della cross-entropia. Le etichette intere sparse possono memorizzare la stessa informazione in modo più compatto, il che può essere utile in presenza di molte classi. Tuttavia, i due formati hanno forme di tensore e tipi di dati differenti, quindi è necessario utilizzare il formato richiesto da una specifica funzione di perdita.
La documentazione di TensorFlow per la softmax cross-entropy basata sui logits spiega che i vettori di etichette devono essere distribuzioni di probabilità valide e distingue i formati di etichetta correlati per la classificazione mutuamente esclusiva. www.tensorflow.org Per esempio, passare direttamente un singolo intero a una funzione di perdita one-hot, o passare un vettore one-hot a una funzione per etichette intere sparse, potrebbe non calcolare la quantità prevista.
Le etichette di probabilità allentano l'assunzione che esattamente una classe debba avere valore 1. Tuttavia, questo non significa la stessa cosa di un problema multilabel in cui diverse classi possono essere indipendentemente vere. Nella classificazione softmax, le etichette di probabilità rappresentano comunque un'unica distribuzione i cui elementi sommano a 1.
In che cosa differiscono classificazione binaria, multiclasse e multilabel?
Le funzioni di output e le perdite non dovrebbero essere scelte osservando soltanto il numero di classi. Determinare prima se gli eventi target possano verificarsi contemporaneamente. La seguente distinzione è utile nella pratica.
| Struttura del problema | Esempio | Rappresentazione di output tipica | Perdita tipica |
|---|---|---|---|
| Classificazione multiclasse mutuamente esclusiva | Uno tra gatto, cane o uccello | Softmax su tutte le classi | Softmax cross-entropy |
| Classificazione binaria | Vero/falso, approva/rifiuta | Una sigmoid o softmax a due classi | Cross-entropia binaria o softmax cross-entropy |
| Classificazione multilabel | Una foto contiene sia una persona sia una bicicletta | Sigmoid per classe | Cross-entropia binaria per classe |
Nella classificazione multiclasse, è naturale che le probabilità delle classi sommino a 1. Se aumenta la probabilità che un'immagine sia un gatto, la probabilità che la stessa immagine sia un cane o un uccello dovrebbe diminuire relativamente. La documentazione di TensorFlow distingue anche l'uso della softmax cross-entropy quando le etichette sono mutuamente esclusive dalle situazioni con più etichette indipendenti, che richiedono una configurazione diversa. www.tensorflow.org
Nella classificazione multilabel, ogni output è più simile a una domanda separata: “C'è una persona?”, “C'è una bicicletta?” e “C'è un albero?” possono tutte ricevere risposta affermativa contemporaneamente. Se softmax forza il totale a 1, aumentare la probabilità di un'etichetta riduce forzatamente le probabilità delle altre, il che potrebbe non adattarsi alla struttura del problema. Applicare sigmoid a ciascuna classe consente di gestire indipendentemente la probabilità di ciascun elemento.
La classificazione binaria può essere particolarmente fonte di confusione perché entrambi gli approcci sembrano possibili. Applicare sigmoid a un solo output rappresenta direttamente la probabilità della classe positiva. Applicare softmax a due logits rappresenta positivo e negativo come una distribuzione a due classi con somma pari a 1. Qualunque approccio si scelga, la codifica delle etichette e la funzione di perdita devono corrispondere a quel formato di output.
Minimizzare la cross-entropia significa far corrispondere le distribuzioni?
Quando sia il target sia la previsione sono distribuzioni di probabilità valide, la cross-entropia può essere espressa tramite la sua relazione con l'entropia e la divergenza KL come segue.
Qui, è l'entropia che rappresenta l'incertezza della distribuzione vera stessa, mentre è la divergenza KL che rappresenta la differenza tra la distribuzione vera e la distribuzione predetta . Se la distribuzione target nei dati di addestramento è fissa, non cambia con i parametri del modello. Pertanto, a parte quella costante, ridurre la cross-entropia può essere interpretato come ridurre la divergenza KL tra e .
Questa interpretazione mostra perché la cross-entropia sia ampiamente usata come obiettivo di apprendimento per le distribuzioni di probabilità. Il modello è spinto non solo a collocare la classe corretta al primo posto, ma anche a distribuire le probabilità in modo vicino alla distribuzione target osservata.
Tuttavia, questa equazione ha delle assunzioni. Sia sia devono essere distribuzioni di probabilità: i loro componenti devono rientrare nell'intervallo appropriato e avere somma pari a 1. I logits stessi non sono distribuzioni di probabilità, quindi non vengono sostituiti direttamente in questa relazione. I logits si collegano ai calcoli sulle distribuzioni di probabilità tramite softmax o una perdita combinata basata sui logits.
Quali sono gli errori e le idee sbagliate comuni?
Il primo errore concettuale è che i logits siano probabilità. La classe con il logit più grande ha anche la probabilità softmax più grande, ma i valori dei logits non possono essere letti come percentuali. Quanto una differenza di logits, come 2 rispetto a 1, si traduca in una differenza di probabilità viene determinato solo dopo l'applicazione di softmax insieme a tutti gli altri logits.
Il secondo errore concettuale è che l'addestramento per classificazione funzioni solo se softmax viene aggiunta alla fine del modello. Se si usa una perdita di cross-entropia combinata che accetta logits, è comune non aggiungere esplicitamente softmax finale durante l'addestramento. Ciò supporta il calcolo interno e la stabilità numerica. www.tensorflow.orgdocs.pytorch.org
Il terzo errore concettuale è che la softmax cross-entropy sia adatta a ogni problema di classificazione. Questa combinazione di perdita è naturale quando le classi sono mutuamente esclusive. Se per un campione possono coesistere più tag corretti, softmax, che vincola la probabilità totale delle classi a 1, potrebbe non rappresentare correttamente il significato dei dati.
Il quarto errore concettuale è che cross-entropia e accuratezza siano la stessa metrica. L'accuratezza considera generalmente soltanto la singola classe con probabilità massima, mentre la cross-entropia riflette l'intera probabilità assegnata alla risposta corretta. Pertanto, due modelli con la stessa accuratezza possono avere valori di cross-entropia diversi. Questo è anche uno dei motivi per cui la perdita di addestramento può diminuire senza che l'accuratezza aumenti monotonamente a ogni passaggio.
Il quinto errore è stabilire se un modello sia buono o cattivo in base al solo valore di perdita. I valori della cross-entropia sono influenzati dal numero di classi, dalla difficoltà dell'attività, dal formato delle etichette e dal metodo di aggregazione. È più appropriato considerare le variazioni nella stessa attività e configurazione, la perdita sui dati di validazione e metriche di valutazione separate, adatte all'attività.
Che cosa controllare prima di configurare il modello?
Prima di applicare softmax e cross-entropia, è utile verificare in ordine le seguenti domande.
- Ogni campione ha esattamente una classe corretta? In tal caso, la classificazione multiclasse basata su softmax è una candidata. Se più etichette possono essere vere contemporaneamente, considerare prima sigmoid per classe e perdita binaria.
- L'output finale del modello è costituito da logits o già da probabilità? I logits sono punteggi grezzi non vincolati, mentre le probabilità sono valori normalizzati. Se la perdita combinata si aspetta logits, non applicare softmax in anticipo.
- Il formato dell'etichetta corrisponde alla funzione di perdita? Verificare se accetta vettori one-hot o di probabilità, oppure indici interi. Oltre al formato, verificare la dimensione del batch e la posizione della dimensione delle classi.
- Sono stati distinti gli scopi di addestramento e inferenza? Durante l'addestramento, calcolare con una perdita stabile basata sui logits. Durante l'inferenza, usare softmax quando è necessario mostrare probabilità o applicare regole basate sulle probabilità.
- Si interpretano separatamente perdita e metriche di valutazione? La cross-entropia è un obiettivo di addestramento che riflette la qualità delle previsioni probabilistiche, mentre l'accuratezza misura se la scelta finale corrisponde al target. Interpretarle insieme in base all'attività.
Questa checklist non è limitata a una libreria particolare. Tuttavia, anche quando i nomi effettivi delle API sono simili, possono differire nel fatto che si aspettino logits, probabilità o etichette intere come input. Immediatamente prima dell'implementazione, consultare la documentazione ufficiale della funzione utilizzata per confermare il formato di input e se includa una funzione di attivazione interna.
Conclusione: comprendere la conversione in probabilità e il calcolo della perdita in base ai loro ruoli
Softmax converte più logits in una distribuzione di probabilità con somma pari a 1, rappresentando la probabilità relativa di classi mutuamente esclusive. La cross-entropia calcola come perdita la differenza tra quella distribuzione predetta e la distribuzione target, assegnando una penalità maggiore alle previsioni che attribuiscono una bassa probabilità alla risposta corretta. Per un target one-hot, la perdita si semplifica in , rendendo chiaro l'obiettivo di apprendimento di aumentare la probabilità della classe corretta.
Nella pratica, softmax e cross-entropia spesso non vengono calcolate separatamente. Si utilizza invece una funzione di perdita combinata che accetta logits. Ciò preserva l'obiettivo matematico e consente al contempo un calcolo più stabile dal punto di vista numerico. Tuttavia, questa combinazione è più naturale quando la struttura del problema è “classificazione multiclasse con esattamente una risposta corretta”. Nella selezione di output e perdite, la chiave è verificare se le etichette siano mutuamente esclusive e quale input la funzione di perdita si aspetti prima di considerare il numero di classi.