Sunteți pe pagina 1din 110

Cătălin-Daniel Căleanu 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. Totodată exprimăm mulţumiri recenzorului pentru sugestiile utile 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. Introducere în MATLAB…………………………………..…….pag.7


(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 adăuga propriile funcţii sau le poate modifica pe cele existente. Folosind
funcţiile predefinite ale 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ţele neuronale (“Neural Networks”);


- Logică fuzzy (“Fuzzy Logic”)
- Prelucrări de imagine (“Image Processing”);
- Prelucrări de semnal (“Signal Processing”);
- Undişoare (“Wavelet”)
- Achiziţie de date (“Data Aqusition”);
- Statistică (“Statistics”);
- Identificarea sistemelor (“System Identification”);
- Financiar (“Financial”).

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”
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, caracterizat de extensia *.m, constă dintr-o


succesiune de instrucţiuni MATLAB, cu posibilitatea apelării altor fişiere. El
presupune mai multe linii de cod care se pot scrie apelând editorul MATLAB 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 - 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 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 1.1 Scrieţi o 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 fiind
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
, 10 xmax ] 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 - instrucţiunile IF, ELSEIF, ELSE.
Forma generală este:
IF expresie_1
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 unei matrici: A = [1 2 3; 4 5 6; 7 8 9], B =


[10 7 6;3 2 0;2 4 5]')
A = [1 2 3; 4 5 6; 7 8 9]
B = [10 7 6;3 2 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:
( 2 %
)& x #
1 & 2+ 2 #
y∗ 2 ∋ ∃
2 e , pentru cazul 2D
,+
şi:
( x2 −y 2%
) & #
z∗ 1 & 2 +2

#

2 2 e , 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

x2 uk yk
Σ φ

xN θk

Fig. 2.2 Modelul neuronului artificial.

Formula matematică care descrie comportarea neuronului artificial este:


N
y # % (u ∃ ! ) x ∃! ) (2.1)
# %( w
k k k

j#
kj j k

ceea ce se mai poate scrie: 1

N
y k ( ∀ w kj x j ) (2.2)
# % j# 0

cu x0 = -1 şi wk0 = ! k.
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 4 -4 -2 0 2 4 -4 -2 0 2 4 -4 -2 0 2 4
a) Sigmoid b) Treaptă c) Liniară cu saturaţie 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
0,5
-1
x1 -1 1
0,5
0,2
-0,2 y
x2 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).

0 1 2
Input

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 w1 I
T x2 y E
R Ş
Ă I
R θ R
wN E
I xN
-1

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

∃ w#
i!1
i xi ∀ % ! 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 (nT)]= vector de intrare;


(n ),...,
T
w(n) ! [ % (n),w1 (n), w2 (n),...,wN (n)] = vectorul ponderilor sinaptice;
θ(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;
T
b) Calcul răspuns actual: y(n)! sgn[w (n)x(n)] , în care funcţia sgn(.) reprezintă
funcţia signum.
c) Modificarea ponderilor sinaptice: w (n
∋ 1 )! w (n ) ∋ &[ d (n ) ∀ y (n )])x (n )
în care :

∗ ∋ 1 , dac ã x ( n )
+ C1
d( n ! )
)
( ∀ 1, dacãx(n) + C2
d) Incrementarea lui n cu o unitate şi salt la pct.b)
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 wk(0) = 0, k = 1,2, ..., N


b) Etapa de filtrare:
N
y (n
)!
∃w (n) (n)
j
j! 0 x
j

