Că t ă lin-D a nie l Că lea nu
Virgil Tiponuţ
Reţele neuronale. Aplicaţii
Material realizat în cadrul programului TEMPUS AC-JEP 13438-98
Prefaţă
Cartea se adresează studenţilor de la facultăţile de Electronică şi Telecomunicaţii, Automatică şi Calculatoare, Informatică şi are rolul de a introduce noţiuni teoretice elementare despre reţele neuronale artificiale (RNA) şi deprinderi practice pentru implementarea software (“Neural Network Toolbox v.3” din mediul MATLAB v.5.3 - 1999) a acestora. În acest sens, prima aplicaţie prezintă succint mediul MATLAB. Noţiunile expuse aici facilitează înţelegerea aspectelor legate de implementarea MATLAB a RNA. A doua aplicaţie abordează principiile generale ale calculului neuronal iar restul aplicaţiilor tratează cele mai importante tipuri de reţele neuronale: perceptronul simplu şi cel multistrat, RNA bazate pe funcţii radiale, RNA recurente (Hopfield), RNA cu autoorganizare (Kohonen) şi RNA celulare. Pentru fiecare dintre RNA enumerate mai sus sunt prezentate pe scurt aspecte legate de arhitectură, algoritmii de antrenament şi aplicaţiile tipice. Acestea din urmă sunt însoţite şi de codul sursă MATLAB aferent rezolvării acestora. Pentru aprofundarea aspectelor teoretice privind RNA este recomandată utilizarea, în paralel cu acest material, a cărţii
“Reţele neuronale. Arhitecturi şi
algoritmi” apărută în Ed. POLITEHNICA şi elaborată de aceeaşi autori. Lucrarea a fost realizată, pe baza unei documentării la University of
STRATHCLYDE, Glasgow, Marea Britanie, în cadrul programului TEMPUS AC-JEP 13438-98 iar autorii ţin să mulţumească pe această cale coordonatorilor acestui program. program. Totodată Totodată exprimăm exprimăm mulţumiri mulţumiri recenzorul recenzorului ui pentru pentru sugestiile sugestiile utile exprimate exprimate după parcurgerea acestui material precum şi cadrelor didactice de la University of Strathclyde, Glasgow, pentru numeroasele discuţii care au contribuit la finalizarea
acestei cărţi.
Autorii
Cuprins
Aplicaţia 1.
Introd Introduc ucere ere în MATLAB MATLAB………… …………………… …………………… …………….. …..…….p …….pag. ag.77
(C.D. Căleanu)
Aplicaţia 2. Modele ale neuronilor şi ale reţelelor neuronale artificiale….....pag.19 (C.D. Căleanu)
Aplicaţia 3. Perceptronul simplu. Algoritmul LMS…………………………pag.29 (C.D. Căleanu)
Aplicaţia 4. Perceptronul multistrat. Algoritmul BP standard………….……pag.35 (C.D. Căleanu)
Aplicaţia 5. Algoritmi rapizi de antrenament pentru RNA de tip MLP…......pag.45 (C.D. Căleanu)
Aplicaţia 6. Reţele neuronale bazate pe funcţii radiale………………..…….pag.55 (C.D. Căleanu)
Aplicaţia 7. Reţele neuronale artificiale recurente………………………..….pag.59 (C.D. Căleanu)
Aplicaţia 8. Reţele neuronale cu autoorganizare.………………………..…..pag.65 (C.D. Căleanu)
Aplicaţia 9. Primul experiment cu reţele neuronale celulare: studiul unor (V. Tiponuţ)
template-uri simple…………….…………………………….….pag.71
Aplicaţia 10. Crearea unei interfeţe grafice utilizator pentru o aplicaţie cu RNA (C.D. Căleanu)
folosind mediul MATLAB……………………………………...pag.83
Anexa nr.1
Simulatorul analogic de reţele neuronale celulare
(V. Tiponuţ)
MATCNN -prezentare generală………………………………..pag.95
Bibliografie…………………………………………………...………...pag.111
APLICAŢIA NR. 1
Introducere în MATLAB
1. Generalităţi În cadrul acestei lucrări toate referinţele au în vedere MATLAB versiunea
5.3.0 (R11), 21.01.1999. Matlab [1], [2] reprezintă un mediu de programare destinat calculului numeric şi reprezentărilor grafice în domeniul ştiinţei şi ingineriei. Elementul de bază cu care operează MATLAB este matricea. Este uşor de extins, prin faptul că orice utilizator poate poate adău adăuga ga propr propriile iile funcţi funcţiii sau sau le poate poate modif modifica ica pe cele cele existe existente nte.. Folos Folosind ind funcţiile funcţiile predefinite ale MATLAB-ului MATLAB-ului se obţine o importantă economie de timp în crearea de noi aplicaţii. Deasemenea pachetul software include un set de funcţii specifice (denumite “toolbox”) anumitor domenii, ca de exemplu: -
Reţe Reţele le neu neuro rona nale le (“N (“Neu eura rall Netwo Network rks” s”); );
-
Logi Logică că fuzz fuzzyy (“Fu (“Fuzz zzyy Logi Logic” c”))
-
Prel Preluc ucră rări ri de de imagi imagine ne (“I (“Ima mage ge Proc Proces essi sing ng”) ”);;
-
Prel Preluc ucră rări ri de de semna semnall (“Sig (“Signa nall Proce Process ssin ing” g”); );
-
Undi Un dişo şoar aree (“Wa (“Wavvele elet”) t”)
-
Achi Achizi ziţi ţiee de de dat datee (“D (“Dat ataa Aqu Aqusi siti tion on”) ”);;
-
Stat Statis isti tică că (“St (“Stat atis isti tics cs”) ”);;
-
Identi Identific ficare areaa siste sistemel melor or (“Sy (“Syste stem m Ident Identifi ificat cation ion”); ”);
-
Fina Finannciar ciar (“F (“Fin inaancia ncial” l”)). Există posibilitatea modelarii, analizei şi simularii sistemelor dinamice, prin
descrierea acestora la nivel de schemă bloc prin intermediul mediului Simulink. În
- 8 - Aplicaţia nr. 1 acestă categorie pot fi incluse, de exemplu, sisteme cu procesoare numerice de semnal (“DSP Blockset”) sau sisteme bazate pe circuite electonice de putere (“Power System Blockset). Adăugând la cele de mai sus şi numeroasele posibilităţi de reprezentare grafică 2 sau 3D a datelor şi posibilitatea interfaţării codului MATLAB cu cel scris în “C” “C” sau limbaj de asamblare pentru procesoarele de semnal, avem argumentele
necesare
care să justifice implementarea aplicaţiilor cu reţele neuronale prin intermediul
MATLAB. Se oferă în continuare noţiuni MATLAB elementare [3], necesare unei bune înţelegeri ale aplicaţiilor prezentate în capitolele următoare.
2. Elemente de bază MATLAB 2.1 Linia de comandă Se foloseşte de regulă pentru lansarea în execuţie a programelor sau pentru diverse comenzi MATLAB. Un program MATLAB se aplelează tastând în linia de comandă numele fişierului. O condiţie necesară rulării programului este setarea căii în care acesta se găseşte (din meniul principal, opţiunea “File”, submeniu “Set path”). În modul linie de comandă fiecare linie este prelucrată imediat şi rezultatele sunt afişate. Linia de comandă nu este recomandată pentru scrierea fişierelor MATLAB.
2.2 Crearea programelor MATLAB (fişierelor script şi fişiere funcţie) Un program MATLAB, MATLAB, caracterizat de extensia
*.m, constă dintr-o
succesiune de instrucţiuni MATLAB, cu posibilitatea apelării altor fişiere. El presupun presupunee mai multe linii de cod care se pot scrie apelând apelând editorul editorul MATLAB MATLAB implicit. implicit. Acesta se lansează prin comanda “Edit”. Un fişier script conţine o secvenţă de comenzi. Dacă prima linie a fişierului
Introducere în MATLAB MATLAB - 9 conţine cuvântul “function”, fişierul respectiv este declarat ca fişier funcţie. O funcţie diferă de un script prin faptul că poate lucra cu c u argumente. Editorul oferă şi facilităţi de depanare
(“debugging”) a programului prin
setarea unor puncte de oprire (“breakpoints”) şi rularea pas cu pas a programului.
Exemplul Exemplul 1.1 Scrieţi Scrieţi o funcţie funcţie denumită “suma” care să preia drept argument două variabile şi să returneze suma acestora. Se apelează editorul prin comanda “edit” (fig.1.1).
Fig.1.1 Lansarea editorului pentru fişiere MAT:AB de tip *.m.
În urma acestei comenzi se poate introduce codul MATLAB aferent funcţiei “suma” (fig.1.2). După salvarea fişierului (“File”, “Save As…”, suma.m) se poate
apela din linia de comandă nouă funcţie definită (fig.1.3).
2.3 Operaţii cu matrici !∀
Definirea unei constante. Exemplu: » x = 2
!∀
Definirea unui vector. Exemplu: » y = [1 2 3 4 5]
- 10 - Aplicaţia nr. 1
Fig.1.2 Editorul/debbuger-ul MATLAB folosit pentru scrierea şi depanarea fişierelor *.m.
Fig.1.3 Apelul funcţiei sumă, cu parametrii (6,4). Logic, rezultatul returnat va fi 6+4 = 10.
!∀
Definirea unei matrici. Exemplu: » A = [1 2 3;4 5 6;7 8 9]. Rezultatul va fi o matrice 3x3 de forma:
Introducere în MATLAB - 11 A=
!∀
1
2
3
4
5
6
7
8
9
Referirea unui elemet al unei matrici. Exemplu: » A(2,1) ans = 4
!∀
Adunare +
!∀
Scădere -
!∀
Inmulţire *
!∀
Inmulţirea elementelor elementelor corespondente .*
!∀
Ridicarea la putere ^
!∀
Ridicarea la putere a elementelor corespondente .^
!∀
Impărţirea la stânga \ sau la dreapta /
!∀
Impărţirea la stânga .\ sau la dreapta ./ a elementelor corespondente
!∀
Transpusa unei matrici '
!∀
Schimbarea dimensiunilor matricii - funcţia reshape (X, M, N) . Întoarce o matrice de M linii şi N coloane cu elemente obţinute din matricea originală X .
2.4 Generarea vectorilor şi matricilor !∀
Matrice nulă - funcţia zeros (M, N). Generează o matrice MxN cu toate elementele egale cu 0.
!∀
Matrice unitate - funcţia ones (M, N). Generează o matrice MxN cu toate elementele egale cu 1.
!∀
Matrice identică - funcţia eye (N, M). Generează o matrice MxN în care diagonala matricii are elementele egale cu 1, restul elementelor matricii fii nd 0.
- 12 - Aplicaţia nr. 1 !∀
Generarea vectorilor cu pas liniar. Dacă se cunosc limitele intervalului şi pasul dintre două elemente, vectorul va fi generat cu instrucţiunea:
x = xmin : pas : xmax Dacă se cunosc limitele intervalului şi numărul de elemenete N se foloseste comanda următoare:
x = linspace (xmin, xmax, N). !∀
Generarea vectorilor cu pas logaritmic. Un vector x care va conţine N
elemente distribuite logaritmic între decadele [10
xmin
, 10xmax] se generează
astfel:
x = logspace (xmin, xmax, N) 2.5 Informaţii despre vectori/matrici !∀
Dimensiunea unei matrici - funcţia size (A) . Returnează un vector coloană
[M N] în care M reprezintă numărul de linii iar N reprezintă numărul de
coloane pentru matricea A. !∀
Lungimea unui vector - funcţia length (x). Întoarce numărul de elemente ale vectorului x.
2.6 Instrucţiuni şi fucţii de control !∀
Repetarea unei secvenţe de program de un anumit număr de ori - instrucţiunea
FOR: FOR variabilă = expresie, grup de instrucţiuni, END !∀
Executarea condiţionată a instrucţiunilor Forma generală este: IF expresie_1
- instrucţiunile IF, ELSEIF, ELSE .
Introducere în MATLAB - 13 declaraţii_1 ELSEIF expresie_2 declaraţii_2 ELSE declaraţii_3 END Dacă expresie_1 este adevărată se vor executa numai declaraţii_1. Altfel, dacă expresie_2 este adevărată, se vor executa numai declaraţii_2. În caz contrar, când nici expresie_1 şi nici expresie_2 nu e adevărată, se execută declaraţii_3. !∀
Repetarea unui grup de instrucţiuni de un număr nedefinit de ori - instrucţiunea
WHILE. Forma generală este: WHILE expresie grup de instrucţiuni END şi se execută “grup de instrucţiuni” până când “expresie” are toate elementele
nenule.
2.7 Reprezentarea graficelor 2D şi 3D !∀
Grafice 2D elementare, în coordonate liniare. Sunt generate prin intermediul instrucţiunilor: plot (y), plot (x, y), plot (x, y, s) . Prima formă reprezintă
grafic
argumentul y în funcţie de indici. A II-a formă reprezintă graficul vectorului y în funcţie de vectorul x. A III-a formă permite specificarea culorii şi a modului de reprezentare a punctelor graficului. Controlul axelor unui grafic se realizează prin intermediul instrucţiunilor loglog, semilogx, semilogy, folosite cu aceeaşi sintaxă ca instrucţiunea plot. Există posibilitatea specificării denumirii graficului title(‘text’) , axelor
graficului xlabel (‘text’) şi ylabel(‘text’), sau a legendei graficului legend
(string1, string2, …).
- 14 - Aplicaţia nr. 1 !∀
Grafice 3D elementare. Există numeroase funcţii care permit diverse reprezentări 3D. Dintre acestea cele mai des folosite sunt funcţia plot3 (x, y, z) care reprezintă o linie în spaţiul 3D care trece prin punctele ale căror coordonate sunt tripleţi
(x, y, z). Pentru reprezentarea 3D a suprafeţelor se poate folosi funcţia mesh (X, Y, Z). În aceste condiţii o suprafaţă este parametrizată prin două variabile independente care variază continuu în interiorul uni dreptunghi; fiecare punct este specificat prin trei
funcţii: X(i, j), Y(i, j) şi Z(i, j). Există posibilitatea controlul culorii (mesh (X, Y, Z, C)), al luminozităţii (lighting), al punctului de observaţie ( view (az, el)) sau se pot modifica diverse alte proprietăţi ale unei suprafeţe.
3. Experimente 3.1 Scrieţi un program MATLAB care să implementeze operaţiile cu matrici descrise în § 2.3.
Rezolvare: %Operatii cu matrici %Catalin-Daniel Caleanu, 2000 clear all close all clc disp('definirea unei constante: x=2') x=2 pause disp('definirea unui vector: y = [1 2 3 4 5]') y = [1 2 3 4 5] pause disp('definirea [10 7 6;3 2 0;2 A = [1 2 3; 4 5 B = [10 7 6;3 2
unei matrici: A = [1 2 3; 4 5 6; 7 8 9], B = 4 5]') 6; 7 8 9] 1;2 4 5]
Introducere în MATLAB - 15 pause disp('referirea unui element al unei matrici: A(2,1)' ) A(2,1) pause disp('adunarea a doua matrici: C = A + B') C = A + B pause disp('scaderea a doua matrici: D = A - B') D = A - B pause disp('inmultirea a doua matrici: E = A * B') E = A * B pause disp('inmultirea elementelor corespondente: F = A .* B' ) F = A .* B pause disp('ridicarea la puterea x: G = A ^ x' ) G = A ^ x pause disp('ridicarea la putere a elementelor corespondente: H = A .^ x') H = A .^ x pause disp('impartirea a doua matrici: I = A / B') I = A / B pause disp('impartirea elementelor corespondente a doua matrici: J = A ./ B') J = A ./B pause disp('transpusa unei matrici: K = A` ') K = A' pause disp('schimbarea dimensiunii unei matrici: reshape(A,1,9)') L = reshape(A,1,9)
3.2 Scrieţi un program MATLAB care să genereze vectori/matrici după specificaţiile din § 2.4 şi să afişeze informaţii referitoare la aceştia/acestea conform § 2.5.
- 16 - Aplicaţia nr. 1 Rezolvare: %Generarea vectorilor si matricilor %Catalin-Daniel Caleanu, 2000 clear all close all clc disp('generarea unei matrici nule cu 2 linii si 4 coloane: zeros(2,4)') A = zeros(2,4) pause disp('generarea unei matrici unitate cu 3 linii si 2 coloane; ones(3,2)') ones(3,2) pause disp('generarea unei matrici identice cu 3 linii si 3 coloane: eye(3)') eye(3) pause disp('generarea unui vector cu pas liniar: a = 1:0.1:2' ) a = 1:0.1:2 pause disp('generarea unui vector cu pas logaritmic b = logspace(1,3,5)') b = logspace(1,3,5) pause disp('afisarea dimensiunilor unei matrici: size(A)') A size(A) pause disp('afisarea dimensiunii unui vector: length(x)') a length (a)
3.3 Scrieţi un program MATALB care să folosească instrucţiunile de control descrise în § 2.6.
Rezolvare: %Instructiuni de control %Catalin-Daniel Caleanu, 2000
Introducere în MATLAB - 17 clear all close all clc disp('repetarea unei secvente de instructiuni de un nr. de ori: FOR') disp(' ') for i=1:1:4 disp('acest text va fi afisat de 4 ori') end pause disp(' ') disp('executarea conditionata a instructiunilor: IF, ELSEIF, ELSE') disp(' ') nr = input('introduceti un numar: ') if nr > 10 disp('nr > 10') elseif nr < 10 disp('nr < 10') else disp ('nr = 10') end pause disp(' ') disp('Repetarea unui grup de instructiuni de un numar nedefinit de ori: WHILE') disp(' ') i=4 while i>0 i=i-1 end
3.4 Scrieţi un program MATLAB care să ilustreze posibilităţile de creare a graficelor 2D şi 3D pe baza funcţiilor descrise în § 2.7. În acest sens reprezentaţi o distribuţie gaussiană 2D respectiv 3D. Ecuaţiile de generare sunt: (
y∗
1 2
)&
2
e
& ∋
2
x
% #
2+
2#
∃
, pentru cazul 2D
,+
şi:
z∗
2
( x2 −y ) & & 2 +2 ∋
1
,+
2
e
2%
# # ∃
, pentru cazul 3D.
- 18 - Aplicaţia nr. 1 Rezolvare: %Grafice 2D si 3D %Catalin-Daniel Caleanu, 2000 clear all close all clc sigma=3; disp('grafic 2D') x=-1:.005:1; y=(1/2*pi*sigma^2)*exp(-(x.^2/2*sigma^2)); plot(x,y) title('Gaussian 2D') xlabel('Axa Ox') ylabel('Axa Oy') pause disp('grafic 3D') x=-1:.01:1; y=-1:.01:1; [X,Y] = meshgrid(x,y); Z=(1/2*pi*sigma^2)*exp(-(X.^2+Y.^2)/2*sigma^2); figure mesh(Z) title('Gaussian 3D') xlabel('Axa Ox') ylabel('Axa Oy') zlabel('Axa Oz')
APLICAŢIA NR. 2
Modele ale neuronilor şi ale reţelelor neuronale artificiale
1. Introducere Se urmăreşte definirea noţiunilor de neuron artificial şi reţea neuronală
artificială (RNA). Sunt evidenţiate arhitecturile tipice ale RNA precum şi modurile de instruire aferente acestora [4], [5].
2. Modelul neuronului artificial Neuronul artificial, denumit uneori procesor elementar, nod sau unitate este inspirat din modelul corespondentului biologic, real. Astfel, în cazul neuronului
biologic (fig.2.1) se pot deosebi mai multe intrări (dendrite), corpul celulei şi o ieşire (axon). Analogia dintre neuronul real şi cel artificial poate fi observată comparând fig. 2.1 cu fig.2.2, în cea din urmă figură fiind prezentat modelul unui neuron artificial. Se pot deosebi, în cazul fig.2.2, cele 3 elemente constituente ale neuronului artificial: - un număr de intrări (conexiuni sinaptice), fiecare dintre ele fiind caracterizată de o anumită pondere sinaptică wkj; - un sumator care efectuează o combinaţie liniară a intrărilor, rezultatul fiind intrarea netă uk ;
- o ieşire caracterizată de prezenţa unei funcţii de activare φ(.) şi a unui prag !k . De regulă φ(.) este o funcţie neliniară. Fig. 2.3 prezintă câteva forme tipice pentru funcţia de activare a unui neuron.
- 20 - Aplicaţia nr. 2
sinapsă axon
nucleu corpul celulei
dendrite Fig. 2.1 Structura unui neuron biologic.
x1 uk
x2
yk
φ
Σ x N
θk Fig. 2.2 Modelul neuronului artificial.
Formula matematică care descrie comportarea neuronului artificial este:
y
(u w
# % # % ( k
k
N
k
# %
cu x0 = -1 şi w k0 = ! k .
∀
kj j
) (2.1)
∃ ! k
j#
ceea ce se mai poate scrie:
yk
) x
∃ !
1
N
( ∀ w kj x j ) j # 0
(2.2)
Modele ale neuronilor şi ale reţelelor neuronale artificiale - 21 1
1
1
1
0
0
0
0
-1
-1
-1
-1
-4
-2
0
2
a) Sigmoid
4
-4
-2
0
b) Treaptă
2
4
-4 -2
0
2
4
-4 -2
c) Liniară cu saturaţie
0
2
4
d) Gaussian
Fig. 2.3 Funcţii de activare tipice.
3. Arhitecturi ale RNA O structură compusă dintr-un număr mare de procesoare elementare
interconectate care operează în paralel, în vederea îndeplinirii unei sarcini specifice, poartă denumirea de reţea neuronală artificială, prescurtat RNA. &∋
RNA cu propagare înainte a semnalului (feedforward) În acest caz, câmpul receptiv al unui neuron provine doar din stratul/straturile
inferioare celui din care face parte neuronul. RNA feeedforward pot fi total (fig.2.4) sau parţial conectate (fig.2.5). &∋
RNA recurente (feedback) Se disting prin existenţa unui semnal de reacţie din partea neuronilor
straturilor superioare pentru neuronii straturilor inferioare sau, ca un caz particular, semnalul de reacţie poate să provină de la ieşirile neuronilor aceluiaşi strat (fig.2.6).
- 22 - Aplicaţia nr. 2
Fig. 2.4 RNA feedforward total conectată.
Fig.2.5 RNA feedforward parţial conectată.
4. Tipuri de instruire specifice RNA RNA achiziţionează cunoştinţele prin instruire (învăţare). Învăţarea presupune
adaptarea parametrilor liberi ai RNA ca urmare a stimulilor mediului în care se găseşte reţeaua. Tipul de învăţăre este determinat de maniera în care sunt ajustaţi
parametrii liberi ai RNA:
Modele ale neuronilor şi ale reţelelor neuronale artificiale - 23 -
Fig.2.6 RNA recurentă.
&∋
Învăţarea de tip supervizat Este caracterizată de prezenţa unui supervizor care cunoaşte cu exactitate
modul de asociere al intrărilor RNA cu ieşirile acesteia. Parametrii RNA sunt modificaţi sub influenţa combinată a vectorilor de antrenament şi a semnalului de
eroare (diferenţa dintre răspunsul dorit şi cel actual). Scopul final al algoritmului de antrenament este ca RNA să emuleze, optim în sens statistic, supervizorul. &∋
Învăţarea de tip nesupervizat (cu autoorganizare) Este caracterizată de absenţa unui semnal sau supervizor care să
aprecieze corectitudinea asociaţiilor intrare-ieşire. RNA va descoperii
singură
legităţile conţinute în datele de intrare printr-o reprezentare internă adecvată a
trăsăturilor vectorului de intrare.
- 24 - Aplicaţia nr. 2 &∋
Învăţarea prin întărire Urmăreşte maximizarea unei mărimi scalare
(indice de performanţă sau
semnal de întărire) în urma unei acţiuni efectuate de către sistemul supus învăţării. Dacă modificările aduse conduc spre o stare mai bună decât cea precedentă, tendinţa sistemului de a produce acea acţiune particulară este întărită.
5. Probleme 5.1. Reprezenati grafic câteva din funcţiile de activare
(denumite în MATLAB
“transfer functions”) ale unui neuron disponibile în Neural Networks Toolbox, v.3.0.
Indicaţie: Pentru a cunoaşte totalitatea funcţiilor specifice, predefinite, disponibile pentru domeniul reţele neuronale tastaţi “help nnet”. Dacă se doresc amănunte despre o anumită funcţie, acestea se pot obţine prin: “help denumirea_funcţiei”. Rezolvare: %Reprezentare functii de activare %Catalin-Daniel Caleanu, 2000 clear all close all clc n = -4:0.001:4; %functie de activare de tip sigmoid a1 = logsig(n); %functie de acticare de tip treapta a2 = hardlim(n); %functie de activare de tip liniar, cu saturatie a3 = satlins(n); %functie de activare radiala a4 = radbas(n); subplot(1,4,1) plot(n,a1,'linewidth',2,'color','b');
Modele ale neuronilor şi ale reţelelor neuronale artificiale - 25 axis([-4 4 -1.1 1.1]) title('sigmoid') subplot(1,4,2) plot(n,a2,'linewidth',2,'color','b'); axis([-4 4 -1.1 1.1]) title('treapta') subplot(1,4,3) plot(n,a3,'linewidth',2,'color','b') axis([-4 4 -1.1 1.1]) title('liniar') subplot(1,4,4) plot(n,a4,'linewidth',2,'color','b'); axis([-4 4 -1.1 1.1]) title('radial')
Observaţie: Rezultatul rulării programului poate fi observat în fig. 2.3. 5.2. Un neuron “j” primeşte semnale de la alţi patru neuroni ale căror nivele de activare sunt: 0,1 , 0,3 , - 0,8 , 0,5. Ponderile sinaptice ale neuronului “j” sunt: 0,9 , 0,7 , 0,1 , 0,7. Calculaţi ieşirea neuronului “j” în următoarele cazuri: a) neuronul este liniar; b) neuronul are o funcţie de activare sigmoidală. Se consideră pragul de activare θ k = 0,5.
Indicaţie: Modelul neuronului va fi implementat folosind funcţiile de activare purelin pentru cazul neuronului liniar respectiv logsig pentru cazul neuronului neliniar.
Rezolvare: %Implementare neuron %Catalin-Daniel Caleanu, 2000 clear all close all clc % definire prag de activare theta = 0.5 % x = vector de intrare x = [0.1 0.3 -0.8 0.5]
- 26 - Aplicaţia nr. 2 % w = vectorul ponderilor sinaptice w = [0.9 0.7 0.1 0.7] % y = iesirea neuronului y1 = purelin(x*w'-theta) y2 = logsig(x*w'-theta)
5.3. Cunoscând faptul că anumiţi algoritmi de antrenament ai RNA folosesc derivata de ordinul I a funcţiei de activare, ce avantaj prezintă în acest sens funcţiile de activare sigmoid şi tangentă hiperbolică?
Rezolvare: Derivatele reprezintă funcţii exprimate prin funcţia originală (cea care se derivează). 5.4. Implementaţi o RNA feedforward total conectată, care să aibă configuraţia de mai jos. Calculaţi ieşirea y a RNA pentru x = [0,7 3] considerând că neuronii din stratul ascuns au funcţii de activare de tip tangentă hiperbolică iar neuronul de ieşire este
liniar.
-1 x1 x2
0,2 -0,2
0,5 1
-1
-1 0,5 y
1
-2 -0,1 -1
Fig.2.7 Reţea neuronală feedforward (pentru problema 5.4).
Indicaţie : La implementarea RNA se va folosi funcţia newff , a cărei descriere este
oferită în continuare: NEWFF Crează o reţea neuronală feedforward Sintaxa: net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) în care:
Modele ale neuronilor şi ale reţelelor neuronale artificiale - 27 PR - Rx2, matrice de valori min şi max pentru R intrări. Si - Numărul de neuroni ai stratului “i”, pentru Nl straturi. TFi - Funcţia de transfer pentru stratul “i”, implicit tangentă hiperbolică ('tansig'). BTF - Funcţia de antrenament, implicit metoda Levenberg-Marquardt ('trainlm'). BLF Funcţia de învăţare, implicit gradient descendent cu moment ('learngdm') PF - Atribuit de performanţă, implicit eroarea medie pătratică ('mse').
Rezolvare: %Implementare unei retele neuronale feedforward %Catalin-Daniel Caleanu, 2000 clear all close all clc % vectorul intrarilor x = [0.7; 3]; % specificarea valorilor min si max pentru fiecare dintre intrari x1min=0; x2min=0; x1max=10; x2max=10; % definirea numarului de straturi si a numarului de neuroni/strat nr_neur_asc_strat1=2; nr_neur_ies=1; % newff intoarce obiectul net, in care % ponderile stratului de intrare, net.iw % ponderile straturilor ascunse, net.lw % si deplasarile de scara, net.b % sunt initializate cu valori subunitare aleatorii net = newff([x1min x1max; x2min x2max],[nr_neur_asc_strat1 nr_neur_ies],{'tansig' 'purelin'}); % se definesc valorile dorite pentru praguri si ponderi net.iw{1,1}(1,:) = [-1 -0.2]; net.iw{1,1}(2,:) = [1 0.2]; net.b{1,1}(1,:) = 0.5; net.b{1,1}(2,:) = -0.1; net.lw{2,1}(1,:) = [1 -2]; net.b{2} = 0.5; y = sim(net,x)
5.5 Trasaţi diagrama Hinton aferentă RNA de la punctul anterior. Indicaţie : Diagrama Hinton reprezintă o modalitate de vizualizare a mărimii
ponderilor şi pragurilor. Pentru vizualizarea ponderilor şi pragurilor aferente
neuronilor stratului ascuns din problema precedentă se va folosi comada:
- 28 - Aplicaţia nr. 2 » hintonwb(net.iw{1},net.b{1})
Se observă o reprezentare proporţională a mărimii ponderilor şi pragurilor, culoarea roşie (mai închisă) fiind asocită cu valorile negative iar cea verde (mai deschisă) cu cele pozitive (fig.2.8).
1
2
0
1 Input
2
Fig.2.8 Diagrama Hinton pentru problema 5.5.
5.6 Evidenţiaţi comparativ avantajele şi dezavantajele RNA total conectate faţă de RNA parţial conecte. Rezolvare : Reţelele neuronale total conectate se folosesc atunci când nu există
cunoştinţe apriorice despre structura datelor de intrare. Au o aplicabilitate generală şi din acest motiv o structură care presupune un număr însemnat de parametri liberi (ponderi şi praguri). RNA parţial conectate exploatează informaţiile referitoare la
structura datelor de intrare şi au o arhitectură orientată pe un anumit tip de problemă. Ele oferă uneori, pentru probleme particulare, rezultate mai bune decât cele total
conectate. Au cerinţe privitoare la puterea de calcul mai mici decât în cazul precedent, având implementate mecanisme de partajare a ponderilor (“weight sharing”).
APLICAŢIA NR. 3
Perceptronul simplu. Algoritmul LMS
1. Introducere Se prezintă arhitectura şi algoritmii de antrenament pentru cazul RNA cu un singur neuron: perceptronul simplu şi RNA ADALINE antrenată cu algoritmul
LMS [5].
2. Perceptronul simplu Arhitectura unei astfel de RNA este prezentată în fig. 3.1. Se poate afirma că perceptronul simplu reprezintă o particularizare a modelului McCulloch-Pitts al
neuronului artificial (vezi Aplicaţia nr.2, fig. 2.2) pentru cazul în care funcţia de
activare este de tip treaptă unitate bipolară.
I x1 N T x2 R Ă R I x N
w1 y
θ
w N -1
I E Ş I R E
Fig. 3.1 Arhitectura perceptronului simplu.
Scopul perceptronului simplu este de a clasifica în una din cele două clase
disponibile (y = +1 sau y = -1) un set de stimuli exteriori. Regiunile de decizie vor fi
- 30 - Aplicaţia nr. 3 separate de către un hiperplan definit de eceuaţia: N
wi # xi ∃ i1
! 0 (3.1)
∀%
!
În concluzie, perceptronul simplu poate fi folosit cu succes doar în cazul
particular al clasificării tiparelor liniar separabile, adică a tiparelor care sunt situate de-o parte şi de alta al unui hiperplan. Având în vedere notaţiile următoare:
x (n ) ! [ ∀ 1 ,x 1 (n ), x 2 x N (n T)]= vector de intrare; (n ),..., T (n),..., wN (n)] = vectorul ponderilor sinaptice; w(n) ! [ % (n), w1 (n), w2 θ(n) = prag; y(n) = răspuns actual; d(n) = răspuns dorit; &(n) = rată de învăţare, de regulă 0 < & < 1.
paşii algoritmului (tip Rosenblatt) de antrenament aferent perceptronului simplu vor fi: a) Iniţializarea: w(0) = 0; b) Calcul răspuns actual: funcţia signum.
T
y(n) ! sgn[w (n)x(n)], în care funcţia sgn(.) reprezintă
c) Modificarea ponderilor sinaptice: w (n
∋ 1 )!
în care :
d( n )
∗ ∋ 1 , dac + C1 ! )
ãx(n)
( ∀ 1, dacã x(n) + C2
d) Incrementarea lui n cu o unitate şi salt la pct.b)
w (n ) ∋
&[ d
(n ) ∀ y (n )])x (n )
Perceptronul simplu. Algoritmul LMS - 31 3. Algoritmul LMS (Least-Mean-Square). RNA Adaline Cunoscut şi sub denumirea de algoritmul Widrow-Hoff sau regula delta, este destinat antrenarii unei RNA formată dintr-un singur neuron liniar. Ceea ce îl diferenţiază de algoritmul de antrenament al perceptronului simplu este modul de
calcul al semnalului de eroare, care în acest caz nu este cuantizat iar funcţia de activare poate fi liniară. Având în vedere aceste aspecte, algoritmul LMS poate fi formulat în modul următor: a) Etapa de initializare: pentru w k (0) = 0, k = 1,2, ..., N b) Etapa de filtrare: N
y (n ∃w (n ) (n ) )! j! 0 j x j
e( n) ! d (n ) ∀ y (n ) w ( n ∋ 1 ) ! w ( n e ( n )x ( n), k ! )∋ & k
k
1 ,2,...,
N
k
Formularea algoritmului LMS s-a făcut din perspectiva unei filtrări spaţiale. El poate fi utilizat în aceeaşi măsură în rezolvarea problemelor de filtrare temporală, considerând că x(n) reprezintă eşantioane ale vectorului de intrare la momente de timp diferite:
x( n) ! [ x( n), x( n ∀ 1 ),...,
T
x( n ∀ N ∋ 1 )]
(3.2)
RNA ADALINE ( Ada ptive Linear Element) foloseşte algoritmul de antrenament LMS (Widrow-Hoff) în scopul clasificării tiparelor. Structura ei este
prezentată în fig. 3.2. În timpul etapei de antrenament, tiparele sunt aplicate direct RNA, ea urmând să descopere singură caracteristicile acestora. Experienţa acumulata a RNA este conţinută în valorile w1, ..., w N şi %.
- 32 - Aplicaţia nr. 3
x1 x2
w1 y
Σ x N
w N
Σ
e θ
d Fig.3.2 Structura RNA ADALINE.
4. Probleme 4.1 Perceptronul simplu poate fi folosit la implementarea unor funcţii logice. Verificaţi practic această afirmaţie prin intermediul codului sursă MATLAB aferent unui perceptron simplu care să efectueze funcţiile logoce ŞI, SAU şi SAU-
EXCLUSIV. Justificaţi comportamentul perceptronului simplu în cazul funcţiei SAUEXCLUSIV. Indicaţie : La implementarea RNA se va folosi funcţia newp , a cărei descriere este
oferită în continuare: NEWP Creează un perceptron Sintaxa: net = newp(pr,s,tf,lf) în care: PR - Rx2, matrice de valori min şi max pentru R intrări. S - Număr de neuroni TF - Funcţie de transfer, implicit funcţia prag ('hardlim'). LF Funcţia de învăţare, implicit 'learnp'. Rezolvare: %Implementare unei retele neuronale de tip perceptron simplu %Catalin-Daniel Caleanu, 2000 clear all close all clc % tipar de intrare
Perceptronul simplu. Algoritmul LMS - 33 Pantr = [0 0 1 1;0 1 0 1] % tipare de iesire T_SAU = [0 1 1 1] T_SI = [0 0 0 1] T_XOR = [0 1 1 0] % se implementeaza 3 RNA perceptron net1 = newp([0 1;0 1],1); net2 = newp([0 1;0 1],1); net3 = newp([0 1;0 1],1); % se antreneaza 3 RNA perceptron in rezolvarea % problemelor SAU, SI, SAU-EXCLUSIV net1 = train(net1,Pantr,T_SAU); net2 = train(net2,Pantr,T_SI); net3 = train(net3,Pantr,T_XOR); % se testeaza performantele retelelor pentru vectorii de antrenament y1a = sim(net1,Pantr) y2a = sim(net2,Pantr) y3a = sim(net3,Pantr) % se testeaza performantele retelelor pentru vectorii de test % astfel se poate testa capacitatea de generalizare a retelelor Ptest = [0.1 0.2 0.9 0.8;0.2 0.7 0.1 0.9]; y1t = sim(net1,Ptest) y2t = sim(net2,Ptest) y3t = sim(net3,Ptest)
Observaţie: Pentru reţelele neuronale care implementează funcţiile ŞI şi SAU logic se constată o funcţionare corespunzătoare atât pentru tiparele de antrenament cât şi pentru cele de test. Pentru cazul SAU-EXCLUSIV se constată imposibilitatea
rezolvării corecte a problemei, atât pentru tiparele de atrenament cât şi pentru cele de test. Explicaţia provine din faptul că primele două cazuri (ŞI, SAU) reprezintă probleme liniar separabile, pe când problema SAU-EXCLUSIV nu e liniar separabilă. 4.2 Verificaţi capacitatea de predicţie liniară pentru o RNA ADALINE în cazul
eşantioanelor prelevate dintr-o funcţie de tip sinusoidal, la care frecvenţa se modifică liniar în intervalul [0 6π]. Consideraţi o predicţie de ordinul 5, adică eşantionul x(n) să fie prezis pe baza x(n-1), x(n-2), …, x(n-5).
Indicaţie: La implementarea RNA se va folosi funcţia newlin, a cărei descriere este oferită în continuare: NEWLIN Creează un strat liniar
- 34 - Aplicaţia nr. 3 Sintaxă: net = newlin(PR,S,ID,LR) în care: PR - Rx2, matrice de valori min şi max pentru R intrări. S Numărul de neuroni de ieşire. ID - Vectorul întârzierilor , implicit = [0]. LR - Rata de învăţare, implicit = 0.01. Rezolvare: %Predictie liniara %Catalin-Daniel Caleanu, 2000 clear all close all clc % generarea si reprezentarea functiei tinta x = 0:0.1:6*pi; fr = linspace(1,3,length(x)); y = sin(x.*fr); plot(x,y); hold on % vectori de intrare si iesire P respectiv T P = con2seq(y); T = P; % implementarea retelei neuronale lr = 0.1; intarzieri = [1 2 3 4 5]; net = newlin(minmax(y),1,intarzieri,lr); % calculul esantionului curent din cele 5 esantioane intarziate [net,ies,e]=adapt(net,P,T); % reprezentarea grafica a rezultatelor plot(x,cat(2,ies{:}),':r'); xlabel('Timp'); ylabel('Predictie - - Tinta - Eroare .-'); title('Semnalele Predictie, Tinta si Eroare'); plot(x,cat(2,e{:}),'.-g') hold off Semnalele Predictie, Tinta si Eroare 2 1
0
-1
-2 0
5
10 Timp
15
20
Fig.3.3 Semnalele Ţintă, Predicţie şi Eroare = Ţintă - Predicţie, pentru problema 4.2.
APLICAŢIA NR. 4
Perceptronul multistrat. Algoritmul BP standard
1. Introducere Se va studia una dintre cele mai importante tipuri ale RNA feedforward
(RNA cu propagare înainte) şi anume perceptronul multistrat, împreună cu algoritmul standard de antrenament al acestuia, cunoscut sub denumirea de algoritm cu
propagare înapoi a erorii (BP, backpropagation) [5], [6]. 2. Arhitectura RNA de tip perceptron multistrat În mod tipic RNA perceptron multistrat
(MLP, Multilayer Perceptron)
conţine:
- un set de unitaţi senzoriale (noduri sursă) care constituie stratul de intrare ; - unul sau mai multe straturi ascunse; - un strat de ieşire. În fig. 4.1 este prezentată arhitectura unei RNA de tip perceptron multistrat, cu un singur strat ascuns. Se pot distinge trei caracteristici esenţiale ale RNA de tip MLP: a) Neuronii straturilor de intrare, ascuns sau chiar cei ai stratului de ieşire au inclus în modelul lor matematic funcţii de activare de tip neliniar, netede (derivabile în orice punct). Prezenţa neliniarităţii este foarte importantă în funcţionarea MLP, în plus ea fiind motivată şi de către comportamentul neuronului biologic. b) MLP conţine unul sau mai multe straturi ascunse, care permit realizarea unor
sarcini complexe prin extragerea progresivă, la acest nivel, a trăsăturilor conţinute în tiparele aplicate la intrare. c) Au un grad înalt de conectivitate.
- 36 -
Aplicaţia nr. 4
x1 y1 x2
yM
x N
Fig. 4.1 RNA de tip perceptron multistrat, cu un singur strat ascuns.
3. Algoritmul BP standard Eroarea la nivelul unui neuron “j” din stratul de ieşire este definită prin
diferenţa dintre valoarea dorită şi valoarea actuală a ieşirii neuronului:
e
j
(n ) ∀ d j
(n ) ! y (n ) (4.1)
j
Astfel, suma erorilor pătratice pentru toţi neuronii stratului de ieşire, este:
1 E (n) # 2 ∀
2 j
(n )
(4.2)
e
j ∃ C
unde “C” reprezintă mulţimea neuronilor stratului de ieşire. Considerând antrenamentul RNA drept o problemă de minimizare a unei
funcţii de cost
E(n) , se pot deduce, pe baza
metodei gradientului
descendent , modificările care trebuie aduse parametrilor liberi ai RNA: & w ji ( n ∀! ∋
)
%
E ( n)
%w
ji
( n)
în care ∋ reprezintă rata de învăţare. Dezvoltând ec. (4.3) se obţin formulele modificărilor ponderilor sinaptice: a) dacă neuronul “j” aparţine stratului de ieşire:
(4.3)
Perceptronul multistrat. Algoritmul BP standard - 37 -
w (n ) ∀ (n ) &
(n ) y ∀
∋)
ji
j
[e (n ) (
∋
i
j
j
∗
(v (n ))] y (n )
j
(4.4)
i
în care ) j (n) reprezintă valoarea gradientului local al erorii iar v j(n) intrarea netă a neuronului (potenţialul intern de activare). b) dacă neuronul “j” aparţine stratului ascuns:
w (n ) ∀ (n )) &
[(
∋
ji
j
∗
(v
j
(n )w
) k
#
(n )] y (n ) (4.5)
kj
i
k
unde “k” reprezintă indicele corespunzător neuronilor din stratul succesor aceluia din care face parte neuronul “j”. Într-un caz particular, când MLP are doar un singur strat ascuns, indicele “k” se referă la neuronii stratului de ieşire. Practic, se disting două etape ale algoritmului BP: a) pasul forward - presupune calculul tuturor ieşirilor neuronilor RNA:
y ( n) ∀ ∀( ( j
( ∗ (v j
( n ))
w (n )y (n ))
j
ji
#
(4.6)
i
i∃ Cl ! 1
în care Cl-1 reprezintă stratul inferior aceluia din care face parte neuronul “j”. b) pasul backward - pe baza calculului erorii (gradientului) straturilor, provenind de la ieşire spre intrarea RNA, se modifică ponderile sinaptice cf. ec. (4.4) sau (4.5). În acest caz eroarea sau gradientul erorii pentru stratul “n+1” poate fi considerată ca un semnal de intrare pentru neuronii stratului “n” - de aici şi denumirea algoritmului (BP, backpropagation, algoritm cu propagare înapoi a erorii). Alegerea parametrului
∋
este crucială în cazul multor aplicaţii concrete. O
valoare prea mică a ratei de învăţare generează o traiectorie lină în spaţiul ponderilor dar are ca efect un proces lung de antrenament. Dimpotrivă, o valoare prea mare
conduce
la un posibil comportament instabil al RNA, convergenţa algoritmului fiind compromisă. O metodă simplă de creştere a
∋,
evitând totodată instabilitatea, o
reprezintă includerea unui termen denumit “moment” în ec. (4.4): & w ∀ +& ji
w
ji
(n ) 1 ), (n !
(n ) y (n ) (4.7)
∋) j
i
Ecuaţia de mai sus poartă denumirea de regula delta generalizată. Efectele introducerii termenului moment se manifestă prin prevenirea “înţepenirii” RNA în minime locale
- 38 -
Aplicaţia nr. 4
ale spaţiului ponderilor şi printr-un efect global de stabilizare a procesului de învăţare.
4. Probleme 4.1 Implementaţi o RNA MLP care să rezolve problema XOR. Numărul de neuroni de intrare, ascunşi şi de ieşire vor fi: 2, 4 respectiv 1 iar metoda de antrenament backpropagation cu moment (funcţia MATLAB ‘traingdm’). Indicaţie : La implementarea RNA se va folosi funcţia newff , a cărei descriere este
oferită în continuare: NEWFF Crează o reţea neuronală feedforward Sintaxa: net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) în care: PR - Rx2, matrice de valori min şi max pentru R intrări. Si - Numărul de neuroni ai stratului “i”, pentru Nl straturi. TFi - Funcţia de transfer pentru stratul “i”, implicit tangentă hiperbolică ('tansig'). BTF - Funcţia de antrenament, implicit metoda Levenberg-Marquardt ('trainlm'). BLF Funcţia de învăţare, implicit gradient descendent cu moment ('learngdm') PF - Atribuit de performanţă, implicit eroarea medie pătratică ('mse').
Rezolvare: %Implementare unui perceptron multistrat pentru rezolvarea problemei XOR %Catalin-Daniel Caleanu, 2000 clear all close all clc % tipar de intrare Pantr = [0 0 1 1;0 1 0 1] % tipare de iesire T_XOR = [0 1 1 0] % se implementeaza RNA perceptron multistrat cu structura: % doua intrari in gama [-1 1] % 4 neuroni ascunsi % 1 neuron de iesire % functia de activare stat ascuns: tangenta hiperbolica ('tansig') % functia de activare iesire: liniara ('purelin')
Perceptronul multistrat. Algoritmul BP standard - 39 % metoda de antrenament: backpropagation gradient descendent cu moment ('traingdm') net = newff([-1 1;-1 1],[4 1],{'tansig' 'purelin'},'traingdm'); net.trainParam.lr=0.05; net.trainParam.mc=0.5; net.trainParam.min_grad=0; net.trainParam.show = 10; net.trainParam.epochs = 400; net.trainParam.goal = 0.001; % se antreneaza RNA perceptron SAUEXCLUSIV net = train(net,Pantr,T_XOR);
in
rezolvarea
problemei
% se testeaza performantele retelei pentru vectorii de antrenament ya = hardlim(sim(net,Pantr)-0.5) % se testeaza performantele retelei pentru vectorii de test % astfel se poate testa capacitatea de generalizare Ptest = [0.1 0.2 0.9 0.8;-0.2 0.7 0.1 0.9]; yt = hardlim(sim(net,Ptest)-0.5)
Performance is 0.000976277, Goal is 0.001
100
10-2
0
50
100 150 238 Epochs
200
Fig.4.2 Evoluţia erorii medii pătratice de-alungul procesului de antrenamet (problema 4.1)
4.2 Verificaţi capacitatea de interpolare a RNA MLP pentru următoarea funcţie: f(x) = 0,2 + 0,8(x+ 0,7sin(2 −x)) cu 0 ≤ x ≤ 1. Se vor considera un număr de 11 puncte de antrenament, adică intervalul
- 40 -
Aplicaţia nr. 4
considerat, eşantionat cu un pas de 0,1 şi
101 puncte de test, adică un pas de
eşantionare de 0,01. Evaluaţi eroarea pentru cazul datelor de antrenament respectiv test.
Rezolvare: % Implementare unui perceptron multistrat pentru % cazul interpolarii unei functii % Catalin-Daniel Caleanu, 2000 clear all close all clc % definirea perechilor de vectori % intrare (P,pattern) - iesire (T, target) % pentru datele de antrenament (P,T) si test (Ptest, Ttest) P = 0:0.1:1; T = 0.2 + 0.8*(P + 0.7*sin(2*pi*P)); Ptest=0:0.01:1; Ttest=0.2 + 0.8*(Ptest + 0.7*sin(2*pi*Ptest)); % se implementeaza o RNA-MLP cu: % 1 intrare, 15 neuroni ascunsi, 1 neuron de iesire net1= newff(minmax(P),[15 1],{'tansig' 'logsig'},'traingdm'); net1.trainParam.lr=2; net1.trainParam.mc=0.5; net1.trainParam.min_grad=1e-10; net1.trainParam.show = 1; net1.trainParam.epochs = 300; net1.trainParam.goal = 0.001; % antrenarea retelei [net1,tr1]= train(net1,P,T); % utilizarea retelei pentru cazul datelor de antrenament si test y1test = sim(net1,Ptest); y1antr = sim(net1,P); % calculul erorii de intrepolare er1antr=(sum(sum(abs(T-y1antr))))/length(T); er1test=(sum(sum(abs(Ttest-y1test))))/length(Ttest); er = [er1antr er1test]; % reprezentarea grafica a rezultatelor clf; plot(Ptest,Ttest,'+r'); title('Aproximare functiei 0.2 + 0.8*(x + 0.7*sin(2*pi*x))' ); hold
Perceptronul multistrat. Algoritmul BP standard - 41 plot(P,T,'.') plot(Ptest,y1test,':'); xlabel('x'); ylabel('Antrenament . Test + hold off figure bar(er*100); ylabel('Eroare aproximare [%]'); xlabel('Antrenament
Iesire MLP --')
Test')
Aproximare functiei 0.2 + 0.8*(x + 0.7*sin(2*pi*x)) 1 0.8 0.6 0.4 0.2 0 0
0.2
0.4
0.6
0.8
1
x
Fig.4.3 Aproximarea unei funcţii (problema 4.2).
4.3 Considerând drept vector de intrare pentru o RNA MLP cu un singur strat ascuns, imaginile rasterizate ale cifrelor 0...9, în format binarizat 8x5 (fig.4.4). Să se scrie
codul sursă MATLAB care realizează, prin intermediul RNA MLP, clasificarea
acestor tipare.
- 42 -
Aplicaţia nr. 4 x0=[1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1; ... x9=[1 1 1 1 1; 1; 1 0 0 0 1; 1; 1 0 0 0 1; 1; 1 1 1 1 1; 1; 0 0 0 0 1; 1; 0 0 0 0 1; 1; 0 0 0 0 1; 1] 1 1 1 1 1]
Fig. 4.4 Conversia imaginilor în format binar.
Evaluaţi eroarea pentru cazul datelor de antrenament respectiv pentru setul datelor de test. Consideraţi apoi cazul datelor de antrenament/test contaminate cu
zgomot.
Rezolvare: % Implementare unui perceptron multistrat pentru % clasificarea numerelor 0...9 % Catalin-Daniel Caleanu, 2000 clear all close all clc % se incarca imaginile binarizate ale cifrelor din fisierul cifre.mat % matricile x0...x9 au dimensiunea 8x5 load cifre % se formeaza matricea P a vectorilor de intrare P = [x0(:) x1(:) x2(:) x3(:) x4(:) x5(:) x6(:) x7(:) x8(:) x9(:)]; % se formeaza matricea vectorilor de iesire % de exemplu, pentru x0 aplicat la intrare, vectorul de iesire este: % 1 0 0 0 0 0 0 0 0 0 T = eye(10); % matricea PR specifica valorile min si max pentru cele 40
Perceptronul multistrat. Algoritmul BP standard - 43 (8x5) % de intrari ale MLP for i=1:40 PR(i,:)=minmax(P(:)'); end % se defineste o RNA MLP cu structura 40-20-10 net= newff(PR,[20 10],{'tansig' 'logsig'},'traingdm'); % se definesc alti parametrii ai RNA (rata de invatare, moment, etc.) net.trainParam.lr=1; net.trainParam.mc=0.7; net.trainParam.min_grad=1e-10; net.trainParam.show = 1; net.trainParam.epochs = 400; net.trainParam.goal = 0.001; % incepe procesul de antrenament [net,tr]= train(net,P,T); % faza de utilizare a retelei % se testeaza capacitatea de recunoastere pentru cazul cand tiparele % sunt afectate cu zgomot while(1) cifra=input('Introduceti cifra dorita sau "q" pentru iesire: ','s'); if isletter(cifra) break end reshape(P(:,str2num(cifra)+1),8,5) zgomot=input('Zgomotul dorit [%]: '); % s-a definit in prealabil o functie xi = noise (xi, zgomot) % care contamineaza biti matricii "xi" in proportie de "zgomot [%]" cifra_zgomot = reshape(noise(P(:,str2num(cifra)+1),zgomot),8,5) [y,i] = max(sim(net,cifra_zgomot(:)),[],1); cifra_recunoscuta=i-1 end disp('program terminat')
4.4 Cum variază capacitatea de generalizare a RNA MLP în funcţie de numărul
neuronilor stratului ascuns? Dar în funcţie de numărul de epoci de antrenament sau nivelul erorii medii pătratice? Experimentaţi aceste variaţii în cazul pct.4.3.
Rezolvare:
- 44 -
Aplicaţia nr. 4 Numărul neuronilor ascunşi are o valoare optimă, în general imposibil de
prezis cu exactitate, înainte de evaluarea performanţelor reţelei în mai multe seturi de experimente. Dacă numărul neuronilor stratului ascuns este prea mic, reţeaua nu reuşeşte să formeze o reprezentare internă adecvată a datelor de antrenament şi în consecinţă
eroarea de clasificare va fi mare. Cu un număr prea mare de neuroni în stratul ascuns reţeaua învaţă foarte bine datele de antrenament dar este incapabilă de o bună generalizare obţinând valori mari ale erorii pătratice pentru cazul datelor de test. Concluzia este valabilă şi pentru numărul total de epoci de antrenament sau valoarea finală a erorii pătratice medii: optimul acestor mărimi poate fi determinat numai experimental şi este dependent de tipul problemei şi structura RNA.
APLICAŢIA NR. 5
Algoritmi rapizi de antrenament pentru RNA de tip MLP
1. Introducere Se vor investiga câteva metode, detaliate în
[7] şi [8], care conduc la
accelerarea procesului de antrenament al unei RNA - MLP: -
metoda Darken-Moody;
-
regula delta-delta;
-
adaptarea fuzzy a ratei de învăţare;
-
metode bazate pe calculul gradientului conjugat
(Fletcher-Reeves, Polak-
Ribière); -
metoda Levenberg-Marquardt.
2. Metoda Darken-Moody Denumita şi metoda “caută apoi converge”, propune ajustarea ratei de învăţare într-un mod simplu dar care aduce un spor considerabil în ceea ce priveşte viteza de convergenţă a algoritmului de antrenament. Se propune o rată de învăţăre de forma: ∀ ∃
( n)
∀
1#
0
n
(5.1)
!
în care η 0 reprezintă rata de învăţăre iniţială, τ o constantă de timp iar n numărul epocilor de antrenament.
Variaţia η de-alungul epocilor de antrenament este ilustrată în fig. 5.1. În epoci timpurii, algoritmul se comportă similar celui standard, rata de învăţare menţinându-se
- 46 - Aplicaţia nr. 5 ridicată şi relativ constantă. Pe măsură ce procesul de antrenament avansează, η este micşorată. 8
6
4
2
100
101 102 Nr. de epoci
103
Fig. 5.1 Forma de variaţie a η de-alungul epocilor de antrenament.
Ca dezavantaj al acestei metode este considerată imposibilitatea alegerii apriorice a valorilor optime pentru constantele η 0 şi τ.
3. Regula delta-delta Considerând valoarea criteriului (atributului) de performanţă (MSE, SSE, etc.) notată cu perf(w(n)), regula de modificare a ratei de învăţare este în acest caz: ( c 1 ∗ ∀( k )
), if
1
perf ( w ( k )) , perf ( w ( k )
%
∀ ( k) ∃ c ∗ ∀ ( k if perf ( w ( k )) + c ) 1 ), ∋
2
% &
∀ (k )
1) ∗
perf ( w ( k )
3
1), altfel
în care coeficienţii au următoarele valori tipice: c 1 = 1,05, c2 = 0,7, c3 = 1,04. În cazul în care η(n) = η(n-1), noile valori calculate pentru w(n) şi perf(w(n)) vor avea valoarea w(n-1) respectiv perf( w(n-1)).
1 )(5.2)
Algoritmi rapizi de antrenament pentru RNA de tip MLP - 47 4. Adaptarea fuzzy a ratei de învăţare Dezavantajul metodei precedente constă din faptul că parametrii c 1 şi c2 sunt constanţi de-alungul etapei de învăţare şi, în consecinţă, impiedică o variaţie rapidă a ratei de învăţare. Controlerul fuzzy [9] primeşte drept intrări valoarea relativă a atributului de performanţă:
p(n )∃
perf ( n ) perf ( n ) 1 )
(5.3)
şi variaţia relativă a p(n): −p ∃
(n)
perf ( n ) perf ( n ) 1)
)
perf ( n ) 1 ) perf ( n ) 2)
(5.4)
Ieşirea controlerului de tip Mamdami reprezintă un coeficient “c” care multiplică rata de învăţare: ∀(n) ∃ c ∗∀(n )
1 ) (5.5)
Suprafaţa de reglare a controlerului este prezentată în fig. 5.2.
5. Metode bazate pe calculul gradientului conjugat Metodele de antrenament prezentate până în acum pot fi circumscrise în clasa
metodelor de ordinul întâi ale gradientului descendent deoarece iau în considerare prima derivată a funcţiei de cost (funcţie criteriu). În cazul acestor metode, direcţia vectorului de-alungul căruia se face ajustarea ponderilor reprezintă negativul
gradientului . Metoda gradientului conjugat evită oscilaţiile în jurul soluţiei finale,
considerând o relaţie, relativ complicată, între direcţia şi gradientul vectorului. Fie p(n) vectorul direcţie. Ponderile reţelei vor fi adaptate după următoarea regulă:
- 48 - Aplicaţia nr. 5
w(n
w(n)
# 1 )∃
∀(n) p(n) (5.6)
#
Iniţial:
p(0) ∃ ) g(0)
(5.7)
Fig. 5.2 Suprafaţa de reglare a controlerului fuzzy.
în care g(n) reprezintă vectorul gradient. Ceilalţi vectori direcţie vor fi calculaţi ca o combinaţie liniară a vectorului gradinet curent şi a vectorului direcţie anterior:
p(n
# 1 )∃
)
g(n # 1 )
#
. (n) p(n) (5.8)
Există numeroase moduri de exprimare a parametrului β(n): a) Formula Fletchr-Reeves: .
g( ( n) ∃ n #
)
T
1
T
g (n # g (n )
T
[ g ( n # 1 )) g ( n )]
1)
(5.9)
g( n)
b) Formula Polak-Ribière: . ( n) ∃
g( n#
1)
g(n T) g (n )
(5.10)
În cazul ec. (5.6) η(n) este definit după cum urmează: ∀(n) ∃ arg min{Eav (w(n) # ∀p(n))}
(5.11)
adică presupune o căutare liniară pentru găsirea valorii particulare η care minimizează funcţia de cost.
Algoritmi rapizi de antrenament pentru RNA de tip MLP - 49 6. Metoda Levenberg-Marquardt (LM) Metoda LM derivă din metoda Newton de minimizare a unei funcţii [8] şi
presupune însumarea hessianului H (matrice cu elemente derivate de ordinul doi ale indicelui de performanţă) cu un termen de forma ν I (ν constantă pozitivă, I matricea identică) în scopul eliminării cazurilor pentru care H-1 nu există: −w ∃ ) ∀
/
E )
∃ ) ∀
1
/
E
2
) 1
(5.12)
H [/ E # 0I] Când indicele (funcţia) de performanţă este o sumă de pătrate (cazul RNA
feedforward) matricea hessiană poate fi aproximată prin JT J iar gradientul prin JT e unde J reprezintă jacobianul RNA (matrice cu elemente derivate de ordinul I ale
indicelui de
performantă) şi e reprezintă vectorul eroare al RNA [10]. T
−w ∃ )
∀ T J e ) 1 [ J J #0 I]
(5.13)
De menţionat faptul că ν poate să fie modificat adaptiv, pentru el fiind recomandată o valoare cât mai mică. Metoda LM reprezintă cea mai rapidă metodă de antrenament dar viteza de converganţă poate să scadă dramatic dacă dimensiunile RNA cresc.
7. Probleme 7.1 Pentru cazul problemei de interpolare formulată în Aplicaţia nr. 4, pct. 4.2, verificaţi comparativ viteza de convergenţă pentru algoritmul BP standard şi cele 6 metode prezentate în cadrul acestei lucrări.
Rezolvare: % Comparatie intre diversi algoritmi de antrenament % cazul interpolarii unei functii % Catalin-Daniel Caleanu, 2000 clear all
- 50 - Aplicaţia nr. 5 close all clc % definirea perechilor de vectori % intrare (P,pattern) - iesire (T, target) % pentru datele de antrenament (P,T) si test (Ptest, Ttest) P = 0:0.1:1; T = 0.2 + 0.8*(P + 0.7*sin(2*pi*P)); Ptest=0:0.01:1; Ttest=0.2 + 0.8*(Ptest + 0.7*sin(2*pi*Ptest)); % se implementeaza 4 RNA-MLP identice cu: % 1 intrare, 9 neuroni ascunsi, 1 neuron de iesire % antrenate cu 4 algoritmi diferiti net1= newff(minmax(P),[9 1],{'tansig' 'logsig'},'traingdm'); net1.trainParam.lr=3; net1.trainParam.mc=0.3; net1.trainParam.min_grad=1e-10; net1.trainParam.show = 1; net1.trainParam.epochs = 60; net1.trainParam.goal = 0.001; t1 = clock; [net1,tr1]= train(net1,P,T); time1=etime(clock,t1); net2= newff(minmax(P),[9 1],{'tansig' 'logsig'},'traingdx'); net2.trainParam.lr = net1.trainParam.lr; net2.trainParam.mc = net1.trainParam.mc; net2.trainParam.min_grad = net1.trainParam.min_grad; net2.trainParam.show = net1.trainParam.show; net2.trainParam.epochs = net1.trainParam.epochs; net2.trainParam.goal = net1.trainParam.goal; t2 = clock; [net2,tr2]= train(net2,P,T); time2=etime(clock,t2); net3= newff(minmax(P),[9 1],{'tansig' 'logsig'},'trainfuzzy'); net3.trainParam.lr = net1.trainParam.lr; net3.trainParam.mc = net1.trainParam.mc; net3.trainParam.min_grad = net1.trainParam.min_grad; net3.trainParam.show = net1.trainParam.show; net3.trainParam.epochs = net1.trainParam.epochs; net3.trainParam.goal = net1.trainParam.goal; t3 = clock; [net3,tr3]= train(net3,P,T); time3=etime(clock,t3); net4= newff(minmax(P),[9 1],{'tansig' 'logsig'},'trainlm'); net4.trainParam.lr = net1.trainParam.lr; net4.trainParam.mc = net1.trainParam.mc; net4.trainParam.min_grad = net1.trainParam.min_grad; net4.trainParam.show = net1.trainParam.show; net4.trainParam.epochs = net1.trainParam.epochs; net4.trainParam.goal = net1.trainParam.goal;
Algoritmi rapizi de antrenament pentru RNA de tip MLP - 51 t4 = clock; [net4,tr4]= train(net4,P,T); time4=etime(clock,t4); y1test y2test y3test y4test y1antr y2antr y3antr y4antr
= = = = = = = =
sim(net1,Ptest); sim(net2,Ptest); sim(net3,Ptest); sim(net4,Ptest); sim(net1,P); sim(net2,P); sim(net3,P); sim(net4,P);
% calcul eroare test, antrenament si timp de executie er1test=(sum(sum(abs(Ttest-y1test))))/length(Ttest); er2test=(sum(sum(abs(Ttest-y2test))))/length(Ttest); er3test=(sum(sum(abs(Ttest-y3test))))/length(Ttest); er4test=(sum(sum(abs(Ttest-y4test))))/length(Ttest); ertest=[er1test er2test er3test er4test]; er1antr=(sum(sum(abs(T-y1antr))))/length(T); er2antr=(sum(sum(abs(T-y2antr))))/length(T); er3antr=(sum(sum(abs(T-y3antr))))/length(T); er4antr=(sum(sum(abs(T-y4antr))))/length(T); erantr=[er1antr er2antr er3antr er4antr]; time=[time1 time2 time3 time4] % reprezentarea grafica a rezultatelor clf; figure title('Aproximare functiei 0.2 + 0.8*(x + 0.7*sin(2*pi*x))' ); hold plot(Ptest,Ttest,'linewidth', 2) plot(Ptest,y1test,'-'); plot(Ptest,y2test,':r'); plot(Ptest,y3test,'-.g'); plot(Ptest,y4test,'--m'); xlabel('x'); legend('original','traingdm', 'traingdx', 'trainfuzzy', 'trainlm',0); hold off figure hold semilogy(tr1.epoch,tr1.perf,'-'); semilogy(tr2.epoch,tr2.perf,':r'); semilogy(tr3.epoch,tr3.perf,'-.g'); semilogy(tr4.epoch,tr4.perf,'--m'); title('EPM versus numar de epoci'); xlabel('Numar de epoci'); legend('traingdm', 'traingdx', 'trainfuzzy', 'trainlm',0) hold off
- 52 - Aplicaţia nr. 5 figure bar((ertest)*100); ylabel('Eroare aproximare test [%]'); xlabel('traingdm 1 traingdx 2 trainfuzzy 3 trainlm 4') figure bar((erantr)*100); ylabel('Eroare aproximare antrenament [%]'); xlabel('traingdm 1 traingdx 2 trainfuzzy 3 trainlm 4') figure barh(time,'r'); xlabel('Timp prelucrare [s]'); ylabel('traingdm 1 traingdx 2 trainfuzzy 3 trainlm 4')
hold off ertest=[er1test er2test er3test er4test]*100 erantr=[er1antr er2antr er3antr er4antr]*100
7.2 Repetaţi verificarea de la punctul 7.1 pentru cazul unei probleme de clasificare a unor tipare de dimensiuni mari (baza de date ORL). 7.3 Completaţi tabelul de mai jos (tab.5.1), pe baza rezultatelor simulării de la pct. 7.1 şi 7.2. Care sunt concluziile desprinse în urma rulării acestor algoritmi de antrenamet ?
Rezolvare: Concluziile experimentelor conduc la ideea că algoritmii de antrenament se clasează, în ordinea crescătoarea a vitezei de convergenţă, conform tab.5.1, adică cel mai lent algoritm este algoritmul gradientului descendent iar cel mai rapid
Levenberg-Marquardt. Trebuie ţinut cont însă de faptul că cerinţele de memorie şi putere de calcul sunt practic proporţionale cu viteza de convergenţă. Spre exemplu, probleme care implică vectori de intrare de dimensiuni mari (sute de elemente) sunt imposibil de abordat cu
metoda Levenberg-Marquardt şi greu de abordat cu metodele bazate pe gradientul conjugat (Fletcher-Reeves, Polak-Ribière).
Algoritmi rapizi de antrenament pentru RNA de tip MLP - 53 -
4
6
3
4 2
2 1
0
1
2
3
4
traingdm 1 traingdx 2 trainfuzzy 3 trainlm 4
0 1
2
3
4
traingdm 1 traingdx 2 trainfuzzy 3 trainlm 4
Fig.5.1 Grafice rezultate în urma rulării programului aferent pct.7.1.
- 54 - Aplicaţia nr. 5
METODĂ
TIP PROBLEMĂ INTERPOLARE CLASIFICARE EPM Nr. Timp EPM Nr. Timp [%] de de [%] de de epoci calcul epoci calcul [s] [s]
1. BP momentum (traingdm) 2. delta-delta (traingdx) 3. η fuzzy (trainfuzzy) 4. Fletcher-Reeves (traincgf) 5. Polak-Ribière (traincgp) 6. Levenberg-Marquardt (trainlm) Tab. 5.1 Rezultate comparative pentru diverşi algoritmi de antrenament ai RNA MLP.
Metodele backpropagation cu rata variabilă de învăţare (traingdx, trainfuzzy) oferă cel mai bun raport viteză de convergenţă / cerinţe de memorie .
APLICAŢIA NR. 6
Reţele neuronale bazate pe funcţii radiale
1.Introducere Este prezentată o abordare diferită a modului de funcţionare a unei RNA:
aceasta este văzută ca o problemă de aproximare a unei curbe într-un spaţiu multidimensional.
2. Arhitectura unei RNA-RBF O RNA bazată pe funcţii radiale (RBF - Radial Basis Function) prezintă trei straturi (fig. 6.1): -
stratul de intrare sau stratul senzorial;
-
stratul ascuns - conţine funcţii care constituie o bază pentru vectorii de intrare; aceste funcţii poartă denumirea de funcţii radiale.
-
stratul de ieşire. Transformarea spaţiului de intrare în spaţiul neuronilor ascunşi este neliniară, pe
când transformarea spaţiului neuronilor ascunşi în spaţiul neuronilor de ieşire este liniară . Justificarea acestui aspect se bazează pe teorema lui Cover asupra
separabilităţii tiparelor, care arată că o problemă complexă de clasificare a tiparelor, transformată neliniar întru-un spaţiu de dimensiune înaltă este cu mult mai probabil de a fi liniar separabilă decât întru-un spaţiu cu dimensiuni mai puţine.
- 56 - Aplicaţia nr. 6 φ φ
φ
Fig.6.1. Arhitectura unei RNA-RBF.
3. Strategii de învăţare pentru RNA bazate pe funcţii radiale Există mai multe metode de antrenament ale RNA - RBF, deosebirea dintre ele constând în metoda de alegere a centrilor funcţiilor radiale: -
metoda centrilor ficşi aleşi aleator;
-
metoda selecţiei autoorganizate a centrilor;
-
metoda selecţiei supervizate a centrilor. În continuare, se va prezenta detaliat prima metodă menţionată anterior. Ea
reprezintă cea mai simplă abordare şi presupune funcţii radiale fixe pentru funcţiile de activare ale stratului ascuns. Locaţiile centrilor funcţiilor sunt alese aleator, dintre
vectorii de intrare. Pentru funcţiile radiale se preferă cele de forma:
G! x ∗ t
2
∀ ∗
i
)
M
2&
# exp ∋ ∗ x
t
(
d
2
∃
, i # 1 ,2,
M
(6.1)
i
%
în care “M” reprezintă numărul centrilor, iar “d” distanţa maximă dintre aceşti centri aleşi. Pentru determinarea ponderilor stratului liniar de ieşire se foloseşte metoda
pseudoinversei:
w #G +
+
d
G fiind pseudoinversa matricii G:
(6.2)
Reţele neuronale bazate pe funcţii radiale - 57 -
G # { g ij }
(6.3)
cu:
M
)
g ji
exp
# ∋ ∗
2
d
(
2,
x j ∗ ti
2&
∃
,i # 1 ,
M , j #
1 ,2,
N
(6.4)
%
Conform teoremei decompoziţiei valorii singulare pseudoinversa matricii G este definită astfel:
G
+
#V
+
T
Σ U
(6.5)
+
în care Σ este ea însăşi o matrice N x N constituită din valorile singulare ale lui G: +
,
#
) 1 1 1 diag∋ , ,..., ,0 ( −1 −2
−k
&
,...,0 ∃
%
(6.6)
4. Probleme 4.1. Verificaţi capacitatea de predicţie a unei RNA-RBF pentru următoarea serie
haotică: x # 3,79x ( 1 ∗ x ) cu x.[0,1] n
n∗1
n∗1
Centrii funcţiilor radiale vor fi uniform distribuiţi în intervalul [0,1].
Indicaţie: La implementarea RNA se va folosi funcţia newrb, a cărei descriere este oferită în continuare: NEWRB Creează o RNA bazată pe funcţii radiale Sintaxă: net = newrb(P,T,GOAL,SPREAD) în care: P - RxQ matrice de Q vectori de intrare. T - SxQ matrice de Q vectori ţinta. GOAL - Eroarea medie patratică dorită, implicit 0.0. SPREAD - Dispersia funcţiilor radiale, implicit 1.0. Rezolvare: %Exemplu de implementare a unei RNA-RBF %pentru cazul predictiei functiilor %Catalin-Daniel Caleanu, 2000 clear all close all clc
- 58 - Aplicaţia nr. 6 N=100; p=50;
% numarul total de esantioane calculate % fractiunea, in procente, din N pentru care % se vor constitui datele de antrenament k=5; % pasul predictiei eg = 0.02; % eroarea MSE dorita sc = 0.03; % marimea camplului receptiv al functiilor radiale p=p/100; % calculul si reprezentarea grafica a seriei haotice x(1)=0.01; for i=2:N x(i)=3.79*x(i-1)*(1-x(i-1)); end P=x(1:N*p); % N*p esantioane de antrenament, x(n) T=x(1+k:N*p+k); % N*p esantioane calculate analitic, x(n+k) net=newrb(P,T,eg,sc); % implementarea RNA-RBF test1=x((N*p)+1:N); % esantioane de test Y1=sim(net,test1); % esantioaner prezise de RNA-RBF % reprezentarea grafica a datelor plot(x(1:N-1),x(2:N),'+') xlabel('x(n-1)'); ylabel('x(n)'); figure plot(x,'red','linewidth', 1) hold on plot(N*p+1+k:N+k,Y1,'linewidth', 2) legend('training values','predicted values',0) hold off
4.2. Evaluaţi influenţa dispersiei funcţiilor radiale (în cazul 4.1) asupra procesului de predicţie. Acelaşi lucru pentru cazul în cazul în care numărul neuronilor ascunşi variază. 1 1
0.8
0.8 0.6
0.6 0.4
0.4 0.2
0.2
training values predicted values
0 0
0.2
0.4 0.6 x(n-1)
0.8
1
0 0
20
40
60
Fig.6.1 Grafice obţinute în urma rulării programului de la punctul 4.1.
80
100
120
APLICAŢIA NR. 7
Reţele neuronale artificiale recurente
1.Introducere Se urmăreşte familiarizarea cu o clasă importantă a RNA şi anume acelea care prezintă o structură recurentă.[11]. RNA recurente sunt caracterizate de: - unităţi de procesare neliniare; - simetria conexiunilor sinaptice (w ji = wij); - folosirea intensivă a feedback-ului . Din această categorie fac parte RNA Boltzmann (RNA-B) şi RNA Hopfield (RNA-H), cea din urmă fiind detaliată în cele ce urmează.
2. RNA de tip Hopfield (RNA-H) Poate fi văzută ca o memorie asociativă sau ca o memorie adresabilă
prin conţinut , a cărei funcţie principală este regăsirea tiparelor stocate în memorie, ca
răspuns la prezentarea unui tipar incomplet sau contaminat cu zgomot. Esenţa memoriilor adresabile prin conţinut constă în transformarea tiparelor ξ
μ
în stări stabile
sμ ale sistemului dinamic (proces de codare) şi invers (proces de decodare). Fiecare neuron al RNA-H (fig.7.1) este caracterizat prin una din cele două stări
posibile: activ (si = 1) , respectiv inactiv (s i = -1). Starea unei RNA-H alcătuită din “N” neuroni este definită de către vectorul:
s = [s1, s2, ..., s N]T
(7.1)
- 60 - Aplicaţia nr. 7
Fig.7.1. Arhitectura unei RNA-H cu 3 neuroni.
Potenţialul intern al unui neuron “j” este: N
v j ∀
!i 1 w ji si # ∀
∃
j
(7.2)
în care θ j reprezintă pragul neuronului. Neuronul “j” îşi modifică starea conform regulii:
s
j
( + 1 ,dacã v j ∗ 0 ∀∋ dacã v j ) 0 1 ,
(7.3)
sau echivalent s j = sgn[v j]. Dacă v j = 0 atunci s j poate lua o valoare arbitrară, +1 sau -1. De exemplu, se poate conveni ca starea neuronului să rămână nemodificată. În funcţionarea RNA-H se pot distinge două etape: a) Faza de memorare . Să presupunem că se doreşte stocarea unor vectori “N” dimensionali {ξ μ | μ = 1, 2, ..., p}. Atunci, conform postulatului lui Hebb:
w
ji
∀
1 p N! ,∀
− 1
,, j
− , ,i
Acelaşi lucru poate fi scris în formă matricială astfel:
(7.4)
Reţele neuronale artificiale recurente - 61 -
W∀
p 1 p T N ! ξμ ξ μ N I
(7.5)
# , ∀1
în care I reprezintă matricea identică. b) Faza de utilizare (regăsire). În această fază, un anumit tipar x este impus drept
vector de stare al RNA-H. De regulă el reprezintă o versiune incompletă sau afectată de zgomot al unui tipar memorat. Apoi fiecare neuron al reţelei, ales în mod aleator, estimează propriul potenţial de activare şi îşi stabileşte starea finală. Acest proces
asincron (serial) de modificare a stărilor se va opri în momentul în care vectorul de stare nu se va mai modifica. Aceasta înseamnă că RNA-H a produs un vector de stare invariant în timp, ale cărui elemente satisfac condiţia de stabilitate: N
y j ∀ sgn( ! i ∀
1
w ji yi # 2, ...,
∃
i
), j ∀ 1 , N
sau în formă matricială:
y ∀ sgn( W y # θ )
(7.6)
(7.7)
.
RNA-H cu ponderi sinaptice li se poate asocia aşa-numita funcţie de energie:
E ∀ #
1 N N ! 2!
ji
s i s j
(7.8)
w
i∀ 1 j∀ 1
Variaţia energiei ΔE ca urmare a variaţiei stării neuronului “j” e dată de expresia: 0 E ∀ #0
N
s j
! w ji s i
(7.9)
i∀ 1
i / j
Astfel, în timpul fazei de regăsire a unui tipar, E descreşte monoton. Schimbarea stării RNA-H va continua până când se va atinge un minim local al peisajului energetic. Minimele peisajului energetic corespund unor atractori specifici spaţiului stărilor care în mod normal reprezintă tipare memorate în faza de memorare.
- 62 - Aplicaţia nr. 7 3. Probleme 3.1. Implementaţi în MATLAB o RNA-H cu N = 120 neuroni (N 2 - N = 12280 ponderi sinaptice!) care, în faza de memorare să fie capabilă să stocheze 10 tipare de dimensiune 12 x 10 pixeli corespunzătoare numerelor 0...9 binarizate. Pentru faza de utilizare procedaţi după cum urmează: Într-o primă etapă, se vor aplica tiparele de antrenament, pentru testarea
capacităţii RNA-H de a regăsi corect datele de antrenament. Notaţi numărul de iteraţii necesare regăsirii acestora. Pentru a demonstra capacitatea de corecţie a erorilor pentru RNA-H se vor folosi versiuni corupte cu zgomot 5%, 15% respectiv 25% ale aceleiaşi baze de date. Notaţi şi în acest caz numărul de iteraţii necesare regăsirii acestor tipare şi efectuaţi o comparaţie cu cazul precedent.
Indicaţie : La implementarea RNA se va folosi funcţia newhop, a cărei descriere este oferită în continuare: NEWHOP Creează o RNA recurentă de tip Hopfield Sintaxa: net = newhop(T) în care: T - RxQ matrice de Q vectori ţintă (valorile acestora trebuie să fie +1 sau -1)
Rezolvare: % Exemplu de implementare a unei RNA-Hopfield % pentru cazul regasirii tiparelor % Catalin-Daniel Caleanu, 2000 clear all close all clc % incarca fisierul tipare.mat % care returneaza variabila tipare de dimensiune 120x10 % coloanele acesteia reprezentand cifrele de la 0 la 9 load tipare disp('Se incarca tiparele de antrenament...') % afiseaza imaginile originale ale cifrelor fig1=figure;
Reţele neuronale artificiale recurente - 63 set(fig1,'Position',[200 150 50 50]) imshow(reshape(tipare,10,120)'); truesize(fig1,[200,200]); title('Imagini originale') disp('Tiparele de antrenament incarcate si afisate!') disp(' ') % creeaza si antreneaza RNA disp('Reteaua se antreneaza...') net=newhop(tipare); disp('Reteaua antrenata!') disp(' ') % verificare stabilitate RNA pentru punctele initiale disp('Se verifica memorarea tiparelor de antrenament...') nr_iteratii = 10; Ai = tipare; Y = sim(net,nr_iteratii,[],Ai); % afiseaza imaginile furnizate de RNA fig2=figure; set(fig2,'Position',[500 150 50 50]) imshow(reshape(Y,10,120)'); truesize(fig2,[200,200]); title('Iesirea RNA') disp('Tipare de antrenament afisate. Apasati orice tasta !') pause close all % faza de utilizare a retelei % se testeaza capacitatea de recunoastere pentru cazul cand tiparele % sunt afectate cu zgomot while(1) clc cifra=input('Introduceti cifra dorita sau "q" pentru iesire: ','s'); if isletter(cifra) break end close all zgomot=input('Zgomotul dorit [%]: '); nr_iteratii=input('Nr. de iteratii: '); % s-a definit in prealabil o functie xi = noise2 (xi, zgomot) % care contamineaza biti matricii "xi" in proportie de "zgomot [%]" % se afiseaza cifra contaminata cu zgomot cifra_zgomot = reshape(noise2(tipare(:,str2num(cifra)+1),zgomot),10,12)
- 64 - Aplicaţia nr. 7 fig3=figure; set(fig3,'Position',[200 200 imshow(cifra_zgomot') truesize(fig3,[200,200]); title('Imagine cu zgomot')
50
50])
% se aplica cifra contaminata la intrarea RNA cifra_contaminata=tipare(:,str2num(cifra)+1); cifra_contaminata=noise2(cifra_contaminata,zgomot); Y = sim(net,{1 nr_iteratii},{},{cifra_contaminata}); % se afiseaza raspunsul RNA fig4=figure; set(fig4,'Position',[500 200 50 50]) imshow(reshape(Y{nr_iteratii},10,12)') truesize(fig4,[200,200]); title('Iesirea RNA') end % end while close all disp('Program terminat !') Imagine cu zgomot
Iesirea RNA
Fig.7.2 Cifra “1” contaminată cu zgomot 10% este aplicată RNA-H, care după 10 iteraţii, converge spre unul din tiparele memorate anterior, în acest caz cel al cifrei “1” (problema 3.1).
APLICAŢIA NR. 8
Reţele neuronale cu autoorganizare 1. Introducere Se prezintă o nouă clasă a RNA şi anume cele cu învăţare de tip
nesupervizat (cu autoorganizare) [12], [13]. Discuţia este restrânsă la cadrul învăţării de tip competitiv deşi trebuie menţionată existenţa mai multor paradigme ale învăţării nesupervizate: învăţarea de tip hebbian sau cea bazată pe teoria informaţiei. În contextul mai sus menţionat este prezentată arhitectura şi algoritmul standard de antrenament pentru RNA-SOFM ( Self Organizing Feature Map) cunoscută şi sub denumirea de RNA Kohonen. Este discutată şi o versiune modificată pentru algoritmului standard, denumit algoritmul cu conştiinţă.
2. RNA-SOFM (Kohonen) Scopul acestui algoritm constă în transformarea unui tipar de intrare de dimensiune arbitrară într-o hartă de trăsături (spaţiu discret, de regulă 1D sau 2D) ordonată topologic . Cu alte cuvinte, există o corespondenţă între
tipul
(caracteristicile) tiparului aplicat la intrare şi locaţia
spaţială a neuronului care va fi activat. Corespondenţa topologică se manifestă în sensul în care la tipare similare aplicate la intrarea RNA vor fi activaţi neuroni situaţi în aceeaşi
vecinătate (lob sau
bulb) a stratului de ieşire. Arhitectura RNA-SOFM 2D este prezentată în fig.8.1. Algoritmul de antrenament presupune următorii paşi : a) Iniţializarea ponderilor. Se aleg valori aleatoare mici pentru ponderile sinaptice
w j(0).
- 66 - Aplicaţia nr. 8
Stratul neuronilor de ieşire
w N
w1 x1
x2
Stratul neuronilor de intrare
x N
Fig. 8.1. Arhitectura unei RNA-SOFM 2D.
b) Desemnarea neuronului câştigător. Se aplică tiparul x la intrarea RNA, iar pe baza acestuia este selectat neuronul câştigător al competiţiei:
i (x ) ! arg
min x( n ) ∀ w
, j ! 1 ,2 ,..., N (8.1)
j
j
c) Ajustarea ponderilor:
w
%
w j ( n ( 1 ) ! #
j
j
∃
(n )(
0,
)
( n )[ x ∀ w ( n )] , daca j ∋ i(x)
altfel
(8.2)
în care η(n) reprezintă rata de învăţare, iar & i ( x) ( n ) reprezintă vecinătatea topologică a neuronului înving ător i(x). Dacă se notează cu ∗
j,i (x
topologice, atunci relaţia (8.2) poate fi rescrisă astfel:
w (n ( 1)! w (n ) ( n )[ x ( n ) ( ) (n )∗ j
j
De regulă η(n), &
j, i (x )
( n ) şi ∗
i (x )
j,i ( x )
)
amplitudinea vecinătăţii
∀
w (n )]
(8.3)
j
sunt mărimi dinamice, care variază de-a
lungul epocilor de antrenament: ∗ ∀
j,i
!
d j2, i exp( 2 2) +
(8.4)
&
)
Reţele neuronale cu autoorganizare - 67 1
( n ) ) 0 exp ∀
) !
n.
(8.5)
/ , 0 21 − 1 n. + (n) ! + 0 exp ∀ / 2 , 2 − 0
(8.6)
în care d j,i reprezintă distanţa de la neuronul “j” la neuronul câştigător “i” iar 21,2
2
)
0
,+ , 0
sunt constante. Procedura se repetă de la pasul b) de un număr de ori specificat apriori sau până
când nu se mai înregistrează schimbări notabile în harta de trăsături .
3. Algoritmul de antrenament nesupervizat, cu conştiinţă Una din problemele cu care este confruntat algoritmul de tip Kohonen reprezintă faptul că unii neuroni ai RNA pot să câştige foarte rar sau chiar deloc competiţia. Algoritmul cu conştiinţă elimină acest impediment prin
memorarea
numărului de activări pentru fiecare dintre neuronii RNA. Conştiinţa neuronului se manifestă prin autoeliminarea sa din cursa pentru câştigarea competiţiei în cazul în care a fost activat (a câştigat competiţia) de un număr de ori prea mare. Paşii algoritmului sunt următorii: a) Găsirea ponderii sinaptice wi cea mai apropiată de vectorul de intrare x:
x∀w i
!
min x ∀ w , j ! 1 ,2 ,..., N j
b) Memorarea numărului de activări pentru neuronul care a câştigat competiţia:
p nou j
unde 0
!
p
vechi
j
(
B(y j
vechi
∀
j
y
% 1 , dacã neuronul " j j ! ∃ # 0,altfel
p)
" este câstigator
c) Găsirea noului neuron câştigător, conform mecanismului conştiinţei:
x∀ w i
!
min( x ∀ w j
j
∀b
j
)
- 68 - Aplicaţia nr. 8
unde b j poate fi văzut ca o deplasare de scară (bias); el este definit după cum urmează:
b
j
1
1
0
N
C/
!
∀
p
j
. , −
unde “C” este o constantă iar “N” reprezintă numărul total de neuroni din stratul de ieşire. d) Adaptarea vectorului ponderilor aferente neuronului câ ştigător:
w no
vechi
vechi
w ( ) (x∀ w ) i i în care ) reprezintă rata de învăţare a algoritmului SOFM u i
!
4. Probleme 4.1 Pentru a
ilustra procesul de formare a bulbilor de-a lungul epocilor de
antrenament, implementaţi o RNA-SOFM tridimensională, 3 x 3 x 3 neuroni, folosind funcţia newsom. Tiparele de intrare sunt generate de ecuaţia (fig.8.2):
z!
1
2
2
e
1 x 2 ( y2 ∀/ / 2+ 2 0
. , , −
(8.7)
∗+
Folosind funcţia plotsom ilustraţi formarea bulbilor după 0, 3, 20 de iteraţii.
Indicaţie: Pentru implementarea unei RNA-SOFM se va folosi fucţia newsom, a cărei descriere este oferită în continuare: NEWSOM Creează o RNA tip hartă de trăsături Sintaxa: net = newsom(PR,[d1,d2,...],tfcn,dfcn,olr,osteps,tlr,tns) în care: PR - Rx2 matrice de valori min şi max pentru R intrări. Di - Dimensiunea (numărul de neuroni) pentru stratul “i”, implicit [5 8]. TFCN - Tipul topologiei, implicit 'hextop'. DFCN - Funcţia distanţă (descrie noţiunea de distanţă dintre neuronii stratului de ieşire), implicit 'linkdist'. OLR - Rata de învăţare în faza de ordonare, implicit 0.9. OSTEPS - Durata (în epoci) a fazei de ordonare, implicit 1000. TLR - Rata de învăţare în faza de ajustare, implicit 0.02
TND - Distanţa dintre vecinătăţi în faza de ajustare, implicit 1.
Reţele neuronale cu autoorganizare - 69 -
Fig.8.2 Distribuţia tiparelor de intrare pentru problema 4.1.
Rezolvare: % Exemplu de implementare a unei retele neuronale SOFM-3D % pentru cazul extragerii distributiei de probabilitate % dintr-un set de date % Catalin-Daniel Caleanu, 1999 clear all close all clc % definire constante sigma=1.5; % reprezentare 3D a datelor de antrenament x=-1:.01:1; y=-1:.01:1; [X,Y] = meshgrid(x,y); Z=(1/2*pi*sigma^2)*exp(-(X.^2+Y.^2)/2*sigma^2); mesh(Z) figure Z=Z.*rand(length(x),length(x)); mesh(Z) figure % definirea unui nor de date 3D cu distributie gaussiana x=2*(rand(1,300)-0.5); y=2*(rand(1,300)-0.5); z=(1/2*pi*sigma^2)*exp(-(x.^2+y.^2)/2*sigma^2); z=z.*rand(1,length(x)); % definirea setului de date de intrare P P = [x;y;z]; % implementarea retelei neuronale SOFM cu trei intrari in gama -1...1, -1...1,
- 70 - Aplicaţia nr. 8 % 0...10 si un strat de iesire tridimensional de 3x3x3 neuroni net = newsom([-1 1;-1 1;0 10],[3 3 3]); % afisarea distributiei initiale a vectorilor pondere plotsom(net.layers{1}.positions) figure % antrenamentul retelei net.trainParam.epochs=1000; net = train(net,P); plotsom(net.iw{1,1},net.layers{1}.distances)
Weight Vectors
N euron Po siti ons
2
1.5
1.5 1
1
0.5 0.5 0 2 2 1 position(2,i)
-0.5
0
1 0
0
position(1,i)
W(i,2)
0.5
0.5
0
-0.5
W(i,1)
Fig.8.3 Distribuţiile iniţiale şi finale ale vectorilor pondere obţinute în urma rulării progarmului aferent pct.4.1.
APLICAŢIA NR. 9
Primul experiment cu reţele neuronale celulare: studiul unor template-uri simple
1. Chestiuni introductive
Lucrarea de faţă urmăreşte aprofundarea cunoştintelor de reţele neuronale
celulare (RNC) prin studiul experimental, prin simulare, al unor template-uri simple. Simularea se face utilizând toolbox-ul MATCNN, elaborat exclusiv pentru acest tip de reţele neuronale şi care este prezentat în ANEXA NR. 1. Sunt analizate două template-uri, larg utilizate în prelucrările de imagini: template-ul
EDGE şi
template-ul THRES. Peste tot în cele ce urmează se are în vedere reţeaua neuronală simulată în MATCNN, adică o RNC standard, cu vecinataţi
3x3
( N1 ( i, j) ). 2. Analiza template-urilor EDGE şi THRES
Regimul dinamic al unei celule dintr-o RNC cu vecinătăţi 3x3 este descris de
v ecuaţia diferenţială ordinară şi neliniară [7]: C∃ & %
xij
R
(t )
%
1
∃
v xij
!t∀ #
∋kl
A ij ,kl v ykl !t∀ #
(
N1
∋
B ij ,kl v ukl !t∀
#
I ij (9.1)
kl ( N1
iar mărimea la ieşiere ei este data de relaţia:
v (t ) & f (v (t )) & 0 5( | v ( t 1| % | v ( t ) % 1| ) )# yij
xij
xij
În expesiile de mai sus, v
xij
(9.2)
xij
,v ,v uij
yij
reprezintă starea, intrarea şi respectiv
ieşirea unei celule C . Prin N a fost notată vecinătatea de raza 1 (vecinătate 3x3) a ij
1
- 72 -
Aplicaţia nr.9
unei celule C , definită în sensul celor aratate în ij
[7]. A
ij,kl
şi B
reprezintă
ij,kl
operatori sinaptici de reacţie şi respectiv de comandă iar I ij este curentul celulei (de
f (.) , ce defineşte
regulă invariant în spatiu). Trebuie observat apoi că funcţia
caracteristica de ie şire este funcţia sigmoid aproximată liniar pe porţiuni. Observaţie: Dacă în rel.(9.1) se iau parametrii
R &C & 1, ecuaţia diferentială care
rezultă caracterizează aşa-numita reţea neuronală standard [7], simulată - aşa cum s-a arătat mai sus - în MATCNN.
Este limpede că operaţiile de procesare pe care le realizează o RNC sunt
determinate de operatorii
A , B şi respectiv de curentul I ij,kl
ij,kl
ij
. Acest ansamblu de
mărimi este denumit în literatura de specialitate template-ul* RNC şi elaborarea de noi template-uri, corespunzatoare unor noi operaţii de prelucrare cu RNC, constituie în momentul de faţă o preocupare majoră în domeniu. Vom analiza în continuare template-urile EDGE şi THRES
(de la
“threshold”, prag) incluse în biblioteca standard aferentă toolbox-ului MATCNN. Aşa cum sugerează denumirea, aceste template-uri realizează: - detecţia muchiilor în cazul unor imagini cu nuanţe de gri; - respectiv conversia unei imagini cu nuanţe de gri într-o imagine alb-negru (imagine binară).
Observaţie: Într-un caz mai general, în rel.(9.1) pot interveni şi alţi operatori, dependent de complexitatea template-urilor utilizate (vezi [7]). În cazul de faţă, aşa cum va rezulta în continuare, template-urile analizate includ numai operatori liniari de tipul A şi B, astfel încât rel.(9.1) este acoperitoare. În cazul ambelor template-uri intereseaza următoarele aspecte: *
Termenul “template” a fost preluat direct din literatura de limbă engleză în lipsa unui
termen potrivit, echivalent, în limba romană. Frecvent, mărimile
A ,B ij,kl
ij,kl
etc. sunt
apelate tot prin termenul “template”. În acord cu semnificaţia reală şi pentru a evita
confuziile, în lucrarea de faţă aceste mărimi vor fi desemnate prin termenul “operatori”.
Primul experiment cu reţele neuronale celulare - 73 - forma în care este definit template-ul, - comportamentul dinamic al reţelei care utilizează template-urile respective, - satisfacerea de către template-urile analizate a regulilor locale care definesc operaţia de procesare în cauză (în cazul de faţă detecţia muchiilor respectiv conversia în albnegru a unei imagini cu nuanţe de gri).
2.1 Template-ul EDGE În cazul acestui template operatorii A şi B respectiv curentul I sunt de forma:
A:
EDGE_A = [0 0 0; 0 2 0; 0 0 0];
B:
EDGE_B = [-0.25 -0.25 -0.25;
(9.3)
-0.25 2.0 -0.25; -0.25 -0.25 -0.25];
I:
EDGE_I = -1.45;
Celelalte mărimi care caracterizează reţeaua sunt definite după cum urmează:
Intrarea:
U(t) = P, unde P reprezintă imaginea statică ce urmeaza a fi procesată
Starea iniţiala:
X(0) = U(t)
Condiţiile de frontieră: Sunt de tipul fix, adică
v
&
0 si v
uij
& 0 pentru toate
xij
celulele virtuale ([U] = [Y] = [0]) [7] Ieşirea:
Y(t) ) Y( ∗), unde Y( ∗) constituie o imagine
binară în care pixelii negri corespund muchiilor nete respectiv muchiilor vagi din imaginea P.
- 74 -
Aplicaţia nr.9
Observaţii: Muchiile vagi reprezinta grupări de pixeli gri care formează segmente de linii sau arce unidimensionale, astfel încât intensitatea pixelilor de pe o parte a
liniei/arcului diferă semnificativ de intensitatea pixelilor învecinaţi, situaţi de cealaltă parte a liniei/arcului. Template-ul EDGE poate fi definit şi pentru cazul în care se pleacă din condiţii iniţiale nule
(X(0) = 0). Forma data în lucrare prezintă avantajul unei
iniţializări uşoare, imaginea P fiind oricum disponibilă.
Reţelele neuronale având operatorul A cu toate elementele nule, cu excepţia
elementului a , se numesc reţele necuplate, deoarece o celulă C nu este conectată 00
ij
cu ieşirile celulelor din imediata ei vecinatate. Vom aborda în continuare problema comportamentului dinamic al RNC
studiate. Conform celor prezentate în [7], în cazul RNC standard - cum este şi cazul de faţă, este asigurată existenţa şi unicitatea unei solutii
vxij (t) , pentru t + 0 şi pentru
orice stare initială vxij (0) ( R . Afirmaţia de mai sus este importantă din punct de
vedere aplicativ, deoarece ne asigură că după încheierea unui regim tranzitoriu (teoretic pentru t , ∗ ) reţeaua ajunge într-o stare stabilă (nu oscilează haotic). În această situatie, tensiunile la ieşirile celulelor, care reprezintă rezultatul prelucrării (imaginea Y(∗) ) , nu se mai modifică în timp şi prin urmare pot fi interpretate. În cele ce urmează vom aprofunda problema stabilităţii urmând o cale mai simplă, intuitivă. Se are în vedere în acest scop schema din fig.9.1, care reprezintă
structura unei celule C ij din reţeaua analizată. Această structură a fost elaborată pe baza urmatoarei relaţii:
Primul experiment cu reţele neuronale celulare - 75 -
I ij U
+
B
v uij
v
vxij
xij
−dt
v
yij
f(.)
-1
a 00
Fig. 9.1 Schema functională a unei celule
v
( t ) & %v )# B
xij
xij
!t∀ #
v
00 yij
a
v
C ij din RNC studiată
( t !t∀ # ij , kl ukl
∋
I
,(9.4)
*
ij
kl ( N 1
rezultată prin particularizarea ecuaţiei (9.1) pentru cazul template-ului EDGE (în care numai a00 . 0 ) şi considerând
R &C & 1. Cu precizarea că vectorul U include
tensiunile de la intrările tuturor celulelor din imediata vecinatate a celulei
Cij , legatura
dintre schema functională şi rel.(9.4) este imediată. Problema stabilităţii poate fi acum abordată pe baza schemei de mai sus. Este lesne de constatat c ă atâta timp cât | v xij
| / 1 , conform rel.(9.2) v
yij
&
v şi în xij
consecinţa circuitul se comportă în esentă ca un integrator cu reacţie pozitivă
( a00 & 2 0 1). Prin urmare tensiunea la ie şirea lui creşte sau scade monoton, dependent de polaritatea tensiunii aplicate la intrare în momentul iniţial
t & 0 . Odată
cu satisfacerea conditiei | vxij |+1 , tensiunea la ieşirea celulei va avea valori ferme, egale cu +1 sau -1 (vezi rel.(9.2)). Procesul de integrare continu ă până când circuitele componente intră în limitare, fără ca acest lucru să modifice nivelul tensiunii la ieşirea În legatură cu notaţiile uzuale pentru elementele operatorilor A şi B ( consulta [7]. *
a00 spe exemplu) a se
- 76 -
Aplicaţia nr.9
celulei. Un asemenea comportament este, evident, stabil. Schema funcţională prezentată în fig.9.1 permite, totodată, abordarea într-o manieră simplă a problemei satisfacerii de către template-ul EDGE a regulilor locale ce definesc operaţia de extragere a muchiilor. Aceste reguli, prezentate în Tab.9.1, servesc la proiectarea template-ului; în lucrarea de faţă ne vom limita la verificarea satisfacerii lor de către template-ul analizat, problema proiectării find abordată într-o altă aplicatie. Caz
vuij (0)
vyij (∗)
1
pixel alb
alb, independent de pixelii vecini
2
pixel negru
alb, dacă toţi vecinii cei mai apropiaţi sunt negri
3
pixel negru
negru, dacă cel puţin unul dintre cei mai apropiaţi vecini este alb
4
pixel gri
negru, dacă nuanţa de gri a pixelilor din vecinătatea
N1 depăşeşte
în medie un anumit prag, adică pentru
xij (0) & 0 , ∋ B i ,
j kl
kl( N1
5
pixel gri alb, dacă pentru
v ukl
0 1,45
xij (0) & 0 , ∋ Bij,klvukl 1 1,45 kl( N 1
Tab.9. 1 Regulile locale pentru template-ul EDGE
Se constată uşor că în Tab.9.1 au fost avute în vedere o serie de situaţii în care se poate găsi un pixel dintr-o imagine cu nuanţe de gri, împreună cu condiţiile ce se impun a fi satisfăcute pentru ca ieşirea să aibe o anumita valoare. Unele condiţii, cum sunt - spre exemplu - cele aferente primelor trei cazuri, sunt evidente: un pixel alb, care nu se situează pe o muchie, va avea drept corespondent în imaginea de ieşire tot un pixel alb; pe de alta parte, unui pixel negru trebuie să-i corespundă la ieşire un pixel negru numai dacă pixelul de intrare se situează pe o muchie, adică are cel puţin un pixel alb printre vecinii cei mai apropiaţi.
Primul experiment cu reţele neuronale celulare - 77 În general, decelarea celor mai semnificative situaţii şi a condiţiilor corespunzatoare, operaţie care determină performanţele template-ului, depinde de
experienta proiectantului aplicaţiei. Se va verifica în continuare satisfacerea condiţiilor din Tab.9.1 pentru RNC în discuţie. Se pleacă în acest scop de la observaţia că pentru din rel.(9.2) rezultă v &
v
xij
a 00 & v2 , pentru momentul iniţial t
xij
(0 ) & v
uij
uij
(
v
#
ij , kl ukl
( [%
1 ,# 1 ] ,
uij
. În aceste condiţii şi având în vedere că
0 ecuaţia (9.4) devine:
&
B v
#
I
(9.5)
ij
∋
1
N uij
%1 şi din rel.(9.5) se obţine:
kl
Cazul v1: În acest caz
xij
(0 ) & v (0 ) yij
v (0 ) & v
&
(0) & %1 # 2 ∃
xij
(%1) %
∋ vukl
0 25
kl( N kl.ij
vukl(
pentru orice valoare a pixelilor din vecinatate:
% 1,45 1 0 ,(9.6)
[%1,# 1]. O tensiune iniţială
negativă la intrarea intrgratorului va determina, conform celor arătate mai sus, un nivel la ieşirea celulei
v
(∗) &% 1; acest nivel corespunde unui pixel alb, aşa cum se
yij
impune conform cerinţei din Tab.9.1.
Cazul v2: Problema poate fi tratată în mod similar celor prezentate la cazul precedent. Deoarece acum v uij & # 1 , relaţia (9.5) devine:
xij
(0 ) & 1 # 2 ∃ (# 1 ) % 0 , 25 v % 1 ,45
∋
1
0,
(9.7)
ukl
kl
N kl . ij (
pentru vukl & # 1. Integratorul va determina, în consecinţă, un nivel la ieşirea celulei
v
yij
v (∗) &%1, corespunzător unui pixel alb.
Cazul3: În aceast caz v uij
%
& # 1 şi dacă există un
v
u23
& %1 , atunci:
(0 ) & 1 # 2 ∃ ( # 1 ) % 0 , 25 ∃ ( v ukl % 1 ,45 0 0 ∋ 1 ) % 0 , 25 xij
kl ( 1 N
kl.ij, k l.23
(9.8)
- 78 -
Aplicaţia nr.9
pentru orice vukl( [% 1,# 1] . Relaţia (9.8) probează regula 3. Cazul 4: Pentru
v
xi j
(0 ) & 0 , fapt ce implică în acord cu rel.
(9.2) v (0 ) & 0 , yij
rel.(9.4) devine:
v
xij
B v
(0 ) &
%
ij ,kl ukl
∋
1 ,45
(9.9)
v
kl ( N 1
Dacă avem acum în vedere că
B v
ij, kl ukl
∋
kl ( N
0
1 ,45 , rezulta că
xij
(0 ) 0 0 şi
1
în consecinţă nivelul la ieşirea celulei corespunde unui pixel negru.
Cazul 5:
Se are în vedere rel.
Condiţia
B ij,kl vukl 1 1,45 implică
∋
kl( N
v
(9.9),
valabilă şi în acest caz.
(0) 1 0 , fapt ce determină un nivel
xij
1
corespunzător unui pixel alb în imaginea de la ieşire.
2.2 Template-ul THRES Acest template realizează operaţia de conversie a unei imagini cu nuanţe de gri într-o imagine binară. Template-ul include operatorul A (operatorul B fiind nul) şi curentul
I al celulei: A:
THRES_A = [0 0 0; 0 2 0; 0 0 0];
B:
THRES_B = [0 0 0;
(9.10)
0 0 0; 0 0 0];
I:
THRES_I = i, -1< i <1;
Celelalte mărimi care caracterizează reţeaua sunt definite după cum urmează:
Intrarea:
U(t) = 0 sau arbitrar
Primul experiment cu reţele neuronale celulare - 79 Starea iniţială:
X(0) = P, unde P reprezintă imaginea ce urmează a fi procesată
Y(t) ) Y( ∗), unde Y(∗) constituie o imagine binară în
Ieşirea:
care toţi pixelii al căror nivel de gri:
pij 0 i devin negri.
Problema stabilităţii dinamice a reţelei se soluţionează în mod similar celor prezentate în cazul template-ului EDGE. Pentru verificarea regulilor locale se au în vedere condiţiile specificate în Tab.9.2 şi se procedează analog celor expuse la punctul precedent. Regulile de mai sus conduc în mod evident de la o imagine cu nuaţe de gri la o imagine binară, în care pixelii a căror intensitate luminoasă au depăşit pragul “i” devin pixeli negri. Caz
vuij (0)
vyij (∗)
1
vxij (0) 1 i
alb, independent de pixelii vecini
2
vxij (0) 0 i
negru, independent de pixelii vecini
3
vxij (0) & i
i, pesupunând zgomot nul
Tab.9.2 Reguli locale pentru template-ul THRES
Observaţii: Template-ul THRES din MATCNN are implicit pragul i & 0 . Dacă valoarea pragului este stabilită înafara intervalului [-1,+1] (uzual se ia i & # 4 respectiv i & %4 ), atunci imaginea de ieşire va conţine exclusiv pixeli negri respectiv albi. Aceste două operaţii, de “umplere cu negru” (FILBLACK) respectiv de “umplere cu alb” (FILWHITE), îşi găsesc aplicabilitate în prelucrările de imagini.
- 80 -
Aplicaţia nr.9 3. Desfăşurarea experimentului
3.1 Prima operaţie ce se impune a fi efectuata o constituie instalarea toolbox-ului
MATCNN în mediul de lucru MATLAB, conform celor prezentate în ANEXA 1. Se încearcă apoi o familiarizare cu instrumentele de lucru, procedând după cum urmează. Se deschide şi afişează, în fereastra de editare/depanare a mediului MATLAB, directorul matcnn (\toolbox\matcnn ); se va identifica apoi prezenţa scripturilor menţionate în ANEXA 1. Se va deschide şi afişa fişierul
\toolbox\temlib , care conţine
biblioteca de template-uri a toolbox-ului MATCNN. Va fi trecut în revistă conţinutul acestei biblioteci şi se va reţine forma tipică în care este editat un template. Utilizînd, în fereastra de comanda a mediului de lucru MATLAB, comanda “showdpic” vor fi vizualizate cele 8 imagini (pic1, pic2, …, pic8) care constituie
obiectul aplicaţiilor ce urmează.
3.2 Se elaborează prima aplicaţie cu RNC, care detectează muchiile într-o imagine cu nuanţe de gri, utilizînd template-ul EDGE. Imaginea prelucrată este “pic7”, preferată deoarece conţine elemente cu forme geometric regulate (în această situaţie performanţele aplicaţiei pot fi mai lesne evaluate vizual). Secvenţa corespunzătoare de instrucţiuni este prezentată în cele ce urmează. %set CNN environment SetEnv; TemGroup='TemLib'; %load to INPUT1 and show image pic7 load pic7; subplot(121); CNNShow(INPUT1); %initialize layers STATE=INPUT1; %set the simulation parameters Boundary=-1; TimeStep=0.1; IterNum=50; %load and show EDGE template LoadTem('EDGE');
Primul experiment cu reţele neuronale celulare - 81 ShowTem; %run template and show result RunTem; subplot(122); CNNShow(OUTPUT);
Se poate lesne constata că pe lângă detecţia muchiilor, programul vizualizează imaginea iniţială precum şi cea rezultată în urma pelucrării iar în fereastra de comandă mediului MATLAB este afişată secvenţa corespunzătoare template-ului EDGE.
Inţelegerea scriptului de mai sus este înlesnită de precizările prezentate în ANEXA 1, la pct. 2.3.
3.3 Pentru a experimenta comportamentul template-ului EDGE în cazul unor imagini alb-negru, se va binariza imaginea de intrare (“pic7”) şi se va executa apoi template-ul
EDGE. Se completează în acest scop, programul de mai sus, cu următoarele instrucţiuni: %%%%%%%run threshold %%%%%%%%%% load pic7; %initialize layers STATE=INPUT1; %set the simulation parameters TimeStep=0.4; IterNum=15; %load and run THRES template loadtem('THRES'); runtem; %show result subplot (223); CNNShow(OUTPUT); %%%%%%%%run again EDGE template %the OUTPUT is aplied to the INPUT1 of CNN INPUT1=OUTPUT; %initialize layers STATE=INPUT1; %set the simulation parameters Boundary=-1; timeStep=0.1; IterNum=50; %load and run EDGE template LoadTem('EDGE'); RunTem; %show result
- 82 -
Aplicaţia nr.9
subplot(224); CNNShow(OUTPUT);
Din scriptul prezentat mai sus rezultă că la început este realizată operaţia de transformare în imagine binară a imaginii de intrare, utilizând template-ul THRES, după care sunt extrase muchiile. Sunt vizualizate, totodată, imaginea binară precum şi imaginea cu muchiile extrase din aceasta.
Imaginea iniţială pic7
Muchiile extrase din pic7
Muchiile extrase
Imaginea binarizată
Fig.9.2 Rezultatul prelucrării cu scriptul aferent pct.3.4.
Concluzii: rezultatele prelucrării cu template-ul EDGE a unei imagini cu nuanţe de gri respectiv a unei imagini alb-negru sunt prezentate în fig.9.2. Este lesne de constatat că extragerea muchiilor se face cu mai multă acurateţe în cazul imaginii binare, o concluzie pe deplin în acord cu intuiţia inginerească.
APLICAŢIA NR. 10
Crearea unei interfeţe grafice utilizator pentru o aplicaţie cu RNA folosind mediul MATLAB
1. Principiile dezvoltării unei interfeţe grafice utilizator
Interfaţa grafică utilizator, (GUI - Graphical User Interface) are rolul de a mijloci comunicarea între program şi cel care îl utilizează. Deşi, în
aparenţă,
ar putea reprezenta un aspect secundar în realizarea unei aplicaţii, de multe ori
succesul acesteia depinde de calitatea desigului GUI. S-a considerat utilă formularea unor principii după care se va efectua proiectarea interfeţei grafice: !∀
Consideraţii privind aspectele statice ale GUI Principiile pe care trebuie să le indeplinească GUI sunt, cf.
simplitatea, consistenţa şi familiaritatea (fig.10.1).
SIMPLITATE
(eleganţă, claritate, unitate)
CONSISTENŢĂ
(aliniere, integritate, armonie)
FAMILIARITATE
(prietenoasă, confortabilă)
Fig.10.1 Principiile după care trebuie efectuat designul unei GUI.
[14]:
- 84 - Aplicaţia nr. 10 Simplitatea. Reprezintă scopul principal în proiectarea GUI. O
interfaţă grafică simplă sporeşte claritatea prezentării şi dă un sens unitar
acesteia. Reprezentarea calitativă, adică sublinierea formei, poate fi mult mai importantă decât reprezentarea cantitativă, numerică (fig.10.2).
Fig. 10.2 Importanţa reprezentării calitative asupra celei cantitative, în proiectarea GUI.
Tot în acest context se recomandă o arie minimă de interactiune între utilizator şi program. Se preferă păstrarea unui număr redus de figuri pe ecran.
Introducerea datelor se preferă a fi făcută grafic şi nu numeric. Consistenţa . Serveşte la eliminarea confuziei şi lipsei orientării
utilizatorului în momentul în care interactionează cu programul. De exemplu, în fig.10.3 sunt prezentate două programe MATLAB
demonstrative total diferite în fondul problemei. Una se referă la capabilităţile MATLAB de analiză a sunetului iar cealaltă la posibilităţile de reprezentare grafică 3D. Se observă însă acelaşi amplasament în pagină a controalelor (în partea dreaptă a figurilor, cu chenar) şi chiar unele controale comune (“Info”,
GUI pentru o aplicaţie cu RNA folosind mediul MATLAB - 85 -
“Close”). Acest aspect înlesneşte utilizarea unor aplicaţii diferite ca fond dar care îmbracă aceeaşi formă.
Fig.10.3 Deşi cele două aplicaţii MATLAB tratează aspecte cu totul diferite, amplasamentul în pagină eate identic. Acest fapt elimină confuzia şi dezorientarea utilizatorului.
Familiaritatea . Dacă interfaţa grafică este într-un anumit sens
familiară utilizatorilor aceştia vor învăţa mai repede să o utilizeze. GUI poate să facă apel la experienţa utilizatorului pentru a grăbi înţelegerea acesteia.
Fig. 10.4. GUI trebuie să introducă elemente familiare utilizatorului
- 86 - Aplicaţia nr. 10
De exemplu, în fig. 10.4 se prezintă forma de undă (sus) şi analiza
spectrală (jos) a tonurilor generate de formarea unui număr de telefon. Pentru generarea tonurilor se foloseşte chiar reprezentarea grafică a tastaturii acestuia. !∀
Consideraţii privind aspectele dinamice la GUI În momentul în care se interacţionează cu GUI, acţiunile trebuie să fie:
immediate, continue şi reversibile (fig.10.5).
IMEDIAT
(direct)
CONTINUU
(lin)
REVERSIBIL
(prietenos, încurajator)
Fig.10.5 Principii ale aspectului dinamic al GUI
În acest sens este recomandată manipularea directă a datelor, ca şi când acestea ar reprezenta un obiect solid. Având în vedere conceptele de acţiune imediată şi continuă, se recomandă, dacă timpul de calcul o permite, afişarea instantanee a rezultatului obţinut asupra datelor selectate. Dacă timpul de
calcul necesar unei acţiuni este semnificativ se recomandă folosirea unui buton pentru invocarea acesteia. În exemplul din fig.10.6 uitlizatorul are posibilitaea selecţiei directe a
GUI pentru o aplicaţie cu RNA folosind mediul MATLAB - 87 -
formei de undă (sus) după care transformata Fourier corespunzătoare acesteia va fi afişată instantaneu (jos). Se poate ilustra astfel cu uşurinţă relaţia dintre semnal şi transformata sa Fourier. În final, reversibilitatea se referă la capacitatea de a anula efectul unei sau mai multor acţiuni deja efectuate. Este uneori mai greu de implementat, dar întotdeauna apreciată de utilizator. Capacitatea de anulare încurajează
experimentarea diverselor acţiuni şi dă un confort sporit în utilizarea GUI.
Fig.10.6 Exemplu de manipulare directa a datelor, cu afişarea instantanee a rezultatului acţiunii
Se poate afirma în concluzie că pe baza principiilor mai sus enunţate, crearea unei interfeţe grafice utilizator, în general, sau folosind mediul MATLAB, în particular, presupune existenţa a două faze: proiectare şi implementare (fig.10.7).
- 88 - Aplicaţia nr. 10
START
Definirea procedurilor
Desenarea GUI
Testarea designului
PROIECTARE
STOP
Testarea codului
Scrierea codului
IMPLEMENTARE
Fig. 10.7 Etapele realizării unei interfeţe grafice utilizator
2. Probleme 2.1 Proiectaţi şi implementaţi, folosind mediul MATLAB, o interfaţă grafică utilizator pentru problema 4.3 din APLICAŢIA NR.4. Această interfaţă trebuie să permită selecţia interactivă a: -
numărului de neuroni aferenţi stratului ascuns (uicontrol de tip “Edit”);
-
ratei de învăţare (uicontrol tip “Slider”);
-
funcţiei de antrenament (uicontrol de tip “ListBox”);
-
cifrei aplicate la intrare (uicontrol de tip “Popup”);
-
nivel zgomot (uicontrol tip “Slider”);
Totodată aplicaţia trebuie să dispună de butoane care să lanseze procesul de antrenament şi pe cel de recunoaştere (uicontrol tip “Pushbutton”). Se va oferi posibilitatea de vizualizare a desfăşurării procesului de antrenament şi a rezultatelor procesului de recunoaştere
(obiect de tip
“Axes’). Pentru
GUI pentru o aplicaţie cu RNA folosind mediul MATLAB - 89 -
individualizarea categoriilor de acţiuni se va folosi un obiect de tip “frame” şi “Text”. În final interfaţa grafică utilizator va arăta ca cea din figura de mai jos.
Fig.10.8. Interfaţă grafică utilizator pentru cazul problemei 4.3 din APLICAŢIA nr.4.
Rezolvare: În general, în construcţia unei interfeţe grafice, se începe, cf. fig. 10.7, cu definiţia procedurilor pe care aceasta trebuie să le realizeze şi schiţarea, pe hârtie, a amplasamentului obiectelor (axe, controale, etc.) în figură. Abia după
- 90 - Aplicaţia nr. 10
ce aceste lucruri sunt clare se va trece la etapele ulterioare. În continuare se trece crearea figurii şi la amplasarea obiectelor în
figură (File → New → Figure). După ce s-a creat figura, se aplează GUIDE (Graphical User Interface Development Enviroment) tastând
guide de la
consolă sau File → Show GUI Layout Tool. Apoi se trece la controlul figurii (Controlled #1, Apply). Se amplasează obiectele dorite în figură, eventual
activând şi opţiunile aferente figurii curente: Options → Snap Objects to Grid şi Options → Display Grid (fig.10.9).
Fig.10.9 Guide şi interfaţa grafică care urmează a fi creată.
În final se leagă obiectele cu codul sursă aferent.
GUI pentru o aplicaţie cu RNA folosind mediul MATLAB - 91 -
Observaţii: (vezi fig.10.10 pentru totalitatea obiectelor disponibile) îi este atribuit un identificator unic,
1. Oricărui obiect grafic MATLAB
denumit handler. O modalitate simplă de determinare a handlerului unui obiect o reprezintă funcţia findobj în conjuncţie cu nişte parametrii ce
specifică proprietăţi ale acelui obiect. De exemplu, fiecărui obiect i se poate asocia o etichetă (“Tag”). În aceste condiţii determinarea handlerului se va face astfel: » handler_axa = findobj('Tag','Axes1') 2. La executarea acţiunilor permise
(creearea, închiderea, accesarea)
asupra unui obiect se pot lansa anumite subrutine (“Callback). Acestea pot fi incluse în obiectul de tip fereastră sau pot fi scripturi separate.
Fig.10.10 Totalitatea obiectelor grafice din mediul MATLAB.
a) Program principal % Implementare unui perceptron multistrat pentru % clasificarea numerelor 0...9 % si a unei interfete grafice utilizator (GUI) % Catalin-Daniel Caleanu, 2000 %clear all close all clc
- 92 - Aplicaţia nr. 10 cifre={'0','1','2','3','4','5','6','7','8','9'}; fct_antr={'traingdm','traingdx','trainscg','trainlm'}; % se incarca imaginile binarizate ale cifrelor din fisierul cifre.mat % matricile x0...x9 au dimensiunea 8x5 load cifre % se formeaza matricea P a vectorilor de intrare P = [x0(:) x1(:) x2(:) x3(:) x4(:) x5(:) x6(:) x7(:) x8(:) x9(:)]; % se formeaza matricea vectorilor de iesire % de exemplu, pentru x0 aplicat la intrare, vectorul de iesire este: % 1 0 0 0 0 0 0 0 0 0 T = eye(10); % matricea PR specifica valorile min si max pentru cele 40 (8x5) % de intrari ale MLP for i=1:40 PR(i,:)=minmax(P(:)'); end % apelare GUI fig_l10
b) Faza de antrenament % se preiau datele din GUI % referitoare la parametrii proc. de antr. ha1=findobj('Tag','Axes1'); axes(ha1); handler_edit1 = findobj('Tag','EditText1'); handler_slider1 = findobj('Tag','Slider1'); handler_listbox1 = findobj('Tag','Listbox1'); nr_neur_asc = eval(get(handler_edit1,'String')); rata_inv = get(handler_slider1,'Value'); fct_antr_sel = mat2str(cell2mat(fct_antr(get(handler_listbox1,'Value')))); % se creeaza obiectul net net= newff(PR,[nr_neur_asc 'logsig'},fct_antr_sel);
10],{'tansig'
GUI pentru o aplicaţie cu RNA folosind mediul MATLAB - 93 % se definesc alti parametrii ai RNA (rata de invatare, moment, etc.) net.trainParam.lr=rata_inv; net.trainParam.mc=0.7; net.trainParam.min_grad=1e-10; net.trainParam.show = 1; net.trainParam.epochs = 400; net.trainParam.goal = 0.001; % incepe procesul de antrenament [net,tr]= train(net,P,T); set(gca,'Tag','Axes1');
c) Etapa de utilizare % faza de utilizare a retelei % se testeaza capacitatea de recunoastere pentru cazul cand tiparele % sunt afectate cu zgomot ha2=findobj('Tag','Axes2'); ha3=findobj('Tag','Axes3'); ha4=findobj('Tag','Axes4'); handler_slider2 = findobj('Tag','Slider2'); handler_PopupMenu1 = findobj('Tag','PopupMenu1'); cifra = get(handler_PopupMenu1,'Value'); zgomot = get(handler_slider2,'Value'); axes(ha2); imshow(reshape(P(:,cifra),8,5)); set(gca,'Tag','Axes2'); % s-a definit in prealabil o functie xi = noise (xi, zgomot) % care contamineaza biti matricii "xi" in proportie de "zgomot [%]" cifra_zgomot = reshape(noise(P(:,cifra),zgomot),8,5); axes(ha3); imshow(cifra_zgomot); set(gca,'Tag','Axes3'); [y,i] = max(sim(net,cifra_zgomot(:)),[],1); cifra_recunoscuta=i-1; axes(ha4); imshow(reshape(P(:,cifra_recunoscuta+1),8,5)); set(gca,'Tag','Axes4');
- 94 - Aplicaţia nr. 10
Fig.10.11 Interfaţa grafică funcţională.
În final, prin legătura controalelor la subrutinele corespunzătoare, se obţine o interfaţă grafică utilizator funcţională (fig.10.11).
ANEXA NR.1
Simulatorul analogic de reţele neuronale celulare MATCNN -prezentare generală
1. Introducere MATCNN [15] este o colecţie de funcţii şi scripturi care permit simularea şi testarea RNC cu un singur strat. El a fost conceput pe suportul matematic şi de vizualiare oferit de mediul MATLAB şi în consecinţă poate fi utilizat ca orice alt
"toolbox" din mediul de lucru amintit. Mai mult decât atât, codul sursă al diferitelor subrutine fiind disponibil utilizatorului, poate fi eventual modificat şi adaptat cerinţelor aplicaţiei. Câteva caracteristici ale simulatorului, ce merită a fi subliniate: !∀
MATCNN permite elaborarea de algoritmi analogici şi logici bazaţi pe RNC.
Simulatorul include o bibliotecă predefinită de template-uri * (operatori) utilizate frecvent în operaţiile cu RNC
(fişierul temlib.m); există însă posibilitatea completării
bibliotecii cu noi operatori, definiţi de utilizator. !∀
MATCNN oferă suportul necesar elaborării de fişiere MEX, utile în cazul
folosirii mediului MATLAB sub sistemele de operare MS WINDOWS şi UNIX [15]. !∀
Simulatorul MATCNN este conceput pentru a fi utilizat în mediul MATLAB
versiunile 4.2-5.0 şi Image Processing Toolbox
1.0-2.0; cu mici modificări ale
funcţiilor şi scripturilor simulatorului este posibilă utilizarea acestuia şi în versiuni MATLAB mai recent elaborate (versiunea 5.3). !∀
Ecuaţiile diferenţiale ce intervin în modelul RNC sunt integrate numeric,
utilizând formula directă a lui Euler. Termenul “template” a fost preluat direct din literatura de limbă engleză în lipsa unui termen potrivit, echivalent, în limba română. *
- 96 - Anexa nr.1 !∀
Principala aplicaţie a RNC fiind, cel putin pâna în momentul de faţă,
prelucrările de imagini [7], simulatorul MATCNN a fost elaborat pentru a fi utilizat cu precădere în acest domeniu. Pot fi procesate imagini cu nuanţe de gri, normalizate în intervalul [-1,+1] respectiv imagini binare, cu valori de -1 şi/sau +1 (-1 corespunde la alb, +1 la negru, iar nivelurile de gri sunt reprezentate prin valori cuprinse în intervalul (-1,+1) ).
2. Modelul general de RNC utilizat în MATCNN Pentru o utilizare corectă şi eficientă a simulatorului MATCNN este necesară
cunoaşterea modelului de RNC ce a stat la baza elaborării lui. Se prezintă în continuare RNC modelată de acest simulator, împreună cu o serie de noţiuni şi consideraţii utile din punct de vedere aplicativ. MATCNN permite implementarea de RNC cu un singur strat, constând
dintr-un tablou bidimensional de celule identice C ij,
1 # i# M si 1 # j# N
Comportamentul dinamic al fiecărei celule este descris de următoarea ecuaţie diferenţială ordinară şi neliniară (pentru aprofundarea chestiunilor a se consulta [7]):
v
(t) + ( R xij
∗
v
xij
&
kl ∋
(1
∃ t% ∗
kl ∋ N r
A ˆ ( ) v) ∗ ij ,kl
yy
& Aij,kl vykl ∃ t% ∗ & Bij, kl vukl ∃ t% ∗ ijI ∗
&
kl
Nr
∋
ˆB
( ) v) ∗
ij ,kl
Nr
iar mărimea la ieşiere ei este dată de relaţia:
kl ∋ N r
uu
&
ˆD
() v )
(A1.1)
ij , kl
kl ∋ N r
vyi (t ) + f (v (t )) + 0 v ( t ) ∗ 1| ( | v xij xij j 5( |
( t ) ( 1| ) , (A1.2)
xij
cu notaţiile: )
v )v
yy
uu
+
v
ykl
∃ t% (
v∃ yiy
% t
+ v ∃ t%( v ∃ %t ukl
)v + v
u,x,ykl
uij
∃ t% (
v
u,x,yij
∃ %t
(A1.3)
Simulatorul analogic de reţele neuronale celulare MATCNN - 97 -
|v (t ) | # 1 , | v (t ) | | Iij | # v , 1 # i# M , 1 # j# N #1 , x ij
u ij
max
În relaţiile de mai sus tensiunile v
xij
, v , v uij
reprezintă starea, intrarea şi
yij
respectiv ieşirea unei celule Cij . În cursul unei operaţii de procesare starea şi ieşirea
Nr a fost notată
variază în timp, pe când intrarea rămâne nemodificată. Prin vecinătatea de raza r a unei celule
C
ij
reacţie şi respectiv de comandă iar
A
ij,kl
şi B
ij,kl
reprezintă operatori liniari de
Iij este curentul celulei (de regulă invariant în
spaţiu).A
ˆ
, Bˆij ,kl şi Dˆij , kl sunt operatori neliniari A care se aplic ă diferenţelor
ij , kl
generalizate ) v yy , ) v şi respectiv v) . Mai exact, ˆ uu
ij
repezintă operator de reacţie
,kl
comandat prin diferenţă, B ˆ ij,kl
A
este operator de comandă comandat prin diferenţă iar
Dijˆ,kl este un operator neliniar generalizat (care îl include atât pe
ˆ
ij,kl
cât şi pe
Bˆij,kl ). Trebuie observat apoi că funcţia f , ce defineşte caracteristica de ieşire este funcţia sigmoid, aproximată liniar pe porţiuni. În fine, de timp a unei celule; în cele ce urmează se va considera , + 1,
, + RC
reprezintă constanta
R + 1, C + 1 şi deci şi
situaţie ce caracterizează, printre altele, RNC standard
(cel mai frecvent
utilizate în aplicaţii [7]). Din cele expuse până în prezent rezultă că unei RNC i se poate asocia cu uşurinţă o imagine (câte un pixel pentru fiecare celulă). Pe de altă parte, deoarece
fiecare celulă este caracterizată de anumiţi parametri respectiv semnale (vezi rel.(A1.1), este convenabil ca aceste mărimi să fie şi ele aşezate ordonat, în tablouri bidimensionale, în corespondenţă cu stratul de celule C ij. În consecinţă, RNC cu un singur strat va fi tratată în continuare, din punctul de vedere al calculelor, ca o structură cu mai multe straturi ("imagini") bidimensionale. Imaginile notate cu U, X şi Y reprezintă intrarea, starea şi respectiv
- 98 - Anexa nr.1 ieşirea celulelor reţelei. Se utilizează frecvent şi următoarele straturi: - aşa-numitul strat de polarizare al reţelei, notat cu B, care reprezintă - sub forma unei imagini cu nuanţe de gri - componenta variant în spaţiu din curentul fiecărei celule; - aşa-numitul strat mască, notat cu M, care specifică printr-o imagine binară faptul că o celulă este activă (pixelul corespunzător este egal cu +1) sau este inactivă (pixelul corespunzător este egal cu -1). Unii operatori (de exemplu
ˆ Dij,kl ) pot avea două valori de intrare, specificate
prin imaginile U1 şi U2 . Observaţii: Dacă nu sunt precizate explicit valori pentru straturile I şi M, atunci stratul de polarizare se presupune nul respectiv toate celulele sunt active. Utilizarea celor
două straturi menţionate mai sus permite încorporarea în algoritmii cu RNC a unei adaptabilităţi spaţiale, liniare în cazul stratului I şi neliniare în cazul stratului M.
3. Modele de RNC cu template-uri liniare şi neliniare Operaţiile de procesare pe care le realizează o RNC depind în esenţă de natura operatorilor ce intervin în ecuaţia de stare, dată de rel. (A1.1). Template-urile incluse implicit în biblioteca MATCNN reprezintă operatori desemnaţi în literatura de specialitate ca fiind cei mai utili în prelucrarea imaginilor - principalul domeniu
aplicativ al RNC - şi în plus conduc la implementări VLSI de complexitate scăzută [15]. Template-urile din MATCNN pot fi clasificate după cum urmează: - template-uri liniare, care includ numai termenii liniari celulei;
A şi B şi curentul I al
- template-uri neliniare de tipul "A-B", care conţin termenii liniari A, B , termenii
neliniari Â, Bˆ şi curentul I al celulei; - template-uri neliniare de tipul "D", care constau din termenii liniari A, B , termenul neliniar generalizat Dˆ şi curentul celulei ( I ). Ne propunem în cele ce urmează o scurtă trecere în revistă a modelelor de
Simulatorul analogic de reţele neuronale celulare MATCNN - 99 RNC asociate acestor tipuri de template-uri precum şi forma în care sunt reprezenatate aceste template-uri în MATCNN. Observaţie: Din considerente practice, template-urile din bibliteca MATCNN poartă denumiri care sugerează operaţia de procesare pe care o implementează, aşa după cum va rezulta în continuare.
Template liniar: [A B I] Ecuaţia de stare asociată este de forma:
v
v ∃ t% ∗
∃ t% + (
xij
xij
A v
&
kl ∋
Nr
B v
∃ t% ∗
ig,kl ykl
&
kl ∋
Forma de reprezentare în biblioteca MATCNN:
∃ t% ∗
ij,kl ukl
I
ij
(A1.4)
Nr
Exemplul 1: Template-ul EDGE - operator care realizează detecţia muchiilor într-o imagine binară. EDGE_A = [0 0 0; 0 2 0; 0 0 0]; EDGE_B = [-0.25 -0.25 -0.25 -0.25 2
-0.25
-0.25 -0.25 -0.25]; EDGE_I = -1.5; Exemplul 2: Template-ul DIFFUS - operator care realizează difuzia (are termenul liniar B nul). DIFFUS_A = [0.1 0.15 0.1; 0.15 0
0.15;
0.1 0.15 0.1];
- 100 - Anexa nr.1 DIFFUS_I = 0;
Template neliniar de tipul "AB": [A B ˆABˆ I] Ecuaţia de stare asociată:
v
( t) + xij
∃ t%
(
v
A v
∗
xij
ij, kl ykl
&
kl ∋ N
∗
( ) v)
r
ˆ
&
kl ∋
A
B v
∃ t% ∗
&
kl ∋
Nr
∃ t% ∗
ij ,kl ukl
ˆB
I∗ ij
(A1.5)
( ) v)
∗ ij ,kl
yy
&
kl
Nr
∋
ij , kl
uu
Nr
Forma de reprezentare în MATCNN: Exemplu: Template-ul GRADIENT - operator care realizează detecţia de contur pe bază de gradient (termenul liniar B precum şi termenul neliniar  sunt nuli). GRADT_A = [0 0 0; 0 2 0; 0 0 0]; GRADT_Bb = [1 1 1; 1 0 1; 1 1 1]; GRADT_b = [13 -33 00 33]; GRADT_I = -1.8; În legatură cu funcţia GRADT_b, care exprimă interacţiunea neliniară, se va reveni în continuare.
Operatori neliniari de tipul D: [A B D I]
ˆ
v Ecuaţia de stare asociată este de forma: xij
(t) + ( vxij ∃ t%∗ & A kl∋Nr
ij,kl
v ykl
∃ t% ∗ kl∋Nr
& Bij,klvukl
∃ t %∗
Iij ∗ Dij,kl (v) (A1.6)
Simulatorul analogic de reţele neuronale celulare MATCNN - 101 Forma de reprezentare în MATCNN: Exemplul 1: Template-ul MEDIAN - realizează filtrarea mediană (termenul liniar B şi curentul I al celulei sunt nuli). MEDIAN_A = [0 0 0; 0 1 0; 0 0 0]; MEDIAN_Dd = 0.5 * [1 1 1; 1 0 1; 1 1 1]; MEDIAN_d = [ 02 0-1 21 12 ]; (funcţie care exprimă interacţiunea neliniară). Exemplul 2: NLINDIFF - realizează difuzia neliniară (termenul liniar B şi curentul I al celulei sunt nuli) NLINDIFF_A= [0 0 0 ; 0 1 0; 0 0 0]; NLINDIFF_Dd = 0.5 * [1 1 1; 1 0 1; 1 1 1]; NLINDIFF _d = [ 02 0-1 21 12 ]; (funcţie care exprimă interacţiunea neliniară).
Specificarea funcţiilor neliniare în template-urile de tip "AB" respectiv "D" Din exemplele prezentate s-a putut observa că în operatorii Aˆ ,
Bˆ şi Dˆ , intervin
funcţiile a,b şi d - care determină interacţiunile neliniare dintre celule. Aceste funcţii pot fi exprimate prin aproximare pe porţiuni, cu valori constante (piecewise-constant
pwc) sau variaţii liniare (piecewise-liniar pwl). Specificarea lor în MATCNN se face
- 102 - Anexa nr.1 după cum urmează:
Pentru a şi b:
[ interp p_num x_1 y_1 x_2 y_2 . . . . x_n y_n ]
unde:
interp - indică metoda de interpolare: 0 - pwc şi 1 - pwl p-num - reprezintă numărul de puncte x1 y1 - ordonata şi abscisa primului punct xn yn - ordonata şi abscisa ultimului punct.
Exemplu: în operatorul GRADIENT se declară la un moment dat: GRADT_b = [13 -33 00 33]; Aest fapt specifică o funcţie neliniară, aproximată prin interpolare liniară între trei puncte: (-3,3), (0,0), (3,3). Observaţie: conform rel.(A1.3), funcţiile a şi b se aplica întotdeauna diferenţelor între intrările sau între ieşirile a două celule învecinatate.
Pentru d: unde:
[ interp p_num x_1 y_1 x_2 y_2 ... x_n y_n
intspec]
interp - indică metoda de interpolare: 0 - pwc şi 1 - pwl p-num - reprezintă numărul de puncte x1 y1 - ordonata şi abscisa primului punct xn yn - ordonata şi abscisa ultimului punct. intspec - parametru ce specifica interacţiunea.
Codurile valide pentru parametrul intspec, prin care se precizează argumentul Δv în funcţia neliniară d(Δv), sunt după cum urmează: 11
Δv = vukl - vuij
12
Δv = vukl - vxij
13
Δv = vukl - vyij
21
Δv = vxkl - vuij
Simulatorul analogic de reţele neuronale celulare MATCNN - 103 22
Δv = vxkl - vxij
23
Δv = vxkl - vyij
31
Δv = vykl - vuij
32
Δv = vykl - vxij
33
Δv = vykl - vyij.
Pentru specificarea unor interacţiuni de forma d(Δv)(Δv), se va aduna la codul de mai sus codul 100. Observaţii: Se observă uşor că interacţiunile precizate de codurile 11 şi 33 sunt cele corespunzătoare funcţiilor neliniare a şi b. Din acest motiv Dˆ se numeşte operator generalizat, el incluzând ambii operatori: Aˆ şi Bˆ. Interacţiuni, ca cele specificate prin codurile de mai sus, fac cu putinţă exprimarea unor operatori (cum sunt filtrare statistică, difuzia neliniară, etc.), ca simpli operatori de RNC. Pentru clarificarea ideilor se prezintă în continuare câteva exemple. Exemplul 1: (se referă la template-ul MEDIAN) MEDIAN_d = [ 02 0-1 21 12 ]; Operaţia specificată mai sus este o limitare cu funcţia treaptă (între punctele (0,-1) şi (2,1)) aplicată diferenţei între intrările şi stările celulelor învecinatate (cod: 12). O neliniaritate de tip sigmoidal (interpolare liniara pwl, între 4 puncte) ar necesita o
funcţie de forma: MEDIAN_d = [ 12 -2-1 -0.5-1 0.51 21 12 ]; Exemplul 2: (are în vedere operatorul NLINDIFF ) NLINDIFF = [ 12 -20 -0.10 01 0.10 20 122 ]; acesta specifică o funcţie neliniară rezultată prin interpolare liniară (pwl) între 5
puncte: (-2,0), (-0.1,0), (0,1), (2,0) şi care se aplică diferenţelor între stările celulelor învecinate (codul 22 din suma 122 = 22 + 100 ). Adiţionarea codului 100 indică faptul că rezultatul obţinut la operaţia precedentă trebuie multiplicat cu Δv.
- 104 - Anexa nr.1 4. Simularea unei aplicaţii cu RNC Elaborarea unui program de simulare a unei aplicaţii cu RNC se conformează regulilor cunoscute pentru orice alt program ce ruleaza în mediul MATLAB [3]. În
consecinţă, programul va include funcţii şi scripturi şi va face uz de variabile (globale). O listă completă cu scripturile, funcţiile şi variabilele globale cu care operează
MATCNN este prezentată la pct.5. În cele ce urmează se va descrie pe scurt, anticipând, câteva dintre variabilele globale utilizate pe parcursul acestui paragraf. O primă cartegorie de variabile sunt cele corespunzătoare imaginilor asociate modelului de RNC utilizat în MATCNN (pct. 2) şi care include variabilele: INPUT1
- U sau U1 (imagine de intrare primară a modelului de RNC)
INPUT2
- U2 (imagine de intrare secundară a modelului de RNC)
STATE
- X (imaginea de starea)
OUTPUT
- Y (imaginea aferentă ieşirii modelului de RNC)
BIAS
- B (imaginea de polarizare (bias map) a modelului de RNC)
MASK
- M (imagine mască a modelului de RNC).
Observaţii: Se subliniază că suma dintre curentul constant I al unei celule, ce intervine în modelul dat de rel.(A1.1) şi valorile de polarizare variant în spaţiu, date de
I
curentul variant în spaţiu din modelul de RNC ( Masca M este o imagine binară ( M
ij
celulă este activă ( M + ∗1 ) sau inactivă ( M ij
ij
+
Bij , reprezintă
I ∗ B ).
ij
ij
+ ∗1 sau -1), care specifică dacă o + ( 1 ).
Valorile implicite pentru elementele imaginilor BIAS şi MASK sunt 0
(polarizare nulă) respectiv 1 (toate celulele active).
Simulatorul analogic de reţele neuronale celulare MATCNN - 105 Operatorii aritmetici, logici şi de tip Dˆ pot avea două valori de intrare: U =
U1 şi U2. O a doua categorie de variabile globale sunt cele care se impun a fi iniţializate de către utilizator (înainte de efectuarea simulării propriu-zise). Acestea sunt următoarele: UseMask
- validează (UseMask = 1) sau invalidează (UseMask = 0 ) utilizarea imaginii mască M
UseBiasMap
- validează (UseBiasMap = 1) sau invalidează (UseBiasMap = 0) utilizarea imaginii de polarizare
Boundary
- variabila prin care se specifică condiţiile de frontieră:
-1 # Boundary # 1 zero flux (Boundary = 2) torus (Boundary = 3) TemGroup
- permite precizarea bibliotecii din care vor fi extraşi template-urile apelate în program; valoarea implicită este TemLib
TimeStep
- specifică intervalul dintre două momente discrete de timp la care au loc doua iteratii succesive; are valoarea implicita TimeStep = 0.2
IterNum
- precizează numărul de iteraţii care au loc pentru o simulare.
Observaţii: Precizări suplimentare privind condiţiile de frontieră, specificate aici prin variabila globală Boundry, sunt date în [7]. Exista şi o a doua categorie de variabile globale, utilizate şi modificate de funcţiile şi scripturile MATCNN şi care nu trebuie modificate de către utilizator.
Aceste variabile sunt prezentate la pct. 5. Se prezintă în continuare etapele de elaborare a unui program pentru simularea unei aplicaţii cu RNC şi vizualizarea rezultatului obţinut: !∀
se specifică utilizarea mediului de simulare MATCNN şi denumirea
- 106 - Anexa nr.1 bibliotecii bibliotecii de unde vor vor fi extrase template-urile; template-urile; spre exemplu: exemplu: SetEnv;
- se setează mediul de simulare MATCNN
TemG TemGro roup up = 'MyT 'MyTem emLi Lib' b';;
- oper operat ator orii ii sunt sunt extr extraş aşii din din bibl biblio iotec tecaa conţ conţin inut utăă în fişierul mytemlib.m.
Observaţie: În timp ce specificarea mediului de simulare MATCNN este întotdeauna
necesară, declaraţia privind biblioteca utilizată poate lipsi; în acest ultim caz, simulatorul operează cu biblioteca implicită a mediului (fişierul temlib.m). !∀
se iniţializează imaginile aferente intrării şi respectiv stării modelului de RNC
INPUT1 = LBmp2CNN('Road'); - road.bmp este încărcată la intrare STATE = zeros(size(INPUT1)); - toate valorile iniţiale ale stării sunt puse puse pe zero. Observaţie: Iniţializarea intrării este opţională în timp ce iniţializarea stării este întotdeauna necesară; în această fază pot fi adiţionate zgomote la imaginile utilizate (cu scop de testare). !∀
se specifică utilizarea/neutilizarea imaginii de polarizare şi a imaginii mască, după cum urmează:
UseBiasMap = 1;
- s-a setat utilizarea imaginii de polarizare
UseMask = 0;
- şi nu se va folosi imaginea mască.
Observaţie: Dacă s-a optat pentru utilizarea imaginii de polarizare/mască, atunci imaginile respective trebuie mai întâi iniţializate. Scriptul MATCNN SetEnv
iniţializează aceste variabile globale cu zero. !∀
se precizează condiţiile de frontieră; de exemplu:
Boundary = -1; !∀
- variabila Boundary se face egală cu -1.
se setează parametrii ce caracterizează procesul de simulare: intervalul de
timp între două iteraţii succesive si numărul de iteraţii aferente întregului
proces proces de simul simulare. are. Spre exemplu: TimeStep = 0.1;
- intervalul de timp între două iteraţii egal cu 0.1
IterNum = 100; - numărul de iteraţii stabilit la 100. Observaţii: Valorile implicite implicite TimeStep = 0.2 şi IterNum = 25, conduc la un interval
Simulatorul analogic analogic de reţele neuronale neuronale celulare celulare MATCNN - 107 de timp, pe durata căruia este simulat comportamentul RNC, egal cu 5 secunde. Pentru valorile uzuale R = 1, C = 1 şi deci τ = 1, acest interval corespunde la 5τ, situaţie în care se poate considera că regimurile tranzitorii din reţea sunt practic încheiate şi că toate celulele au atins regimul staţionar. Prin urmare, valorile implicite pentru TimeSetup TimeSetup şi IterNum satisfac satisfac în situaţiile practice practice curente. curente. Cu toate acestea, acestea, anumiţi operatori necesită alte valori pentru parametrii procesului de simulare [15]. se încarcă, din biblioteca deja specificată, template-ul care determină efectiv
!∀
modelul de RNC. Spre exemplu: LoadTem('EDGE');
- este încărcat template-ul EDGE.
Observaţie: Este util ca template-urile aferente unei aplicaţii cu reţele neuronale să fie memorate într-o bibliotecă (fişier-M), care se setează ca biblioteca curentă (utilizind TemGroup). !∀
se lansează în execuţie procesul de simulare:
RunTem !∀
- se execută simularea cu operatorul specificat.
se vizualizează rezultatul simulării:
CNNShow(OUTPUT) - vizualizează imaginea de la ieşirea RNC. Observaţie: Deoarece atât intrările cât şi ieşirile unei RNC sunt imagini, la evaluarea peformanţelor peformanţelor reţelei se se recomandă utilizarea utilizarea facilităţilor facilităţilor de procesare procesare (scală (scalări, ri, modificarea modificarea nuanţelor nuanţelor de gri, gri, etc.) oferite oferite de de Image Processing Processing Toolbox, Toolbox,
din mediul mediul
MATLAB.
5. Lista funcţiilor, scripturilor şi a variabilelor globale din MATCNN Fişiere - M din MATCNN (scripturi şi funcţii) Scripturi şi funcţii de bază: SetE etEnv
- setea tează me medi diuul MAT MATCN CNN N şi şi iniţ iniţia iali lizzează ează varia ariabbile ilele glob globaale
Show ShowEn Envv
- afi afişe şeaz azăă val valor oril ilee var varia iabi bile lelo lorr glo globa bale le din din med mediu iull MAT MATCN CNN N
- 108 - Anexa nr.1 Show ShowTe Tem m
- afiş afişea ează ză tem templ plat atee-ul ul efe efect ctiv iv înc încăr ărca catt în med mediu iull MATC MATCNN NN
RunT RunTem empp
- lans lansea ează ză în exec execuţ uţie ie temp templa late te-u -ull dej dejaa încă încărc rcat at
CNNSh NNShow ow
- viz vizuali ualize zeaază o imag imagin inee tip tip RNC RNC
Tem emL Lib
- bib bibli liooteca teca imp implici licită tă cu temp templa late te-u -uri ri a me meddiulu iuluii MAT MATCN CNN N
Scripturi şi funcţii diferite CNN2 CNN2Gr Gray ay
- conv conver erteş teşte te o ima imagi gine ne tip tip RNC RNC înt întrr-oo imag imagin inee cu nua nuant ntee de gri gri
Gray Gray2C 2CNN NN
- conv conver erteş teşte te o ima imagi gine ne cu cu nuan nuanţe ţe de de gri gri într într-o -o ima imagi gine ne tip tip RNC RNC
CBound und
- adau adauggă o fron rontie tieră specif ecific icat atăă la o imag imagin inee tip tip RNC RNC
CImN mNoi oise se
- sup suprrapun apunee zg zgom omoot pes peste te o im imagin aginee de de tip tip RNC RNC
LBmp2C LBmp2CNN NN
- încarc încarcăă un fişie fişierr BMP de pe pe disc disc şi îlîl conver converteşt teştee într-o într-o imagine imagine tip RNC
SCNN2B SCNN2Bmp mp
- salve salvează ază pe disc, disc, în în forma formatt BMP, BMP, o imagin imaginee de tip RNC
Fişire - MEX din MATCNN Fişiere de bază tlinear
- simulează un operator liniar de RNC
tnlinab
- simulează un operator neliniar de tipul “AB”
tnlind
- simuleaza un operator neliniar de tip “D”
Fişiere speciale, care implementează diferite filtre speciale: tmed tmedia iann
- sim simuuleaz leazaa un un op operat eratoor car caree rea reali lize zeaz azăă fil filtr trar area ea me meddian iană
tmed tmedian ianhh
- ope opera rato torr pent pentru ru filtra filtrare reaa medi mediană ană,, cu cu apl aplica icaţii ţii în stud studiu iull sist sistem emelo elorr cu cu neliniarităţi de tip histereză
tanisod
- simulează operatorul de difuzie anisotropică
modfilt
- op operator ca care im implementează fi filtre mo modale.
Simulatorul analogic de reţele neuronale celulare MATCNN - 109 Variabile globale din MATCNN (lista completă)
(valorile implicite sunt trecute în
/./ ). Variabile globale cărora li se asigneaza valori prin program: UseBiasMap
- validează (UseBiasMap = 1) sau invalidează (UseBiasMap = 0) utilizarea imaginii de polarizare; / 0 /
UseMask
- validează (UseMask = 1) sau invalidează (UseMask = 0 ) utilizarea imaginii mască M / 0 /
Boundary
- variabila prin care se specifică condiţiile de frontieră: -1 # Boundary # 1
zero flux (Boundary = 2) torus (Boundary = 3); / 2 / TemGroup
- permite precizarea bibliotecii din care vor fi extrase template-urile apelate în program; / “TemLib” /
TimeStep
- specifică intervalul dintre două iteraţii succesive; / 0.2 /
IterNum
- precizează numărul de iteraţii care au loc pentru o simulare; / 25 /.
Variabile globale modificate de funcţiile şi scripturile din MATCNN: TemName
- numele operatorului actual; / ‘’’’’’ /
TemNum
- numărul de ordine al operatorului efectiv utilizat în program / 0 /
TemType
- tipul operatorului actual: 0- liniar, 1- neliniar de tipul “AB”, 2- neliniar de tipul “D”; / 0 /
Atem
- reacţie liniară; / 0 /
Btem
- comandă liniară; / 0 /
At_n
- reacţie neliniară; / 0 /
nlin_a
- funcţia neliniară din reacţie; / 0 /
Bt_n
- comandă neliniară; / 0 /
nlin_b
- funcţie neliniară de comandă; / 0 /
Dt_n
- interacţiune neliniară generalizată; / 0 /
- 110 - Anexa nr.1 Nlin_d
- funcţia neliniară din termenul generalizat; / 0 /
I
- curentul celulei; / 0 /
Run Text
- afişează numele operatorului, numărul lui de ordine, intervalul între două iteraţii succesive, numărul total de iteraţii şi apelul modulului de raportare, înainte ca operatorul respectiv să fie lansat în execuţie
INPUT1
- U sau U1 (imagine de intrare primară a modelului de RNC)
INPUT2
- U2 (imagine de intrare secundară a modelului de RNC)
STATE
- X (imaginea de stare)
OUTPUT
- Y (imaginea aferentă ieşirii modelului de RNC)
BIAS
- B (imaginea de polarizare (bias map) a modelului de RNC)
MASK
- M (imagine mască a modelului de RNC).
6. Instalarea toolbox-ului MATCNN în mediul MATLAB Programul MATCNN este disponibil si poate fi încarcat, sub forma arhivată, de la adresa http://lab.analogic.sztaki.hu/MATCNN/index.html . După dezarhivare se copiază întreg directorul matcnn în directorul cu toolbox-uri din mediul MATLAB: (\toolbox). Pentru ca noul program să poata fi utilizat la fel ca oricare alt
toolbox, se adaugă în fişierul master matlabrc.m, ce se execută automat la lansarea în execuţie a mediului MATLAB, calea: addpath('C:\MATLABR11\toolbox\Matcnn' );. Pentru salvarea fişierelor cu aplicaţii se recomandă utilizare directorului work (\work), aflat la dispoziţia utilizatorului.
Bibliografie
[1] * * * - “MATLAB Function Reference ”, vol.1: Language, ver.5, The
MATHWORKS Inc., 1999. [2] www.mathworks.com.- The MATHWORKS Inc. [3] M. Ghinea, V. Fireţeanu, - “ MATLAB. Calcul numeric-Grafică-Aplicaţii”, Ed. Teora, 1995. [4] H. Demuth, M. Beale - “ Neural Network Toolbox. User’s Guide”, ver.3.0, 1998. [5] S. Haykin - “ Neural Networks: A Comprehensive Foundation”, Second Edition, IEEE Press 1999. [6] G. Toderean, M. Coşteiu, M. Giurgiu - “ Reţele neuronale”, Ed. Microinformatica, Cluj-Napoca, 1994. [7] V. Tiponuţ, C.D. Căleanu algoritmi" , Politehnica, Timişoara, 2000.
"Reţele neuronale. Arhitecturi şi
Ed.
[8] Cichocki A., Unbehauen R., - “ Neural Networks for Optimization and
Signal Processing”, John Wiley & Sons, 1993. [9] C.D. Căleanu, L. Petropoulakis - “ Improved Training of Multilayer
Feedforward Neural Networks for Large Input Vectors”, Proc. 8th IEEE Med. Conf. Control and Aut., Rio, Patras, Greece, 2000. [10] H. Demuth, M. Beale - “ Neural Network Toolbox. User’s Guide ”, ver.3.0, The MATHWORKS Inc., 1998. [11] D. Dumitrescu, H. Costin - “ Reţele neuronale. Teorie şi aplicaţii”, Ed. Teora, 1996. [12] J. Hertz, A. Krogh, R. Palmer - “ Introduction to the Theory of Neural
Computation”, Lectures Notes, Santa Fe Institute, Addison-Wesley Publishing Company, 1995.
[13] C. Lau (Ed.) - " Neural Networks. Theoretical Foundations and
Analysis", IEEE Press, 1992.