Articles

Comprendere le reti neurali 2: La matematica delle reti neurali in 3 equazioni

Nella prima parte di questa serie abbiamo discusso il concetto di una rete neurale, così come la matematica che descrive un singolo neurone. Ci sono comunque molti neuroni in un singolo strato e molti strati nell’intera rete, quindi dobbiamo trovare un’equazione generale che descriva una rete neurale.

Singolo neurone

La prima cosa che la nostra rete deve fare è trasmettere informazioni attraverso i livelli. Sappiamo già come farlo per un singolo neurone:

Output del neurone è l’attivazione di una funzione di una somma ponderata del neurone di input

2 i neuroni

Ora possiamo applicare la stessa logica quando si hanno 2 neuroni nel secondo strato.

In questo esempio ogni neurone del primo strato è collegato a ciascun neurone del secondo strato, questo tipo di rete è chiamata rete completamente connessa. Neurone Y1 è collegato ai neuroni X1 e X2 con pesi W11 e W12 e neurone Y2 è collegato ai neuroni X1 e X2 con pesi W21 e W22. In questa notazione il primo indice del peso indica il neurone di uscita e il secondo indice indica il neurone di ingresso, quindi per esempio W12 è il peso sulla connessione da X2 a Y1. Ora possiamo scrivere le equazioni per Y1 e Y2:

Ora questa equazione può essere espressa usando la moltiplicazione della matrice.

visualizzazione di moltiplicazione di matrici da http://matrixmultiplication.xyz/

Se siete nuovi alla moltiplicazione di matrici e di algebra lineare e di questo ti rende confuso mi raccomando 3blue1brown algebra lineare serie.

Ora possiamo scrivere l’output del primo neurone come Y1 e l’output del secondo neurone come Y2. Questo ci dà la seguente equazione:

Tutto lo strato

Da questo si può astrarre la regola generale per l’uscita del livello:

Ora in questa equazione, tutte le variabili sono le matrici e il segno di moltiplicazione rappresenta la moltiplicazione di matrici.

L’uso della matrice nell’equazione ci consente di scriverlo in una forma semplice e lo rende vero per qualsiasi numero di input e neuroni nell’output.

Nella programmazione delle reti neurali usiamo anche la moltiplicazione delle matrici in quanto ciò ci consente di rendere il calcolo parallelo e utilizzare hardware efficiente per esso, come le schede grafiche.

Ora abbiamo un’equazione per un singolo livello ma nulla ci impedisce di prendere l’output di questo livello e usarlo come input per il livello successivo. Questo ci dà l’equazione generica che descrive l’output di ogni strato di rete neurale. Un’altra cosa, dobbiamo aggiungere, è la funzione di attivazione, spiegherò perché abbiamo bisogno di funzioni di attivazione nella prossima parte della serie, per ora puoi pensare come un modo per scalare l’output, in modo che non diventi troppo grande o troppo insignificante.

Con questa equazione, siamo in grado di propagare le informazioni attraverso tutti i livelli della rete neurale, come vogliamo. Ma senza alcun apprendimento, la rete neurale è solo un insieme di moltiplicazioni a matrice casuale che non significa nulla.

Quindi, come insegnare la nostra rete neurale? In primo luogo dobbiamo calcolare l’errore della rete neurale e pensare a come passare questo errore a tutti i livelli.

2 : Passando l’error — Back-propagation

Per comprendere l’algoritmo di propagazione degli errori dobbiamo tornare ad un esempio con 2 neuroni nel primo strato e 1 neurone nel secondo strato.

Supponiamo che il livello Y sia il livello di output della rete e che il neurone Y1 dovrebbe restituire un certo valore. Ora questo valore può essere diverso dal valore atteso di un bel po’, quindi c’è qualche errore sul neurone Y1. Possiamo pensare a questo errore come alla differenza tra il valore restituito e il valore atteso. Conosciamo l’errore su Y1 ma dobbiamo passare questo errore ai livelli inferiori della rete perché vogliamo che tutti i livelli imparino, non solo Y layer. Quindi, come passare questo errore a X1 e X2? Bene, un approccio ingenuo sarebbe quello di dividere l’errore Y1 in modo uniforme, poiché ci sono 2 neuroni nello strato X, potremmo dire che sia l’errore X1 che X2 è uguale all’errore Y1 ideato da 2.

C’è tuttavia un grosso problema con questo approccio: i neuroni hanno pesi diversi collegati a loro. Se il peso collegato al neurone X1 è molto più grande del peso collegato al neurone X2, l’errore su Y1 è molto più influenzato da X1 poiché Y1 = ( X1 * W11 + X2 * X12). Quindi se W11 è più grande di W12 dovremmo passare più dell’errore Y1 al neurone X1 poiché questo è il neurone che contribuisce ad esso.

Ora che lo abbiamo osservato possiamo aggiornare il nostro algoritmo non per dividere l’errore in modo uniforme ma per dividerlo in base alla razione del peso del neurone di input a tutti i pesi che arrivano al neurone di output.

aggiorna il peso

Ora possiamo fare un ulteriore passo avanti e analizzare l’esempio in cui ci sono più di un neurone nel livello di output.

In questo esempio vediamo che ad esempio neuron X1 contribuisce non solo all’errore di Y1 ma anche all’errore di Y2 e questo errore è ancora proporzionale ai suoi pesi. Quindi, nell’equazione che descrive l’errore di X1, abbiamo bisognoavere sia l’errore di Y1 moltiplicato per il rapporto tra i pesi che l’errore di Y2 moltiplicato per il rapporto tra i pesi che arrivano a Y2.

