Retele Neuronale

Aplicație Matlab orientată obiect destinată parametrizării rețelelor neuronale

Introducere

Tema acestei lucrării este “Aplicație Matab orientată obiect destinată parametrizării rețelelor neuronale”.

Având ca model structura și funcțiile specifice organismelor vii (creierul), cibernetica a încercat o simuare a lor, prin realizarea de rețele neuronale artificiale.

Multe din preocupările ce își caută rezolvare în mediile universitare științifice, dar și în mediile inginerești își găsesc rezolvare în rețelele neuronale artificiale (RNA), rețele care reprezintă paradigme ale inteligenței artificiale.[1]

Capacitatea cea mai importantă a rețelelor neuronale este de a învăța din exemple și este elementul care determină succesul modelelor conexioniste. Etapele pentru rezovarea problemelor trebuie să pornească de la analiza și sinteza problemei respective. Se elaborează un model lingvistic, logic, matematic care să indice succesiunea de operații logice care să reprezinte algoritmul rezolvării problemei, care să ducă la generaizare. Nu este posibilă totdeauna stabilirea unui algoritm din cauza compexității unor probleme practice. Calculatorul traditional, indiferent de resurse (memorie și viteza de calcul) nu oferă rezolvarea unor astfel de probleme.

Rețelele neuronale sunt capabile să sintetizeze un model de rezolvare pornind de la mai multe exemple, construind singure algoritmul necesar rezolvării unei probleme dacă i se furnizează o multitudine reprezentativă de cazuri particulare (exemple de instruire).

Aidoma inteligenței biologice care se dobândește prin-un proces continuu și de lungă durată de învățare, inteligența artificială ocupă un loc important în cercetarea și dezvoltarea mașinilor auto-instruibile (machine learning).[2]

Lucrarea este structurată pe trei capitole.

În primul capitol descriem generalitățile rețelelor neuronale, am început spunând că o rețea neuronală artificială este o structură compusă dintr-un număr mare de procesoare elementare interconectate care operează în paralel, în vederea îndeplinirii unei sarcini specifice. Am continuat acest capitol prezentând neuronul artificial, care este denumit câteodată procesor elementar, sau nod, pentru că încearcă să imite structura și funcționarea neuronului biologic.[3] Tot în acest capitol am vorbit despre rețelele neuronale care se împart în două categorii principale din punctul de vedere al construcției lor: rețele feed forward si retelele recurente și am încheiat cu etapele utilizării unei rețele neuronale artificiale. [4]

În al doilea capitol am vorbit despre clasificarile rețelelor neuronale în funcție de diferite criterii de aplicabilitate. În acest subcapitol am prezentat o clasă foarte importantă de rețele neuronale artificiale de tip feedforward, cu propagare înainte a semnalului. Este vorba de perceptronul simplu și perceptronul multistrat.[5] Tot aici am vorbit și despre rețelele neuronale bazate pe funcții radiale, rețeaua neuronală Hopfield și rețeaua neuronală Kohonen.

În continuare am scris despre domeniile de aplicabilitate ale rețelelor neuronale. Am prezentat aplicații ale calculului neuronal, cum ar fi comprimarea datelor, recunoașterea caracterelor, recunoașterea formelor, probleme combinatoriale, modelare economică și financiară, servo-control, teoria aproximării. Din studierea literaturii de specialitate în domeniul aplicativ al rețelelor neuronale, se găsesc aplicații în toate domeniile activității umane.

În cel de-al treilea capitol am prezentat aplicația Matlab realizată. La începutul capitolului am vorbit despre mediul de dezvoltare Matlab / Guide. Acest soft oferă atât oamenilor de știință cât și inginerilor și tehnicienilor chiar și persoanalului nespecializat un sistem interactiv și unitar ce incude vizualizări științifice și calcule numerice sprijinind astfel creativitatea și creșterea productivității.[6]

În continuare, am prezentat aplicația, care este împărțită în două părți distincte. În prima etapă am configurat rețeaua, iar în cea de a doua etapă am testat rețeua construită pentru a apoxima o funcție. În prima etapă am definit arhitectura rețelei, în care am introdus numărul de intrări și de ieșiri, numărul de straturi. Tot aici, în prima etapă, am antrenat rețeaua cu un anumit algoritm de antrenare și am introdus numărul maxim de epoci dorit. În a doua etapă, am testat rețeaua construită pentru a configura o funcție, dând coeficienții funcției, și am validat rețeaua, calculând eroarea de aproximare.

Rețelele neuronale

Rețele neuronale- generalități, modelarea neuronului artificial

Rețele neuronale artificiale sunt definite ca un sistem de procesare a semnalelor, alcătuit dintr-un număr mare de procesoare elementare interconectate, denumite neuroni sau noduri care pot coopera în vederea găsirii de soluționare a unor sarcini specifice. Condițiile specifice mediului determină modalitatea de adaptare și determină modificarea ponderior asociate legăturilor (conexiunilor) realizate între neuroni și structura rețelei neuronale artificiale.[7]

Informația este memorată difuz în toate rețelele neuronale spre deosebire de calculatoarele standard, în care informația este memorată în zone bine precizate. Memorarea informației din rețelele neuronale se realizează stabilind valori corespunzătoare ale ponderilor conexiunilor sinaptice dintre neuronii rețelei.

Prin utilizarea unor mulțimi de date de instruire se realizeză învățarea automată ce reprezintă sisteme capabile să-și îmbunătățească performanțele.

Pentru că sistemele cu inteligență artificială obișnuite nu au capacități de invățare prea bune, cunoașterea în cadrul acestor sisteme, trebuie programate din interior. În cazul în care sistemele conțin o eroare, indiferent de câte ori se execută procedura respectivă, sitemele nu o pot corecta, pentru că ele nu iși pot îmbunătăți performanțele prin experiență și nu pot folosi cunostințele specifice domeniului prin experimentare.

În contrast, sistemele cu inteligență artificială, fiind sisteme deductive pot găsi soluții prin cunoașterea stocată sau furnizată dar nu pot să genereze singure noi cunostinte (informatii).[8]

Aceste modele conexioniste prezintă o parte din avantajele specifice sistemelor neuronale biologice, avantaje care nu sunt întâlnite la sistemele de calcul secvențiale.

Avantajele rețelelor neuronale artificiale:

-Posibilitatea de a se adapta și învăța;

-Capacitatea de a putea opera cu date imprecise;

-Capacitatea de generalizare, rețelele neuronale putând să opereze corect chiar dacă datele de intrare nu au fost utilizate în timpul procesului de antrenament;

-Rețele neuronale oferă sisteme tolerante la erori, fapt datorat nivelului mare de paralelism, chiar și atunci când are loc o funcționare defectuoasă, sau când, din diferite motive, se pierde un număr de neuroni;

