Funzione Obiettivo (loss)
Chiamata anche funzione di costo o funzione di perdita, dall'inglese loss function, è una funzione che misura la discrepanza tra la stima di un algoritmo di Machine Learning e l'output supervisionato e rappresenta il costo dell'errore. Durante il processo di apprendimento di una rete neurale, con l'algoritmo di backpropagation, ad ogni iterazione i pesi della rete vengono aggiornati per ridurre la perdita.
Principali Funzioni Obiettivo
Mean Squared Error (MSE Loss) per la Regressione
E' una delle funzioni più utilizzate per i problemi di regressione. Intuitivamente, rappresenta la distanza del valore predetto dal valore attuale, in fase di addestramento supervisionato
import torch import torch.nn as nn loss = nn.MSELoss() estimate = torch.tensor([0.7,0.2,0.1]) # estimate value real = torch.tensor([1.0, 0, 0]) # true value or target value print(loss(estimate , real)) ⇒ tensor(0.0467)
L'Entropia Incrociata (o Cross-Entropy Loss, o Log Loss)
L'Entropia Incrociata è utilizzata come funzione obiettivo nei contesti di classificazione, sia binaria che multi-label, in cui si predice più di un'etichetta per ogni esempio di training.
Si ricorda che il logaritmo della probabilità di un evento, log(P(x)), va da meno infinito per P(x) == 0 a zero per P(x) == 1.
La formula dell'entropia incrociata rappresenta la differenza fra due distribuzioni di probabilità P e Q.
H(P, Q) = – sum x in X P(x) * log(Q(x))
Si possono immaginare i due casi estremi:
- P(x) = 1 e Q(x) = 0, dove la classe predetta era vera ma è stata completamente sbagliata. H(P,Q) è + infinito
- P(x) = 0 e Q(x) = 1: il prodotto interno dà zero
In caso di classificazione perfetta, la Log Loss è uguale a zero, altrimenti tende all'infinito più è alta la divergenza .
Binary Cross Entropy (BCE Loss)
Viene utlizzata nelle situazioni di classificazione binaria, in cui solo una di M classi è vera nello stesso momento
import torch import torch.nn as nn loss = nn.BCELoss() estimate = torch.tensor([0.7,0.2,0.1]) # estimate value real = torch.tensor([1.0, 0, 0]) # true value or target value print(loss(estimate , real)) ⇒ tensor(0.2284)