Documente Academic
Documente Profesional
Documente Cultură
Problematica generala
____________________________________________________________________________________________
(
#
&
((0
1
Exista doua mari clase de sisteme adaptive: "feed-forward" si recurente. Primul caz corespunde unor sisteme fara
reactie in timp ce al doilea caz exista conexiuni de feed-back (reactie) intre iesire si intrare.
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
+ ( 45
4 5 + (
(
4
5
465
4
5 7 (
%
( 3
4 5
(
8 2
) )
.
2
[-1,1])
! 9
* :
3
<
3
< *
< {0,1}
;
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
< {0,1} sau {-0.5, 0.5}
8< =
> ? *
> ?
9 .
( @
3
< @
3
< *
< [-1,1] ( (
( @
( , *
A3
((0 B,
4
5
((
(
(
#
(
! (
(
(
(
( (
(
3
#
DE
#
!
. #
- ) )
# -F
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
( ! #
( 4+5
(
(
B
*
(
- ( (
+ (
!
(
C#
(
#
+
.
C 6
>?
(
( ,**
C ( ( .
(
(
C
=
! C
=
'
%
;
; % ( ;
!
(
C# * !
(
(
4
5
!
4
5
45
(
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
C#
45
45 *
=
- *9@ # -
% #
,
*@
=H""*
=""=
====
====
=D @H
=9I9"
=I"HI
=@D==
="9
====
=* II
= @IH
= "@
=9**D
=I9="
==9=
=9*@H
=*"H
= DID
=HH@I
=D*9=
= 9
= H"
=@"=H
=""D"
=HH"*
<*<@
G
= === = === = ===
= === = === = ===
= === = === = ===
.
.::
( (
7 ( #
.::
.::
(
( (
.:+:G*==.::
2 2 =E
+ (
, ** (
. 5 J (
(
/
(
(
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
'
(
& '
(
' .
(
&
3A G 3A ( G +
3A
(
(
K
(
;
2
}{
(
2 & 22
.
(2
2 BF-
2
12&
&
2
BF- & & 1
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
.
'
<
*
2 (& 1
&
3 .
<
<
+' <
+ * =
C 1
2 < =
7 (/
! %
<
! = * ! + * '
=
2
&
&
! & ( (2
22 " :
(
/
2
2( (
<
=
=
+
+
=
+
**
-
* #$% &
= =
<
N
x k (t ) = wk ,i + wk , 0 + i k (t )
i =1
! 2
1
2
+ * #
&
2 (/
1
7B+ &
'
.
2 1 2 )
) '
#
/
*
,& ( 2 (2 ' '
'
1 2
2
: ( (2
2
'
&
&
& C#2
&
1
*@
(
&
1 - %
# * $ , H (
&
)
) (/
& & %
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
:
1 2 & ' 1
& *9 *H ! 2
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
(2
(2 7B+ 2 .
2
1 2 2
' & (2
2 2
1/(
%
2 (2
&
2 '
2
= = =
=
$
/
(
( !C. - '
( '
"
&
&
2 '
! 2
1 (
BF- ' 2
/
,+A
++A %
2 1
2
BF-
2 1
(
12& ( 2
/
' '
2 2 2
! 2
&
&
& 1 2 ' '
&
$ & 2 (2 (
2
2 &
)()
#
(2
!'
(
2
-B. 2/ '
( ! 2
1 2 ) %)
/
BF-
/
2
# 1 ( 2
2
C
2
(2 !
%
$% &'(
:
/
#$%'
( <
7
# & < ( 2
&
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
7 2
< wT , S (t ) '
&
2
< wT , S (t ) = wT , S (t ) wT , S (t 1)
<
xT (t ) = wT , S (t ) y S (t )
,&
1
1 7B+ 2
2 (
2
& '
( 2 $ 2
#
22
& ( (
1 2 2 9 ( -8
2
( 7 2
# 2
1
2<
xT (t ) = wT (t ) Y (t ) + wT , 0
wT (t ) = (wT ,1 (t ) wT , 2 (t ) . . wT , N (t ) )
* '
&
B
12&
( 1
( ( 2
12&
(t ) = 0 = constant :
2
2
12& ' (2
' 1
8 2
12&
2 (2
' 2 2
2
/
( (2
12&
)
)
,& +
'
2
12&
-&2 9
( 2 2
2
12&
( 1
1
1
#<
lf (eT (t ), xT (t ), y S (t )) = eT (t ) f T' ( xT (t )) y S (t )
*
lf (eT (t ), xT (t ), y S (t )) = yT (t ) y S (t )
'
T =0
*D
'
#
2 2 ( 2
2
!
1
*H
2
- 2
#2 &
#2 1
2
& :
#
& 2
2
& 122
2 #2 9
)
/' ) )
)
!
C
& 2
12&
&
( 7B+ ( (
&
1
2 &/
& 1 # 2
! &
! ) %)
< #
!
&
#
BF-
< W (t ) = {wT , S (t )}
T =1,.. N ; S =1,.. N
7 & 2
< W (0) = {wT , S (0)}T =1,.. N ; S =1,.. N
<
(t ) = {wT , 0 (t )}T =1,.. N ' & (0) = {wT ,0 (0)}T =1,.. N
F- ' & <
X (t ) = ( x1 (t ), x 2 (t ),....x N (t ) ) T X (0) = ( x1 (0), x 2 (0),....x N (0) ) T
& & 2 1
2 <
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
i1 0
0
i2
I = 0 0
0 0
0 0
0
0
0
0
i N
unde : iq = 1 daca neuronul q apartine stratului de intrare
0 0
0 0
. 0
0 iq
0 0
iq = 0 in caz contrar
& & '
2
2 (
&
F- '
BF- 1 ( 1
2
&
X (t ) = W (t ) Y (t ) + (t ) + I in(t )
*I
C &
& FwT , S (t ) = lf (eT (t ), xT (t ), y S (t )) + T wT , S (t , U )
T = 1,..N ; S = 0,...N
12&
BF-
*"
&2
#
' )()
'
&2 /2 2
' ( 1 2
&
%2
(
2 &
)#) L% H
.
'
&2 ,
2 &2
2
$
& 2 ( (2
&
!
2 & 2
-B. 12
#2 1 #
'
=
+
2 #
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
Matlab este un produs al firmei Mathworks si este un limbaj de tip interpretor, algoritmii
inplementati in matlab vor rula mai lent decit daca ar fi fost implementati intr-un limbaj compilabil
(C, Pascal, e.t.c. ) Acest dezavantaj este compensat in principal prin:
1) Rapiditatea deosebita cu care pot fi dezvoltate programe, in special datorita setului bogat de
functii predefinite sau care pot fi ulterior definite de utilizator. A devenit o practica uzuala aceea ca
diferite grupuri de cercetare sa dezvolte pachete de functii si aplicatii Matlab care rezolva probleme
specifice unui anumit domeniu. Astfel de tool-box-uri au fost dezvoltate pentru retele neurale
('Neural Networks Toolkit'), sisteme cu logica fuzzy ("Fuzzy logic"), prelucrarea imaginilor ("Image
processing toolkit") prelucrarea semnalelor ('Signal Processing') s.a.m.d. Informatii utile despre
produsele software Matlab (inclusiv pachte free-ware) pot fi gasite la adresa firmei producatoare
http://www.mathworks.com/ .
La adresa: http://www.math.iastate.edu/docs/matlab/matlab_primer.pdf se gaseste un document
elaborat de un grup universitar de cercetare (in limba engleza) care expplica in detaliu functiile de
baza si filozofia programarii in Matlab.
2) Prin utilizarea extensiva a operatiilor matriciale. Nu trebuie uitat ca denumirea MATlab provine
de la MATRIX laboratory si nu de la Mathematics cum s-ar putea crede la prima vedere. De altfel,
orice variabila Matlab este interpretata ca o matrice, toti operatorii si functiile de baza fiind
conceputi pentru a lucra cu matrici. De aceea, viteza de lucru a programelor Matlab poate fi
substantial imbunatatita daca se tine cont de acest principiu.
3) Facilitatile deosebite in ceea ce priveste interfata cu utilizatorul. Acestea se manifesta in principal
prin:
a) Existenta unui set de functii care permit vizualizarea grafica a informatiei intr-o multitudine si
varietate de formate. Pentru detalii tastati help graphics. De exemplu, se pot afisa grafice (plot)
in 2 sau 3 dimensiuni, exista facilitati pentru scalarea automata a datelor afisate si se pot reprezenta
in acelasi grafic mai multe semnale simultan. Reprezentarile 3D, foarte sugestive precum si hartile
de contur sunt instrumente de vizualizare usor accesibile in Matlab si care simplifica foarte mult
procesul de interpretare a diferitelor rezultate.
b) Existenta unui set de functii I/O prin intermediul carora este facilitat acccesul la date sub forma
de fisiere. Se poate astfel realiza rapid si in ambele sensuri conversia informatiei intre fisiere de
date si variabile Matalb. O parte din functii pastreaza sintaxa si denumirea functiilor echivalente C
( ex. FOPEN, FSCANF, FCLOSE e.t.c. )
c) Interactivitate prin utilizarea comenzii help
Matlab este un limbaj care poate fi invatat 'din mers' prin utilizarea extensiva a comenzii help cu
sintaxa: HELP <nume comanda> . La inceput este recomandabil sa tastati doar HELP. Veti obtine
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
pe ecran lista tuturor subdirectoarelor catre care sunt setate cai (path) iar in dreptul fiecaruia o
descriere sumara a categoriei de comenzi matlab careia ii este destinat subdirectorul respectiv. Daca
in continuare tastati de exemplu HELP GENERAL veti obtine o lista a tuturor comenzilor Matlab
de uz general. De exemplu tastind HELP HELP (cu litere mici pe calculator) obtineti informatii
despre comanda HELP. Este interesant de mentionat faptul ca Matlab permite extinderea facila a
comenzii HELP si la functiile sau comenzile Matlab definite de utilizator. Astfel, este suficient sa
includeti in lista de cai subdirectorul in care se gaseste comanda definita de utilizator (vezi HELP
PATH) pentru ca la tastarea HELP MY_OWN sa obtineti afisat pe ecran primul cimp de comentarii
al fisierului (text) MY_OWN.M . De altfel unul din principiile ingineriei software cere ca orice
modul functional (este si cazul functiilor/comenzilor Matalab) sa fie comentarizat .
Interactiunea cu sistemul de operare, editarea si salvarea noilor fisiere *.m
Este convenabil sa va construiti un fisier env.m pe care il lansati in fiecare sesiune de lucru . Acest
fisier va contine citeva comenzi privind setarea cailor si altor elemente ale mediului in care doriti
sa lucrati (fonturi, culori e.t.c). Fisierele .m pot fi editate cu orice editor (de exemplu cu cel al
programului Norton Commander, daca se lucreaza in sistemul de operare DOS). Daca se lucreaza in
MS-Windows se pot edita noi fisiere utilizind comanda : !notepad nume.m &
Notepad este numele unui proces Windows care permite editarea in background (in paralel cu alte
procese) a fisierului nume.m . Semnul ! poate fi utilizat ori de cite ori doriti sa lansati procese DOS
sau Windows din Matlab iar & indica faptul ca procesul va fi executat in background. Incep/
-
(
)
) # (
# (
Comenzi si functii in Matlab
Orice fisier .m poate este considerat de interpretorul Matlab ca o secventa de comenzi. Din acest
motiv fisierele .m trebuie sa contina comenzi Matalab corecte din punct de vedere sintactic si
comentarii. Un comentariu este orice secventa de caractere care se gaseste la dreapta caracterului
% pe o linie a fisierului nume.m . Liniile vide sunt sarite de interpretorul Matlab. Daca prima
linie (necomentarizata) respecta sintaxa:
function [lista_nume_var_iesire]=nume_fun(x1,x2, ...xn)
fisierul respectiv reprezinta o functie. Un modul functional se deosebeste de o simpla secventa de
comenzi prin faptul ca schimbul de informatie cu celelalte module se face numai prin intermediul
variabilelor de intrare si iesire. Orice variabila creata in interiorul unui modul functional are o durata
limitata la maximum durata de executie a modulului respectiv.
Pe parcursul experientelor urmatoare, toate functiile Matlab cu exceptia celor principale se
gasesc localizate in subdirectorul "LOC_LIB". Functiile principale corespund diverselor experiente,
ele apeleaza functii sau date din alte subdirectoare si sunt localizate in subdirectoarele L1 .. LN,
corespunzand capitolelor 1..N. Fisierele care contin patternuri (esantioane de antrenare/test) se
gasesc localizate in subdirectoarele "Patterns/Cls" pentru probleme de clasificare si respectiv
"Patterns/Sig" pentru problemele de predictie a semnalelor. Pentru ca functiile auxiliare si datele sa
poata fi apelate fara specificarea de fiecare data a caii, la inceperea unei sesiuni de lucru in Matlab
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
este utila apelarea functiei SETPATH, fisierul asociat acesteia (SETPATH.M) fiind localizat in
subdirectorul "KIT_FILES" corespunzand tuturor fisierelor care corespund implementarilor
informatice descrise in aceasta lucrare. In functie de structura sistemului de fisiere de pe calculatorul
dvs. se va edita corespunzator variabila "root" din fisierul de comenzi SETPATH.M.
Variabile si structuri de date
Experienta : Introduceti liniile urmatoare (mai putin comentariile) in modul "linie de comanda" din
interpretorul Matlab. Urmariti si comenatriile din text.
i=1:4
% Am construit matricea i cu 4 elemente avind valori consecutive
% Obs. Orice matrice poate fi folosita ca index cu conditia ca elementele
% ei sa reprezinte valori numerice acceptabile ca index (intregi mai mari ca 0)
cod=[1 4 3 2]
i(cod)
5-i
cod(5-i)
% Rezultatul codarii prin permutare. Atentie la scaderea dintre un scalar si o matrice
% Rezultatul a fost automat converit la forma matriciala (1 linie x 4 coloane)
j=[2 -4 3 4.5]
% Un alt mod de a defini o un vector linie (de fapt matrice de dimensiune 1 x 4 )
sin(j(1))
sin(j)
sin(j([1 3]))
sin(j(1:2))
% Si rezultatul aplicarii unei functii. Observati ca functia se aplica tuturor elemetelor
% matricei utilizate ca argument. Acesta este cazul majoritatii functiilor (cele documentate
% prin HELP ELFUN sau HELP SPECFUN) . Exista insa si functii speciale care actioneaza asupra
% argumentului(lor) matriciale producind iesiri cu alte dimensiuni
% Un exemplu il constituie functiile MIN MAX MEAN COV :
min(j)
max(j)
%-----------------------k=3
k=[k 1]
k=[k 2],
k=[k;k],
% O modalitate recursiva de a construi matricea k prin adaugarea unor noi linii (,) sau coloane (;).
k=k'
% Si utilizarea operatorului de transpunere "'"
sz=size(k);
sz,
% Asa se poate afla dimensiunea (nr linii nr coloane) a unei matrici
nume='numele_meu';
size(nume)
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
n=100;
% 100 de intrari
x=2*(rand(1,n)-0.5);
% fiecare componenta a lui x este un numar aleator cuprins intre -1 si +1.
w=2*(rand(1,n+1)-0.5);
Solutia A:
O posibilitate de rezolvare (asa cum se va vedea mai putin eficienta), presupune utilizarea buclelor
iterative FOR si corespunde executarii urmatoarei succesiuni de comenzi Matlab:
[dm n]=size(x);
% Determina dimensiunea vectorului x, respectiv n care este egal cu numarul de coloane
v=w(1);
% Initializeaza variabila de stare "v" a neuronului cu valoarea pragului, w0
for i=1:n v=v+w(i+1)*x(i); end;
% Calculeaza variabila de stare in conditiile vectorului stimul x si al ponderilor grupate % in vectorul w
y=sign(v),
% Determina si afiseaza iesirea y a neuronului prin aplicarea functiei neliniare "sign" (predefinita in % Matlab)
Secventa de mai sus se poate executa linie cu linie, sau se poate edita cu orice editor de texte
(de exemplu NOTEPAD) si salva sub forma unui fisier de comenzi, cu extensia .M.. Salvati
secventa de mai sus sub numele NEURON.M In cazul din urma, comenzile se executa ori de cate ori
este invocata comanda "NEURON" in fereastra de comenzi Matlab.
In ambele cazuri insa,
variabilele asupra carora se executa modificarile sunt variabilele globale ale sistemului. La orice
moment se poate afla ce variabile globale sunt in uz, prin tastarea comenzii WHO in linia de
comanda Matlab. Pentru a scadea gradul de ocupare al memoriei, variabilele globale se pot dealoca
din memorie. De exemplu, comanda CLEAR x; va dealoca (elimina) variabila vectoriala x.
Comanda CLEAR ALL va elimina (dealoca) toate variabilele globale.
O modalitate mai eleganta de a executa secvente de comenzi fara modificarea variabilelor
globale este prin definirea unei secvente de comenzi ca functie. In acest caz, toate variabilele care nu
sunt intrari sau iesire sunt variabile locale functiei si se aloca numai pe durata invocarii acesteia.
Pentru a obtine functia NEURON1, este necesar ca la secventa anterioara sa se adauge (ca prefix)
linia :
function y=neuron1(x,w)
Fisierul rezultat se salveaza sub numele NEURON1.M si constituie o functie Matlab. Mai multe
detalii despre sintaxa functiilor Matlab se pot obtine tastand HELP FUNCTION. Apelul noii functii
se va face prin comanda: y=neuron1(x,w);
Se poate evalua timpul necesar evaluarii functiei neuron1 cu urmatoarea secventa de comenzi, unde
TIC si TOC sunt comenzi Matlab pentru pornirea si respectiv oprirea unui cronometru:
tic; for i=1:1000 y=neuron1(x,w); end; toc
Functia care ne intereseaza a fost inclusa intr-un ciclu pentru a creste precizia determinarii timpului.
Notati valoarea obtinuta (de ex. 5.5 ) dat fiind numarul de 1000 iteratii rezulta ca durata de evaluare
a functiei neuron1 este de 5.5 milisecunde.
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy
Solutia B:
In acest caz, se tine seama de caracterul orientat matricial al limbajului Matlab, cautandu-se
eliminarea ciclurilor FOR; Aceata abordare are ca efect compactizarea programului si scaderea
dramatica a timpului de executie. In acest sens se defineste functia NEURON2, care este din punct
de vedere al relatiilor intrari-iesiri echivalenta functiei NEURON1:
function y=neuron2(x,w)
y=sign([1 x]*w');
In locul sumarii iterative se foloseste operatia de produs scalar intre vectorii [1 x] (vectorul x la care
s-a adaugat elementul 1 pentru a inmulti valoarea prag w0) si transpusul vectorului w, exprimat in
sintaxa Matlab ca w'. Sa se determine timpul de evaluare pentru noua functie, prin utilizarea
comenzii:
tic; for i=1:1000 y=neuron1(x,w); end; toc
Se va compara cu timpul obtinut pentru functia anterioara. Se constata o reducere de peste 10 ori a
timpului de evaluare ! Explicatia este aceea ca iteratiile corespunzatoare buclei FOR din functia
NEURON1 sunt executate in regim de interpretor (se evalueaza sisrurile de caractere si se decide in
functie de acestea de comenzi se vor executa) cu un consum ridicat de timp, in vreme ce functia
NEURON1 apleleaza la functii "built-in" Matlab cum ar fi inmultirea vectoriala, in acest caz
iteratiile fiind deja codate in cod masina si deci executate la viteza maxima pe care o permite
microprocesorul sistemului pe care se executa programul.
________________________________________________________________________________________
Radu DOGARU, Ovidiu GRIGORE - Sisteme Neurale si cu Logica Fuzzy