-Capacitatea de aproximare a oricărei funcții continue neliniare cu un grad ridicat de acuratețe. Această caracteristică oferă posibilitatea folosirii cu bune rezultate în modelarea sistemelor neliniare. [9]

1.1.1 Modelul neuronului artificial

Neuronul artificial

Neuronul artificial este denumit câteodată procesor elementar, sau nod, pentru că încearcă să imite structura și funcționarea neuronuui biologic. Cel mai răspândit model pornește de la modelul elaborat în anul 1943 de către McCulloch-Pitts. Conform acestui model, neuronul artificial este alcătuit dintr-un anumit număr de intrări, fiecare intrare având propria pondere sinaptică.

Figura .1- Structura neuronului biologic [10]

Figura 1. – Modelul neuronului artificial [11]

Sumatorul destinat însemnării intrărilor ponderate este o altă parte componentă a modelului neuronului artificial, model ilustrat în figura de mai sus.

Rezultatul căpătat în urma însumării:

(1)

este supranumit intrare netă.

Semnalul de ieșire al neuronului, pentru limitarea amplitudinii, este întrevăzut cu o funție de activare :

(2)

în care indică treshold (valoarea pragului de activare neuronală). Adesea, intrarea netă este mărită prin termenul denumit factor al deplasării scării (bias), reprezentând negativul pragului de activare.

Valoarea:

(3)

se numește potențial de activare.

Funcția de activare este frecvent o funcție neliniară. Cele mai importante funcții de activare:

-Funcția prag:

(4)

-Funcția prag simetrică (funția signum):

(5)

-Funcția sigmoid:

(6)

-Funcția tangentă hiperbolică:

(7)

Cele mai des folosite funcții de activare la impementarea unei rețele neuronale, sunt funcțiile tangentă hiperbolică și sigmoid. Unul din motive, este calculu simplu al derivatelor acestora.

-Funcția liniară:

(8)

-Funcția liniară cu saturație:

(9)

-Funcția liniară cu saturatie, simetrică :

(10)

-Funcția gaussiană:

(11)

Figura 1. – Funcții de activare tipice [12]

Comparând modelul neuronului biologic cu cel artificial putem concluziona că:

-Arhitectura și trăsăturile rețelelor neuronale artificiale depind de problemele pe care le are de rezolvat și de aceea sunt proiectate pentru rezolvarea problemelor specificate.

-Neuronul real produce la ieșire, o secvență de impulsuri, spre deosebire de cel artificial care produce o anumită valoare. Reprezentarea ratei de activare (valoarea) printr-un singur număr (), face ca informația care ar fi putut să fie conținută de acel exempu, în faza impulsurior, să fie ignorată.

-Anumite celule nervoase biologice realizează o însumare neliniară a intrărilor, fiind posibilă existența operațiilor logice (ȘI, SAU, NU), operații logice realizate la nivelul dendritelor.

-La nivelul ieșirii neuronilor se constată că nu există o modificare a modului sincron, și faptul că nu toți neuronii au același tip de întârziere.

-Pentru că mediatorul chimic (cantitatea de substanță transmițătoare) eliberat la nivelul sinapsei poate să varieze imprevizibil, pentru neuronul artificial. Acest fenomen este aproximat prin intermediul funcției de activare.

1.1.2 Arhitecturi ale rețelelor neuronale artificiale

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.

În funcție de posibilitațile de calcul necesare și de problemele ce trebuie rezolvate exită o varietate de structuri de rețele. În acest caz rețeaua neuronală este privită ca un graf orietat în care neuronii sunt nodurile, iar arcele orientate, sunt legăturile dintre neuroni. Rețelele neuronale se împart în două categorii principale din punctul de vedere al construcției lor: rețele feed forward si retelele recurente.

Rețele neuronale artificiale cu propagare înainte a semnalului (feedforward)

În acest caz, câmpul receptiv al unui neuron, provine doar din stratul sau straturile inferioare celui din care face parte neuronul. Rețelele feedforward pot fi total sau parțial conectate.

În cazul în care anumite conexiuni sinaptice lipsesc, se spune că rețeaua neuronală artificială este parțial conectată. Rețelele neuronale total conectate au un caracter general, putând fi folosite pentru rezovarea unui spectru larg de probleme, exitând, uneori, rezultate necorespunzătoare.

Rețeua neuronală artificială parțial conectată introduce anumite restrângeri care vizează chiar cunoștințele apriorice în legătură cu problema de rezovat, reducând și gradul de generalitate al unei rețele neuronale. Are loc o extragere a trăsăturilor locale, iar în straturile ce urmează, acestea sunt combinate formându-se trăsături de ordin superior.Putem concluziona faptul că rețelele neuronale artificiale parțial conectate pot oferi rezultate mai bune decât rețelele neuronale artificiale total conectate.

Figura 1. – Rețea neuronală artificială feedforward total conectată [13]

Figura 1. – Rețea neuronală artificială feedforward parțial conectată [14]

Rețele neuronale artificiale recurente (feedback)

Rețele neuronale artificiale recurente se caracterizează prin existența unui semnal de reacție, din partea neuronilor straturilor superioare, pentru neuronii straturilor inferioare, sau, semnalul de reacție poate să provină de la ieșirile neuronilor aceluiași strat.[15]

Figura 1. – Rețea neuronală artificială recurentă [16]

Arhitecturi de rețele neuronale

Etapele de parcurs in definirea/ utilizarea unei retele neuronale :

Pentru a realiza o aplicație concretă, trebuie să luăm în considerare următoarele etape:

-Alegem tipul de rețea neuronală;

Practic, cele mai utilizate rețele neuronale sunt de tip perceptron multistrat (MLP), care folosesc algoritmul de antrenare, backpropagation.

-Alegem intrările (numărul și tipul intrărilor);

Alegerea intrărilor, în general, este o problemă destul de dificilă. Există o regulă empirică pentru alegerea intrărilor, aceasta spune: ”cu cât există mai multe date, cu atat mai bine”. Această regulă se folosește și la numărul de intrări, cât și la numărul de șabloane de antrenare. Se pot folosi două tipuri de intrări pentru rețelele neuronale:

-intrări booleene; Acestea se mai numesc și intrări binare și sunt de tip TRUE/ FALSE;

-intrări analogice; Aceste intrări pot lua valori continue, între o valoare de minim si una de maxim;

Majoritatea rețelelor care pot rezolva probleme reale, au și intrări binare și intrări analogice. Ambele tipuri de intrări, pot afecta performanțele rețelei.

-Alegem numărul ieșirilor;

Numărul ieșirilor, în general, este impus de aplicție. Numărul neuronior de ieșire trebuie să fie egal cu numărul claselor distincte pe care ar trebui să le recunoască rețeaua.

-Alegem numărul de straturi ascunse și numărul de neuroni din ele;

Nu este nici o formulă după care ar trebui să calculeze numărul de neuroni de pe un strat ascuns. Se determină experimental acest număr.

