48

Qualcuno potrebbe spiegarmi come aggiornare il bias durante il backpropagation?Come aggiornare il bias nella backpropagation della rete neurale?

Ho letto un bel po 'di libri, ma non riesco a trovare l'aggiornamento bias!

Capisco che il bias è un input extra di 1 con un peso collegato ad esso (per ogni neurone). Ci deve essere una formula.

Grazie,

@msw

più interessanti. Grazie, ritengo che due buoni punti siano: 1. "La proprietà di" approssimazione universale "dei percettroni multistrato con le funzioni di attivazione di livello nascosto più comunemente usate non regge se si omettono i termini di bias, ma Hornik (1993) mostra che una condizione sufficiente per la proprietà di approssimazione universale senza pregiudizi è che nessuna derivazione della funzione di attivazione svanisce all'origine, il che implica che con le solite funzioni di attivazione sigmoide, può essere usato un termine di bias diverso da zero invece di un bias formabile. " 2. I termini di polarizzazione possono essere apprese proprio come gli altri pesi ". Così io sia aggiungere in un 'peso costante' o treno questo peso come tutti gli altri usando discesa del gradiente.

Perchè sono la giusta comprensione?

+4

Questa è una grande domanda con una risposta purtroppo di grandi dimensioni. Questo è un punto di partenza decente: ftp://ftp.sas.com/pub/neural/FAQ2.html#A_bias – msw

+1

treno questo peso come tutti gli altri che utilizzano discesa del gradiente è richiesta – pberkes

+0

termine Bias, un valore di polarizzazione consente di spostare la funzione di attivazione (funzione sigmoid) a sinistra oa destra. I pesi utilizzati in termini di bias verranno modificati nell'algoritmo di propagazione posteriore e saranno ottimizzati utilizzando la discesa del gradiente o una tecnica di ottimizzazione avanzata come la funzione fminunc in Octave/Matlab. –

risposta

48

Seguendo la notazione di Rojas 1996, chapter 7, backpropagation calcola derivate parziali della funzione di errore E (costo alias, alias perdita)

∂E/∂w[i,j] = delta[j] * o[i] 

dove w[i,j] è il peso della connessione tra i neuroni i e j, j è uno strato più alto nella rete rispetto a i e o[i] è l'uscita (attivazione) di i (nel caso del "livello di input", è solo il valore della funzione i nel campione di addestramento preso in considerazione). Come determinare delta è dato in qualsiasi libro di testo e dipende dalla funzione di attivazione, quindi non lo ripeterò qui.

Questi valori possono quindi essere utilizzati negli aggiornamenti del peso, ad es.

// update rule for vanilla online gradient descent 
w[i,j] -= gamma * o[i] * delta[j] 

dove gamma è il tasso di apprendimento.

La regola per i pesi di polarizzazione è molto simile, eccetto che non c'è input da un livello precedente. Invece, è polarizzazione (concettualmente) causata da input da un neurone con attivazione fissa di 1. Quindi, la regola di aggiornamento dei pesi polarizzazione è

bias[j] -= gamma_bias * 1 * delta[j] 

dove bias[j] è il peso della polarizzazione sul neurone j, la moltiplicazione con 1 può ovviamente essere omesso e gamma_bias può essere impostato su gamma o su un valore diverso. Se ricordo correttamente, i valori più bassi sono preferiti, anche se non sono sicuro della giustificazione teorica di ciò.

+0

Le persone includono il bias ('1') al livello' l' come attivazione di questo livello? Voglio dire se è così, quindi l'aggiornamento dei pesi nel livello 'l', compresi i pesi per il suo bias può essere scritto come una singola formula:' w (l) - = gamma * punto (delta (l + 1), o (l)) ', ho ragione? – Jason

1

L'importo che si modifica ogni singolo peso e bias sarà la derivata parziale della funzione di costo in relazione a ciascun peso individuale e ogni singolo bias.

∂C/∂(index of bias in network) 

Dal momento che la funzione di costo probabilmente non dipende in modo esplicito sui singoli pesi e valori (costo potrebbe essere uguale (uscita rete - uscita prevista)^2, per esempio), è necessario mettere in relazione le derivate parziali di ogni peso e pregiudizio per qualcosa che conosci, cioè i valori di attivazione (uscite) dei neuroni. Ecco una grande guida per fare questo:

stati

https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d

Questa guida come fare queste cose in modo chiaro, ma a volte può mancare sulla spiegazione. Ho trovato molto utile per leggere i capitoli 1 e 2 di questo libro, come ho letto la guida linkato sopra:

http://neuralnetworksanddeeplearning.com/chap1.html (fornisce sfondo essenziale per la risposta alla tua domanda)

http://neuralnetworksanddeeplearning.com/chap2.html (risponde alla tua domanda)

Fondamentalmente, pregiudizi sono aggiornate nello stesso modo in cui pesi sono aggiornati: un cambiamento è determinato sulla base del gradiente della funzione di costo in un punto multidimensionale.

Pensate del problema della rete sta cercando di risolvere come un paesaggio di colline multidimensionali e valli (gradienti). Questo panorama è una rappresentazione grafica del modo in cui il costo cambia con il cambiamento di pesi e bias. L'obiettivo di una rete neurale è raggiungere il punto più basso in questo paesaggio, trovando così il costo più piccolo e minimizzando l'errore. Se si immagina la rete come un viaggiatore cercando di raggiungere il fondo di questi gradienti (cioè Gradient Descent), allora l'importo che cambierà ogni peso (e pregiudizi) di è legata alla pendenza della salita (gradiente della funzione) che il viaggiatore sta attualmente scendendo. La posizione esatta del viaggiatore è data da un punto di coordinate multidimensionale (peso1, peso2, peso3, ... peso_n), dove il pregiudizio può essere pensato come un altro tipo di peso. Considerando i pesi/i pregiudizi di una rete come le variabili per la funzione di costo della rete, è necessario chiarire che deve essere utilizzato ∂C/∂ (indice di bias nella rete).

Problemi correlati