Un elenco di funzioni di costo utilizzate nelle reti neurali, insieme alle applicazioni


133

Quali sono le funzioni di costo comuni utilizzate nella valutazione delle prestazioni delle reti neurali?

Dettagli

(sentiti libero di saltare il resto di questa domanda, il mio intento qui è semplicemente quello di fornire chiarimenti sulla notazione che le risposte possono usare per aiutarli a essere più comprensibili per il lettore generale)

Penso che sarebbe utile avere un elenco di funzioni di costo comuni, insieme ad alcuni modi in cui sono state utilizzate nella pratica. Quindi, se altri sono interessati a questo, penso che un wiki della comunità sia probabilmente l'approccio migliore, o possiamo eliminarlo se è fuori tema.

Notazione

Quindi, per iniziare, vorrei definire una notazione che tutti usiamo quando li descriviamo, quindi le risposte si adattano bene l'una all'altra.

Questa notazione è tratta dal libro di Neilsen .

Una rete neurale Feedforward è costituita da molti strati di neuroni collegati tra loro. Quindi accetta un input, che immette "gocciola" attraverso la rete e quindi la rete neurale restituisce un vettore di output.

Più formalmente, chiama aji l'attivazione (nota anche come output) del neurone jth nel livello ith , dove aj1 è l' elemento jth nel vettore di input.

Quindi possiamo mettere in relazione l'input del livello successivo con quello precedente tramite la seguente relazione:

aji=σ(k(wjkiaki1)+bji)

dove

è la funzione di attivazione,σ

è il peso della k t h neurone del ( i - 1 ) t h strato al j t h neurone del i t h strato,wjkikth(i1)thjthith

è la distorsione delneurone j t h nellostrato i t h , ebjijthith

rappresenta il valore di attivazione delneurone j t h nel livello i t h .ajijthith

A volte scriviamo per rappresentare k ( w i j ka i - 1 k ) + b i j , in altre parole, il valore di attivazione di un neurone prima di applicare la funzione di attivazione.zjioΣK(wjKioun'Kio-1)+Bjio

inserisci qui la descrizione dell'immagine

Per una notazione più concisa possiamo scrivere

un'io=σ(wio×un'io-1+Bio)

Per utilizzare questa formula per calcolare l'uscita di una rete feedforward certo input , impostare un 1 = I , allora computo un 2 , un 3 , ..., un m , dove m è il numero di strati.ioRnun'1=ioun'2un'3un'm

introduzione

Una funzione di costo è una misura di "quanto buono" ha fatto una rete neurale rispetto al campione di addestramento fornito e all'output previsto. Può anche dipendere da variabili come pesi e distorsioni.

Una funzione di costo è un valore singolo, non un vettore, perché valuta la capacità della rete neurale nel suo insieme.

In particolare, una funzione di costo è del modulo

C(W,B,Sr,Er)

dove è il peso della nostra rete neurale, B è il pregiudizio della nostra rete neurale, S r è l'input di un singolo campione di training ed E r è l'output desiderato di quel campione di training. Nota che questa funzione può anche potenzialmente dipendere da y i j e z i j per qualsiasi neurone j nel livello i , poiché tali valori dipendono da W , B e S r .WBSrEryjiozjiojioWBSr

Nella backpropagazione, la funzione di costo viene utilizzata per calcolare l'errore del nostro livello di output, , tramiteδL

.

δjL=Cun'jLσ'(zjio)

Che può anche essere scritto come un vettore via

.

δL=un'Cσ'(zio)

Forniremo il gradiente delle funzioni di costo in termini di seconda equazione, ma se si vogliono provare questi risultati da soli, si consiglia di utilizzare la prima equazione perché è più facile lavorare.

Requisiti della funzione di costo

Per essere utilizzata in backpropagation, una funzione di costo deve soddisfare due proprietà:

1: la funzione di costo deve essere in grado di essere scritta come mediaC

C=1nΣXCX

funzioni di sovraccarico per singoli esempi di formazione, x .CXX

Questo ci consente di calcolare il gradiente (rispetto a pesi e distorsioni) per un singolo esempio di allenamento ed eseguire Discesa gradiente.

2: La funzione di costo non deve essere dipendente da eventuali valori di attivazione di una rete neurale oltre l'uscita valori di L .Cun'L

Tecnicamente una funzione di costo può dipendere da qualsiasi o z i j . Facciamo solo questa restrizione in modo da poter eseguire il backpropagte, perché l'equazione per trovare il gradiente dell'ultimo livello è l'unica che dipende dalla funzione di costo (il resto dipende dal livello successivo). Se la funzione di costo dipende da altri livelli di attivazione oltre a quello di output, la backpropagation non sarà valida perché l'idea di "gocciolamento all'indietro" non funziona più.un'jiozjio

