Elemente de Proiectare a Unui Neurochip Pentru Operatii Aritmetice Si Logice
Cuprins
Introducere
Un sistem este in regim staționar atunci când toate variabilele de stare sunt constante in timp. Atunci când se vorbește de regimul staționar al mașinii este vorba de regimul mecanic staționar unde viteza rotorică, ca și valorile de vârf ale tuturor variabilelor de stare (curenți, tensiuni, fluxuri etc) sunt constante.
Această lucrare prezintă câteva probleme didactice de mașini electrice în regim staționar rezolvate cu mediul de programare destinat calculului numeric și reprezentărilor grafice MATLAB.
Lucrarea este structurată pe trei capitole. În primul capitol sunt prezentate câteva considerente generale despre mediul de programare MATLAB, în al doilea capitol sunt prezentate considerente generale despre mediul Simulink, iar cel de-al treilea capitol cuprinde problemele didactice de mașini electrice, probleme de circuit magnetic, regim nesimetric la transformator, mașini de curent continuu și mașina de inducție rezolvate în MATLAB.
Prima problemă se referă la un circuit magnetic neliniar pentru care s-a realizat un program care calculează curentul, fluxul și inductanța și trasează curba de magnetizare și două caracteristici.
Următoarele două probleme tratează regimul nesimetric la transformatorul trifazat, programul calculează tensiunile în secundarul transformatorului.
Au mai fost realizate câte un program pentru mașina de curent continuu cu excitație serie și excitație derivație, programe care trasează caracteristicile mecanice ale acestor mașini.
Ultimul program realizează trasarea caracteristicilor mecanice la mașina de inducție.
Orice utilizator al programelor trebuie să dispună de un calculator pe care să fie instalat programul MATLAB.
MATLAB, este o marcă înregistrată a MathWorks Inc., este un limbaj de programare de nivel înalt care folosește matrici ca entități numerice de bază ( și nu scalari, ca în limbajele de programare de nivel scăzut cum ar fi BASIC, FORTRAN, PASCAL și C). Cu alte cuvinte MATLAB ne permite să manipulăm direct matrici, cum ar fi adăugarea, înmulțirea, inversarea de matrici și rezolvarea valori proprii și vectori proprii ai matricelor. În cazul în care sarcini similare ar fi efectuate de limbaje de programare de nivel scăzut, multe declarații de programare constituind operații scalare ar fi necesare chiar și pentru cele mai simple operații cu matrice. Prin urmare, MATLAB este ideal pentru calcule algebrice liniare care implică matrici. Mai mult decât atât, MATLAB conține o bibliotecă cu foarte multe funcșii utile, atât funcții de bază ( cum ar fi funcții trigonometrice, hiperbolice și exponențiale), și funcții matematice de specialitate, împreună cu o facilitate avansată pentru trasarea și afișarea rezultatelor calculelor în diferite forme grafice. În plus, MATLAB este completat cu diferite seturi de instrumente speciale de aplicare, care conțin funcții și programe suplimentare.
Capitolul I. Noțiuni despre calculul inteligent
Din punctul de vedere al rezolvării automate problemele pot fi clasificate în două categorii:
Probleme "bine-puse": caracterizate prin faptul că li se poate asocia un model formal (de exemplu, un model matematic) pe baza căruia se poate dezvolta o metodă de rezolvare cu caracter algoritmic[7].
Probleme "rău-puse": caracterizate prin faptul că nu pot fi descrise complet printr-un model formal, ci cel mult se cunosc exemple de rezolvare a problemei. Rezolvarea unei probleme înseamnă stabilirea unei asocieri între datele de intrare (valori inițiale, ipoteze etc.) și răspunsul corect[4].
În cazul problemelor bine-puse această asociere este o relație funcțională explicită construită pe baza modelului asociat problemei. În cazul problemelor rău-puse, însă, o astfel de relație explicită nu poate fi pusă în evidență, rolul sistemului care rezolvă problema fiind de a dezvolta o relație de asociere întrebare-răspuns pe baza unor exemple. Procesul prin care sistemul își formează modelul propriu al problemei și pe baza acestuia relația de asociere se numește adaptare sau chiar învățare [7]. Pe de altă parte, din punctul de vedere al complexității rezolvării și al relevanței răspunsului problemele pot fi clasificate în:
Probleme pentru care este esențială obținerea unui răspuns exact, indiferent de resursele implicate. Acestea necesită utilizarea unor tehnici exacte.
Probleme pentru care este preferabil să se obțină un răspuns "aproximativ" folosind resurse "rezonabile" decât un răspuns exact dar folosind resurse foarte costisitoare.
Calculul inteligent este un domeniu al Inteligenței Artificiale care grupează tehnici de rezolvare a problemelor "rău-puse" sau a celor pentru care modelele formale conduc la algoritmi foarte costisitori.
Principalele direcții ale calculului inteligent sunt:
Calcul neuronal. Este folosit în principal în rezolvarea problemelor de asociere (clasificare, aproximare, predicție etc), bazându-se pe extragerea, prin învățare, a unui model pornind de la exemple. Sursa de inspirație o reprezintă structura și funcționarea creierului.
Calcul evolutiv. Este folosit în principal în rezolvarea problemelor bazate pe căutarea soluției într-un spațiu mare de soluții potențiale (în particular în rezolvarea problemelor de optimizare). Sursa de inspirație o reprezintă principiile evoluționismului darwinist.
Calcul fuzzy. Este folosit atunci când datele problemei (și relațiile dintre acestea) nu pot fi descrise exact ci există un grad de incertitudine ("fuzziness"). Ideea de bază este de a înlocui valorile exacte ("crisp") cu "valori fuzzy" descrise prin funcții de apartenență[7].
În fiecare dintre cele trei direcții majoritatea prelucrărilor care se efectuează au caracter numeric, fiind necesară o codificare numerică adecvată a problemei. Aceasta motivează prezentă cuvântului calcul în denumirea domeniului. Pe de altă parte în fiecare dintre direcțiile de mai sus se încearcă simularea unor comportamente inteligente ceea ce motivează prezentă termenului inteligent. Principiul fundamental al calculului neuronal și al celui evolutiv este de a dezvolta sisteme de calcul inteligent pornind de la implementarea unor reguli simple, comportamentul complex al acestor sisteme derivând aplicarea în paralel și în manieră interactivă a acestor reguli. Această abordare de tip bottom-up este în contrast cu abordarea de tip "top-down" specifică altor abordări din Inteligentă Artificială. Calculul neuronal și cel evolutiv fac parte din sfera mai largă a calculului natural al cărui principiu este de a prelua idei de rezolvare a problemelor din sistemele naturale (fizice, chimice, biologice, ecologice).
Obiectivul principal al calculului natural este de a dezvolta metode de rezolvare a problemelor rău-puse și a celor nerezolvabile prin metodele tradiționale (de exemplu, rezolvarea problemelor NP-complete în timp polinomial).
I.1. Specificul calculului evolutiv
Calculul evolutiv oferă mecanisme de căutare în spațiul soluțiilor bazate pe principiile evoluției naturale (de tip darwinist). Pentru găsirea soluției se utilizează o populație de căutători. Această populație este supusă unui proces de evoluție aracterizat prin: selecție, încrucișare, mutație. În funcție de modul în care este cosnstruită populația și de modul în care este implementată evoluția, sistemele de calcul evolutiv se încadrează în una dintre următoarele categorii:
Algoritmi genetici. Se folosesc în special pentru rezolvarea unor probleme de optimizare discretă. Populația este reprezentată de stări din spațiul problemei codificate binar (un element al populației este un șir de biți) iar principalii operatori sunt cei de încrucișare și selecție, cel de mutație având probabilitate mică de aplicare. Algoritmii genetici au fost propuși inițial de către Holland [4].
Programare genetică. Se folosesc pentru dezvoltarea unor "modele" de calcul (programe simple). Populația este reprezentată de programe care candidează la rezolvarea problemei. Acestea sunt descrise mai degrabă ca arbori de derivare a cuvântului pe care îl reprezintă în cadrul limbajului în care este scris și nu ca linii de cod; de exemplu, "programul-expresie" "a+b*c" este (+ a (* b c)) [4]. O astfel de structură este descrisă ușor în Lisp, astfel că în elaborarea sistemelor bazate pe GP se folosește adeseori Lisp-ul. Încrucișarea este realizată selectând aleator subarbori din arborele asociat programelor părinte și interschimbându-le. Ca și în cazul algoritmilor genetici mutația are pondere mică. Părintele programării genetice este considerat Koza [4].
Strategii evolutive. Au fost concepute inițial pentru a rezolva probleme de optimizare în tehnică fiind destinate rezolvării problemelor de optimizare continuă. Populația este constituită din elemente din domeniul de definiție al funcției obiectiv. Operatorul principal este cel de mutație dar și recombinarea este folosită. Pentru strategiile evolutive au fost dezvoltate scheme de adaptare a parametrilor de control (auto-adaptare). La dezvoltarea strategiilor evolutive contribuții importante au adus Rechenberg și Schwefel [4].
Programare evolutivă. Se folosesc atât pentru optimizarea cât și pentru dezvoltarea unor structuri de calcul (automate). Operatorul principal este cel de mutație. Bazele domeniului au fost puse de către Fogel.
Toate aceste metode se bazează pe faptul că simulează evoluția unei mulțimi (populație) de structuri informaționale (configurații sau indivizi) sub acțiunea unor procese similare celor din evoluția naturală și anume: selecție, mutație și încrucișare [4].
Domenii de aplicabilitate:
La fel ca și rețelele neuronale, sistemele evolutive pot calcula orice funcție calculabilă. Se utilizează atunci când nu exisța alța strategie de rezolvare a problemei și este acceptat un răspuns aproximativ. Principalele aplicații ale calculului evolutiv sunt:
optimizare multidimensională (funcții obiectiv cu multe puncte de optim, pentru care nu trebuie impuse ipoteze de netezime) [1];
probleme de optimizare combinatorială NP-complete (de exemplu, problema comis voiajorului);
probleme de ordonanțare ("job-shop scheduling");
prelucrarea imaginilor;
antrenarea rețelelor neuronale.
I.2. Specificul calculului fuzzy
Calculul fuzzy se caracterizează prin faptul că permite manipularea conceptelor vagi care nu pot modelate prin concepte matematice exacte (numere, mulțimi sau funcții clasice). Probleme în care intervin concepte vagi apar în teoria controlului când sistemele au caracter neliniar iar sțarile lor nu pot fi descrise în mod exact ci doar prin enunțuri care au un grad de ambiguitate [1]. Să considerăm spre exemplu un sistem de control a temperaturii și umidițații aerului într-o încăpere. Regulile pe care trebuie să le respecte un astfel de sistem ar putea fi:
Dacă temperatura și umiditatea sunt scăzute atunci mărește viteza ventilatorului (pentru aer cald și umed).
Dacă temperatura și umiditatea sunt ridicate atunci micșorează viteza ventilatorului
(pentru aer cald și umed).
Regulile de mai sus sunt exemple de reguli fuzzy de inferență. Prelucrările efectuate de un sistem expert care prelucrează cunoștințe vagi se bazează pe teoria mulțimilor fuzzy și logica fuzzy.
Structura unui sistem fuzzy
Un sistem fuzzy este constituit din:
un subsistem de extragere a regulilor fuzzy pornind de la datele problemei (etapa de fuzzi-care);
un subsistem de efectuare a interferențelor fuzzy (etapa de raționament)
un subsistem de transformare a cunoștințelor fuzzy în date efective (etapa de defuzzi_care)[2].
Domenii de aplicabilitate
Principalele aplicații ale calcului fuzzy sunt:
recunoașterea formelor;
aproximarea funcțiilor;
controlul sistemelor;
compresia imaginilor.
Capitolul II. Specificul calculului neuronal
Din punct de vedere funcțional o rețea neuronală este un sistem ce primește date de intrare (corespunzătoare datelor inițiale ale unei probleme) și produce date de ieșire (ce pot fi interpretate ca răspunsuri ale problemei analizate). O caracteristică esențială a rețelelor neuronale este capacitatea de a se adapta la mediul informațional corespunzător unei probleme concrete printr-un proces de învătăre. În felul acesta rețeaua extrage modelul problemei pornind de la exemple. Din punct de vedere structural o rețea neuronală este un ansamblu de unități interconectate fiecare fiind caracterizată de o funtionare simplă.
Funcționarea unităților este inuentătă de o serie de parametri adaptabili. Astfel o rețea neuronală este un sistem extrem de flexibil. Structura unităților funcționale, prezentă conexiunilor și a parametrilor adaptivi precum și modul de funcționare sunt inspirate de creierul uman. Fiecare unitățe funcțională primește câteva semnale de intrare pe care le prelucrează și produce un semnal de ieșire. Interacțiunea multor unități cu funcționare simplă conduce la un sistem care poate să rezolve probleme complexe. Funcționarea sistemului este controlată de un set numeros de parametri ajustabili care permit acestuia să se adapteze cât mai fidel mediului informațional în care este amplasat (specific problemei de rezolvat).
Una dintre cele mai importante caracteristici ale unui sistem neuronal este caracterul său adaptiv, faptul că poate să-și stabilească parametrii de funcționare printr-un proces de învătăre bazat pe informațiile primite. Astfel de sisteme sunt adecvate, astfel, pentru problemele ce sunt dificil sau chiar imposibil de formalizat pentru ele existând doar exemple de rezolvare [4].
II.1. Structura unei rețele neuronale artificiale
O rețea neuronală artificială este un ansamblu de unități funcționale amplasate în nodurile unui graf orientat și între care circulă semnale de-a lungul arcelor grafului. Elementele definitorii ale unei rețele neuronale sunt:
Arhitectura: specifică modul în care sunt amplasate și interconectate unitățile funcționale. Arhitectura determină și fluxul informațional în cadrul rețelei.
Funcționarea: specifică modul în care fiecare unitățe în parte și rețeaua în ansamblul ei transformă semnalele de intrare în semnale de ieșire. Funcționarea este inuentătă de arhitectură, în special de modul de interconectare a unităților.
Adaptarea (învătărea): specifică modul de stabilire a parametrilor ajustabili astfel încât rețeaua să poate rezolva anumite probleme. În funcție de natura informației de care se dispune, învătărea poate fi supervizată sau nesupervizată. Învătărea constă în modificarea funcționalității rețelei prin modificarea parametrilor și/sau a structurii acesteia. Procesul de învătărea bazat pe adaptarea parametrilor constă în existentă unor reguli de modificare a parametrilor și un algoritm (de regulă iterativ) de aplicare a acestor reguli [4].
Structura generală a unui algoritm de învătăre bazat pe modificarea parametrilor este:
initializarea (aleatoare) a parametrilor retelei
init W(0)
initializarea indicatorului de iteratie
t=0
prelucrare repetitiva
repeat
W(t+1)=adjust(W(t),X(t)[,d(t)])
t=t+1
until <criteriu de stop>
unde W(t) reprezintă valorile parametrilor la momentul t, X(t) reprezintă semnalul de intrare, iar d(t) semnalul de învătăre corespunzător (poate fi chiar răspunsul corespunzător intrării X(t) sau doar un indicator de corectitudine/eroare a răspunsului dat de rețea). În cazul învățării nesupervizate d(t) poate lipsi din regula de învătăre.
II.2. Ce pot și ce nu pot face rețelele neuronale
Ce pot face rețelele neuronale? În principiu, pot reprezenta orice funcție calculabilă. Ceea ce este însă mai important este că pot învătă orice astfel de funcție pornind de la exemple. Nu sunt însă eficiente pentru orice problemă, ele fiind utile în rezolvarea problemelor pentru care se dispune de un număr mare de exemple și pentru care nu pot fi găsite ușor și rapid reguli de formalizare.
II.3. Clase de probleme ce pot fi rezolvate cu rețele neuronale
Clasificare și recunoaștere.
Date de intrare. Descriere sintetică a unui obiect (de exemplu descrierea grafică a unei litere sau ansamblul caracteristicilor acesteia). În majoritatea situațiilor descrierea este un vector de valori numerice obținute printr-o prelucrare prealabilă (preprocesare) a informațiilor brute.
Date de ieșire. Indicator al clasei căreia îi aparține obiectul (de exemplu numărul de ordine al literei în cadrul alfabetului). Abilitatea de clasificare a rețelei este rezultatul unui proces de învătăre pornind de la exemple de clasificare corectă [3].
Pe lângă exemplul de mai sus, de recunoaștere a caracterelor, alte probleme concrete de clasificare sunt: recunoașterea vorbirii, clasificarea semnalelor (de exemplu separarea electrocardiogramelor în normale și anormale), clasificarea celulelor în normale și anormale, recunoașterea unor fețe într-o imagine, clasificarea texturilor etc.
Gruparea și categorizarea datelor
Este similară problemei de clasificare cu diferentă că antrenarea rețelei se realizează pornind doar de la date de intrare, fără a specifica clasele cărora le aparțin. Clasele sunt construite pornind doar de la similarități existente în datele de intrare. În felul acesta rețeaua neuronală descoperă criteriul de grupare [3]. Probleme concrete din această categorie intervin în analiza datelor (în special în domeniul cunoscut sub denumirea de "data mining") și compresia datelor.
Aproximare și estimare
Se referă la la extragerea dependenței funcționale dintre două mărimi pornind de la un set de valori ale celor două mărimi. De regulă valorile din set sunt alterate de zgomot (afectate de erori de măsurare sau de altă natură). Folosind acest set rețeaua este antrenată pentru a determina dependență dintre cele două mărimi. O dată rețeaua antrenată, pentru orice valoare a argumentului ea furnizează aproximarea valorii asociate. O problemă concretă din aceasta clasă este reprezentată de determinarea dependenței funcționale între mărimi măsurate experimental [3]. În aceeași clasă se încadrează determinarea parametrilor unor modele din inginerie sau orice problemă de asociere.
Predicție
Date de intrare. O succesiune de valori (numită serie temporală) pentru care nu este cunoscută o relație formală care să le genereze.
Dată de ieșire. Aproximarea următoarei valori din serie.Antrenarea rețelei se realizează pornind de la valorile cunoscute din serie [3]. Probleme concrete din această clasă sunt predicția evoluției stocurilor, predicția în meteorologie, predicție în evoluția vânzărilor etc.
Optimizare
Diferite probleme din știință, inginerie și economie pot fi formulate ca probleme de optimizare constând în necesitatea determinării unei valori care satisface anumite restricții și optimizează o funcție obiectiv. Rețelele neuronale sunt adecvate pentru rezolvarea problemelor de optimizare dificile pentru care este suficient să se obțină soluții suboptimale. Probleme concrete din această categorie sunt cele ce intervin în proiectarea circuitelor electronice, în alocarea resurselor, în rezolvarea problemelor de rutare în rețele etc.
Stocarea și regăsirea informației după conținut
Rețelele neuronale permit stocarea informației astfel încât aceasta să fie ulterior regăsită pornind de la indicii legate de conținut (indiciile pot fi porțiuni din informația stocată). Astfel de sisteme de stocare sunt mai tolerante la erori în raport cu memoriile bazate pe adrese. Aplicații concrete sunt în proiectarea bazelor de date multi-media.
Modelare și control adaptiv
Controlul unui sistem dinamic se referă la a determina un semnal de control, u(t), care asigură producerea unui semnal de ieșire dorit y(t). Rețeaua neuronală este antrenată pornind de la un model de referință.
Prelucrarea și analiza semnalelor
Date de intrare. Un semnal, care poate fi o imagine sau un semnal sonor.
Date de ieșire. Semnalul transformat (de exemplu prin eliminarea zgomotului) sau o informație extrasă din cadrul lui [3].
II.4. Descriere a unor aplicații clasice
Eliminarea adaptivă a zgomotului – "adaptive noise canceling"
La transmiterea unui semnal (sonor sau de altă natură) printr-un canal de comunicație (de exemplu o linie telefonică) intervine un zgomot care afectează calitatea transferului. Pentru a înțelege mai bine această problemă trebuie să înțelegem modul în care oamenii clasifică și analizează sunetele. Pentru oameni a separa un sunet dintr-un anumit context sonor (de exemplu a înțelege ceea ce spune o persoană într-o încăpere în care se aude și muzică) nu este o problemă dificilă. Aceasta este o abilitate de a elimina zgomotul pe care o utilizăm fără să ne gândim explicit la ceea ce facem. În mod analog dacă în timpul unei convorbiri telefonice intervine un zgomot pe linie îl putem ignora deși zgomotul respectiv nu are o anumită caracterizare. Tocmai datorită acestui fapt este foarte dificil dacă nu imposibil să separăm prin metodele clasice zgomotul de sunetul util. Oamenii sunt capabili să ignore acest zgomot deoarece au învătăt această abilitate din experiență. Acesta este motivul pentru care această problemă a fost rezolvată utilizând rețele neuronale încă din primii ani ai dezvoltării lor (1950-1960, rețeaua ADALINE proiectată de B. Widrow).
Evaluarea riscului creditului ipotecar
Unul dintre cele mai importante aspecte pe care o bancă trebuie să le ia în considerare înaintea aprobării unui credit unei persoane este evaluarea riscului ca persoana să nu fie capabilă să returneze împrumutul. O rețea antrenată pe baza a câtorva mii de informații privind cererile acceptate sau respinse a obținut o rată de succes de 98% (în timp ce rata de succes a funcționarilor este în jur de 85%).
Cititor de coduri poștale
Serviciul poștal din SUA manevrează volume mari de corespondență. Una dintre sarcinile angajaților este clasificarea corespondenței pe baza codului poștal. Un sistem care asigură clasificarea pe baza codului poștal rezolvă următoarele subprobleme:
identificarea zonei in care este scris codul;
împărțirea acestei zone în subzone mai mici care se suprapun pentru izolarea cifrelor.
recunoașterea cifrelor;
A doua etapă este repetată în paralel cu recunoașterea cifrelor până când sunt recunoscute toate cifrele. Rețelele neuronale sunt folosite de regulă în etapa de recunoaștere propriu-zisă. Rata de succes a acestei aplicații este de 95%. Ea a reprezentat punctul de pornire pentru aplicațiile destinate recunoașterii scrisului de mână (deși rata de succes a acestor aplicații este mult mai mică).
Recunoașterea vorbirii
Pentru oameni, recunoașterea vorbirii pare ceva intuitiv dar a realiza o aplicație care să facă acest lucru nu mai este deloc un lucru simplu. La începutul anilor 1980, Intel a proiectat o aplicație bazată pe o rețea neuronală artificială care putea să identifice vocea unei persoane pe baza unui vocabular limitat. Acest sistem, cunoscut sub numele de sistem de recunoaștere automată a vorbirii, poate identifica vocea unei persoane ce folosește un vocabular limitat pe baza căruia a fost antrenată rețeaua de către acea persoană. Această aplicație este utilizată în liniile de asamblare unde un inspector poate comunica cu calculatorul printr-o interfață vocala pentru a controla procesul de asamblare.
Clasificarea semnalelor produse de "sonar"
"Sonar"-ul este un echipament care permite detectarea obstacolelor submarine. Utilizarea echipamentului necesită un operator experimentat care să recunoască adevăratele obstacole în raport cu cele false. A fost realizată o aplicație bazată pe o RNA antrenată pe baza unor date ale sonarului înregistrate din cât mai multe direcții posibile. Sistemul a reușit să identifice 98% dintre obstacolele din setul de antrenare și 90% din datele noi.
II.5. Calculul neuronal în comparație cu calculul classic
Între abordarea problemelor cu ajutorul rețelelor neuronale artificiale și cea clasică bazată pe implementarea unui algoritm pornind de la un model formal există o serie de diferențe. Câteva diferente sunt marcate în continuare in tabelul nr.2.1 [4].
Tabelul nr.2.1
II.6. Rețelele neuronale în comparație cu sistemele expert
Un studiu comparativ al rețelelor neuronale și al sistemele clasice din Inteligența artificială conduce la :
Tabelul nr.2.2
II.7. Motivații pentru studiul rețelelor neuronale
Exisța mai multe motive de a studia rețelele neuronale. Dintre acestea amintim:
Sunt o alternativă la paradigma computațională clasică bazața pe descompunerea problemelor în unițați logice și pe secvența de instrucțiuni programate.
Pot fi considerate ca realizări prototip ale conceptului de procesare paralelă și distribuița lucru de interes având în vedere că tehnologiile actuale nu permit o mărire considerabilă a vitezei componentelor, prin urmare accelerarea rezolvării sarcinilor computaționale impune procesarea paralelă. Paralelizarea algoritmilor clasici nu este un lucru tocmai ușor, deci este de dorit să existe sisteme implicit paralele cărora să li se prezinte probleme formulate clasic.
Integrează rezultate din discipline variate în scopul obținerii unor arhitecturi simple de calcul. Reformularea unitară, în cadrul teoriei rețelelor neuronale, a unor tehnici deja clasice dar aparținând unor domenii variate asigură acoperirea unor zone de graniță, fapt important în condițiile în care interdisciplinaritatea câștigă tot mai mult teren.
Capitolul III. Proiectarea rețelelor neuronale artificiale
Din punct de vedere structural o rețea neuronala este un ansamblu de unitați funcționale simple interconectate. Orice rețea neuronala este caracterizată prin:
Specificul unităților funționale componenete
Arhitectura – modul de aranjare și interconctare a unităților funcționale
Funcționare – procesul prin care rețeaua transformă semnalele de intrare (de exemplu datele de intrare ale problemei de rezolvat) în semnale de ieșire (raspunsul retelei).
Învatare – procesul prin care rețeaua se adaptează la specificul problemei [9].
Unitateaea funcțională este componenta elementară de prelucrare a informației în cadrul unei rețele neuronale (vezi figura nr.3.1). Funcționarea acestor unități este inspirata de modul de funcționare a neuronilor biologici fară a ține însă cont de toate particularitățile acestora. În rețelele artificiale sunt folosite și modele de unități funcționale care nu au relevantă biologica.
III.1. Modelul neuronului formal
O unitățe funcțională primește semnale din partea altor unități și produce un semnal de ieșire (vezi figura nr.3.1). Atât semnalele de intrare cât și cele de ieșire sunt codificate numeric iar unitățea efectuează următoarele prelucrări:
integrează semnalele de intrare ținând cont de ponderea asociată fiecăruia;
transformă semnalul "integrat" prin aplicarea unei funcții, numită funcție de transfer sau funcție de activare obținând astfel un număr care reprezintă semnalul de ieșire.
Ponderile asociate conexiunilor sunt parametri ai funcției de integrare, care pentru un vector de semnale de intrare, Y E RN, determină o valoare, Xi numită starea neuronului.
Funcția de integrare asociată unui neuron i care primește semnale de la N neuroni este de forma GWi : R:N->R unde Wi reprezintă multimea ponderilor conexiunilor către neuronul i. Componenta Wij reprezintă ponderea conexiunii dintre unitatea j și unitatea i [9].
Figura nr.3.1. Exemplu de unitate funcțională
III.2. Arhitectura
Arhitectura unei rețele neuronale se referă la modul în care sunt amplasate unitățile funcționale (topologie) și la modul în care sunt interconectate (conectivitate).
Din punct de vedere al arhitecturii o rețea neuronală poate fi formalizată printr-un graf orientat etichetat în nodurile căruia sunt amplasate unitățile funcționale și ale cărui arce specifică conexiunile și, implicit, fluxul informațional[2].
Din punctul de vedere al rolului pe care îl au unitățile funcționale în cadrul rețelei, ele pot fi descompuse în trei categorii principale:
Unități de intrare. Primesc semnale din partea mediului. În cazul în care primesc semnale doar din exterior nu au alt rol decât de a retransmite semnalul primit către alte unități din rețea. În această situație nu sunt unități funcționale propriu-zise întrucat nu realizează nici o prelucrare asupra semnalului primit.
Unități ascunse. Sunt conectate doar cu alte unități ale rețelei fară a comunica direct cu mediul extern. Rolul lor este de a colecta semnale, de a le prelucra și de a distribui semnalul de ieșire către alte unități
Unități de ieșire. Colectează semnale de la alte unități, le prelucrează și transmit semnalul pe care îl obțin mediului extern.
În unele rețele cele trei categorii de unități formează mulțimi distincte. Cazul cel mai frecvent intâlnit este cel al rețelelor organizate pe nivele: un nivel de unități de intrare, unul sau mai multe nivele de unități ascunse și un nivel de ieșire. o situație particulară o reprezintă rețelele ce nu conțin unități ascunse ci doar un nivel de unități de intrare și un nivel de unități de ieșire.
In alte retele nu se face distinctie neta intre unitățile de intrare și cele de ieșire: toate unitățile preiau semnale din mediu, Ie prelucreaza și transmit rezultatul atat unităților din rețea cat și mediului [2].
Modul de amplasare a unităților determină topologia rețelei. Din punctul de vedere al acesteia există:
Rețele în care nu are importanță (din punctul de vedere al algoritmilor de funcționare și/sau de învățare) pozitia geometrică a unităților. Astfel de topologii sunt asociate rețelelor organizate pe nivele (figura nr.3.2) și retelelor Hopfield (figura nr.3.3). În reprezentările schematice ale rețelelor organizate pe nivele unitățile aceluiași nivel sunt reprezentate grupat deși pozitia lor nu are semnificație pentru procesul de funcționare și cel de invățare.
Rețele in care este esentiala organizarea geometrică, relațiile de vecinătate dintre unități intervenind in algoritmul funcționare sau în cel de învatare. Astfel de topologii sunt cele asociate rețelelor Kohonen (figura 3.4, figura 3.5) sau rețelelor celulare. Esențial în acest caz este definirea unei relatii de vecinatate intre unități. Modul de interconectare a unităților determina ftuxul de semnale prin rețea fiind un factor esential în stabilirea algoritmului de funcționare [3]. Din perspectiva prezenței conexiunilor inverse în graful asociat, rețelele pot fi clasificate in:
Rețele de tip "feed-forward". Nu există conexiuni inverse, fluxul informațional fiind unidirecțional dinspre setul unităților de intrare catre cel al unităților de ieșire. Conectivitatea între nivele poate fi totală sau locală[3]. Exemple de astfel de rețele sunt ilustrate în figura nr.3.7 și figura nr.3.8.
Rețele recurente. Graful asociat conține conexiuni inverse directe (bucle) sau indirecte (circuite) [3]. Exemple de rețele cu conexiuni inverse sunt ilustrate în figura nr.3.9.
Figura nr.3.2. Exemplu de rețea cu un nivel ascuns
Figura nr.3.3. Rețea cu conectivitate totală (rețea de tip Hopfield)
În concluzie se pot accepta următoarele clasificări:
Topologii
Principalele tipuri de topologii sunt:
Arbitrară. Mulțime de unități pe care nu este definită nici o relație de ordine. În acest caz nu are importanță nici locul și nici distanțele dintre unități. Un model cu o astfel de topologie este modelul Hopfield. De regulă, acestei topologii ii corespunde o conectivitate totală.
Pe nivele. Unitățile sunt împărțite în mai multe submulțimi, numite nivele. În cadrul unui nivel nu are importanță modul de aranjare a unităților. În această categorie intră rețelele feedforward cu unul sau mai multe nivele.
Cu structură geometrică. Unitățile sunt amplasate în nodurile unei grile unidimensionale, bidimensionale sau chiar tridimensionale. În acest caz se poate defini o funcție distanță între unități. În această categorie intra rețelele de tip Kohonen și cele celulare[3].
În practică se utilizează și arhitecturi mixte în care fiecare nivel poate avea o anumită structură geometrică.
Figura nr.3.4. Rețea cu organizare geometrică a nivelului de ieșire(retea Kohonen)
Figura nr.3.5. Tipuri de grile bidimensionale utilizate în algoritmii de învățare de la rețele Kohonen
Conexiuni
Principalele tipuri de conexiuni sunt:
Conexiuni între elementele a două nivele distincte. Sunt folosite în specialla rețelele organizate pe nivele.
Conexiuni între elementele aceluiași nivel (conexiuni laterale). Se folosesc la rețelele cu structură geometrică.
Conexiuni inverse prin care o unitate este conectată cu ea însăși. Pot fi folosite la toate tipurile de topologii [3].
Figura nr.3.6. Reprezentare schematică a unei rețele cu un nivel de intrare (N+1 unități) și un nivel de ieșire (M unități) și conectivitate totală între nivelul de intrare si cel de ieșire
Flux informațional
Fluxul informațional reprezintă modul în care "curge" informația prin rețea (de la unitățile care preiau datele de intrare catre unitățile care produc semnalul de ieșire) În funcție de modul de interconectare a unitătilor, fluxul informațional poate fi de una dintre categoriile:
Feedforward: flux unidirecțional (informatia circulă doar dinspre nivelul unităților de intrare înspre cel al unităților de ieșire). Este întâlnit la rețelele organizate pe nivele în care nu există conexiuni inverse .
Feedback: flux multidirecțional (un semnal produs de o unitate poate să ajungă din nou la unitatea respectivă fie direct, fie prin intermediul altor unități). Este întâlnit la rețelele cu organizare oarecare și la cele în care sunt prezente conexiunile laterale sau inverse [3].
Figura nr.3.7. Reprezentare schematică a unei rețele cu un K nivele de unități funcționale si conectivitate totală între nivelele consecutive
Figura nr.3.8. Variante de conectare a unităților de pe două nivele
Figura nr.3.9. Variante de conectare între două sau mai multe nivele
III.3. Funcționare
Funcționarea se referă la modul în care rețeaua transformă un semnal de intrare, X, într-un semnal de ieșire, Y. Ea depinde atât de modul în care functionează unitățile cât și de modul în care sunt interconectate.
Unul dintre parametrii cei mai importanti ai funcționării este ansamblul ponderilor asociate tuturor conexiunilor (W). La prima vedere, o rețea neuronală poate fi vazută ca o cutie neagră care primește date de intrare și produce un rezultat (figura nr.3.10).
Figura nr.3.10. Rețeaua neuronală ca sistem de transformare a semnalelor de intrare în semnale de ieșire
În funcție de specificul fluxului informational există doua moduri principale de funcționare:
Funcționare neiterativă. În cazul rețelelor în care fluxul informational este de tip feedforward, semnalul de ieșire, Y, se poate obține prin aplicarea unei funcții, Fw (care depinde de parametrii rețelei) , asupra semnalului de intrare, X (figura nr. 3.11).
Figura nr.3.11. Funcționarea unei rețele de tip feedforward
Funcționare iterativa. În cazul rețelelor în care sunt prezente conexiuni inverse nu este suficientă o singură "trecere" a semnalului de intrare, X, prin rețea pentru a obține semnalul de ieșire. Dimpotrivă, în acest caz funcționarea se desfășoară în timp, putând fi descrisă printr-un proces iterativ (figura nr.3.12) de forma:
X(O) = X, X(t + 1) = Fw(X(t)), t ~ O.
Figura nr.3.12. Funcționarea unei rețele recurente
Semnalul de ieșire se consideră ca fiind limita lui X(t) (X* = lim t->∞ X(t)). În implementări, limită se aproximează prin X(T), T fiind momentul în care este oprit procesul iterativ. Calitatea acestei aproximări depinde atât de proprietățile lui Fw cât și de X(O).
III.4. Învățare
Învățarea poate fi vazută ca fiind un proces prin care un sistem își îmbunătațește performanțele prin achizitie de cunoaștere.
Pentru rețelele neuronale învatarea se referă la orice modificare a mulțimii parametrilor (ponderile asociate conexiunilor și pragurile asociate unităților) care asigură o mai bună adecvare a comportării rețelei la problema pentru care a fost proiectată.
Capacitatea de a învăța este una dintre cele mai importante calități ale unei rețele neuronale, prin care aceasta este superioară altor metode. Posibilitatea învățarii din exemple permite evitarea formalizării în detaliu a problemei de rezolvat, un avantaj important mai ales în cazul problemelor pentru care o astfel de formalizare nu există. Prin procesul de învățare în parametrii rețelei este înglobată implicit o formalizare a problemei, aceasta putând fi utilizată în faza de funcționare.
Un alt aspect important al rețelelor neuronale este capacitatea de generalizare adică de a produce răspunsuri și pentru date pentru care nu a fost antrenată.
Procesul de învățare se bazează pe doua elemente:
O multime de informatii;
Un algoritm de adaptare la informatiile primite.
În funcție de natura informațiilor primite, învățarea poate fi de una dintre categoriile:
Nesupervizată (auto-organizare). Sistemul primește doar semnale de intrare din partea mediului și pe baza acestora descoperă trasăturile statistice ale populatiei stimulilor construindu-și o reprezentare codificată în ponderi a mediului. Această reprezentare poate fi ulterior utilizată pentru alți stimuli care provin din partea aceluiași mediu. Din punct de vedere algoritmic o asemenea metodă de adaptare consta într-un algoritm de construire a ponderilor care poate fi iterativ sau nu. Aceste metode sunt utilizate pentru aplicatii de memorare asociativă, grupare a datelor (clustering), analiza componentelor principale.
Supervizată. Se dispune de un set de antrenare (mulțime de exemple) care conține perechi de forma (i, d) cu i reprezentând semnalul de intrare, iar d răspunsul corect (în cazul învățarii supervizate propriu-zise) sau un indicator de corectitudine (în cazul celei de tip recompensă/ penalizare). Pe baza setului de antrenare ponderile se construiesc iterativ urmărind maximizarea unui indice de performanță sau minimizarea unei funcții de eroare. Relativ la această metodă de adaptare apar și următoarele probleme:
(a) Testarea retelei "antrenate" : se face de regulă prin reținerea din setul de antrenare a unui subset de testare (care nu este utilizat în determinarea ponderilor).
(b) Asigurarea unei bune capacități de generalizare: se mentine un nivel acceptabil de eroare pe setul de antrenare în scopul evitării supraînvățării (învățarea detaliilor nesemnificative din cadrul exemplelor)[3].
III.5. Rezolvarea unei probleme folosind rețele neuronale
Rezolvarea clasică (cu algoritmi bine precizați pentru fiecare clasă de probleme) a problemelor necesită cunoașterea a suficiente date despre problemă pentru a o putea descompune în unități logice elementare și pentru a elabora un algoritm care va ramane " înghețat" în structura lui, modificându-se doar datele pe care le prelucrează.
Dacă datele despre problemă nu sunt suficiente atunci problema nu poate fi formalizată și metoda de mai sus nu poate fi aplicată. În aceste situații pot fi utilizate rețele neuronale, etapele de rezolvare fiind:
Stabilirea unei arhitecturi inițiale care să fie compatibilă cu problema (de exemplu structura nivelului de intrare în rețea trebuie sa fie compatibilă cu numarul de date inițiale ale problemei) și alegerea tipului de unități funcționale. Stabilirea gradului de maleabilitate al rețelei prin specificarea parametrilor ajustabili (o rețea va fi cu atât mai generală cu cat va avea mai mulți parametri ajustabili). Pentru fiecare instanțiere a parametrilor se obține o anumită funcție asociată rețelei (două rețele având aceeași arhitectură dar valori diferite ale parametrilor pot rezolva două probleme diferite). În anumite cazuri chiar și arhitectura (de exemplu numărul de unități) este maleabilă ea fiind stabilită prin procesul de învatare[6].
Alegerea unui algoritm de învățare potrivit cu arhitectura rețelei și cu cantitatea de informație de care se dispune despre problemă. În alegerea algoritmului de învățare trebuie sa se țină cont de:
funcția pe care o poate realiza rețeaua (deci de arhitectură);
specificul "mediului informațional" al problemei (de volumul și natura datelor despre problemă).
Antrenarea rețelei pentru a rezolva o anumită problemă. Antrenarea se realizează prin "amplasarea" rețelei în "mediul informațional" specific problemei și activarea algoritmului de învățare.
Testarea (validarea) rețelei presupune verificarea corectitudinii rîspunsurilor pe care le dă rețeaua când primește date de intrare care nu apartin setului de antrenare dar pentru care se cunoaște răspunsul corect [6].
Utilizarea propriu-zisă a rețelei
Primele două etape se referă la proiectarea rețelei iar celelalte la adaptarea (antrenarea) și utilizarea ei. Adeseori o etapă premergătoare o reprezintă preprocesarea datelor. De exemplu dacă datele de intrare se constituie în vectori de valori numerice o transformare utilă o reprezintă normalizarea acestora.
Capitolul IV. Proiectarea neurochip-ului
În acest capitol este decrisa metodologia de implementare VLSI a neurochip-ului care pune în evidență puterea, performanța și domeniul care facilitează explorarea arhitecturii sale în stările de început ale dezvoltării
IV.1. Maparea algoritmilor pe arhitectură
Un algoritm reprezintă un set de instrucțiuni care sunt aplicate unor date într-o anumită ordine pentru a transforma intrările și stările interne în iesirile dorite. O arhitectură reprezintă un set de resurse și interconexiuni. Optimizarea unei arhitecturi să execute o clasă de algoritmi presupune un proces iterativ în care și algortmii dar și arhitectura sunt modificate pentru a îmbunatăți performanța[7].
Capacitate și performanță
Lărgimea de bandă spre memorie poate fi redusă prin salvarea de module multiple pe chip și aplicând fiecare pondere care vine tuturor modelelor de cache înainte de aducerea noii ponderi.
De asemenea partiționarea sistemului în porcesoare și memorii separate mărește energia de acces la memorie deoarece memoria este îndepărtată de pe procesor. În timpul procesului de învățare toate celulele tind să fie modificate tot timpul astfel cache-ul nu reduce energia de acces la memorie. În acest caz energia de acces la memorie poate fi redusă în mod substanțial distribuind procesoare memoriei. Arhitectura optimă balansează între puterea de acces disipat la memorie și puterea de comunicare între procesoare. Un dezavantaj al combinării procesoarelor cu memoria pe acelși chip este că procesele logice nu sunt optimizate pentru celule mici de memorie și procesele de memorie nu sunt optimizate pentru circuite rapide de logică.
Optimizarea algoritmilor
Optimizarea algoritmilor implică alegerea structurii VLSI cea mai simplă [5]. Această optimizare presupune alegera algoritmilor cât mai simplii care să poată oferi rezultatele dorite. Sre exemplu calcularea distanței: metrica Euclidiană față de metrica Manhattan. Metrica Manhattan poate fi implementată folosind mult mai puțini tranzistori.
IV.2. Arhitectura
Folosind diverse tehnici performanțele pot fi mărite, se poate micșora suprafața și consumul de energie. Aceste tehnici sunt: pipelining, precizie, iterație, concurență, regularitate, localizare. Dintre acestea precizia și localizarea sunt cele mai folositoare în aplicațiile cu rețele neuronale.
Pipelineing
Pipelineing-ul poate fi folosit pentru rețelele neuronale deoarece multe operații sunt executate între deciziile dependente de date care pot provoca stări de așteptare în pipeline și întârzierea unei singure unități nu este atât de improtantă ca și comunicarea și puterea de computație a sistemului.
Pipelining a fost folosit pentru îmbunătățirea performanței. Poate fi folosit de asemenea pentru micșorarea puterii consumate păstrând însă nivelul de performanță. Pentru resurse date există o logică optimă de minimizare a energiei la o rată de transfer constantă. A fost demonstrat că logica optimă pentru un multiplexor 32×32 biți este egală cu propagarea întârzierii la un sumator 4:2. La această logică penalizarea suprafeței este de 37% [7].
Precizia
Implementările digitale necesită doar destulă precizie temporală ca să depășească rata Nyquist a exemplificării sistemului. Trebuie doar să aibă precizie aritmetică ca să distingă elementele care sunt distincte în implementări analoage. Cuantizarea erorilor datorate preciziei mici reprezentările numerice se comportă ca și zgomot, ceea ce de multe ori îmbunătățește performanța algortimilor de învățare.
Precizia poate avea un impact important asupra dimensiunii, a puterii și a performanței. Suprafața unui multiplexor este proporțională cu numărul său de biți la pătrat. Un multiplexor 32×32 biți este de 16 ori mai mare decât un multiplexor 8×8 biți [7].
Aritmetica de precizie mică are problemele sale speciale în primul rând în legătură cu păstrarea rezultatelor intermediare în domeniul dinamic disponibil, și minimizarea erorilor sistematice. Statisticile cu privire la erori vor fi influențate de tipul metodei de cuantizare folosită. Aceasta include trunchiere, rotunjire și blocare.
Iterația
Structuri iterative calculează un rezultat parțial la fiecare ciclu folosind o parte din hardware solicitat pentru o implementare paralelă în îtregime. Aceasta poate fi deosebit de folositor în operații convolutive sau acumulative ca și înmulțiri și produse interioare. Iterația este o tehnică excelentă pentru exploatarea nivelelor înalte de performanță atinse în tehnologiile submicronice în timp ce reduce și suprafața necesară implementării resurselor aritmetice.
Un aspect al structurii iterative este ca clock-urile de viteză mare să fie generate asincron în momentul folosirii și să fie distribuite local pe structura iterativă.
Concureța
Concurența este o tehnică larg folosită pentru creșterea performanței prin paralelism. Cu toate cî există o mare concurență la nivelul de sistem, concurența unui singur chip depinde de rata CPS/C a aplicației. În aplicațiile de procesare a semnalelor nivelul de paralelism într-un singur chip va fi limitată de densitatea de putere. În rețelele mari va fi limitată de necesitățile de memorie.
Regularitate
Regularitatea într-o arhitectură sau un algoritm permite un nivel mărit de complexitate să fie exprimată cu cat mai puțină energie pentru implementare. Rețelele neuronale sunt compuse dintr-un număr mare de elemente asemănătoare, care poate fi tarnspus direct într-o descriere de implementare simplificată.
Localizare
Este foarte important să se maximizeze localizarea pentru a se minimiza energia de comunicare. Cu cât cablurile sunt mai scurte cu atât mai bine deoarece energia de comunicare este proporțională cu lungimea cablurilor și lărgimea de bandă pentru comunicare este invers proporțională cu lungimea acestora. Arhitecturile masiv paralele trebuie să fie foarte prevăzătoare în legătură cu numărul de conexiuni lungi.
IV.3. Construirea blocurilor
Un număr de circuite de bază și tehnici de implmentare pot fi folosite în avantajul implementării digitale a rețelelor neuronale. În continuare vor fi prezentate structurile specifice care sunt folositoare în rețelele neuronale digitale.
Logica stilului de implementare
Logica implementării diferă în schimbul de viteză, putere și suprafață. Familia de logică cu viteza cea mai mare tinde să consume cea mai mare putere, iar cele mai compacte tind să fie încete.
Pentru operații care necesită voltaj scăzut, logica statică funcționează mai bine decât cea dinamică. Cea mai bună logică pentru aceste operații este L-DPTL. Aceasta este similară cu CPL sau DPTL dar folosirea inversoarelor transformă faza de ieșire într-una cu semnificație de aplificator diferețial.
Registre și clock-ul
Fiecare stil de abordare este diferit prin schimbul de viteză, puetre, dimensiune și limita de oparare. Clock-ul cu cea mai mare performanță tinde să aibă limitele de operare cele mai restrânse. Cele cu limită mare de operare în general costă putere și dimensiune.
Registru-urile sunt strâns legate de clock. C2MOS, NORA și TSPC au fiecare propriile registru-uri. Majoritatea implementărilor folosesc fie registru-urile fully static fie pseudo-static. Acestea sunt de mare performanță, compacte și necesită putere mică. Prezintă însă și dezavantajul că nu funcționează la voltaj scăzut deoarece tranzistorul lor de trecere nu poate face trecerea peste un 0 salvat. Pentru registru-urile de voltaj scăzut, tranzitorul de trecere poate fi schimbat cu o poartă de transmisie. La voltaj scăzut
L-DPTL oferă cele mai bune performanțe.
În continuare sunt prezentate diferite tipuri de registru (figura 4.2).
Distribuția clock-ului
Există trei tipuri de scheme de clock-uri cu o singură fază: cele care generează /CLK (complmentul CLK-ului) global, local și care nu îl generează. /CLK-ul global are cele mai bune performanțe, dar și marginile cele mai înguste. /CLK-ul local are margini mai largi, dar în general performanță scăzută.
Distribuția clock-ului la nivelul de chip este foarte importantă în special în sistemele de viteză mare, putere scăzută. A devenit tot mai dificil deoarece chip-urile cresc în performanță și scad în dimensiune. În mașina Boltzmann se atașează tuturor clock-urilor circuite identice pentru a avea aceeați latență. După care se reglează dimensiunea tranzistorilor că să se copmenseze diferența de încărcare.
Calibrarea alimentării
Alimentarea trebuie să fie calibrată pentru a evita căderile de rezistență excesive de-a lungul șinelor și pentru a se menține în limita de migrație a metalului. Limita de migare a metalului este aproximativ limita mediei curentului care poate circula printr-un cablu fără a despărții atomii metalului și a distruge cablul. Limita de migrare a metalului într-un proces de 2.0μ este aproximativ 0.7mA/μ. wmin este ponderea minimă a cablului și este dată de wmin=Ion/((Id/a)Jmax), unde Ion este curentul print-un dispozitiv pornit (ON) în mA, Id este profunzimea logicii din implementare, a este activitatea și Jmax este limita de migrație a metalului exprimată în mA/μ.
De asemenea există o limită a căderii tensiunii de rezistență. Pentru a păstra căderea de tensiune pentru o magistrală de putere sub 100mV la 5V în timp ce un singur dispozitiv 6:2 este comutat, trebuie ca 0.1/rs>4.9/rd, unde rs este rezistența de alimentare și rd este rezistența dispozitivului. În implementările mai vechi exista tendința de plasare a magistralelor de alimentare pe oricare parte a caii de date. Dacă calea de alimenatre este paralelă cu cea a datelor, puntul de maxim al curentului pe cale va fi mai mic decât dacă ele ar fi fost perpendiculare pe calea de date. O aboradere mai recentă implică trasarea cailor orizontal în metalul1, după care vor fi trase vertical în metalul2. Aceasta funcționează mai bine deoarece căderea de tensiune de rezistență este proporțională cu pătratul lungimii cablului, grosimea depinzând de numărul de dispozitive active ca și de lungimea cablului.
Figura nr.4.2. Tipuri de registru
Multiplexoare
Multiplexoarele sunt folosite în circuite de comunicație, aritmetică, logică și memorie. Un multiplexor cu N intrări poate fi implementat folosind tranzistoare 4N/3. Cablajul, în general face ca densitatea de tranzistoare la multiplexor să fie mai mică decât la circuite logice. Foarte des multiplexoarele sunt îmbinate cu alte funcții pentru a reduce suprafața. Celulele multiplexoarelor sunt în general implementate folosind logica fully static pentru a funcționa corect în diferite condiții [9].Un multiplexor cu 2 intrări necesită trei porți /ȘI cu 2 intrări, ceea ce presupune 12 tranzistori. Însă într-un context favorabil această funcție poate fi implementată folosind doar 2 tranzistori de trecere.
Elemente aritmetice
Sunt folosite o serie de circuite specializate pentru funții aritmetice și logice:
SAU-EXCLUSIV, elemente de șiftare, Comparatoare rapide, Numărătoare, Sumatoare, Înmulțitoare, Acumulatoare, elemente de înregistrare, elemente de extindere a semnului și mașini în virgulă flotantă.
Memoria
Înregistrarea sinaptică de energie și densitate sunt de mare importanță pentru rețelele neuronale. În tabelul prezentat mai jos sunt comparate diverse celule de memorie. MOSIS sunt celule RAM fabricate folosind logica standard. În cele mai multe cazuri celulele digitale pot stoca un singur bit; stocarea a 5 biți necesită 5 celule digitale de memorie, dar doar o celulă analogică. Dimensiunea celulelor este specificată în λ pentru a fi scalate cu ușutință pentru diverse tehnologii.
Celulele analogice sinaptice sunt incluse pentru comparare. Se observă din tabelă că celulele de învățare sinaptice analogice au densitate de stocare mult mai mică decât celulele digitale de memorie, ceea ce este o piedică în implementarea rețelelor mari.
Memoriile dinamice cu acces random și un trazistor au densitatea cea mai mare. Memoria statică cu 6 tranzistoare consumă cea mai puțină putere.
Registrele de șiftare sunt implementate deseori folosind fie SRAM fie DRAM, astfel consumând mai puțină putere și spațiu [9].
În continuare sunt prezentate într-un tabel diferite tipuri de celule de memorie(vezi tabelul nr.4.1). Numerele din paranteză sunt suprafețe relative de sinapse digitale de 6-biți.
Tabelul nr.4.1. Tipuri de celule de memorie
DRAM
DRAM-ul comercial oferă densitate de stocare limitată de îngrădirea de metal. Nodul de stocare este plasat la intersecția unei linii de cuvinte cu o linie de biți. DRAM-ul necesită mai multă esergie deoarece funcția de citire a lor este destructivă (la fiecare citire dintr-o celulă aceasta este rescrisă), iar scrierea necesită oscilarea linie de biți cu cel puțin un prag sub Vdd. De asemenea DRAM-ul trebuie să fie reactualizat datorită scurgerilor de curent [9]. În mod normal puterea consumată pentru reactualizare este mică, dar poate să însemne ceva în cadrul unei rețele mari. În figura nr.4.3 se pot observa celule dinamice de memorie
Figura nr.4.3. Celule dinamice de memorie
FLASH
Memoria FLASH EPROM este cel puțin la fel de densă ca și DRAM-ul cu un tranzistor deoarece datele sunt stocate într-o poartă în virgulă flotantă la intersecția dintre o linie de de cuvinte și una de biți. FLASH-ul este folosit pentru stocarea de valori analogice sau digitale. FLASH-ul cu un singur tranzistor de obicei citește la tensiune mică și scrie la tensiune mare, deci timpul de citire este limitat de tensiunea redusă, iar scrierile dureayă mai mult și consumă mai mult decât la alte tipuri de memorie. Celulele FLASH sunt folosite pentru a reduce timpii de citire și consumul de energie la citire.
SRAM
SRAM-ul consumă puțină energie deoarece citirile și scrierile necesită schimbări minore în linia de voltaj. Această diferență poate fi amplificată fără a influența liniile de biți. În figura nr.4.4 se pot observa celule statice de memorie.
Cache-ul
Pentru arhitectura internă accesele la memorie sunt predictibile și secvențiale. Memoria poate fi folosita ca internivel prin aducerea unui număr de cuvinte în paralel dintr-un bloc în cache și apoi accesând aceste cuvinte din cache. Internivelarea de dimensiune N permite ca printr-un singur acces la memorie să se ocupe N cicluri. Un port de memorie K poate fi implementat cu cache-uri K și internivelare de ordin N atâta timp cât timpul de acces al memoriei este mai mic decât N/K cicluri. Cache-ul este folosit pentru aducerea ponderilor procesorului neuronal și simultam să actualizeze ponderile.
Figura nr.4.4. Celule statice de memorie
Sursa de zgomot
Zgomotul joacă un rol important în multe aplicații ale algoritmilor neuronali. Generarea unui număr mare de zgomote este însă o problemă. În cadrul neurochipului descris se foloseste un registru de șiftare cu SAU-EXCLUSIV feedback așezate în locuri startegice. O asemenea structură generează o scurgere pseudoaleatoare de biți. Folosim fiecare din acești biți pentru a iniția unitățile ascunse ale masinii Boltzmann cu +/- 1.
Capitolul V. Descriere aplicație
V.1. Principii și medii de implementare
În cadrul aplicatiei dezvoltate de mine sunt prezentate 3 elemente esentiale în proiectarea și funcționarea neurochip-ului: o celulă funcțională (1), legarea mai multor celule într-o rețea neuronală (2) și exemplificarea procesului de învățare a unui perceptron (3).
Mediile de dezvoltare folosite sunt: Borland Delphi 7 (pentru 3) și Microwind2 (pentru 1 și 2). Deoarece Delphi este destul de popular în mediul operatorilor de calculatoare o să mă opresc la descrierea pe scurt doar a Microwind-ului. Acesta este un mediu dezvoltat la INSA Toulouse de catre Etienne Sicard și este un program pur didactic pentru exemplificarea de implementari VLSI. Implementarile VLSI aduc un plus de viteză cu o putere consumata mai mică datorită naturii sale de operare în paralel. Programul este deschis spre o arie larga de implementări, oferind suport pentru implementare prin realizarea unor funcții simple (dar eficiente) doar prin intermediul unui compilator (citeste funcția și oferă implementarea). Programul operează cu valori digitale ceea ce îi marește puterea de operare cu funcții complexe, și oferă posibilitatea simulării fucționării circuitului implementat.[13] De asemenea se oferă posibilitatea vizualizării implemntarii circuitului proiectat pe polisiliciu prin intermediul unei funcții.
V.2. Celula funcțională
Celula neuronală implementată în cadrul aplicației este un circuit cu intrări, ponderi și ieșiri digitale(vezi figura nr.5.1), dar operațiile interne sunt analogice, ceea ce oferă imunitate la zgomot și dimensiune compactă.
Celula include următoarele unități descrise detaliat în continuare: circuite sinaptice, circuit de control al ponderilor, circuit de inițializare, circuit comparator și un circuit de reacție inversă (feedback). Numărul circuitelor sinaptice este același cu cel al intrărilor (în cazul aplicației este prezentată o celulă cu o singură intrare pentru o mai bună înțelegere a funcționării și simplitatea în implementare)[5].
Figura nr.5.1. Diagrama celulei neuronale[5]
V.2.1. Circuitul sinaptic
Figura nr.5.2. Diagrama circuitului sinaptic [5]
Semnalul Vwtin controlează MP1 și MN1, care funcționează ca niște surse. Semnalele PUP_ și PDN sunt cele care activează/dezactivează aceste surse(vezi figura nr.5.2). MP1 și MN1 nu rămân constante când tensiunea din CAPNODE se apropie de Vcc (respentiv Vdd în Microwind2- vezi figura nr.5.3) și Vss, ele vor funcționa în regiunile de nesaturație. Chiar și în regiunile de saturație, existența parametrului de modulare de lungime a canalului λ va face ca curentul să varieze când se modifică tensiunea din CAPNODE
Înaintea prezentării unor scheme de implementare a circuitelor în Microwind2 mai trebuie facute unele precizări, cum ar fi corespondența culorilor cu anumite materiale utilizate în proiectare, specificarea conexiunilor și conectorilor. Astfel avem următoarele simboluri: roșu reprezintă polisiliciu, albastru – metalul, verde – difuzie de tip N (folosit pentru implementarea tranzistorilor N), maro – difuzie de tip P (implementarea tranzistorilor P), conectoare roz – conectoare metal-polisiliciu, conectoare mov – conectoare metal cu difuzie de tip P, conectoare metal cu difuzie de tup N, Vdd – tensiunea asigurată pentru „1” logic, Vss – tensiunea „0” logic.
Figura nr.5.3. Implementarea circuitului sinaptic în Microwind2
Controlul circuitelor sinaptice se realizează prin intermediul circuitului de control al sinapselor care este implemantal în conformitate cu diagrama următoare [5] (figura nr.5.4):
Figura nr.5.4. Circuitul de control al sinapselor
Iar implementarea în Microwind2 este prezentată în continuare (figura nr.5.5):
Figura nr.5.5. Implementarea circuitului de control al sinapselor in MicroWind2
V.2.2. Circuitul de control al ponderilor
În cadrul circuitelor de control al ponderilor sunt preferate semnalele dogitale datorită robusteții. Circuitul de control al ponderilor este folosit pentru a reduce dimensiunea tranzistoarelor și are funcția unui convertor analog-digital. Convertește semnalul digital în tensiunea de control a semnalului Vwtin. Circuitul implementat în microwind conține o singură pondere deoarece întreaga celulă este descrisă pentru o singură intrare (vezi figura nr.5.7).
Figura nr.5.6. Diagrama circuitului de control al ponderilor
Figura nr.5.7. Implementarea circuitului de control al ponderilor in MicroWind2
V.2.3. Circuitul cu reacție inversă
Spre deosebire de circuitul sinaptic, circuitul cu reacție inversă folosește surse constante pentru a înărca și a descărca condensatorul. Semnalele FPUP_ și FPDN sunt generate de CLK, semnalul de ieșire al comparatorului și semnalul inițial de ieșire.
Diagrama circuitului cu reacție inversă (figura nr.5.8) și implementarea sa în microwind2 (figura nr.5.9) :
Figura nr.5.8. Diagrama circuitului cu reacție inversă
Figura nr.5.9. Implementarea circuitului cu reacție inversă in MicroWind2
V.2.4. Circuitul comparator
Un comparator simplu în doi pași este folosit pentru a compara tensiunea din CAPNODE și tensiunea Vss. Compararea se face cu tensiunea de pământare, adică „0” logic deoarece semnalul care se dorește obținut la ieșire este „1” logic și acesta trebuie menținut pe acest nivel chiar dacă funcționarea circuitului continuă. Diagrama și implementarea acestui circuit sunt prezentate în continuare:
Figura nr.5.10. Diagrama circuitului comparator [5]
Figura nr.5.11. Implementarea circuitului comparator in MicroWind2
V.2.5. Circuitul de inițializare
Circuitul de inițializare resetează tensiunea din CAPNODE la tensiunea de referință Vref înaintea începerii execuție operațiilor. Este un circuit simplu declanșat de semnalul crescător al CLK-ului. Diagrama sa și implementarea în Microwind sunt prezentate în figurile nr.5.12 si nr.5.13.
Figura nr.5.12. Diagrama circuitului de inițializare
Figura nr.5.13. Implementarea circuitului de inițializare in MicroWind2
În continuare vor fi prezentate schema completă a celului neuronale implementată în Microwind2(vezi figura nr.5.14), felul în care aceasta funcționează și felul în care aceasta poate fi implementată la nivel hardware. În cadrul schemei apar conectate toate componentele prezentate anterior plus câteva circuite necesare la realizarea anumitor funcții cum ar fi generarea semnalelor FPUP_ și FPDN prin inversarea CLK-ului și a semnalului de ieșire OUT. Semnalele de activare folosite sunt: semnalul de ieșire „1” logic (2,5V) menținut în această stare, semnalul de intrare IN care este un semnal oscilator asemanator CLK-ului, și reprezintă activarea intrării cu „0” și „1” logic succesiv, semnalul Data care activează registrul D și este semnalul care are rolul de aducere a datelor ce trebuie procesate, Vref considerată tensiunea de referință considerată a fi optimă la 5V (în urma testării mai multor tensiuni), ponderea W1 poate fi considerată un semnal treaptă inițial de o amplitudine mică după care aceasta crește. În cadrul simulării(vezi figura nr.5.15) sunt prezente semnalele IN, CLK, Q, nQ, Data, OUT și CAPNODE fiecare aducându-și aportul asupra modificării ponderii în final exemplificând procesul de învățare și funcționare al celulei.
Figura nr.5.14. Schema completă a celulei neuronale implementată în Microwind2
Figura nr.5.15. Simularea funcționării celulei neuronale
Figura nr.5.16. Circuitul văzut în 3D (modelul de proiectare al celulei).
V.3. Legarea mai multor cellule in rețea
Crearea unei rețele de celule presupune urmărirea anumitor principii de conectare și evaluare a funcționalității. În rețeaua exemplificată de mine în cadrul aplicației sunt conectate 16 celule implementate VLSI cu ajutorul a 2 amplificatoare operaționale [5]. Fiecare celulă este conectată la 6 vecini, formând o matrice hexagonală ca în figura nr.5.17.
Figura nr.5.17. Diagrama rețelei
Cel mai mare beneficiu al unei asemenea implementări reprezintă puterea mare de calcul datorată paralelismului obținut prin faptul că o funcție este calculată de catre toate celule din rețea în același timp. Un dezavantaj îl reprezintă faptul că nu se pot reține rezultate parțiale din funcția executată, neputând știi cu exactitate ce informație este deținută într-un moment în fiecare celulă. Implementarea unei asemenea rețele în Microwind2 arată în felul următor(figura nr.5.18):
Figura nr.5.18. Implementarea rețelei de celule
Figura nr.5.19. Simularea funcționării rețelei de celule
Al doilea grafic(figura nr.5.19) reprezintă simularea funcționării rețelei și arată faprul că pentru a menține 2 semnale de iețire pe „1” logic: OUT1 și OUT2 contribuie nu numai intrările IN1 și IN2, dar și celelate celule din rețea, spre rețea fiind transmis semnalul spreNet1. Asemenea rețele sunt folosite în cadrul neurochip-ului în implementarea unităților de calcul (matricial, vectorial sau alte funcții).
V.4. Procesul de invățare al unui perceptron
În cadrul aplicatiei este exemplificată funcționarea perceptron-ului, având date de intrare și ieșirea dorită, se evidentiaza prin intermediul a 2 legi capacitatea de învățare a acestuia. Prima este legea lui Hebb : wij(n+1) = wij(n)+ c yi yj , unde wij(n) este ponderea conexiunii de la neuronul i la neuronul j înainte de ajustare, wij(n+1) este ponderea acestuia după ajustare, iar c coeficient de proporționalitate adecvat ce reprezintă constanta de instruire (învățare) [14]. A doua este dată de Frank Rosenblatt :
Se inițializează ponderea cu un număr aleator cât mai mic (w1=0.15 și w2=0.2)
Se dă valoare intrărilor și în funcție de acestea este calculată ieșirea
Se recalculează ponderile cu ajutorul formulei : wi(t+1) = wi(t)+ n(d-y)xi unde:
d reprezintă ieșirea dorită
t este numărul iterației
n este ponderea iterației (0.0<n<1.0 echivalent cu step în aplicație)
x este intarea iar y ieșirea
Se repetă pașii 2 și 3 până când eroarea de iterație este mai mică decât cea specificată de utilizator sau până la terminarea unui număr dorit de iterații (20 în cadrul aplicației- vezi tabelul nr.5.1).
Aplicația demonstrează capacitatea de adaptare a perceptronului pentru diverse tipuri de probleme, specificate fiind doar operații aritmetice și logice simple, puterea de adaptare a acestuia fiind însa mult mai mare. însa nu poate fi exploatată doar la nivel de perceptron ci la un nivel mărit cum ar fi neurochip-ul.
Aceleași valori sunt considerate pentru ambele reguli de învățare.
Figura nr.5.20. Interfața aplicației
Tabelul nr.5.1. Tabel de valori pentru calcularea numărului de pași efectuați pentru fiecare caz
Aplicația este ușor de utilizată, fiind prezentată prin intermediul unei interfețe grafice explicite și compacte. În cazul unei erori care ar putea să apară în timpul rulării aplicației acestea sunt specificate și controlate, încercât să se diminueze efectul lor.
Concluzii
În primul rând trebuie avut în vedere faptul că implementarea unui neurochip este o urmarea a noii paradigme și anume cea neuronală, apărută mult mai recent, și diferită din majoritatea punctelor de vedere decât paradigma simbolistică (paradigma von Neumann). Dacă paradigma simbolistică presupunea simbolizarea tuturor elementelor componente ale unui procesor pentru a putea citi sau evalua informația în orice moment al execuției unui proces, în cazul paradigmei neuronale nu putem cunoaște cu exactitate unde de unde putem să scoatem un anumit rezultat parțial sau în ce stadiu de calcul este. Unitățile realizate ca urmare a acestei paradigme sunt asemănătoare unor black-box-uri, unde aplicăm valori la intrare și obținem rezultatele la ieșire.
Arhitectura neurochip-ului este specifică pentru rezolvarea unor clase specifice de alicații cum ar fi: matrice la matrice (foarte eficient rezolvate), vector la matrice (nu folosesc întregul potențial al neurochip-ului), vector la vector (comparabile în eficiență cu alte procesoare).
Neurochip-ul poate fi folosit ca element pentru implementarea neuro-acceleratoarelor pentru PC-uri, sisteme neuro-computer, support hardware pentru operații matriciale de orice mărime și procesare de semnale digitale. Posibilitatea de a procesa variația lungimii operanzilor oferă posibilitatea de a creste eficiența prin micșorarea lungimii operanzilor și astfel să realizeze o relație optimă între precizie și eficiență. Neurochip-ul poate fi folosit ca un sistem de sine stătător datorită setului de instructiuni de care dispune, adreselor aritmetice puternice, porturi de comunicare rapida compatibile cu procesoarele cunoscute și interfeței programabile.
O implementare CMOS a neurochip-ului de tipul unuei rețele feedforward asigură actualizarea ponderilor pe chip în paralel pentru controlul în timp real a anumitor aplicații. Experimentele au demonstrat folosirea cu succes a acestui chip pentru controlul în timp real a unor aplicații. În viitor se prevede folosirea unor regului de ănvățare adaptabile pas cu pas proporțional cu semnalul de eroare și stocarea nevolatilă a ponderilor.
Implmentarea VLSI poate fi foarte eficientă pentru arhitecturile rețelelor neuronale. Principala tehnică folosită este multiplexarea timpului pentru resurse mult mai rapide pentru a compensa densitatea mică de componente disponibile în VLSI. Se speră egalarea lărgimii de bandă pentru decizii și comunicații ca și sistemele biologice, dar nu va fi capabil să egalizeze densitatea de conexiuni sinaptice fără o inovare în tehnologie sau în codificarea informațiilor. Un alt avantaj al implementării VLSI este puterea mărită de calcul datorită faptului că se lucrează cu valori digitale, care sunt mai ușor de manevrat în cadrul unor funcții coplexe.
Ca urmare a rezultatelor obținute în urma simulărilor facute în cadrul aplicațiilor am deprins următoarele idei: regula de invățare are o mare importanță în procesul de învățare și funcșionare al unui precepron și implicit al neurochip-ului, ea putând încetini sau accelera funcționarea neurochip-ului; felul în care este implementată o celulă din cadrul unei unități de calcul a neurochip-ului este de asemenea de o importanță deosebită, de aceea am ales această implementare VLSI care oferă o soluție compactă și eficientă (rezistență mare la zgomot datorită funcționării interne analogice); iar în cazul rețelelor de celule implementate pentru operații matriciale sau procesare de semnale, acestea sunt foarte bine alese deoarece oferă paralelism și putere de calcul mare, în funcție de necesitățile aplicației este realizată această rețea.
Unele dintre proprietățile esențiale ale neurochip-ului sunt caracterul său adaptiv, faptul că poate să-și stabilească parametrii de funcționare printr-un proces de invățare bazat pe informațiile primite. Astfel de sisteme sunt adecvate pentru problemele ce sunt dificil sau chiar imposibil de formalizat pentru ele existând doar exemple de rezolvare. O altă caracteristică esențială este paralelismul înlt de care dispune, el fiind capabil de calcule masive folosind un minim de resurse.
Cu toate că mai există multe probleme în realizarea acestor neurochip-uri, există mari speranțe că implementarea lor și funcționarea corectă va fi de mare ajutor în multe domenii de aplicații.
Bibliografie
[1] Ashlock, D.(2006), „Evolutionary Computation for Modeling and Optimization”, Springer;
[2] Ben J. A. Krose, P. Patrick van der Smagt, (1994),”An Introduction to Neural Networks”
[3] Daniela Zaharie, „Rețele neuronale”(2013), Note de curs
[4] Daniela Zaharie, „Calcul neuronal si calcul evolutiv”, (2013), Note de curs
[5] Dong Pan; Wilamowski; B.M.(2003), „A VLSI implementation of mixed-signal mode bipolar neuron circuity, Page(s): 971-976
[6] Iulian Nastac, (2002), „Rețele neuronale artificiale.Procesarea avansată a datelor”, Printech, Bucuresti
[7] Marius Crișan, „Introducere în calculul Inteligent” (2012), Note de curs
[8] Stuart J. Russel; Peter Norvig, (2003), „Artificial Inteligence: A Modern Approach”
[9] Virgil Tiponuț, C.D.Căleanu (2001), „Rețele neuronale. Aplicații”, Editura Politehnica, Timisoara
[10] http://www.ucalgary.ca/news/utoday/august1-2012/neurochip
[11]http://www.technologyreview.com/news/520211/qualcomm-to-build-neuro-inspired-chips/
[12]http://www.its.caltech.edu/~pinelab/new_pinelab_page/current-research/neurochip.htm
[13]https://faculty-web.msoe.edu/durant/courses/ee393/VLSI_Layout_using_Microwind2.ppt
[14]http://upm.ro/intranet/ecalin/cd_educational/cd/neuron/cap4/cap4.htm
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Elemente de Proiectare a Unui Neurochip Pentru Operatii Aritmetice Si Logice (ID: 162424)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
