Sei sulla pagina 1di 6

Prof.

Beatrice Lazzerini

Backpropagation in MATLAB

BACKPROPAGATION
Modello di neurone

Backpropagation in MATLAB

Prof. Beatrice Lazzerini Dipartimento di Ingegneria dellInformazione Via Diotisalvi 2, 56122 Pisa

La funzione di trasferimento, che deve essere derivabile, tipicamente una delle seguenti:

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Creazione di una rete backpropagation Una rete backpropagation si crea con la funzione newff: >> net= newff(pr,[s1 s2...snl],{tf1 tf2...tfnl},btf,blf,pf) dove: pr = matrice Rx2 dei valori minimi e massimi per gli R elementi di ingresso si (i=1..n1) = numero di neuroni delli-mo strato tfi (i=1..n1) = transfer function delli-mo strato, default = 'tansig' btf = backprop network training function, default = 'trainlm' blf = backprop weight/bias learning function, default = 'learngdm' pf = performance function, default = 'mse'.

La figura seguente mostra una rete con un solo strato di S neuroni logsig.

Ad esempio: >> net=newff([-1 2; 0 5], [3,1], {'tansig','purelin'},'traingd'); crea una rete a due strati. Il vettore di ingresso ha due elementi i cui valori variano, rispettivamente, in [-1 2] e [0 5]. Ci sono tre neuroni nello strato nascosto e uno nello strato di uscita. La funzione di trasferimento nello strato nascosto tansig mentre nello strato di uscita lineare. La funzione di addestramento traingd (algoritmo di backpropagation standard). Le reti feedforward hanno spesso uno o pi strati nascosti di neuroni con funzione di trasferimento sigmoidale ed uno strato di uscita composto da neuroni lineari. Strati di neuroni con funzione di trasferimento non lineare permettono alla rete di imparare relazioni non lineari tra input ed output. Lo strato di uscita lineare permette alla rete di produrre valori allesterno del range [-1 1]. Daltra parte, se si vogliono limitare le uscite della rete, ad esempio, tra 0 e 1, lo strato di uscita deve usare una funzione di trasferimento sigmoidale (ad esempio, logsig). La funzione newff, oltre a creare la rete, inizializza anche i pesi e i bias. possibile, comunque, cambiare linizializzazione dei pesi: >> net=init(net) Simulazione >> p=[1;2]; >> a=sim(net,p); Addestramento Una rete backpropagation pu essere addestrata per eseguire approssimazione di funzioni, associazione di pattern o classificazione di pattern.
3 4

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Durante laddestramento i pesi sono modificati iterativamente allo scopo di minimizzare la funzione di performance net.performFcn. La funzione di default per le reti feedforward lerrore quadratico medio mse. possibile utilizzare diversi algoritmi di addestramento per reti feedforward. Lalgoritmo di backpropagation standard (gradient descent) sposta i pesi nella direzione del gradiente negativo, cio nella direzione in cui la funzione di performance diminuisce pi rapidamente. Esistono alcune varianti dellalgoritmo standard. Nel seguito presentiamo alcuni algoritmi di addestramento. Algoritmo backpropagation (traingd) La funzione traingd addestramento: epochs: show: goal: time: min_grad: max_fail: lr: (gradient descent) ha sette parametri di

5) la performance di validazione aumentata pi di max_fail volte dallultima volta in cui diminuita (quando si usa la validazione). Il codice seguente addestra una rete con lalgoritmo di backpropagation in modalit batch (tale modalit richiede che i vettori di input siano posti in una matrice): p=[-1 -1 2 2; 0 5 0 5]; t=[-1 -1 1 1]; net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingd'); net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.epochs=300; net.trainParam.goal=1e-5; [net,tr]=train(net,p,t); % tr (training record) contiene informazioni su come % procede l'addestramento a=sim(net,p) Durante laddestramento sono visualizzate le seguenti informazioni:
TRAINGD, Epoch 0/300, MSE 1.59423/1e-005, Gradient 2.76799/1e-010 TRAINGD, Epoch 50/300, MSE 0.00236382/1e-005, Gradient 0.0495292/1e-010 TRAINGD, Epoch 100/300, MSE 0.000435947/1e-005, Gradient 0.0161202/1e-010 TRAINGD, Epoch 150/300, MSE 8.68462e-005/1e-005, Gradient 0.00769588/1e-010 TRAINGD, Epoch 200/300, MSE 1.45042e-005/1e-005, Gradient 0.00325667/1e-010 TRAINGD, Epoch 211/300, MSE 9.64816e-006/1e-005, Gradient 0.00266775/1e-010 TRAINGD, Performance goal met.