e( n) ! d (n ) ∀ y
(n )
e ( n )x ( n), k ! 1 ,2,..., N
w (n ∋ 1)! w (n
)∋ &
k k 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 T
∀ 1 ),..., x( n ∀ N ∋ 1 )] (3.2)
RNA ADALINE ( Adaptive 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, ..., wN şi %.
- 32 - Aplicaţia nr. 3

x1
w1
x2 y
Σ

wN e
xN Σ
θ

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 SAU-
EXCLUSIV.
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

-2
0 5 10 15 20
Timp

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
xN

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 (n ) ! y (n ) (4.1)
j j

Astfel, suma erorilor pătratice pentru toţi neuronii stratului de ieşire, este:
1
E (n ) # 2
j (n ) (4.2)
∀ 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)
∀! ∋ (4.3)
%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:
Perceptronul multistrat. Algoritmul BP standard - 37 -

& w(n ) ∀ ∋) (n ) y ∀ ∋ [e (n ) ( ∗ (v (n ))] y (n ) (4.4)


(n )
ji j i j j j i

în care ) j (n) reprezintă valoarea gradientului local al erorii iar vj(n) intrarea netă a

neuronului (potenţialul intern de activare).


b) dacă neuronul “j” aparţine stratului ascuns:
& w (n ) ∀ ∋ [ ( ∗ (v
(n )) ) (n )w (n )] y (n ) (4.5)
ji j j
#
k
k kj i

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) ∀ ( ∗ ( v ( n ))
∀( ( w (n )y (n )) (4.6)
j j j
#
i∃ Cl
ji i

! 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 (n )
1 ), ∋) (n ) y (n ) (4.7)
∀ +& w (n !
ji ji 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 in rezolvarea problemei


SAUEXCLUSIV
net = train(net,Pantr,T_XOR);

% 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 200


238 Epochs

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 + Iesire MLP --')
hold off
figure
bar(er*100);
ylabel('Eroare aproximare [%]');
xlabel('Antrenament 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; ... x9=[1 1 1 1 1;


1 0 0 0 1; 1 0 0 0 1;
1 0 0 0 1; 1 0 0 0 1;
1 0 0 0 1; 1 1 1 1 1;
1 0 0 0 1; 0 0 0 0 1;
1 0 0 0 1; 0 0 0 0 1;
1 0 0 0 1; 0 0 0 0 1;
1 1 1 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:
∀ 0
∀ ( n) (5.1)
∃ n
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ă.

2
100 101 102 103
Nr. de epoci

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 ) 1
perf ( w ( k )) , perf ( w ( k ) 1 )
), if
%
∀ ( k) ∃ c∗ ∀ ( k if perf ( w ( k )) + c ∗ perf ( w ( k ) 1 )(5.2)
) 1 ),
∋ 2 3
%& (
∀ k ) 1), altfel
în care coeficienţii au următoarele valori tipice: c1 = 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)).
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 c1 ş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 )
)∃ (5.3)
perf ( n ) 1 )
şi variaţia relativă a p(n):
perf ( n perf ( n ) 1 )
−p ( n ) ) (5.4)
) perf ( n ) 2)

perf ( n
) 1)
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 # 1 )∃ w(n) # ∀(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:
T
g(
. ( n) ∃ n g(n# 1)
# 1 T (5.9)
) g(n)
g(
n)
b) Formula Polak-Ribière:

. ( n) g ( T
[ g ( n # 1 )) g ( n )]
∃ 1 ) (5.10)
n# g T
(n ) g (n )
Î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 / E
∃) ∀ ) ∃) ∀ (5.12)
1 2 ) 1
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
(5.13)
[J J #0 I]
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 = sim(net1,Ptest);
y2test = sim(net2,Ptest);
y3test = sim(net3,Ptest);
y4test = sim(net4,Ptest);
y1antr = sim(net1,P);
y2antr = sim(net2,P);
y3antr = sim(net3,P);
y4antr = 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 -

6 4

3
4
2

2
1

0 0
1 2 3 4 1 2 3 4
traingdm 1 traingdx 2 trainfuzzy 3 trainlm 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

TIP PROBLEMĂ
INTERPOLARE CLASIFICARE
EPM Nr. Timp EPM Nr. Timp
METODĂ [%] 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:

) M &
G! x ∀
2 2
# exp ∋ ∗ x ∃ , i # 1 ,2, M (6.1)
∗ t ∗ t
i 2 i

