IV.- LABOR Előrecsatolt többrétegű hálók tanítása
IV.- LABOR Előrecsatolt többrétegű hálók tanítása A dolgozat célja: az előrecsatolt többrétegű neuronhálók tanítása, időben változó értékű tanító együtthatók alkalmazása, a háló méretének optimalizálása a háló méretének csökkentésével vagy növelésével, a többrétegű neuronhálókkal kapcsolatos MATLAB függvények alkalmazása neuronhálók tanítására és tesztelésére Elméleti alapfogalmak Alapvető MATLAB függvények az előrecsatolt többrétegű hálók tanítására: newff- egy új többrétegű előrecsatolt perceptron típusú háló létrehozása sim-a háló kimenetének előállítása egy adott bemenetre (előhívási fázis) train-a háló tanítása NEWFF –letrehoz egy előrecsatolt neuronhálót net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) PR -- R x 2 matrix, tartalmazza a minimális és maximális értékeket egy R elemű bemeneti vektorra Si –az ik réteg neuronjainak száma, az utolsó (kimeneti réteg) neuronjainak a számát a feladat határozza meg) TFi –i-ik réteghez tartozó aktivációs függvények típusa:tansig, logsig, purelin (alapértelmezett = 'tansig') BTF- backpropagation training function trainbfg-quasi-Newton backpropagation trainlm -Levenberg-Marquardt backpropagation traingd -Gradient descent backpropagation traingdm -Gradient descent with momentum backpropagation traingda -Gradient descent with adaptive learning rate backpropagation traingdx -Gradient descent with momentum and adaptive learning rate backpropagation BLF - Backprop weight/bias learning function, default = 'learngdm' LEARNGD-Gradient descent weight/bias learning function LEARNGDM-Gradient descent w/momentum weight/bias learning function PF- Performance function, default = 'mse'. MSE Mean squared error performance function. MSEREG Mean squared error with regularization performance function. MAE Mean absolute error performance function. Példa P = [0 1 2 3 4 5 6 7 8 9 10]; T = [0 1 2 3 4 3 2 1 2 3 4]; tanító halmaz net = newff([0 10],[5 1],{'tansig' 'purelin'}); % a háló felépítése
23
Mesterséges Intelligencia Labor
net = train(net,P,T); %a háló tanítása Y = sim(net,P); %a háló kimenetének kiszámolása Ötletek a tanítási algoritmus gyorsítására, a lokális minimumokba való ragadás elkerülésére Milyen értéket kell választani a tanítási együtthatónak? a) Túl nagy tanítási együttható esetében az algoritmus nem konvergens. b) Igen kicsi tanítási együttható esetében a tanulás lassú, és gyakran elakad lokális minimumokban c) Javasolt a változó értékű tanítási együtthatónak az alkalmazása, kezdetben nagyobb együttható biztosítja a gyors tanítást, a tanítás végén pedig egyre kisebb értékű együttható alkalmazása eredményezi a pontos “finom” a tanulást. Egy javaslat a változó értékű tanítási együttható kiszámítására µ[k ] = µ 0
1 ahol 1 + Tk
µ 0 -a tanítási
együttható kezdeti értéke, k-adik tanítási ciklus, T- egy paraméter, melynek segítségével a tanítási együttható változásának meredekségét lehet hangolni, µ[k ] -a tanítási együttható értéke a k-adik tanítási ciklusban d) A lokális minimumokba való elakadás elkerülésére javasolt a momentum módszer alkalmazása. A Widrow Hoff (delta) szabályt egy újabb taggal, úgynevezett momentummal kell kiegészíteni. A momentumos tagnak a lényege, hogy figyelembe veszi a súlyzók módosításának az irányát az előbbi lépésből. Amint az algoritmus nevéből is kiszűrhető, egy tehetetlenségi tagról van szó.
( )
w ij(l ) [k + 1] = w ij(l) [k] + µ ( l) δ i(l ) f ′ s i(l ) x (jl ) [k ] + mw ij(l) [k − 1] w (ijl )
-az l-ik réteg i-ik neuronja és j-ik bemenet közötti súlyzó értéke
µ ( l) l-ik réteghez tartozó tanítási együttható δ i(l ) -a réteg kimenetén a hiba (a kimeneti réteg esetében a háló kimenetén kiszámolt hiba,
rejtett rétegek esetében pedig a visszaáramoltatott hiba) x (jl ) [k ] -az l-ik réteg j-ik bemenete a k-ik tanítási ciklusban m -momentum tag, 0 és 1 között vehet fel értéket e) Egy módszer a tanítás gyorsítására: • ha a tanulás stagnál, duplázzuk meg a tanítási együtthatót • ha a tanulás elég gyors, marad a tanítási együttható értéke az előbbi tanítási ciklusból • ha a hiba növekedni kezd, felezzük a tanítási együtthatót A neuronháló méretének az optimalizálása Nem elég a feladatot megoldani, hanem a leggyorsabb megoldást szeretnénk elérni. Ha a neuronháló szoftveres megvalósításáról van szó, a háló kimenetének a kiszámítása (és tanítása) annál gyorsabb, minél kevesebb számítást kell elvégeznünk. A háló méretének az optimalizálása az elvégzendő számítások csökkentését eredményezi. A neuronháló optimális mérete a következőképpen határozható meg a) A háló méretének növelésével. Egy kisebb méretű hálóból kiindulva elvégezzük a tanítást. A tanítás végén ellenőrizzük, hogy elfogadható-e a megoldás. Ha nem elfogadható, újabb neuronokat építünk a hálóba. Egy rejtett réteget és egy kimeneti réteget tartalmazó háló esetében a rejtett rétegben egy újabb neuronnak a bevitele a súlyzómátrixoknak a következő módosításait igényli
24
IV.- LABOR Előrecsatolt többrétegű hálók tanítása
• a rejtett réteg súlyzó mátrixához hozzá kell adni egy újabb oszlopot, • a kimeneti réteghez hozzá kell adni egy újabb sort Újra és újra elvégezzük a háló tanítását, amíg a hiba a megfelelő érték alá nem csökken. Az új neuron bevitele után a hiba csökkenése lesz észlelhető. Ha a hiba csökkenése stagnál, egy újabb neuron bevitelére kerül sor. b) A háló méretének a csökkentésével. Egy nagyobb méretű hálóból kiindulva (amely biztosan megoldja a feladatot) optimalizáljuk a háló méretét csökkentve a rejtett rétegben levő neuronok számát. A neuronok kivágásánál felmerül a kérdés, hogy melyik neuronokat lehet kivágni a hálóból. A neuron hálóból kivághatóak azok a neuronok, amelyek teljesítik a következő feltételeket: • Ha két neuronnak a kimenete hasonló a tanítóhalmaz minden elemére • A tanítóhalmaz minden elemére egyes neuronok kimenete nulla (vagy nullához közeli) Egy neuron kivágása után továbbtanítjuk a neuronhálót. Első fázisban a hiba növekedése lesz észlelhető, de ha a háló képes megoldani a feladatot, a hiba az elvárt érték alá csökken. Tehát egy újabb neuront kell kivágni. Addig ismételjük a neuronok kivágását, amíg a hiba az elvárt érték alá nem csökken. Az alábbiakban egy példaprogram látható, amelyben 5x7 méretű alfabetikus karaktereket tanítunk egy előrecsatolt többrétegű mesterséges idegsejthálóval a MATLAB Neural Networks Tolbox függvényeit alkalmazva. clf; figure(gcf) echo on % NEWFF - az elırecsatolt háló inicializálása % TRAINGDX - a háló tanítása gyors backpropagation algoritmussal % SIM - a neurális háló szimulációja %% KARAKTER FELISMERÉS % A TANÍTÓ HALMAZ FELÉPÍTÉSE % ========================== %prprob tartalmazza a tanító halmazt (26 karakter) és az elvárt kimenetet [alphabet,targets] = prprob; [R,Q] = size(alphabet); [S2,Q] = size(targets); %% MEGHATÁROZZUK A HÁLÓ STRUKTÚRÁJÁT % ================================== % logsig típusú aktivációs függvényeket alkalmazunk a rejtett és a kimeneti % rétegbe %S1-a rejtett retegben levı neuronok száma %S2-a kimeneti rétegben levı neuronok száma S1 = 10; net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx'); net.LW{2,1} = net.LW{2,1}*0.01; net.b{2} = net.b{2}*0.01; %a COMMAND ablakba beírva a net változót, láthatjuk, hogy milyen paramétereket %tartalmaz és ha szükséges, módosíthatjuk azokat. %például net.trainParam.lr -a tanítási együttható lekérdezése %például net.trainParam.lr=0.001 %net.layers{1}.transferFcn % a rejtett réteg aktivációs függvényének
25
Mesterséges Intelligencia Labor %lekérdezése %net.layers{2}.transferFcn % A második (kimeneti) réteg aktivációs %függvényének lekérdezése %net.layers{1}.transferFcn='tansig' -tansig aktivációs függvény alkalmazása %a rejtett rétegbe %% TANÍTJUK A HÁLÓT (ZAJMENTESEN) % ================================== % Beállítjuk a tanítási paramétereket net.performFcn = 'sse'; % Sum-Squared Error kritérium függvény net.trainParam.goal = 0.1; % a cél hiba net.trainParam.show = 20; % a hiba kirajzolásának frissítése net.trainParam.epochs = 5000; % a maximális tanítási korszakok száma net.trainParam.mc = 0.95; % momentum értéke P = alphabet; %-a tanítandó karakterek T = targets; %-az elvárt kimenet [net,tr] = train(net,P,T); % a háló tanítása %% A HÁLÓ TANÍTÁSA ZAJOS KÖRNYEZETBEN % ================================== netn = net; %lementjük a régi hálót netn.trainParam.goal = 0.6; % a cél hiba netn.trainParam.epochs = 300; % maximális tanítási korszakok száma % A hálót 10 cikluson át tanítjuk, az eredeti karaktereket torzítva T = [targets targets targets targets]; for pass = 1:10 fprintf('Sikeres = %.0f\n',pass); P = [alphabet, alphabet, ... (alphabet + randn(R,Q)*0.1), ... (alphabet + randn(R,Q)*0.2)]; [netn,tr] = train(netn,P,T); echo off end echo on %% % %
TANITJUK A HÁLÓT AZ EREDETI (nem zajos) KARAKTERKRE ========================================= biztosítva ezáltal, hogy az eredeti karaktereket helyesen azonosítja
netn.trainParam.goal = 0.1; netn.trainParam.epochs = 500; net.trainParam.show = 5; hálóra
% célhiba % maximális tanítási korszakok száma % a hiba kirajzolásának frissítése a net
P = alphabet; T = targets; [netn,tr] = train(netn,P,T); %a háló tanítása %% A HÁLÓ TESZTELÉSE % A TESZT PARAMÉTEREK BEÁLLÍTÁSA noise_range = 0:.05:.5; max_test = 100; network1 = []; network2 = []; T = targets;
26
IV.- LABOR Előrecsatolt többrétegű hálók tanítása % A TESZT ELVÉGZÉSE for noiselevel = noise_range fprintf('A háló tesztelése errors1 = 0; errors2 = 0;
%.2f zajszintre.\n',noiselevel);
for i=1:max_test P = alphabet + randn(35,26)*noiselevel; % AZ ELS? HÁLÓ TESZTELÉSE (net) A = sim(net,P); % a háló szimulációja a bemenetekre AA = compet(A); % errors1 = errors1 + sum(sum(abs(AA-T)))/2; %a hiba összegzése % A MÁSODIK HÁLÓ TESZTELÉSE An = sim(netn,P); %a háló szimulációja a bemenetekre AAn = compet(An); errors2 = errors2 + sum(sum(abs(AAn-T)))/2; %a hiba összegzése echo off end % ÁTLAGHIBA SZÁMOLÁSA 100 x 26 KARAKTERRE network1 = [network1 errors1/26/100]; %elsı háló átlag hibavektora network2 = [network2 errors2/26/100]; %második háló hibavektora end echo on % AZ EREDMÉNY ÁBRÁZOLÁSA % ======================= clf plot(noise_range,network1*100,'--',noise_range,network2*100); title('Felismerési HIBA %-ban kifejezve'); xlabel('Zajszint'); ylabel('Elsı háló(zajmentes tanítás) - Második háló (Zajos tanítás) --');
I.
Feladat A III. Labor órán megtervezett előrecsatolt többrétegű háló tanítását végezzük el a következő esetekre a. a súlymódosításnál vegyük figyelembe a büntető tagot µλ wij(l ) , melynek hatására a tanítás után a súlyzók értéke kicsi lesz (közel nullához). A büntető tag alkalmazásával a súlymódósítás a következőképpen alakul : wij( l ) [k + 1] = wij(l ) [k ] + µ ( l )δ i(l ) x (jl ) − µλ wij(l ) .
A büntetőtagot csak azon súlyzókra alkalmazzuk, melyek abszolút értéke egy küszöb alatt van wij(l ) < θ , ellenkező esetben a háló nem fog tanulni. b. λ − felejtési együttható. A büntető tag alkalmazásának a célja, hogy a tanítás elvégzése után egyszerű sítsük a háló struktúráját, kiejtve a hálóból azokat a neuronokat, melyek kimenete a teljes tanítási ciklusra nulla körüli értéket vesz fel. A feladat, hogy a tanítás elvégzése után határozzuk meg az optimális neuronhálótopológiát. 1 c. A tanítás során alkalmazzunk időben változó tanítási együtthatókat µ [i ] = µ 0 1 + ki ahol µ 0 -a tanítási együttható kezdeti értéke, i-az i-edik tanítási ciklus, k- egy paraméter, melynek segítségével a tanítási együttható változásának meredekségét lehet hangolni µ[i] -a tanítási együttható értéke az i-edik tanítási ciklusban d. Tervezzünk egy többrétegű előrecsatolt perceptron típusú optimális méretű hálót 1. kiindulva egy kisebb méretű hálóból (kevesebb neuron a rejtett rétegben), és növelve a rejtett rétegben levő neuronok számát 2. kiindulni egy nagyobb méretű hálóból (mely biztosan megoldja a
27
Mesterséges Intelligencia Labor
feladatot) és csökkenteni a rejtett rétegben (rétegekben) levő neuronok számát. (Azokat a neuronokat távolítsuk el, melyek kimenete a teljes tanítási halmazra nullához közeli értéket ad, vagy melyek nem változnak a tanítás ideje alatt.) Hasonlítsunk össze különböző gradiens alapú algoritmusokat, alkalmazva a NeuralNetworkToolbox függvényeit. Az összehasonlítást alkalmazzuk karakterosztályozásos feladatra. (Az osztályozandó számjegyek 0–9, a karakterek mérete 5x7) A fontosabb függvények, melyek segítségével a feladat elkészíthető , a következők:newff, sim és train
II.
28