Reti neurali ibride. - pagina 17

 

Chi l'ha provato?

...........................................................

Combinando la propagazione posteriore con l'apprendimento di Cauchy

La correzione dei pesi nell'algoritmo combinato che usa la propagazione posteriore e l'apprendimento di Cauchy consiste di due componenti: (1) una componente direzionale calcolata usando l'algoritmo di propagazione posteriore, e (2) una componente casuale definita dalla distribuzione di Cauchy.

Queste componenti sono calcolate per ogni peso, e la loro somma è la quantità di cui il peso cambia. Come nell'algoritmo di Cauchy, una volta calcolato il cambio di peso, viene calcolata la funzione obiettivo. Se c'è un miglioramento, la modifica viene salvata. Altrimenti, viene salvato con la probabilità determinata dalla distribuzione di Boltzmann.

La correzione del peso è calcolata utilizzando le equazioni presentate in precedenza per ciascuno degli algoritmi:

wmn,k(n+1) = wmn,k(n) + η [aΔwmn,k(n) + (1 - a) δ n,k OUT m,j ] + (1 - η) xc,

dove η è il coefficiente che controlla le quantità relative di Cauchy e di backpropagation nelle componenti dei passi di peso. Se η è uguale a zero, il sistema diventa una macchina completamente Cauchy. Se η è uguale a uno, il sistema diventa una macchina a propagazione posteriore.

........................................................

 
gumgum >> :

Puoi entrare più in dettaglio su quasi-Newtoniano e LMA.

LMA = algoritmo di Levenberg-Marquardt

Metodo Quasi-Newton

Metodi del gradiente del secondo ordine


Molto da scrivere, in breve:


Algoritmo di Newton,
xk+1 = xk - sk*H^(-1)(xk)grad f(xk), dove
H^(-1)(xk) è l'inverso della matrice di Hesse nel punto xk,
sk è il valore del passo,
gradf(xk) è il gradiente della funzione nel punto xk.

Così, il metodo quasi-Newtoniano usa la matrice H(xk) invece di H^(-1)(xk) che è costruita dalle derivate parziali del secondo ordine,
Nel metodo quasi newtoniano le derivate secondarie sono calcolate usando il metodo delle differenze estreme. Di conseguenza, abbiamo i due più usati

Formule di calcolo CR:


Broydon-Fletcher-Goldfarb-Shanno (BFGS)

Devidon - Fletcher - Powell(DFP).


LMA:


Si riferisce anche ai metodi del secondo ordine, cioè le derivate parziali del secondo ordine devono essere calcolate,


xk+1 = xk - sk*H^(-1)(xk)grad f(xk), dove

quindi H^(-1)(xk)si calcola come H= J^t*J dove J è la Jacobiana

rispettivamente gradf(xk) = J^t*E, J^t è la trasposizione Jacobiana, E è il vettore di errore della rete, allora

xk+1 = xk - [J^t*J + mu*I]^(-1)*J^t*E, dove mu è scalare, se mu è 0, abbiamo metodo Newton con approssimazione Hessiana, se mu -> + Inf,

metodo del gradiente con passo piccolo.


C'è più discussione qui:


Neuro-sintetizzatore, costruttore+laboratorio

 
rip писал(а) >>

LMA = algoritmo di Levenberg-Marquardt

Metodo Quasi-Newton

Metodi del gradiente del secondo ordine

Molto da scrivere, insomma:

Algoritmo di Newton,
xk+1 = xk - sk*H^(-1)(xk)grad f(xk), dove
H^(-1)(xk) è l'inverso della matrice di Hesse nel punto xk,
sk è il valore del passo,
gradf(xk) è il gradiente della funzione nel punto xk.

Così, il metodo quasi-Newtoniano usa la matrice H(xk) invece di H^(-1)(xk) che è costruita dalle derivate parziali del secondo ordine,
Nel metodo quasi newtoniano le derivate secondarie sono calcolate usando il metodo delle differenze estreme. Corrispondentemente, abbiamo due tipi di uso più frequente

Formule di calcolo CR:

Broydon-Fletcher-Goldfarb-Schanno (BFGS)

