Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Laborator Inteligenta Artificiala
Backpropagarea este o metoda de antrenare a retelelor neurale, obtinuta prin generalizarea algoritmului Widrow-Hoff pentru retele cu mai multe layere si cu functiii de transfer derivabile.
Functii de transfer folosite: logsig, tansig, purelin.
Pentru a afla care este numele functie care este derivata unei functii, scriem
tansig('deriv')
Aceasta retea neurala poate fi antrenata pentru a aproxima orice functie care are un numar finit de puncte de discontinuitate.
net=newff([-1 2; 0 5],[3,1],,'traingd');
In timpul antrenarii, ponderile si bias-urile sunt modificate astfel incat sa minimizeze functia de performanta net.performFcn (implicit este mse). Exista mai multi algoritmi de antrenare a retelelor feedforward, toti folosind insa gradientul functiei de performanta pentru a calcula ajustarile care trebuie facute pentru a minimiza functia de performanta.
net.trainFcn='traingd';
Alti parametrii asociati invatarii: epochs, show, goal, time, min_grad, lr.
p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net=newff(minmax(p),[3,1],,'traingd');
net.trainParam.lr = 0.05;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;
[net,tr]=train(net,p,t);
Rulati programul demonstrativ nnd12sd1.
Batch Gradient Descent with Momentum - nu se tine cont doar de gradientul local ci si tendinta recenta a suprafetei de eroare. In acest mod se poate evita blocarea intr-un minim local al functie de eroare. Ponderile se modifica cu suma ponderata dintre ultima actualizare si gradient. Parametrul care pondereaza suma ia valori intre 0 si 1. Daca mc este 0 actualizarea se bazeaza numai pe gradient. Daca mc este 1 actualizarea se face cu valoarea de la pasul anterior si gradientul este ignorat.
Functia care implementeaza acest algoritm se numeste traingdm.
p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net=newff(minmax(p),[3,1],,'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);
Rulati programul demonstrativ nnd12mo.
Daca eroarea la un moment este mai mare cu max_perf_inc (de obicei 1.04) decat eroarea la momentul anterior, actualizarea nu are loc iar rata de invatare scade (se inmulteste cu lr_dec = 0.7). Altfel, ponderile se actualizeaza iar rata de invatare creste (se inmulteste cu lr_inc = 1.05).
Functia care implementeaza acest algoritm se numeste traingda (traingdx cu momentum).
p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net=newff(minmax(p),[3,1],,'traingda');
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.lr_inc = 1.05;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;
[net,tr]=train(net,p,t);
Rulati programul demonstrativ nnd12vl.
Daca folosim functii de transfer sigmoide, atunci pentru valori mari ale input-urilor gradientul are valori foarte mici. Se foloseste doar semnul gradientului pentru a da directia de actualizare a ponderilor. Daca gradientul are acelasi semn pentru doua iteratii succesive, valoarea de actualizare se mareste cu factorul delt_inc. Daca gradientul isi schimba semnul atunci valoarea de actualizare se micsoreaza cu factorul delt_dec.
Functia care implementeaza acest algoritm se numeste trainrp.
p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net=newff(minmax(p),[3,1],,'trainrp');
net.trainParam.show = 10;
net.trainParam.epochs = 300;
net.trainParam.goal = 1e-5;
[net,tr]=train(net,p,t);
Copyright © 2024 - Toate drepturile rezervate