-Antrenarea rețelei;

Pentru ca procesul de antrenare să fie simplificat, un simulator, trebuie să permită rețelei antrenarea în trepte. Prin această metodă, de antrenare în trepte, rețelele neuronale generalizează mai bine și converg mai rapid. [17]

1.3 Concluzii

În acest capitol am prezentat rețele neuronale artificiale, care sunt definite ca un sistem de procesare a semnalelor, alcătuit dintr-un număr mare de procesoare elementare interconectate, denumite neuroni sau noduri care pot coopera în vederea găsirii de soluționare a unor sarcini specifice. Condițiile specifice mediului determină modalitatea de adaptare și determină modificarea ponderior asociate legăturilor (conexiunilor) realizate între neuroni și structura rețelei neuronae artificiale.

În subcapitolul 1.1 am scris despre neuronul artificial, care este denumit câteodată procesor elementar, sau nod, pentru că încearcă să imite structura și funcționarea neuronului biologic. Cel mai răspândit model pornește de la modelul elaborat în anul 1943 de către McCulloch-Pitts. Conform acestui model, neuronul artificial este alcătuit dintr-un anumit număr de intrări, fiecare intrare având propria pondere sinaptică. Am prezentat și cele mai importante funcții de activare, cum ar fi: funcția prag, funția prag simetrică, funcția sigmoid, funția tangentă. Tot în acest subcapitol am scris despre rețelele neuronale că se împart în două categorii principale din punctul de vedere al construcției lor: rețele feed forward si retelele recurente.

În utimul subcapitol am vorbit despre etapele de parcurs in definirea/ utilizarea unei retele neuronale. Acestea sunt:

-Alegerea tipului de rețea;

-Alegerea intrărilor;

-Alegerea ieșirilor;

-Alegerea numărului de straturi ascunse, numărul de neuroni din ele;

-Antrenarea rețelei;

Principalele tipuri de retele neuronale

Clasificari ale rețelelor neuronale în funcție de diferite criterii de aplicabilitate

În acest subcapitol prezentam o clasă foarte importantă de rețele neuronale artificiale de tip feedforward, cu propagare înainte a semnalului. Este vorba de perceptronul simplu și perceptronul multistrat (Multilayer Perceptron), care este o extensie a perceptronului. Cei care au fundamentat principiile teoretice despre perceptronul simplu și multistrat sunt Rosemblatt *, Windrow * , Rumelhart, Williams și Hinton *. Ultimii autori enumerați au fundamentat celebrul algoritm de antrenament pentru rețeaua neuronală Multlayer Perceptron, și anume algoritmu backpropagation, algoritmul de propagare înapoi a erorii.

2.1.1 Rețea neuronală de tip perceptron

Dacă funcția de activare ar fi de tip treaptă unitate, putem spune că perceptronul simplu este o particuarizare a modelului Mc.Culloch-Pitts al neuronului artificial. Arhitectura acestei rețele este prezentată în figura următoare.

Figura 2.1 – Arhitectura perceptronului simplu

Scopul acestui de tip de rețea neuronală este clasificarea în una din cele două clase disponibile. .

În următoarele ecuații este descrisă funcționarea:

(12)

(13)

Un hiperplan, definit de relația următoare, va separa regiunile de decizie.

(14)

În concluzie, perceptronul simplu, este folosit cu succes doar într-un caz particular, al clasificării tiparelor liniar separabile(tipare care sunt situate pe o parte și pe cealaltă a unui hiperplan).

2.1.2 Perceptronul multistrat (MLP-Multilayer Perceptron)

Perceptronul multistrat (rețea neuronală de tip perceptron, cu mai multe straturi) este o generalizare a perceptronului prezentat mai sus. Această rețea neuronală artificială este de tip feedforward, adică cu propagare înainte a semnalului și este compusă din:

Un strat de intrare;

Unul sau mai multe straturi ascunse;

Strat de ieșire.

Figura 2.2 – Perceptron cu două straturi

Primul strat al perceptronului multitrat, cuprinde neuroni vituali, care efectuează doar o multiplexare, nu o prelucrare de semnal, prelucrarea propriu-zisă are loc în stratul intermediar, și în cel de ieșire. [18]

2.1.3 Rețele backpropagation (perceptroni multi-nivel)

Rețelele backpropagation sunt rețele neuronale, cu activare directă, care sunt formate din unul sau mai multe straturi de noduri, între nodurile de intrare și cele de ieșire. Aceste straturi suplimentare înfățișează nivelele ascunse ale perceptronilor multi-nivel. [19]

Acestă rețea a fost introdusă pentru prima dată, de G.E.Hinton, R.J.Wiliams și E.Rumelhart în anul 1986 și este una din cele mai puternice tipuri de rețele neuronale.

Structura rețelei de tip backpropagation este asemănătoare cu cea a rețelei de tip Multilayer Perceptron, doar că folosește un algoritm de antrenare diferit, și anume backpropagation.

Figura 2.3 – Arhitectura reței backpropagation [20]

2.1.4 Rețele neuronale care se bazează pe funcții radiale

O altă abordare caracteristică a modului în care se realizează o rețea neuronală artificială este abordarea ca o problemă de aproximare a unei curbe în plan multidimensional. În acest caz, învățarea este echivalentă cu aflarea unei suprafețe situate într-un spațiu multidimensional care să corespundă cu cea existentă în datele de intrare. În acest caz, generalizarea rețelelor neuronale artificiale care se bazează pe funcții radiale (RBF – ”Radial Basis Function”) scoate în evidență capacitatea de interpolare a rețelelor neuronae artificiale a datelor de intrare.

Astfel, rețelele neuronale artificiale solicită mai mulți neuroni, însă, antrenarea acestora necesită o perioadă de timp mai mică decât în cazul perceptronului. Acest lucru este determinat de faptul că ieșirile neuronilor sigmoidali, ale stratului ascuns sunt reprezentative pentru regiuni (spații) largi ale spațiului de intrare, comparativ cu neuronii care se bazează pe funcții radiale care determină răspunsuri numai la regiuni relativ mici din spațiu de intrare. Putem concluziona faptul că rețelele neuronale artificiale bazate pe funcții radiale au un randament mai bun atunci când sunt disponibili mai multi vectori de antrenament.

În figura 2.4 este prezentat modelul unui neuron Radial Basis Function, model în care intrarea netă se constituie din norma diferenței vectoriale.

În figura 2.5 este reprezentat un mode tipic pentru funcția de activare . Se poate observa faptul că funcția radială are un maxim, dacă intrarea are valoare nulă. În cazul în care distanța dintre și descrește, indicele de valoare la ieșire se mărește. Acest lucru ne facem să tragem concluzia că neuronul radial se comportă aidoma unui detector ce produce ”1” la ieșire de fiecare dată când tiparul de intrare este la fel cu vectorul pondere .