( d %
î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 (6.2)
+
G fiind pseudoinversa matricii G:
Reţele neuronale bazate pe funcţii radiale - 57 -

G # { g ij } (6.3)

cu:

) M 2&
g ji # exp 2 xj ∗ ti ∃ , i # 1 ,
M , j # 1 ,2, N (6.4)
∋ ∗ 2,
( d %
Conform teoremei decompoziţiei valorii singulare pseudoinversa matricii G
este definită astfel:
+ + T
G #V Σ 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; % numarul total de esantioane calculate


p=50; % 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
0.8
0.8
0.6
0.6

0.4 0.4

0.2
0.2 training values
0 predicted values
0 0.2 0.4 0.6 0.8 1
0
x(n-1) 0 20 40 60 80 100 120

Fig.6.1 Grafice obţinute în urma rulării programului de la punctul 4.1.


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 (wji = 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 (si = -1).
Starea unei RNA-H alcătuită din “N” neuroni este definită de către vectorul:
s = [s1, s2, ..., sN]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
vj ∀
!
i∀1
w ji si # ∃ j (7.2)
în care θj reprezintă pragul neuronului.
Neuronul “j” îşi modifică starea conform regulii:

( + 1 ,dacã v j ∗ 0
sj ∀ ∋ (7.3)
&# 1 , dacã v j ) 0
sau echivalent sj = sgn[vj]. Dacă vj = 0 atunci sj 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:

1 p
w ∀ − − (7.4)
ji N ! ,, j , , i
,∀ 1
Acelaşi lucru poate fi scris în formă matricială astfel:
Reţele neuronale artificiale recurente - 61 -

1 p T p
W ∀ 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
w ji yi # ∃ i ), j ∀ 1 , N (7.6)
∀ 2, ...,
1

sau în formă matricială:


(7.7)
y ∀ sgn( W y # θ )
.
RNA-H cu ponderi sinaptice li se poate asocia aşa-numita funcţie de energie:
1 N N
E
2
!! ji s is 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:


N
0 E
∀ #0 s j
!
i∀ 1
w ji s i (7.9)
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 50 50])
imshow(cifra_zgomot')
truesize(fig3,[200,200]);
title('Imagine cu zgomot')

% 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
wj(0).
- 66 - Aplicaţia nr. 8

Stratul neuronilor de ieşire

w1 wN

x1 Stratul neuronilor de intrare


x2 xN

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 ( n ) ( ) ( n )[ x ∀ w ( n )] , daca j ∋ & )
j j i(x)
w j( n ( 1 ) ! ∃ (8.2)
# 0, altfel
î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


) amplitudinea vecinătăţii
topologice, atunci relaţia (8.2) poate fi rescrisă astfel:
w (n ( 1)! w (n )
( ) (n )∗ ( n )[ x ( n ) ∀ w (n )] (8.3)
j j j, i (x ) j

De regulă η(n), & ( n ) şi ∗ sunt mărimi dinamice, care variază de-a


i (x ) j,i ( x )

lungul epocilor de antrenament:

d 2j, i
∗ j,i ! exp( 2 ) (8.4)
∀ 2
+
Reţele neuronale cu autoorganizare - 67 -

1 n.
) ( n )) 0 exp ∀ (8.5)
!
/ ,
0 21 −
1 n.
+ (n) ! + 0 exp ∀ (8.6)
/ 2 ,
0 2−
în care dj,i reprezintă distanţa de la neuronul “j” la neuronul câştigător “i” iar ) ,+ ,
0 0

21,2 2 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 vechi vechi
j ! p ( B(y ∀ p)
j j j
unde 0<B<<1 şi:
y % 1 , dacã neuronul " j " este câstigator
j ! ∃
# 0,altfel
c) Găsirea noului neuron câştigător, conform mecanismului conştiinţei:

x∀ w ! min( x∀ w ∀ b )
i j j j
- 68 - Aplicaţia nr. 8

unde bj poate fi văzut ca o deplasare de scară (bias); el este definit după cum
urmează:
b 1 1 .
! C/ ∀p,
j
j
0N −
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
u! w ( ) (x ∀ w )
i i i
în care ) reprezintă rata de învăţare a algoritmului SOFM

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):
1 x2 (y2 .
∀/ ,
1 / 2+ 2 ,
z! e
0 −
(8.7)
2 2

∗+
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 -0.5 -0.5
0 0
1 0.5 0.5
1
W(i,1)
position(2,i) 0 0 position(1,i) W(i,2)

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 ( t )
&% R
%1
∃ v xij A ij ,kl v ykl B ij ,kl v ukl !t∀ # I ij (9.1)
!t∀ # ∋ !t∀ #
kl ( N 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| ) (9.2)
)#
yij xij xij xij

În expesiile de mai sus, v ,v ,v reprezintă starea, intrarea şi respectiv


xij uij yij

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 [7]. A şi B reprezintă


ij ij,kl ij,kl

operatori sinaptici de reacţie şi respectiv de comandă iar I ij este curentul celulei (de

regulă invariant în spatiu). Trebuie observat apoi că funcţia f (.) , ce defineşte


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 . Acest ansamblu de
ij,kl ij,kl ij

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 etc. sunt


ij,kl ij,kl
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 & 0 pentru toate
uij 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
v  xij vxij v
v uij
B +
−dt f(.) yij

-1

a 00

Fig. 9.1 Schema functională a unei celule C ij din RNC studiată

v  ( t ) & %v !t∀ # a v ( t !t∀ # I *


, (9.4)
)# B v
xij xij 00 yij