maximum number of epochs to train (default 10) epochs between displays (default 25) performance goal (default 0) maximum time to train in seconds (default inf) minimum performance gradient (default 1e-10) maximum validation failures (default 5) learning rate (default 0.01).

Durante laddestramento si possono usare dei vettori di validazione per terminare laddestramento prematuramente, e precisamente quando le prestazioni della rete sui vettori di validazione non migliorano per max_fail epoche di seguito. Vettori di test possono essere utilizzati come ulteriore controllo della capacit di corretta generalizzazione della rete, comunque questi vettori non hanno alcun effetto sul training. Laddestramento termina quando si verifica una delle seguenti condizioni: 1) si raggiunge il numero massimo di epoche; 2) si supera il massimo ammontare di tempo; 3) la performance raggiunge un valore minore di goal; 4) il gradiente della performance inferiore a min_grad;

e viene prodotto il seguente grafico:

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Ricreaiamo la rete precedente ed addestriamola con il metodo del momentum: p=[-1 -1 2 2; 0 5 0 5]; t=[-1 -1 1 1]; net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingdm'); net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=300; net.trainParam.goal=1e-5; [net,tr]=train(net,p,t); a=sim(net,p) I due algoritmi di addestramento precedenti (traingd e traingdm) risultano spesso troppo lenti. Esistono varianti dellalgoritmo di backpropagation che convergono molto pi velocemente. Vediamo alcune di tali varianti. Algoritmo traingda La simulazione produce: a= -0.9988 -1.0007 0.9951 1.0035 La funzione traingda (gradient descent with adaptive learning rate) si comporta in modo simile a traingd con il pi il fatto che adotta un learning rate variabile. Algoritmo traingdx La funzione di addestramento traingdx combina learning rate variabile e momentum. Algoritmo Levenberg-Marquardt (trainlm) Questo algoritmo fa uso di tecniche di ottimizzazione numerica ed il metodo pi veloce per addestrare reti neurali feedforward di dimensioni moderate (cio contenenti fino a parecchie centinaia di pesi). particolarmente efficiente in termini temporali in problemi di approssimazione di funzioni quando la rete ha un numero di pesi di alcune centinaia ed richiesta unapprossimazione molto accurata. Allaumentare del numero di pesi della rete di solito lalgoritmo trainlm non risulta essere il migliore. Inoltre, le prestazioni di trainlm tendono a calare in problemi di riconoscimento di pattern.
7 8

Osserviamo che, a causa dellinizializzazione casuale dei pesi, esecuzioni diverse dello stesso codice possono produrre risultati diversi. Tornando al parametro di uscita tr (training record), esso contiene le seguenti informazioni: tr.epoch: tr.perf: tr.vperf: tr.tperf: epoch number training performance validation performance test performance.

Algoritmo backpropagation con momentum (traingdm) Vediamo la funzione traingdm (gradient descent with momentum).

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