Ca structură, o rețea neuronală artificială bazată pe funcții radiale are trei straturi (figura2.6):

-stratul de intrare(stratul senzorial);

-stratul ascuns, furnizor de funcții ce constituie baza pentru vectorii de intrare (funcțiile se numesc funcții radiale);

-stratul de ieșire care este alcătuit din neuroni cu funcții de activare liniară;

Figura 2.4 – Arhitectura unei neuron Radial Basis Function [21]

Figura 2.5 – Forma tipică pentru funcția de activare radială [22]

Figura 2.6 – Arhitectura unei rețele neuronale artificiale bazată pe funcții radiale [23]

Teorema lui Cover în legătură cu separarea tiparelor arată că transformarea spațiului de intrare în spațiul neuronilor ascunși este neliniară, iar transformarea spațiului neuronilor ascunși în spațiul neuronilor de ieșire este liniară.

Transformarea spațiului neliniar într-un spațiu de dimensiune înaltă are o probabilitate mai mare de a fi liniară în comparație cu un spațiu cu dimensiuni mai puține.

2.1.5 Rețeaua neuronală Hopfield

Tipul acesta de rețea oferă posibilitatea de a fi utilizată ca memorie asociativă, ori pentru a putea rezova probleme de optimizare. Rețeaua utilizează neuroni cu intrări binare, care la ieșire conțin nelinearități, de tipul limitare hardware.

În figura 13 este prezentată arhitectura unei rețele Hopfield cu N neuroni. Se constată faptul că ieșirea fiecărui neuron este aplicată tuturor neuronilor existenți prin intermediul unor ponderi, fapt ce duce la concluzia că rețeaua aceasta converge în cazul în care ponderile sunt simetrice.

Cu toate că simplitatea acestei rețele o face să fie afectivă, ea prezintă două limitări majore atunci când este folosită ca memorie adresabilă prin conținut.

Prima limitare constă în faptul că numărul de forme prototip ce se dorește a fi stocat și regăsit corect în această rețea, este limitat la cel mult 15% din numărul total de neuroni. Când se dorește stocarea unui număr mai mare de forme prototip, această rețea poate converge către un prototip fictiv.

Cealaltă limitare apare în cazul în care prototipurile memorate în rețea sunt foarte asemănătoare (are număr identic de biți), rețeaua devenind instabilă.

Figura 2.7 – Arhitectura rețelei Hopfield [24]

Când rețeua este folosită ca și clasificator, ieșirea din rețea (după convergență), este necesar să fie comparată cu fiecare prototip memorat, apoi se poate apartenența la o clasă atașată formelor prototip.[25]

2.1.6 Rețeaua neuronală Kohonen

Kohonen abordează structura și modul de lucru ale unei rețele neuronale cu autoorganizare, în vederea utilizării unei astfel de rețele pentru a clasifica cifrele arabe de la 0 la 9 în prezența zgomotului.

Rețeaua neuronală utilizată este o rețea nesupervizată ce este capabilă să facă o clasificare a vectorilor ce sunt utiizați la intrarea rețelei prin extragerea similarităților existente între aceștia acest tip de rețea fiind o rețea de tipul cu autopropagare. La baza rețelei se află algoritmul de antrenare al rețelei, axat pe principiul vecinătății, principiu care determină vectori care au caracteristici similare și care sunt aplicați la intrarea rețelei, să poată fi asociați cu neuronii vecini existenți în cadrul rețelei.

Structura rețelei

Rețeaua Kohonen este alcătuită din două straturi de neuroni, unul din straturile de neuroni de intrare fiind alcătuit dintr-un număr de neuroni egal cu dimensiunea vectorilor aplicați a intrarea în rețea, iar celălalt strat, de neuroni de ieșire fiind alcătuit dintr-un număr de neuroni egal sau mai mare ce numărul de clase în care este necesar să se realizeze clasificarea vectorilor de intrare.

Neuronii aflați în stratul de intrare sunt transparenți neavând ro în prelucrarea informației, ei având numai rolul de a prelucra vectorii aplicați la intrarea în rețea și transmiterea acelor vectori către stratul următor de neuroni.

Al doilea strat de neuroni (cel de ieșire), este alcătuit în concordanță cu numărul claselor în care se face clasificarea vectorilor. În acest caz, neuronilor pot fi aranjați în forme diferite: rețea rectangulară (neuronii ce se află în stratul de ieșire fiind situați în nodurile unei rețele rectangulare plane), rețea liniară (neuronii de ieșire fiind dispuși în linie), rețea circulară (neuronii de ieșire fiind dispuși circular). [26]

Figura 2.8 – Exemplu de rețea neuronală Kohonen rectangulara[27]

2.2. Domenii de aplicabilitate ale rețelelor neuronale

Rețelele neuronale sunt folosite într-o gamă foarte largă de aplicații. Din studierea literaturii de specialitate în domeniul aplicativ al rețelelor neuronale, se găsesc aplicații în toate domeniile activității umane. Nu exită domeniu al activității umane (începând cu științele naturii, știinte sociale, activități artistice, sportive, de divertisment, activități industriale și agricole) în care să nu se regăsească aplicații ale calculului neuronal. De aici putem trage concuzia că are un caracter universal, dar, cea mai adecvată utilizare a calculului neuronal o reprezintă domeniile percepției și gândirii umane.

Comprimarea datelor:

G.W. Cottrell, D.Zipser și P. Munro au utilizat rețelele neuronale în scopul de a comprima eficient informații corespunzatoare unor imagini grafice, care în functie de numărul de culori folosit și de rezoluția de reprezentare, ocupau un spațiu mare de memorare de ordinul a câțiva mega-octeți.

Spațiul de memorare fiind foarte costisitor, iar timpul de transfer al unei imagini inflența spațiul de memorare alocat acelei imagini, a fost necesară compresia imaginior.

Cottrell, Munro si Zipser au conceput un sistem de calcul neuronal care are la bază o rețea neuronală cu trei straturi capabilă de a conprima o imagine și de a decomprima fară distorsiuni.

Recunoașterea caracterelor:

-Recunoașterea scrisului de mână. Cercetătorii companiei Nestor Inc. din SUA au dezvoltat un sitem de calcul neuronal care realizează recunoașterea scrisului de mână, sistem care are drept dispozitiv de intrare a datelor, o tabletă digitizoare, pe care se poate realiza scrierea cu ajutorul unui Light-Pen. Aceasta rețea a fost antrenată cu diferite scrisuri de mână, ea putând să interpreteze un scris de mână oarecare cu o înalta acuitate.

Sitemul de recunoaștere optică a caracterelor permite ca după învățare, rețeaua neuronală să fie capabilă să recunoască o diversitate de scrieri și să facă predicții în legătură cu caracterele ilizibile.