Questa equazione può anche essere scritta sotto forma di moltiplicazione della matrice.

Ora c’è un altro trucco che possiamo fare per rendere questa citazione più semplice senza perdere molte informazioni rilevanti. Il denominatore del rapporto peso, agisce come un fattore normalizzante, quindi non ci interessa molto, in parte perché l’equazione finale avremo altri mezzi per regolare l’apprendimento della rete neurale.

Questa è anche un’altra osservazione che possiamo fare. Possiamo vedere che la matrice con peso in questa equazione è abbastanza simile alla matrice forma l’algoritmo di avanzamento. La differenza è che le righe e le colonne vengono commutate. In algebra chiamiamo questa trasposizione della matrice.

Poiché non è necessario utilizzare 2 variabili diverse, possiamo semplicemente utilizzare la stessa variabile dall’algoritmo feed forward. Questo ci dà l’equazione generale di back-dell’algoritmo di propagazione

Nota che in feed-forward algoritmo stavamo andando formare il primo strato all’ultimo, ma nel retro-propagazione stiamo andando l’ultimo strato di rete per il primo dato che per calcolare l’errore in un dato livello, abbiamo bisogno di informazioni su un errore nel livello successivo.

Articoli di tendenza AI:

1. Come ho usato l’apprendimento automatico come ispirazione per i dipinti fisici

2. MS o Startup Job – Da che parte andare per costruire una carriera nel Deep Learning?

3. TOP 100 medio articoli collegati con Intelligenza artificiale

4. Conferenza di intelligenza artificiale

Ora che sappiamo come passare le informazioni in avanti e passare l’errore all’indietro possiamo usare l’errore ad ogni livello per aggiornare il peso.

3 : Aggiornamento dei pesi

Ora che sappiamo quali errori fa la rete neurale ad ogni livello possiamo finalmente iniziare a insegnare alla nostra rete a trovare la migliore soluzione al problema.

Ma qual è la soluzione migliore?

L’errore ci informa su quanto siano sbagliate le nostre soluzioni, quindi naturalmente la soluzione migliore sarebbe quella in cui la funzione di errore è minima.

Funzione di errore dipende dai pesi della rete, quindi vogliamo trovare tali valori di pesi che si traducono nel minimo globale nella funzione di errore. Si noti che questa immagine è solo per lo scopo di visualizzazione. In applicazioni di vita reale abbiamo più di 1 peso, in modo che la funzione di errore è funzione ad alta dimensionale.

Ma come troviamo il minimo di questa funzione? Un’idea semplice qui è iniziare con pesi casuali, calcolare la funzione di errore per quei pesi e quindi controllare la pendenza di questa funzione per andare in discesa.

Ma come facciamo a conoscere la pendenza della funzione?

Possiamo usare ancora una volta l’algebra lineare e sfruttare il fatto che la derivata di una funzione in un dato punto è uguale alla pendenza di una funzione in questo punto. Possiamo scrivere questo derivato nel modo seguente:

Dove E è la nostra funzione di errore e W rappresenta i pesi. Questa notazione ci informa che vogliamo trovare la derivata della funzione di errore rispetto al peso. Usiamo n + 1 con l’errore, poiché nella nostra notazione l’output della rete neurale dopo i pesi Wn è su+1.

Possiamo quindi utilizzare questa derivata di aggiornare il peso:

Questo rappresenta la “discesa” ogni apprendimento iterazione (epoca) aggiorniamo il peso secondo la pendenza della derivata della funzione di errore.

C’è un’altra cosa di cui abbiamo bisogno prima di presentare l’equazione finale e che è il tasso di apprendimento. Learning-rate regola come grandi passi stiamo prendendo durante andare in discesa.

Come si può vedere con più grande tasso di apprendimento, prendiamo passi più grandi. Ciò significa che possiamo raggiungere l’ottimale della funzione più velocemente, ma c’è anche una grande possibilità che ci mancherà.

Con il tasso di apprendimento più piccolo facciamo piccoli passi, il che si traduce nella necessità di più epoche per raggiungere il minimo della funzione, ma c’è una minore possibilità che ci manca.

Ecco perché in pratica usiamo spesso tasso di apprendimento che dipende dei passaggi precedenti ad es. se c’è una forte tendenza ad andare in una direzione, possiamo fare passi più grandi (tasso di apprendimento più grande), ma se la direzione continua a cambiare, dovremmo fare passi più piccoli (tasso di apprendimento più piccolo) per cercare il minimo migliore. Nel nostro esempio, tuttavia, prenderemo l’approccio semplice e utilizzeremo il valore del tasso di apprendimento fisso. Questo ci dà la seguente equazione.

Tasso di apprendimento (Lr) è un numero in rabbia 0 — 1. Più piccolo è, minore è il cambiamento dei pesi. Se l’apprendimento è vicino a 1. usiamo il valore completo della derivata per aggiornare i pesi e se è vicino a 0, ne usiamo solo una piccola parte. Ciò significa che il tasso di apprendimento, come suggerisce il nome, regola quanto la rete “impara” in una singola iterazione.

L’aggiornamento dei pesi era l’equazione finale di cui avevamo bisogno nella nostra rete neurale. Sono le equazioni che sono responsabili dell’apprendimento effettivo della rete e dell’insegnamento a dare un output significativo invece di valori casuali.

Mettere tutto insieme

Feed-forward

Retro-propagazione

Aggiornare i pesi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.