opportuno osservare, comunque, che non esiste un algoritmo di addestramento che in assoluto migliore degli altri in ogni problema, anche perch le prestazioni di un algoritmo di addestramento dipendono, ad esempio, da fattori quali laccuratezza richiesta allapprossimazione della rete. Quando si crea una rete con la funzione newff il valore di default dellalgoritmo di addestramento trainlm. Tipicamente, prima di addestrare una rete con questo algoritmo si settano parametri quali epochs, show e goal. Generalizzazione e overfitting Uno dei problemi che si possono verificare durante laddestramento di una rete neurale il cosiddetto overfitting: lerrore sul training set estremamente basso, ma quando alla rete si presenta un nuovo ingresso (non incluso nel training set), lerrore commesso molto grande. In questo caso, la rete ha memorizzato gli esempi di addestramento, ma non ha imparato a generalizzare. Osserviamo che se il numero di parametri della rete molto pi piccolo del numero di esempi di addestramento la possibilit di overfitting scarsa o addirittura nulla. Quindi, se possibile dimensionare il training set in maniera opportuna si riesce a prevenire il problema. Nei casi in cui il training set invece non adeguato alle dimensioni della rete (e non possibile raccogliere altri dati per qualche motivo) si pu, ad esempio, usare un metodo, detto early stopping, descritto di seguito. Early stopping Questo metodo prevede di suddividere i dati a disposizione in tre sottoinsiemi: training set, validation set e test set. Il training set usato per calcolare il gradiente e aggiornare pesi e bias. Durante il processo di addestramento si calcola lerrore sul validation set. Di solito sia lerrore sul validation set che lerrore sul training set decrescono durante la prima fase di addestramento. Quando comincia loverfitting, lerrore sul validation set tipicamente comincia a salire. Quando lerrore sul validation set continua a salire per un determinato numero di epoche, laddestramento viene interrotto e vengono restituiti i pesi e i bias corrispondenti al minimo dellerrore di validazione.
9

Osserviamo che lerrore sul test set non viene utilizzato durante la fase di addestramento. Tale errore viene invece usato per confrontare tra loro reti diverse. Pu comunque essere utile visualizzare lerrore sul test set durante laddestramento: infatti, se lerrore sul test set e lerrore sul validation set raggiungono minimi in epoche sostanzialmente diverse, possiamo sospettare di non aver effettuato una suddivisione appropriata in tre sottoinsiemi dellinsieme iniziale dei dati. Questa tecnica pu essere utilizzata con tutte le funzioni di addestramento viste precedentemente. sufficiente passare il validation set alla funzione di addestramento. Esempio Addestriamo una rete 1-20-1 (un input, 20 neuroni nascosti, un output) ad approssimare una funzione seno con rumore. % generiamo il training set p=[-1:0.05:1]; t=sin(2*pi*p) + 0.1*randn(size(p)); % aggiungiamo rumore al seno % (sommando numeri casuali con distribuzione normale) % generiamo il validation set; gli input variano in [-1 1] come nel training % set, ma sono traslati leggermente. Inoltre aggiungiamo un rumore % diverso alla funzione seno. % Il validation set contenuto in una struttura che comprende sia gli % ingressi che le uscite desiderate. val.p=[-0.975:0.05:0.975]; val.t=sin(2*pi*val.p) + 0.1*randn(size(val.p)); net=newff([-1 1],[20 1],{'tansig','purelin'},'traingdx'); net.trainParam.show=25; net.trainParam.epochs=300; net=init(net); [net,tr]=train(net,p,t,[],[],val); Sul video compare, ad esempio :
TRAINGDX, Epoch 0/300, MSE 8.42881/0, Gradient 14.0376/1e-006 TRAINGDX, Epoch 25/300, MSE 1.53024/0, Gradient 2.03697/1e-006 TRAINGDX, Epoch 50/300, MSE 0.391605/0, Gradient 0.576193/1e-006 10

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

Prof. Beatrice Lazzerini

Backpropagation in MATLAB

TRAINGDX, Epoch 75/300, MSE 0.0857572/0, Gradient 0.152822/1e-006 TRAINGDX, Epoch 100/300, MSE 0.0225605/0, Gradient 0.0504764/1e-006 TRAINGDX, Epoch 123/300, MSE 0.00512998/0, Gradient 0.0295261/1e-006 TRAINGDX, Validation stop.

Appare il seguente grafico:

La funzione seno (senza rumore) rappresentata dalla linea tratteggiata, le misure rumorose (training set) sono indicate dal simbolo + e la risposta della rete rappresentata dalla linea continua. Come possiamo osservare dal grafico, non c overfitting. (la linea superiore lerrore sul validation set mentre quella inferiore lerrore sul training set) % simuliamo la rete y=sim(net,p); % grafichiamo la funzione da approssimare, il training set e % la risposta della rete plot(p,sin(2*pi*p),':',p,t,'+',p,y);

11

12

Potrebbero piacerti anche