-Prelucrarea imaginilor. Pentru realizarea imaginilor K. Fukushima a creat un sistem de calcul, care permite recunoașterea cu ușurință a caracterelor. Numele acelui sistem de recunoaștere a formelor, bazat pe rețeaua neuronală construintă este Neocognitronul.

Sistemul este în realitate o rețea neuronală, cu mai multe straturi, care simulează modul de prelucrare a informațiior vizuale, de către cortexul uman. Straturile ascunse de neuroni ale sistemului Neocognitronului au menirea de a identifica trăsături definitorii ale imaginii fară să fie influențate de distorsiuni sau orientare. Formele sunt unic determinate la nivelul stratului de intrare, simultan cu transmiterea informației către stratul de ieșire, astfel se activează numai anumiți neuroni ce corespund unor trăsături definitorii ale imaginii.

Probleme combinatoriale:

Pentru că problemele combinatorii NP-complete (Non Polynomial) necesită timpi de calcul care cresc exponential cu numărul de date de intrare, a fost necesară folosirea cu succes a rețelelor neuronale în rezolvarea problemelor NP-compete.

Cercetatorii D. Tank si J. Hopfield au realizat o rețea neuronală pentru a rezolva problema celebră a comis voiajorului, care trebuia să străbată un număr de orașe folosind drumul cel mai scrut. Au aplicat calculul neuronal atașând o funcție energetică dependentă de starea neuronilor constituenți, prin care minimul funcției energetice să corespundă unei stări stabile a neuronilor, drumul minim fiind astfel regăsit.

Cel care a îmbunătățit rețeaua construită de Tank și Hopfield a fost perfecționată de H. Szu care a obținut soluții mai performante utilizând o funcție energetică care conduce la stări mai stabile.

Recunoașterea formelor:

-Clasificarea formelor.

Sistemele de calcul neuronal au performanțe superioare în comparație cu sistemele expert sau sistemele clasice de calcul. În acest domeniu există o paletă diversificată de aplicații.

Semnificativă este aplicarea rețelei neuronale BackPropagation în domeniul militar, în clasificarea țintelor radar.

-Control industrial.

Bune rezultate au fost obținute folosind rețeua neuronală BackPropagation la recunoașterea imaginior furnizate de video-camere pentru conducerea unui robot. D. Glover s-a folosit de un procesor optic Fourier pentu digitizarea imaginior video, procesor care lucrează în timp real. Această rețea neuronală a fost costruită din două straturi: strat ascuns cu 20-40 neuroni, iar stratul de ieșire cu un număr corespunzător de neuroni de comandă pentru robot.

Echipa de cercetatori condusă de Glover a scos în evidență fenomenul de supra-antrenament (overtraining), ceea ce indică faptul că folosirea unui număr prea mare de exemple de antrenament poate determina distrugerea datelor memorate anterior. Explicația constă în faptul că rețeaua neuronală se autoconfigurează inițial în concordanță cu tendința statistică a datelor de antrenament iar introducerea unor noi date irelevante poate produce abateri de la tendința statistică generală.

Fenomenul de supra-antrenament constituie principalul neajuns al legior de învățare supervizate ce încearcă să folosească date eronate sau irelevante.

Modelare economică și financiară:

O foarte mare importanță pentru societatea contemporană, pentru a permite analize și prognoze eficiente, o reprezintă modelarea sistemelor financiare si economice. Predicții asupra tendințelor economico-financiare (preț, volum de vânzări, inflație,creștere demografică, consum și resurse energetice, etc.) sunt greu de abordat din cauza numărului imens de parametri și caracterul imprevizibil al variațiilor, fapt ce determină folosirea rețelelor neuronale.

Din această cauză marile companii internaționale folosesc sisteme de calcul neuronal, în managementul activităților pe care le desfașoară.

Servo-control:

În domeniul activităților industriale ce au ca scop reducerea costului cu forța de muncă prin folosirea roboțior industriali, de o deosebită importanță este problema controlului și conducerii unor sisteme compexe servo-mecanice (roboți industriali). Este foarte important să se găsească formule matematice care sp preîntâmpine erori provocate de variații fizice (temperatură, umiditate, deviații ale organelor în mișcare, ale alinierii axelor) . Pentru a preîntâmpina erorile care ar duce la un impact negativ din punct de vedere economic, este necesară o putere de calcul și echipamente speciale care să facă față cerințelor de a realiza produse conforme cu cerințele standard pentru produsele industriale ce trebuie reaizate.

Teoria aporoximării:

Analizând rezultatele folosite în teoria aproximării rezultă că rețelele neuronale sunt din majoritatea punctelor de vedere net superioare metodelor de aproximare-interpolare polinomiale, prin implementarea unei reguli de calcul ce ne permite să obținem un vector de ieșire m-dimensional cunoscând vectorul de intrare n-dimensional corespunzător și corespunde de fapt unei clase de funcții.

Modul de implementare al calculului neuronal reprezintă un instrument universal cu avantaje si dezavantaje față de modelele de calcul clasic sau cele bazate pe sistemele expert.

Aplicațiile rețelelor neuronale artificiale cuprind o arie foarte largă de domenii, cum ar fi:

-Bancar: oportunitatea de acordare a creditelor, verificarea autenticității documentelor;

-Militar: identificarea obiectelor, urmărirea țintelor, senzori inteligenți, recunoaștere facială, identificarea semnalelor și imaginilor, ghidarea armelor, procesarea semnalelor sonore;

-Electronic: predicție, vedere artificială, controlul proceselor, modelare neliniară, amplasarea componentelor, sinteză vocală, inspecția circuitelor integrate;

-Divertisment: jocuri, efecte speciale, animație;

-Financiar: predicția indicilor bursieri, ratelor de schimb, aprecierea validității creditelor și solidității firmei;

-Medical: proiectarea protezelor, diagnostic automat;

-Producție: analiza și proiectarea produselor, controlul procesului de producție, analiza și conducerea procesului de sondare;

-Robotică: sisteme de vedere, controlul traiectoriei;

-Vorbire: conversația text (vorbire), sinteza vorbirii, recunoașterea vorbirii;

-Telecomunicații: traducere în timp real, compresia imaginilor și a datelor, prelucrări de imagini;

-Transporturi: planificarea traseului, diagnoza sistemelor de frânare;

RNA sunt foarte utile și interesante în rezolvarea problemelor complexe. [28]

Concluzii la capitolul II

În acest capitol am prezentat clasificarea rețelelor neuronale în funcție de diferite criterii de aplicabilitate, cum ar fi: clasificare, recunoaștere, predicție, aproximare și optimizare. În subcapitolul 2.1 am prezentat o clasă foarte importantă de rețele neuronale artificiale de tip feedforward, cu propagare înainte a semnalului. Este vorba de perceptronul simplu și perceptronul multistrat (Multilayer Perceptron). Rețelele neuronale artificiale bazate pe funcții radiale solicită mai mulți neuroni, însă, antrenarea acestora necesită o perioadă de timp mai mică decât în cazul perceptronului. Rețeaua neuronală Hopfield oferă posibilitatea de a fi utilizată ca memorie asociativă, ori pentru a putea rezova probleme de optimizare. Am încheiat cu rețeaua neuronaă Kohonen, care abordează structura și modul de lucru ale unei rețele neuronale cu autoorganizare