kl ( N
ij , kl ukl ij

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 & v şi în
yij 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 ( a00 spe exemplu) a se
consulta [7].
- 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 v (0) v (∗)


uij yij

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 ,
v
j kl
ukl 0 1,45
kl(N1

5 pixel gri
alb, dacă pentru xij (0) & 0 , ∋
kl( N
Bij,klvukl 1 1,45
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
v (0 ) & v ( [% 1 ,# 1 ] ,

din rel.(9.2) rezultă v (0 ) & v (0 ) xij uij

&v . În aceste condiţii şi având în vedere că


yij xij uij

a 00 & v2 , pentru momentul iniţial t & 0 ecuaţia (9.4) devine:

 (0 ) & v # B v # I (9.5)
xij uij

kl
1
ij , kl ukl ij

Cazul v1: În acest ( N


%1 şi din rel.(9.5) se obţine:
v uij
caz &

xij(0) & %1# 2 ∃ (%1) % 0


kl(N
25 ∋v ukl % 1,45 1 0 , (9.6)
kl.ij

pentru orice valoare a pixelilor din vecinatate: vukl ( [%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 yij (∗)&%1; acest nivel corespunde unui pixel alb, aşa cum se
impune conform cerinţei din Tab.9.1.
Cazul 2: Problema poate fi tratată în mod similar celor prezentate la cazul precedent.
v
Deoarece acum v uij & #1 , relaţia (9.5) devine:

 (0 ) & 1 # 2 ∃ (# 1 ) % 0 ,25 v
% 1 ,45 1 0, (9.7)
xij

kl
∋ ukl

( N
kl . ij
pentru vukl & #1. Integratorul va determina, în consecinţă, un nivel la ieşirea celulei
v
v yij (∗) &%1, corespunzător unui pixel alb.

Cazul3: În aceast caz v


& #1 şi dacă există un v & %1 , atunci:
uij u23

 xij (0 ) & 1 # 2 ∃ ( # 1 ) % 0 ,25 ∃ ( v ukl % 1 ,45 0 0 (9.8)


% 1 ) % 0 ,25 ∋
kl ( N
1
kl.ij, k .23
l
- 78 - Aplicaţia nr.9

pentru orice vukl ( [%1,#1] . Relaţia (9.8) probează regula 3.

Cazul 4: Pentru
v xi (0 ) & 0 , fapt ce implică în acord cu rel. (9.2) v (0 ) & 0 ,
yij
j

rel.(9.4) devine:
v
 (0 ) B v % 1 ,45 (9.9)
xij
& ∋
kl (N
ij ,kl ukl
v
1

Dacă avem acum în vedere că B v 0 1 ,45 , rezulta că  (0 ) 0 0 şi



kl (N 1
ij, kl ukl xij

în consecinţă nivelul la ieşirea celulei corespunde unui pixel negru.


Cazul 5: Se are în vedere rel. v
(9.9), valabilă şi în acest caz.

Condiţia ∋
kl(N
B ij,kl vukl 1 1,45 implică
1
xij(0) 1 0 , fapt ce determină un nivel

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ă
Ieşirea: Y(t) ) Y( ∗), unde Y( ∗) constituie o imagine binară în
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 v (0) v (∗)


uij yij

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 (<matlab>\toolbox\matcnn); se va identifica apoi prezenţa
scripturilor menţionate în ANEXA 1.
Se va deschide şi afişa fişierul <matlab>\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

Imaginea binarizată Muchiile extrase

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. [14]:
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.


- 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 Desenarea Testarea


procedurilor GUI designului

PROIECTARE

STOP Testarea Scrierea


codului 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:
1. Oricărui obiect grafic MATLAB (vezi fig.10.10 pentru totalitatea
obiectelor disponibile) îi este atribuit un identificator unic,
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 10],{'tansig'
'logsig'},fct_antr_sel);
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 Cij, 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 (1
 (t) + (R
v ∃ t% ∗ v ∃ t% ∗ v ∃ t% ∗ I ∗
xij xij &A ij,kl ykl &B ij,
kl ∋ N r kl ∋ N r
kl ukl ij (A1.1)
∗ A ˆ ( ) v) ∗ ˆB ( ) v) ∗ ˆD ( ) v )
&
kl
ij ,kl yy
& ij ,kl uu
& ij , kl

kl kl ∋ N
∋ N r ∋ N r r
iar mărimea la ieşiere ei este dată de relaţia:
vyi (t ) + f (v (t )) + 0 v ( t ) ∗ 1| ( | v ( t ) ( 1| ) , (A1.2)
xij xij
j
5( |
xij

cu notaţiile:
)
+ v ∃ t% ( v ∃ %t
v yy
ykl yiy

)v + v ∃ t%( v ∃ % t (A1.3)
uu ukl uij

)v + v ∃ t%( v ∃ %t
u,x,ykl u,x,yij
Simulatorul analogic de reţele neuronale celulare MATCNN - 97 -

|v (t ) | # 1 , | v (t ) |
#1 , | Iij | # v , 1 # i# M , 1 # j# N
x ij u ij max

În relaţiile de mai sus tensiunile v , v , v reprezintă starea, intrarea şi


xij uij yij

respectiv ieşirea unei celule Cij . În cursul unei operaţii de procesare starea şi ieşirea

variază în timp, pe când intrarea rămâne nemodificată. Prin Nr a fost notată


vecinătatea de raza r a unei celule
C A şi B reprezintă operatori liniari de
ij ij,kl ij,kl

reacţie şi respectiv de comandă iar Iij este curentul celulei (de regulă invariant în
spaţiu).A
ˆ , Bˆ şi Dˆ sunt operatori neliniari
ij , kl ij ,kl ij , kl A care se aplic ă diferenţelor

generalizate )v yy , )v şi respectiv v) . Mai exact, ˆ repezintă operator de reacţie


ij
uu ,kl

comandat prin diferenţă, B ˆ A


este operator de comandă comandat prin diferenţă iar
ij,kl

ˆ este un operator neliniar generalizat (care îl include atât pe


Dij,kl ˆ cât şi pe
ij,kl

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, , + RC reprezintă constanta


de timp a unei celule; în cele ce urmează se va considera R + 1, C + 1 şi deci şi
, + 1 , 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 Cij.
Î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 A şi B şi curentul I al
celulei;

- 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  ∃ t% + ( v ∃ t% ∗
A v ∃ t% ∗ B v ∃ t% ∗ I (A1.4)
xij xij
&
kl
ig,kl ykl
&
kl
ij,kl ukl ij

∋ N r ∋ N r
Forma de reprezentare în biblioteca MATCNN:
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) + ( v ∗ A v ∃ t% ∗ B v ∃ t% ∗ I ∗
∃ t%
xij xij
&
kl ∋ N
ij, kl ykl
&
kl
ij ,kl ukl ij
(A1.5)
∗ r ( ) v) ∋ N r ˆB ( ) v)
ˆ ∗
A
&
kl
ij ,kl yy
& ij , kl uu

kl
∋ N r ∋ N r
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: [ interp p_num x_1 y_1 x_2 y_2 ... x_n y_n intspec]
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.
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 Bij , reprezintă

curentul variant în spaţiu din modelul de RNC ( I + I ∗ B ).


ij ij
Masca M este o imagine binară ( M ij
+ ∗1 sau -1), care specifică dacă o
celulă este activă ( M + ∗1 ) sau inactivă ( M
+ (1 ).
ij ij

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 de unde vor fi extrase template-urile; spre exemplu:


SetEnv; - se setează mediul de simulare MATCNN
TemGroup = 'MyTemLib'; - operatorii sunt extraşi din biblioteca conţinută î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 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 de simulare.
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 TimeStep = 0.2 şi IterNum = 25, conduc la un interval
Simulatorul analogic de reţele neuronale 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 şi IterNum satisfac în situaţiile practice curente. Cu toate 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 reţelei se recomandă utilizarea facilităţilor de procesare (scalări,
modificarea nuanţelor de gri, etc.) oferite de Image Processing Toolbox, din 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ă:


SetEnv - setează mediul MATCNN şi iniţializează variabilele globale
ShowEnv - afişează valorile variabilelor globale din mediul MATCNN
- 108 - Anexa nr.1

ShowTem - afişează template-ul efectiv încărcat în mediul MATCNN


RunTemp - lansează în execuţie template-ul deja încărcat
CNNShow - vizualizează o imagine tip RNC
TemLib - biblioteca implicită cu template-uri a mediului MATCNN

Scripturi şi funcţii diferite


CNN2Gray - converteşte o imagine tip RNC într-o imagine cu nuante de gri
Gray2CNN - converteşte o imagine cu nuanţe de gri într-o imagine tip RNC
CBound - adaugă o frontieră specificată la o imagine tip RNC
CImNoise - suprapune zgomot peste o imagine de tip RNC
LBmp2CNN - încarcă un fişier BMP de pe disc şi îl converteşte într-o imagine tip
RNC
SCNN2Bmp - salvează pe disc, în format BMP, o imagine 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:


tmedian - simuleaza un operator care realizează filtrarea mediană
tmedianh - operator pentru filtrarea mediană, cu aplicaţii în studiul sistemelor cu
neliniarităţi de tip histereză
tanisod - simulează operatorul de difuzie anisotropică
modfilt - operator care implementează filtre 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:
(<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
(<matlab>\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 - "Reţele neuronale. Arhitecturi şi
algoritmi" , Ed.
Politehnica, Timişoara, 2000.
[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.
- 112 - Bibliografie

[14] *** - “Building GUIs with MATLAB ”,ver.5, The MATHWORKS Inc.,
1999.
[15] * * * - "MATCNN. Analogic CNN Simulation Toolbox for MATLAB",
Version 1.0, Analogical and Neural Computing Laboratory, Hungarian Academy of
Science, 1997.
[16] *** - IEEE Transaction on Neural Networks - colecţia anilor 1996-1999.