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 l'attivazione (nota anche come output) del neurone nel livello , dove è l' elemento nel vettore di input.
Quindi possiamo mettere in relazione l'input del livello successivo con quello precedente tramite la seguente relazione:
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,
è la distorsione delneurone j t h nellostrato i t h , e
rappresenta il valore di attivazione delneurone j t h nel livello i t h .
A volte scriviamo per rappresentare ∑ k ( w i j k ⋅ a i - 1 k ) + b i j , in altre parole, il valore di attivazione di un neurone prima di applicare la funzione di attivazione.
Per una notazione più concisa possiamo scrivere
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.
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
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 .
Nella backpropagazione, la funzione di costo viene utilizzata per calcolare l'errore del nostro livello di output, , tramite
.
Che può anche essere scritto come un vettore via
.
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 media
funzioni di sovraccarico per singoli esempi di formazione, x .
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 .
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ù.
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, √ è valido poiché ci è garantitoun L j ≥0).