În subcapitolul 2.2 am scris despre rețelele neuronale care sunt folosite într-o gamă foarte largă de aplicații. Nu exită domeniu al activității umane în care să nu se regăsească aplicații ale calculului neuronal. Cele mai importante domenii sunt: bancar, militar, electronic, divertisment, financiar, medical, producție, robotică, vorbire și telecomunicații.

Aplicatie Matlab destinata parametrizarii retelelor neuronale

Context: mediul de dezvoltare Matlab/ GUIDE

3.1.1 MATLAB:

Pentru efectuarea calculelor tehnice punând la dispoziția utilizatorului putem spune că Matlab este un software cuprinzator și performant. Acest soft oferă atât oamenilor de știință cât și inginerilor și tehnicienilor chiar și persoanalului nespecializat un sistem interactiv și unitar ce incude vizualizări științifice și calcule numerice sprijinind astfel creativitatea și creșterea productivității.

Programul oferă soluții pentru aplicații diverse pentru biblioteci de funcții (toolboxes), pentru întreprinderile industriale cărora le oferă un instrument foarte valoros de cercetare, analiză, proiectare, elaborare și testare a soluțiilor propuse și de a putea rezova probleme tehnice, dificile si complexe.

Caracteristici principale:

Programul MATLAB insumează calculul matricial, analiza numerică, realizarea graficelor și procesarea semnalelor într-un mediu facil utilizatorului, problemele și soluțiile fiind exprimate așa cum sunt ele scrise matematic, neutilizând programarea tradițională.

Soft-ul este un sistem interactiv, bazat pe o matrice ce nu pretinde dimensionarea sa, permițând rezovarea unor probleme numerice într-un interval de timp mai mic decât cel necesar scrierii unui program realizat ce utilizează un limbaj de programare ca Fortran, Basic sau C.

Matlab-ul s-a dezvoltat prin îmbunătățirile utilizatorilor și și-a găsit utilizare în diverse domenii de aplicare (cercetare, probleme practice de inginerie și matematică).

Toolbox-urile de care dispune programul sunt colecții ce cuprind multipe funcții MATLAB (fișiere .m) și extind mediul MATLAB având ca scop rezolvarea de clase particulare de probeme. Domenii utilizate: teoria reglării automate, proiectarea sistemelor de reglare, statistica și prelucrarea semnalelor, identificarea sistemelor neuronale, simularea sistemelor dinamice.

Unu din atuurile cele mai importante ale mediului MATLAB este extensibilitatea sa (capacitatea de a putea fi extins ușor). Acest lucru permite utilizatorilor să creeze propriile lor aplicații și să devină ei inșiși autori. Toți utilizatorii (oameni de știință, matematicieni, ingineri, etc.) au contribuit la dezvoltarea unor aplicații noi și atractive realizate fără folosirea programării în limbajul Fortran sau într-un alt cod.

Programul MATLAB este scris în limbajul de programare C și a fost produs de firma Math Works. [29]

3.1.2 GUIDE:

A graphical user interface (GUI) este o interfață pictorial pentru un program. Un GUI bun poate face programele mai ușor de utilizat, oferindu-le un aspect consistent și cu controale intuitive, cum ar fi butoane, casete listă, slidere, meniuri, și așa mai departe. GUI trebuie să se comporte într-un mod ușor de înțeles și previzibil, astfel încât un utilizator să știe ce să aștepte atunci când el sau ea efectuează o acțiune. De exemplu, atunci când un clic de mouse se produce pe un buton, GUI ar trebui să inițieze acțiunea descrisă pe eticheta butonului. [30]

3.2. Etapele realizării aplicației

Aplicația este împărțită în două părți distincte. În prima etapă am configurat rețeaua, iar în cea de a doua etapă am testat rețeua construită pentru a apoxima o funcție.

Pentru început am deschis mediu de dezvoltare Matlab, dupa care am tastat „guide” pentru a construi interfata. Pe interfata am ales toate butoanele din meniul din stanga.

Pentru prima etapa, care este impărțită în două părți, am ampasat două panouri de tip uipanel pe care le-am definit „Definirea arhitecturii rețelei” și „Antrenarea rețelei”.

În primul panou am ales un meniu de tip popupmenu, în care am introdus tipul rețelei neurale, în cazul meu „FF” (FeedForward).

Figura 3.1 – Definirea arhitecturii rețelei

Tot în acest panou am introdus trei butoane de tip bushbutton și șase butoane de tip text. Primul buton de tip pushbutton l-am numit „Număr de intrări”, al doilea „Număr de straturi” și ultimul „Număr de ieșiri”. În spatele acestor butoane, în callback am adăugat următorul cod:

prompt = {'Nr. Intrari'};

dlg_title = 'Input';

num_lines = 1;

def = {' '};

raspuns1 = inputdlg(prompt,dlg_title,num_lines,def)

set(handles.text2,'string', raspuns1);

prompt = {'Nr. straturi'};

dlg_title = 'Input';

num_lines = 1;

def = {' '};

raspuns2 = inputdlg(prompt,dlg_title,num_lines,def)

set(handles.text7,'string', raspuns2);

prompt = {'Nr. Iesiri'};

dlg_title = 'Input';

num_lines = 1;

def = {' '};

raspuns5 = inputdlg(prompt,dlg_title,num_lines,def)

set(handles.text15,'string', raspuns5);

La apăsarea fiecărui butoan, îmi deschide o nouă fereastră unde trebuie să introduc numărul de intrări, de straturi și de ieșiri.

Figura 3.2 – Alegerea numărului de intrări, straturi și ieșiri

Trei din cele șase butoane de tip text le-am adăugat sub butoanele de tip pushbutton și le-am denumit „Număr intrări”, „Număr de straturi” și „Număr ieșiri” pentru a ajuta utilizatorul să înțeleagă ce se afișează. Ultimele trei butoane de tip text, fiecare dintre ele amplasate tot sub câte un buton pushbutton, imi afișează numărul de intrări, de straturi și de ieșiri ales mai sus.

Figura 3.3 – Afișarea numărului de intrări, straturi și ieșiri

Pentru a arăta arhitectura rețelei am mai amplasat un buton de tip pushbutton. În spatele acestui buton, în callback am scris un cod care îmi afișează arhitectura rețelei în funcție de numărul de intrări, numărul de straturi și numărul de ieșiri ales mai sus.

