Funzione Obiettivo (loss): differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 34: Riga 34:
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.
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.
Si ricorda che il logaritmo della probabilità di un evento, <math>log(P(i))</math>, va da meno infinito per <math>P(i) = 0</math> a zero per <math>P(i) = 1</math>.


La formula dell'entropia incrociata rappresenta la differenza fra due distribuzioni di probabilità P e Q.
La formula dell'entropia incrociata rappresenta la differenza fra due distribuzioni di probabilità P e Q.
<math>H(P,Q) = -\sum_{i \in I} P(i) \log(Q(i))</math>
Si possono immaginare i due casi estremi:


<math>H(P,Q) = -\sum_{x \in X} P(x) \log(Q(x))</math>
<math>P(i) = 1</math> e <math>Q(i) = 0</math>, dove la classe predetta era vera ma è stata completamente sbagliata. <math>H(P,Q)</math> è <math>+\infty</math>
 
<math>P(i) = 0</math> e <math>Q(i) = 1</math>: il prodotto interno dà zero
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 .
In caso di classificazione perfetta, la Log Loss è uguale a zero, altrimenti tende all'infinito più è alta la divergenza .

Versione delle 09:03, 21 nov 2024

Funzione Obiettivo (loss)
Nome Inglese Loss Function
Sigla


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.


In pratica, la funzione di perdita ci serve a capire quanto il risultato della rete neurale (Y) si distacca dal risultato corretto che ci aspettiamo (Y Target).

Principali Funzioni Obiettivo

Mean Squared Error (MSE Loss) per la Regressione

Un modo semplice e comune per eseguire il calcolo della funzione obiettivo è utilizzare l'errore quadratico medio (MSE) che non è altro che la differenza tra il risultato atteso e quello ottenuto, al quadrato:

Perdita = (Y Target - Y)^2

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, , va da meno infinito per a zero per .

La formula dell'entropia incrociata rappresenta la differenza fra due distribuzioni di probabilità P e Q. Si possono immaginare i due casi estremi:

e , dove la classe predetta era vera ma è stata completamente sbagliata. è e : 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)