Devidon-Fletcher-Powell(DFP)


LMA:

Si riferisce anche ai metodi del secondo ordine, cioè le derivate parziali del secondo ordine devono essere calcolate,

xk+1 = xk - sk*H^(-1)(xk)grad f(xk), dove

quindi H^(-1)(xk)si calcola come H= J^t*J dove J è la Jacobiana

rispettivamente gradf(xk) = J^t*E, J^t è il Jacoano trasposto, E è il vettore di errore della rete, allora

xk+1 = xk - [J^t*J + mu*I]^(-1)*J^t*E, dove mu è uno scalare, se mu è 0, abbiamo il metodo Newton con approssimazione Hessiana, se mu -> + Inf,

metodo del gradiente con passo piccolo.

C'è più discussione qui:


Neuro-sintetizzatore, costruttore+laboratorio

Grazie.

La domanda rimane... Dov'è la verità?

Angolo superiore sinistro (RProp). Perché DE/DW=0 quando DE/DW(t-1)*DE/DW<0?

 
gumgum >> :

Grazie.

La domanda rimane... Dov'è la verità?

In alto a sinistra. Perché DE/DW=0 quando DE/DW(t-1)*DE/DW<0?

Un prodotto negativo dei gradienti indica che l'algoritmo ha "saltato" l'estremo richiesto. Ecco perché la cella di memoria dove è memorizzato il valore del gradiente al passo corrente (si noti che è la cella di memoria, non il gradiente stesso) viene azzerata, affinché la terza condizione funzioni al passo successivo. Questa è una bella caratteristica dell'algoritmo se si legge l'articolo per intero.

 
alsu писал(а) >>

Un prodotto negativo dei gradienti indica che l'algoritmo ha "superato" l'estremo richiesto. Ecco perché la cella di memoria in cui è memorizzato il valore del gradiente al passo corrente (nota, è la cella di memoria, non il gradiente stesso) è azzerata, in modo che la terza condizione scatti al passo successivo. Questo è un trucco dell'algoritmo, se avete letto l'articolo per intero.

Ma allora avete bisogno di de/dw(t-1)=0

 
gumgum >> :

Ma allora avete bisogno di de/dw(t-1)=0

in questo passo è de/dw(t), nel prossimo diventerà de/dw(t-1)

 
alsu писал(а) >>

a questo passo è de/dw(t), al prossimo diventerà de/dw(t-1)

Grazie. Puoi suggerire con JRprop q è individuale per ogni peso o cosa?

 

Sono già confuso da alcuni che scrivono deltaW=n*DE/DW altri deltaW=n*DE/DW altri ecc. ecc. ......

 
gumgum >> :

Grazie. Puoi dirmi con JRprop q è individuale per ogni peso o cosa?

Per quanto ho capito, q è lo stesso per tutti

 
gumgum >> :

Sono già confuso alcuni scrivono deltaW=-n*DE/DW altri deltaW=n*DE/DW altri ecc. ecc. ......

Partiamo dall'inizio, l'algoritmo euristico RProp, utilizza l'analisi del segno della derivata prima della funzione di errore per peso di sinapsi.

Se il segno della derivata è positivo, dEdW(t)*dEdW(t-1) > 0, cioè la minimizzazione dell'errore è implementata, ci muoviamo nella giusta direzione.

Se il segno è cambiato, cioè dEdW(t)*dEdW(t-1) < 0, abbiamo mancato il minimo (minimo locale) e dovremmo fare due passi indietro. In primo luogo, per compensare il minimo che abbiamo appena perso - nel tuo esempio DELTAij(t) è calcolato dal valore precedente di delta e -eta. Non è necessario correggere Wij(t) a questo passo, torneremo solo al valore precedente di Wij, ma il modo in cui lo fai significa che torniamo indietro due volte dal punto di cambio del segno della derivata.


Per quanto riguarda <deltaW=-n*DE/DW altro deltaW=n*DE/DW>, non importa, basta capire quale passo fa cosa, in quale direzione e in quale momento.


Poiché si tratta di un'euristica, l'aderenza esatta alle formule non è importante, è il principio che conta.