În acest cod am creat rețeaua neuronală, numărul de intrări, de ieșiri și de straturi îl ia în funcție de valoarea care o introducem noi. Codul introdus mai jos este pentru o rețea neuronală de tip feedforward, cu o singură intrare, maxim cinci straturi ascunse și maxim cinci ieșiri.

net = get(handles.popupmenu1,'String');

net = strtrim(net{get(handles.popupmenu1,'Value')});

nrin = get(handles.text2, 'String');

nrout = get(handles.text15, 'String');

nrstrat = get(handles.text7, 'String');

if (strcmp( net,'FF'))

if strcmp(nrin, '1')

R = [0 1];

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

end

end

net = newff(R,S,V);

view(net)

nrout = net.numOutputs;

nrstrat = net.numLayers;

Figura 3.4 – Arhitectura rețelei

În cea de a doua parte a primei etape, am introdus în panoul al doilea, care se numește „Antrenarea rețelei”,un buton de tip text numit „Algoritmul de antrenare” și un meniu de tip popupmenu care mă ajută să aleg dintr-o listă, algoritmul de antrenare pe care vreau să-l folosesc.

Figura 3.5 – Antrenarea rețelei

Tot în acest panou, am introdus un buton de tip pushbutton care la apăsare, imi deschide o fereastră în care să tastez număru de epoci dorit.

Figura 3.6 – Alegerea numărului maxim de epoci

prompt = {'Nr. de epoci'};

dlg_title = 'Input';

num_lines = 1;

def = {' '};

raspuns4 = inputdlg(prompt,dlg_title,num_lines,def)

set(handles.text12,'string', raspuns4);

Sub acest buton am adăugat și două butoane de tip text, în primul se afișează valoarea aleasă mai sus și cel de al doilea ajută utilizatorul să înțeleagă ce înseamnă acea valoarea.

Figura 3.7 – Afișarea numărului maxim de epoci

Am mai adăugat aici un buton de tip text numit „Funția de antrenare” și un meniu de tip popupmenu cu ajutorul căruia alegem funcția de antrenare dorită.

Figura 3.8 – Alegerea algoritmului și funcției de antrenare

La final, am introdus un buton de tip pushbutton numit „Antrenarea” în spatele căruia, în callback am adăugat un cod care antrenează rețeaua în funcție de algoritmul de antrenare, numărul de epoci și funcția de antrenare aleasă.

Figura – Antrenarea rețelei

Codul următor îl folosim pentru antrenarea unei rețele de tip feedforward, cu o singură intrare, cu maxim cinci straturi ascunse, maxim cinci ieșiri și numărul de epoci ales. Algoritmul de antrenare este Backpropagation și funcția de antrenare este ”trainlm”.

net = get(handles.popupmenu1,'String');

net = strtrim(net{get(handles.popupmenu1,'Value')});

nrin = get(handles.text2, 'String');

nrout = get(handles.text15, 'String');

nrstrat = get(handles.text7, 'String');

nrepoci = str2double(get(handles.text12, 'string'));

fct = get(handles.popupmenu4,'String');

if (strcmp( net,'FF'))

if strcmp(nrin, '1')

R = [0 1];

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

net = newff(R, S, V)

net.trainFcn = fct;

net.trainParam.epochs = nrepoci;

net = train(net, R, S);

out = sim(net, R);

end

end

În a doua etapă vom testa rețeaua construită pentru a aproxima o funcție și vom valida rețeaua. Am adăugat în interfață încă un panou și l-am numit „Testarea rețelei”.

Figura 3.10 – Testarea rețelei

Acest panou conține un buton de tip text în care este scrisă funcția cu ajutorul căreia vom testa rețeaua. Adăugăm în interfață șase butoane de tip text, în primul este scrisă funcția, iar următoarele sunt numite „a”, „b”, „c”, „n”, „y” . Mai inserăm patru butoane de tip edit în care adăugăm coeficienții funcției și încă un buton de tip text în care apare rezultatul funcției.

Figura 3.11 – Alegerea coeficienților funcției

Tot aici am ales un meniu de tip popupmenu din care alegem funcția de performanță dorită „mse” și două grafice.

Figura 3.12 – Funcția de performanță și cele două grafice

La final am adăugat un buton de tip pushbutton în spatele căruia, în callback am scris un cod care calculează acea funția y=7a+bc+5c+n ținând cont de coeficienți, afișează rezultatul funcției și ne afișează două grafice, primul este eroarea și al doilea este simularea rețelei.

a = str2num(get(handles.edit4,'String'));

b = str2num(get(handles.edit4,'String'));

c = str2num(get(handles.edit4,'String'));

n = str2num(get(handles.edit4,'String'));

y=a*7+b.*c+5*c+n;

set(handles.text26, 'String', y);

I=[a; b; c];

O=y;

net = get(handles.popupmenu1,'String');

net = strtrim(net{get(handles.popupmenu1,'Value')});

nrin = get(handles.text2, 'String');

nrout = get(handles.text15, 'String');

nrstrat = get(handles.text7, 'String');

nrepoci = str2double(get(handles.text12, 'string'));

x = 1:24;

pf = get(handles.popupmenu5,'String');

fct = get(handles.popupmenu4,'String');

if (strcmp( net,'FF'))

if strcmp(nrin, '1')

R = [0 1];

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '1')

S = [0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '2')

S = [0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '3')

S = [0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '4')

S = [0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '1')

V = [1];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '2')

V = [2];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '3')

V = [3];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '4')

V = [4];

end

end

if strcmp(nrout, '5')

S = [0 1;0 1;0 1;0 1;0 1];

if strcmp(nrstrat, '5')

V = [5];

end

end

net = newff([0 1], S, V)

net.initFcn='initlay';

net.trainFcn = 'trainlm';

net= init(net)

net.trainFcn = fct;

net.trainParam.epochs = nrepoci;

net = train(net, R, S);

out = sim(net, R);

diferenta = abs(out) – abs(S);

axes (handles.axes1);

plot( abs (diferenta));

axes(handles.axes3);

plot(out);

if( strcmp( pf,'mse'))

err = out – S;

squareError = err.^2;

meanSquareError = mean(squareError);

rmse = sqrt(meanSquareError);

set(handles.text33, 'string', rmse)

end

end

end

3.3. Studiu de caz: descrierea problemei, scenarii

Această rețea are două părți distincte. În prima etapă vom defini arhitectura rețelei, în care vom introduce numărul de intrări și de ieșiri, numărul de straturi și numărul de neuroni pe fiecare strat. Tot aici, în prima etapă, vom antrena rețeaua cu un anumit algoritm de antrenare și vom introduce numărul de epoci dorit. În a doua etapă, vom testa rețeaua construită pentru a configura o funcție, dând coeficienții funcției, și vom valida rețeaua, calculând eroarea de aproximare.