Inoltre, le funzioni di attivazione devono avere un'uscita per tutto j . Pertanto, queste funzioni di costo devono essere definite solo all'interno di tale intervallo (ad esempio, 0un'jL1j è valido poiché ci è garantitoun L j0).un'jLun'jL0


3
Questo è un sito di domande e risposte, e il formato di questo post non corrisponde proprio a quello. Probabilmente dovresti inserire la maggior parte dei contenuti in una risposta e lasciare solo la domanda (ad esempio, che cos'è un elenco di funzioni di costo utilizzate nelle NN?).
Roger Fan,

Va bene, va meglio? Penso che le definizioni siano importanti, altrimenti le risposte diventano vaghe per coloro che non hanno familiarità con la terminologia utilizzata dallo scrittore.
Phylliida,

Ma cosa succede se una risposta diversa utilizza notazione o terminologia diversa?
Roger Fan,

3
L'idea è che tutti usano la stessa terminologia qui, e che se è diversa la convertiamo in questa, quindi le risposte "si adattano" l'una all'altra. Ma suppongo che potrei rimuovere quel pezzo se non pensi che sia utile.
Phylliida,

1
Penso solo che i dettagli in cui si pone la domanda non siano realmente necessari o pertinenti. Sembra un po 'eccessivo e limitante, ma sono solo io.
Roger Fan,

Risposte:


85

Ecco quelli che ho capito finora. La maggior parte di questi funzionano meglio quando vengono dati valori compresi tra 0 e 1.

Costo quadratico

Conosciuto anche come errore al quadrato medio , massima probabilità ed errore al quadrato della somma , questo è definito come:

CMST(W,B,Sr,Er)=0.5Σj(un'jL-Ejr)2

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi è:r

un'CMST=(un'L-Er)

Costo di entropia incrociata

Conosciuto anche come verosimiglianza negativa di Bernoulli ed entropia binaria incrociata

CCE(W,B,Sr,Er)=-Σj[Ejr ln un'jL+(1-Ejr) ln (1-un'jL)]

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi è:r

un'CCE=(un'L-Er)(1-un'L)(un'L)

Costo esponenziale

τ

CEXP(W,B,Sr,Er)=τ exp(1τΣj(un'jL-Ejr)2)

exp(X)eX

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi rr

un'C=2τ(un'L-Er)CEXP(W,B,Sr,Er)

CEXPCEXP

Distanza Hellinger

CHD(W,B,Sr,Er)=12Σj(un'jL-Ejr)2

01

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi rr

un'C=un'L-Er2un'L

Divergenza di Kullback-Leibler

Conosciuto anche come divergenza di informazioni , guadagno di informazioni , entropia relativa , KLIC o divergenza di KL (Vedi qui ).

DKL(PQ)=ΣioP(io)lnP(io)Q(io)

DKL(PQ)QPP=EioQ=un'Lun'jioEjio

CKL(W,B,Sr,Er)=ΣjEjrceppoEjrun'jL

P=EioQ=un'L

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi rr

un'C=-Erun'L

Divergenza generalizzata di Kullback-Leibler

Da qui .

CsolKL(W,B,Sr,Er)=ΣjEjrceppoEjrun'jL-Σj(Ejr)+Σj(un'jL)

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi rr

un'C=un'L-Erun'L

Distanza Itakura – Saito

Anche da qui .

CsolKL(W,B,Sr,Er)=Σj(Ejrun'jL-ceppoEjrun'jL-1)

Il gradiente di questa funzione di costo rispetto all'output di una rete neurale e alcuni esempi rr

un'C=un'L-Er(un'L)2

((un'L)2)j=un'jLun'jL(un'L)2un'L


Grazie per la condivisione, puoi anche considerare questi: github.com/torch/nn/blob/master/doc/criterion.md
Yannis Assael

2
si dispone di un piccolo errore nel denominatore del derivato cross-entropia, dovrebbe essere a*(1-a)nona*(1+a)
Amro

1
Sarebbe anche bello mostrare la funzione di perdita del flipper per minimizzare i quantili di errore piuttosto che l'errore medio. Molto utilizzato nei sistemi di supporto alle decisioni.
Ricardo Cruz,

dove posso vedere i grafici per questi?
coiso,

1

20

Non hai la reputazione di commentare, ma ci sono errori di segno negli ultimi 3 gradienti.

C=ΣjEjceppo(Ej/un'j)=ΣjEjceppo(Ej)-Ejceppo(un'j)dC=-ΣjEjdceppo(un'j)=-Σj(Ej/un'j)dun'jun'C=-Eun'
Questo stesso errore di segno appare nella divergenza di KL generalizzata.

C=Σj(Ej/un'j)-ceppo(Ej/un'j)-1=Σj(Ej/un'j)-ceppo(Ej)+ceppo(un'j)-1dC=Σj(-Ej/un'j2)dun'j+dceppo(un'j)=Σj(1/un'j)dun'j-(Ej/un'j2)dun'j=Σj(un'j-Ej)/un'j2dun'jun'C=un'-E(un')2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.