L'uso di derivati nelle reti neurali è per il processo di addestramento chiamato backpropagation . Questa tecnica utilizza la discesa gradiente per trovare un set ottimale di parametri del modello al fine di minimizzare una funzione di perdita. Nel tuo esempio devi usare la derivata di un sigmoide perché è l'attivazione che usano i tuoi singoli neuroni.
La funzione di perdita
L'essenza dell'apprendimento automatico è l'ottimizzazione di una funzione di costo in modo tale che possiamo minimizzare o massimizzare alcune funzioni target. Questo è in genere chiamato la funzione di perdita o costo. In genere vogliamo ridurre al minimo questa funzione. La funzione di costo, , associa una certa penalità in base agli errori risultanti quando si passano i dati attraverso il modello in funzione dei parametri del modello.C
Diamo un'occhiata all'esempio in cui proviamo ad etichettare se un'immagine contiene un gatto o un cane. Se abbiamo un modello perfetto, possiamo dare una foto al modello e ci dirà se è un gatto o un cane. Tuttavia, nessun modello è perfetto e farà errori.
Quando formiamo il nostro modello per poter inferire il significato dai dati di input, vogliamo ridurre al minimo la quantità di errori che commette. Quindi usiamo un set di addestramento, questi dati contengono molte immagini di cani e gatti e abbiamo l'etichetta di verità di base associata a quell'immagine. Ogni volta che eseguiamo un'iterazione di addestramento del modello calcoliamo il costo (la quantità di errori) del modello. Vorremmo ridurre al minimo questo costo.
Esistono molte funzioni di costo ognuna con il proprio scopo. Una funzione di costo comune utilizzata è il costo quadratico definito come
.C=1N∑Ni=0(y^−y)2
Questo è il quadrato della differenza tra l'etichetta prevista e l'etichetta di verità di base per le immagini cui ci siamo allenati. Vorremmo minimizzare questo in qualche modo.N
Ridurre al minimo una funzione di perdita
In effetti, la maggior parte dell'apprendimento automatico è semplicemente una famiglia di framework in grado di determinare una distribuzione minimizzando alcune funzioni di costo. La domanda che possiamo porre è "come possiamo minimizzare una funzione"?
Riduciamo al minimo la seguente funzione
.y=x2−4x+6
Se tracciamo questo, possiamo vedere che esiste un minimo in . Per fare questo analiticamente possiamo prendere la derivata di questa funzione comex=2
dydx=2x−4=0
.x=2
Tuttavia, spesso non è possibile trovare analiticamente un minimo globale. Quindi invece utilizziamo alcune tecniche di ottimizzazione. Qui esistono anche molti modi diversi come: Newton-Raphson, ricerca della griglia, ecc. Tra questi c'è la discesa del gradiente . Questa è la tecnica utilizzata dalle reti neurali.
Discesa a gradiente
Usiamo un'analogia notoriamente usata per capirlo. Immagina un problema di minimizzazione 2D. Ciò equivale a fare un'escursione montuosa nel deserto. Vuoi tornare al villaggio che sai essere nel punto più basso. Anche se non conosci le direzioni cardinali del villaggio. Tutto quello che devi fare è continuare a scendere sempre più ripido e alla fine arriverai al villaggio. Quindi scenderemo lungo la superficie in base alla pendenza del pendio.
Assumiamo la nostra funzione
y=x2−4x+6
determineremo la per la quale y è ridotta a icona. L'algoritmo di discesa gradiente dice innanzitutto che sceglieremo un valore casuale per x . Inizializziamo su x = 8 . Quindi l'algoritmo farà iterativamente quanto segue fino a raggiungere la convergenza.xyxx=8
xnew=xold−νdydx
dove è il tasso di apprendimento, possiamo impostarlo su qualunque valore desideriamo. Tuttavia, esiste un modo intelligente per scegliere questo. Troppo grande e non raggiungeremo mai il nostro valore minimo, e troppo grande perderemo moltissimo tempo prima di arrivarci. È analogo alla dimensione dei gradini che si desidera percorrere per il ripido pendio. Piccoli passi e morirai sulla montagna, non scenderai mai. Troppo grande di un passo e rischi di sparare al villaggio e finire dall'altra parte della montagna. La derivata è il mezzo con cui percorriamo questa pendenza verso il nostro minimo.ν
dydx=2x−4
ν=0.1
Iterazione 1:
x n e w = 6.8 - 0.1 ( 2 ∗ 6.8 - 4 ) = 5.84 x n e w = 5.84 - 0.1 ( 2 ∗ 5.84 - 4 ) = 5,07 x n e w = 5,07 - 0,1xnew=8−0.1(2∗8−4)=6.8
xnew=6.8−0.1(2∗6.8−4)=5.84
xnew=5.84−0.1(2∗5.84−4)=5.07
x n e w = 4.45 - 0.1 ( 2 ∗ 4.45 - 4 ) = 3.96 x n e w = 3.96 - 0.1 ( 2 ∗ 3.96 - 4 ) = 3.57 x n e w = 3.57 - 0,1 ( 2 ∗ 3,57 - 4 )xnew=5.07−0.1(2∗5.07−4)=4.45
xnew=4.45−0.1(2∗4.45−4)=3.96
xnew=3.96−0.1(2∗3.96−4)=3.57
x n e w = 3.25 - 0.1 ( 2 ∗ 3.25 - 4 ) = 3.00 x n e w = 3.00 - 0.1 ( 2 ∗ 3.00 - 4 ) = 2.80 x n e w = 2.80 - 0.1 ( 2 ∗ 2.80 - 4 ) = 2,64 x n e w =xnew=3.57−0.1(2∗3.57−4)=3.25
xnew=3.25−0.1(2∗3.25−4)=3.00
xnew=3.00−0.1(2∗3.00−4)=2.80
xnew=2.80−0.1(2∗2.80−4)=2.64
x n e w = 2.51 - 0.1 ( 2 ∗ 2.51 - 4 ) = 2.41 x n e w = 2.41 - 0.1 ( 2 ∗ 2.41 - 4 ) = 2.32 x n e w = 2,32 - 0,1 ( 2 ∗ 2,32xnew=2.64−0.1(2∗2.64−4)=2.51
xnew=2.51−0.1(2∗2.51−4)=2.41
xnew=2.41−0.1(2∗2.41−4)=2.32
x n e w = 2,26 - 0,1 ( 2 ∗ 2,26 - 2 ∗ 2,06 - 4 ) = 2,05 x n e w = 2,05 - 0,1 ( 2,02 x n e w =xnew=2.32−0.1(2∗2.32−4)=2.26
x n e w = 2,21 - 0,1 ( 2 ∗ 2,21 - 4 ) = 2,16 x n e w = 2,16 - 0,1 ( 2 ∗ 2,16 - 4 ) = 2,13 x nxnew=2.26−0.1(2∗2.26−4)=2.21
xnew=2.21−0.1(2∗2.21−4)=2.16
xnew=2.16−0.1(2∗2.16−4)=2.13
x n e w =2,10-0,1(2*2,10-4)=2,08 x n e w =2.08-0,1(2*2.08-4)=2.06 x n e w =2,06-0,1(xnew=2.13−0.1(2∗2.13−4)=2.10
xnew=2.10−0.1(2∗2.10−4)=2.08
xnew=2.08−0.1(2∗2.08−4)=2.06
xnew=2.06−0.1(2∗2.06−4)=2.05
x n e w = 2,04 - 0,1 ( 2 ∗ 2,04 - 4 ) = 2,03 x n e w = 2,03 - 0,1 ( 2 ∗ 2,03 - 4 ) =xnew=2.05−0.1(2∗2.05−4)=2.04
xnew=2.04−0.1(2∗2.04−4)=2.03
xnew=2.03−0.1(2∗2.03−4)=2.02
- 0,1 ( 2 ∗ 2,01 - 4 ) = 2,01 x n e w = 2,01 - 0,1xnew=2.02−0.1(2∗2.02−4)=2.02
x n e w = 2,01 - 0,1 ( 2 ∗ 2,01 - 4 ) = 2,01 x n e w = 2,01xnew=2.02−0.1(2∗2.02−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.01
x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 -xnew=2.01−0.1(2∗2.01−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
E vediamo che l'algoritmo converge in ! Abbiamo trovato il minimo.x=2
Applicato alle reti neurali
Le prime reti neurali aveva solo un singolo neurone che prese in alcuni input e quindi fornire un'uscita y . Una funzione comune utilizzata è la funzione sigmoidexy^
σ(z)=11+exp(z)
y^(wTx)=11+exp(wTx+b)
dove è il peso associato per ogni input x e abbiamo una propensione b . Vogliamo quindi ridurre al minimo la nostra funzione di costowxb
.C=12N∑Ni=0(y^−y)2
Come addestrare la rete neurale?
Useremo discesa del gradiente di formare i pesi base all'output della funzione sigmoide ed useremo qualche funzione di costo e treno su lotti di dati di dimensione N .CN
C=12N∑Ni(y^−y)2
è la classe prevista ottenuto dalla funzione sigmoide edyè l'etichetta verità a terra. Useremo la discesa gradiente per ridurre al minimo la funzione di costo rispetto ai pesiw. Per semplificare la vita, divideremo la derivata come seguey^yw
.∂C∂w=∂C∂y^∂y^∂w
∂C∂y^=y^−y
e abbiamo che y = σ ( w T x ) e la derivata della funzione sigmoide è ∂ σ ( z )y^=σ(wTx)quindi abbiamo,∂σ(z)∂z=σ(z)(1−σ(z))
∂y^∂w=11+exp(wTx+b)(1−11+exp(wTx+b))
Quindi possiamo quindi aggiornare i pesi tramite discesa gradiente come
wnew=wold−η∂C∂w
η