După ce am construit rețeaua în interfața Matlab GUI, și am adăugat în spatele fiecărui buton, codul necesar și apăsăm pe butonul Run. Ne deschide o nouă fereastră cu interfața. Pentru început alegem tipul rețelei din meniul de tip popupmenu, pentru rețeua noastră am ales FF (FeedForward). După acest pas, urmează alegerea numărului de intrări, de straturi și de ieșiri. În cazul nostru, patru intrări, două straturi și o ieșire.

Figura 3.13 – Definirea arhitecturii rețelei

Acum apăsăm pe butonul de tip pushbutton numit „Arhitectura rețelei” care îmi va deschide o nouă fereastră în care apare arhitectura rețelei.

Figura 3.14 – Arhitectura rețelei cu 4 intrări, 2 straturi ascunse și o ieșire

Trecem la cea de a doua parte a primei etape, antrenarea rețelei. Prima oară alegem algoritmul de antrenare din meniul de tip popupmenu, în cazul nostru „Backpropagation”

după care apăsăm pe butonul „Număr de epoci” pentru a alege numărul maxim de iterații, pentru care se repetă procesul de antrenare a rețelei neuronale. La sfârșit alegem și funcția de antrenare, aceasta fiind „trainlm”.

Figura 3.15 – Alegerea numărului de epoci, algoritmului și funcției de antrenare

Acum, pentru a antrena rețeaua construită, apăsăm butonul „Antrenarea”.

Figura 3.16 – Antrenarea rețelei

În cea de a doua etapă testăm rețeaua contruită pentru a aproxima o funcție. Funția aleasă este y=7a+bc+5c+n. Pentru a rezolva această funcție trebuie să dăm coeficienții funcției, alegem funcția de performanță, în cazul nostru „mse”.

Figura 3.17 – Alegerea coeficienților și funcția de performanță

Dând click pe butonul „Rezolvă”, ne va deschide o nouă fereastră în care se antrenează rețeaua, ne afișează pe interfață rezultatul funcției, eroarea și tot în interfață ne afișează două grafice, primul este eroarea și al doilea este simularea rețelei.

Figura 3.18 – Rezutatul funcției, eroare și simularea rețelei

3.4. Concluzii la capitolul III

La începutul capitolului am vorbit despre mediu de dezvoltare Matlab, care este un software cuprinzator și performant și oferă atât oamenilor de știință cât și inginerilor și tehnicienilor chiar și persoanalului nespecializat un sistem interactiv și unitar ce incude vizualizări științifice și calcule numerice sprijinind astfel creativitatea și creșterea productivității. Unu din atuurile cele mai importante ale mediului MATLAB este extensibilitatea sa (capacitatea de a putea fi extins ușor). Acest lucru permite utilizatorilor să creeze propriile lor aplicații și să devină ei inșiși autori.

În subcapitolul 3.2 am prezentat etapale realizării aplicației. Aplicația este împărțită în două părți distincte. În prima etapă am definit arhitectura rețelei, în care am introdus numărul de intrări și de ieșiri, numărul de straturi. Tot aici, în prima etapă, am antrenat rețeaua cu un anumit algoritm de antrenare și am introdus numărul de epoci dorit. În a doua etapă, am testat rețeaua construită pentru a configura o funcție, dând coeficienții funcției, și am validat rețeaua, calculând eroarea de aproximare.

La final, în subcapitolul 3.3 am făcut un studiu de caz bazat pe aplicația descrisă mai sus.

Concluzii generale și recomandări

În primul capitol am prezentat rețele neuronale artificiale, care sunt definite ca un sistem de procesare a semnalelor, alcătuit dintr-un număr mare de procesoare elementare interconectate, denumite neuroni sau noduri care pot coopera în vederea găsirii de soluționare a unor sarcini specifice. Condițiile specifice mediului determină modalitatea de adaptare și determină modificarea ponderior asociate legăturilor (conexiunilor) realizate între neuroni și structura rețelei neuronae artificiale.

În subcapitolul 1.1 am scris despre neuronul artificial, care este denumit câteodată procesor elementar, sau nod, pentru că încearcă să imite structura și funcționarea neuronului biologic. Cel mai răspândit model pornește de la modelul elaborat în anul 1943 de către McCulloch-Pitts. Tot în acest subcapitol am scris despre rețelele neuronale că se împart în două categorii principale din punctul de vedere al construcției lor: rețele feed forward si retelele recurente.

În utimul subcapitol am vorbit despre etapele de parcurs in definirea/ utilizarea unei retele neuronale. Acestea sunt:

-Alegerea tipului de rețea;

-Alegerea intrărilor;

-Alegerea ieșirilor;

-Alegerea numărului de straturi ascunse, numărul de neuroni din ele;

-Antrenarea rețelei;

În al doilea capitol am prezentat clasificarea rețelelor neuronale în funcție de diferite criterii de aplicabilitate, cum ar fi: clasificare, recunoaștere, predicție, aproximare și optimizare. În subcapitolul 2.1 am prezentat o clasă foarte importantă de rețele neuronale artificiale de tip feedforward, cu propagare înainte a semnalului. Este vorba de perceptronul simplu și perceptronul multistrat (Multilayer Perceptron). Rețelele neuronale artificiale bazate pe funcții radiale solicită mai mulți neuroni, însă, antrenarea acestora necesită o perioadă de timp mai mică decât în cazul perceptronului. Rețeaua neuronală Hopfield oferă posibilitatea de a fi utilizată ca memorie asociativă, ori pentru a putea rezova probleme de optimizare. Am încheiat cu rețeaua neuronaă Kohonen, care abordează structura și modul de lucru ale unei rețele neuronale cu autoorganizare

În subcapitolul 2.2 am scris despre rețelele neuronale care sunt folosite într-o gamă foarte largă de aplicații. Nu exită domeniu al activității umane în care să nu se regăsească aplicații ale calculului neuronal. Cele mai importante domenii sunt: bancar, militar, electronic, divertisment, financiar, medical, producție, robotică, vorbire și telecomunicații.

În ultimul capitol am prezentat mediul de dezvoltare Matlab, care este un software cuprinzator și performant. Acest soft oferă atât oamenilor de știință cât și inginerilor și tehnicienilor chiar și persoanalului nespecializat un sistem interactiv și unitar ce incude vizualizări științifice și calcule numerice sprijinind astfel creativitatea și creșterea productivității.

Aplicația este structurată în două etape. În prima etapă am configurat rețeaua, iar în cea de a doua etapă am testat rețeua construită pentru a apoxima o funcție.

În prima etapă am definit arhitectura rețelei, în care am introdus numărul de intrări și de ieșiri, numărul de straturi. Tot aici, în prima etapă, am antrenat rețeaua cu un anumit algoritm de antrenare și am introdus numărul de epoci dorit. În a doua etapă, am testat rețeaua construită pentru a configura o funcție, dând coeficienții funcției, și am validat rețeaua, calculând eroarea de aproximare.

Similar Posts