doc_ssc

download doc_ssc

of 15

Transcript of doc_ssc

  • 7/31/2019 doc_ssc

    1/15

    CATEDRA DE CALCULATOARE

    IMPLEMENTAREA REELELOR NEURONALE

    FOLOSIND TEHNOLOGIA FPGA

    Student:

    Popa Bogdan

    gr. 30232

    ndrumtor:prof.dr.ing. Baruch Zoltan Francisc

  • 7/31/2019 doc_ssc

    2/15

    Cuprins1. Rezumat .................................................................................................................................................... 1

    2. Introducere ............................................................................................................................................... 2

    2.1. Conceptul de retea neuronala artificiala ........................................................................................ 2

    2.2. Retele neuronale pe FPGA ................................................................................................................. 2

    3. Fundamentare teoretica ........................................................................................................................... 3

    3.1. Neuronul artificial .............................................................................................................................. 3

    3.2. Arhitectura unei retele neuronale ..................................................................................................... 4

    3.3. Algoritmul de invatare ....................................................................................................................... 5

    3.4. Modelarea functiei XOR ..................................................................................................................... 6

    4. Proiectare si implementare....................................................................................................................... 6

    4.1. Proiectarea sistemului ....................................................................................................................... 6

    4.2. Structura unui neuron ........................................................................................................................ 7

    4.3. Interfata utilizator .............................................................................................................................. 9

    5. Rezultate experimentale ......................................................................................................................... 10

    6. Concluzii .................................................................................................................................................. 11

    Bibliografie .................................................................................................................................................. 12

    Anexa A ....................................................................................................................................................... 13

  • 7/31/2019 doc_ssc

    3/15

    1

    1. RezumatRetelele neuronale reprezinta un subiect de actualitate in inteligenta

    artificiala, datorita spectrului larg de aplicatii la care se preteaza si potentialuluimare (si inca incomplet exploatat) pe care il prezinta. Datorita structurii paralele a

    unei astfel de retele, am incercat o implementare pe FPGA, un astfel de dispozitiv

    fiind indicat pentru calculul paralel. Cel mai important factor de luat in vedere a

    fost precizia unei astfel de implementari, aceasta decizie afectand in mod direct

    performantele de timp si spatiu ocupat. Pe langa limbajul VHDL standard, am

    utilizat o biblioteca care permite calcule in virgula fixa, acesta fiind modul de

    reprezentare ales pentru valorile numerice utilizate. Pentru testare, am folosit o

    placa Digilent Nexys 3. Proiectul implementat simuleaza problema XOR, foartecunoscuta in lumea retelelor neuronale.

  • 7/31/2019 doc_ssc

    4/15

    2

    2. Introducere

    2.1. Conceptul de retea neuronala artificiala

    O retea neuronala este un model computational, de inspiratie biologica,

    alcatuit din mai multe elemente de procesare interconectate dupa o anumita

    arhitectura, care functioneaza in paralel. Elementele de procesare se numesc

    neuroni artificiali. Reteaua contine unul sau mai multe straturi de elemente de

    procesare, in functie de topologia aleasa.

    Caracteristica retelelor neuronale care le diferentiaza de alte sisteme de

    calcul paralel este capacitatea acestora de a de a invata si de a se adapta mediului

    inconjurator, folosindu-se de experienta anterioara pentru a-si imbunatati

    performantele. Aceasta caracteristica le incadreaza in zona inteligentei artificiale.

    Dintre aplicatiile unde retelele neuronale sunt folosite cu succes, amintim:

    aproximarea functiilor, recunoastere de forme, predictoare, simulatoare si

    memorii asociative.

    2.2. Retele neuronale pe FPGA

    Proiectul de fata se doreste a fi o comparatie in termeni de cost si eficienta

    cu o implementare experimentala de retele neuronale care foloseste aplicatia

    FloPoCo si formatul de reprezentare in virgula mobila. Ambele implementari

    exploateaza paralelismul descrierilor hardware concurente, o astfel de abordare

    fiind mult mai eficienta decat una software, in care operatiile se executa

    secvential.

    Castigul este unul real din punct de vedere al timpului mai ales cand se

    pune problema antrenarii unei retele neuronale. Aceasta are nevoie de seturi

    mari de date pentru a atinge rata de precizie necesara aplicatiei respective, iar

    aplicarea unui algoritm de invatare este, in acest caz, realmente costisitoare.Printr-o implementare paralela, acest timp se poate reduce de la cateva ore pana

    la cateva minute sau chiar secunde, daca luam in considerare faptul ca durata

    rularii unui set de date pentru antrenare este de ordinul microsecundelor(cateva

    sute de cicluri de ceas).

  • 7/31/2019 doc_ssc

    5/15

    3

    Din considerente de spatiu, reteaua implementata are in componenta trei

    neuroni si simuleaza implementarea functiei XOR. Aceasta este o problema des

    intalnita in literatura de specialitate, deoarece functia XOR prezinta cateva

    particularitati(detaliate in capitolul 3) care nu permit implementarea ei folosind

    un singur neuron, cum este cazul functiilor AND, OR, NOR si NAND. Totodata, o

    privire strict teoretica asupra retelelor neuronale poate fi consultata tot in

    capitolul urmator, iar alte detalii referitoare la metodele de implementare se

    gasesc in capitolele 4 si 5.

    3. Fundamentare teoretica

    3.1. Neuronul artificialFiecare element de procesare din cadrul unei retele abstractizeaza

    functionarea unui neuron biologic. Neuronii artificiali pot avea una sau mai multe

    intrari si o singura iesire, calculata in functie de valorile intrarilor primite. Fiecare

    intrare are atribuita o valoare numerica drept pondere. Optional, se poate atasa

    inca o intrare, cu valoare constanta egala cu 1 si pondere variabila, numita bias.

    Totodata, neuronul este caracterizat de o functie de activaref(x) = y, undex

    reprezinta suma valorilor de la intrare inmultite cu ponderile corespunzatoare

    intrarii respective. Functia de activare este aleasa in corespondenta cu aplicatiaunde va fi folosita reteaua. De exemplu, pentru aproximarea functiilor, foarte des

    intalnita este functia sigmoid:

    ()

    Alte functii folosite: tan-sigmoid, functia treapta(Heaviside), etc. Pentru neuronii

    aflati pe ultimul strat al unei retele, se poate folosi sif(x) = x(functie liniara).

    Figura 1 ilustreaza structura unui neuron artificial.

  • 7/31/2019 doc_ssc

    6/15

    4

    Fig. 1 - Structura unui neuron artificial

    3.2. Arhitectura unei retele neuronaleRetelele neuronale sunt formate prin interconectarea elementelor de

    procesare dupa anumite reguli. Se formeaza astfel o retea de calcul paralel. In

    functie de topologia aleasa, retelele pot fi: unistratificate, pluristratificate sau pot

    prezenta o topologie speciala(cum este cazul retelelor circulare, folosite pentru

    implementarea memoriilor asociative). Fluxul de date parcurge reteaua de la

    intrari spre iesiri, strat cu strat. Neuronii de pe acelasi strat sunt parcursi simultan.

    Nu exista interconexiuni intre neuronii aflati pe acelasi strat, ci doar intre straturi.

    Intrarile retelei reprezinta intrarile primului strat, apoi iesirile acestuia reprezintaintrarile stratului urmator s.a.m.d., iesirile ultimului strat fiind chiar iesirile retelei.

    Figura 2 prezinta o astfel de arhitectura.

    Legenda:

    pi - valorile de intrare

    wi - ponderile intrarilor

    - bloc de calcul al sumei ponderate

    x - rezultatul sumei ponderate

    (x) - functia de activare

    y - valoarea iesirii

  • 7/31/2019 doc_ssc

    7/15

    5

    3.3. Algoritmul de invatare

    Capacitatea de invatare a retelei consta in posibilitatea fiecarui neuron de

    a-si modifica ponderile wi ale intrarilor, intarind sau slabind astfel legatura cu

    neuronul precedent, asemenea retelelor neuronale biologice la nivel sinaptic.

    Spre deosebire de acestea din urma, unde procesul de invatare este continuu,

    asupra retelelor neuronale artificiale se aplica algoritmul de invatare pana cand

    rezultatele obtinute sunt satisfacatoare din punct de vedere al corectitudinii si

    preciziei rezultatului.In urma invatarii, reteaua este pregatita pentru un nou set

    necunoscut de date.

    Metoda de invatare trebuie aleasa in concordanta cu aplicatia unde estefolosita reteaua neuronala. De exemplu, metoda invatarii nesupervizate este

    indicata daca reteaua este folosita pentru a incadra entitati sau obiecte in diferite

    categorii, initial necunoscute, in functie de anumite proprietati comune (asa-

    numitele clusters).

    Metoda invatarii supervizate pentru retele neuronale are la baza algoritmul

    backpropagation. Cunoscandu-se datele de intrare si datele asteptate de iesire, se

    parcurge reteaua de la intrari spre iesiri, apoi se compara datele de iesire obtinutecu cele asteptate, se calculeaza eroarea, care apoi se propaga succesiv, din strat in

    strat si tinand cont de ponderi, de la iesire spre intrari, corectand ponderile

    fiecarui neuron in parte dupa o formula matematica cunoscuta. Dupa rularea unui

    numar suficient de mare de seturi de date, reteaua obtine o performanta

    satisfacatoare si poate fi folosita si pe un nou vector de intrare necunoscut.

    Fig. 2 - Arhitectura unei retele neuronale

    Intrari Strat 1 Strat 2

  • 7/31/2019 doc_ssc

    8/15

    6

    3.4. Modelarea functiei XOR

    Din reprezentarea functiei AND ilustrata in Figura 3a, se observa ca intreg

    spatiul de reprezentare este impartit in doua semiplane, acestea reprezentand

    valoarea de iesire a functiei, 0 sau 1. O astfel de functie poate fi modelata si de un

    sigur neuron artificial.

    In contrast cu aceasta, functia XOR apare alcatuita din 3 semiplane, de

    aceea nu poate fi modelata folosind un singur neuron. In acest sens, se pot folosi

    3 neuroni, rezultand XOR prin compunerea functiilor AND si NOR sau OR si NAND.

    4. Proiectare si implementare

    4.1. Proiectarea sistemului

    Dupa cum este precizat in Introducere, scopul proiectului este de a

    compara cele doua metode de implementare a retelelor neuronale, cea in virgula

    mobila, folosind aplicatia FloPoCo, si cea in virgula fixa, folosind biblioteca

    ieee_proposed. Reteaua urmeaza a fi folosita pentru aproximarea unor functii depatru variabile, de aceea arhitectura aleasa este 4-8-1. Referitor la precizia

    folosita, implementarea in virgula mobila este pe 32 de biti, iar cea in virgula fixa

    pe 16 biti (1 bit de semn, 7 biti partea intreaga, 8 biti partea fractionara). Totusi,

    din cauza capacitatii limitate a placii Nexys 3, arhitectura a fost redusa la 2-2-1,

    fara posibilitate de antrenare (ponderile sunt specificate in codul VHDL). Functia

    Fig. 3a - Graficul functiei AND Fig. 3b - Graficul functiei XOR

  • 7/31/2019 doc_ssc

    9/15

    7

    modelata este XOR.Ponderile atribuite fiecarei intrari si bias-urile au fost obtinute

    utilizandu-se Matlab, care permite simularea si antrenarea diferitelor modele de

    retele. Arhitectura este prezentata in Figura 4.

    Fig. 4 - Arhitectura retelei implementate (functia XOR)

    4.2. Structura unui neuron

    Fiecare neuron (Figura 5) are doua intrari si o iesire, toate pe cate 16 biti.

    Functia de activare folosita este sigmoid, prezentata in capitolul 3. Blocurile care

    intra in componenta unui neuron sunt:

    2 inmultitoare (mul) 3 sumatoare (add) 1 impartitor (div) 1 bloc pentru calcului lui e-x (exp)

    Componenta mulrealizeaza produsul a doua numere cu semn, pe cate 16

    biti, reprezentate in complement fata de 2,iar rezultatul este returnat tot pe 16

    biti, trunchiindu-se produsul real, pe 32 de biti. Din aceasta cauza, componenta

    mulse poate folosi doar pentru calcule cu numere mici, nerespectarea acestei

    prevederi dand nastere unor erori de calcul. Rezultatul returnat este tot un numar

    cu semn, in complement fata de 2. Pentru implementarea efectiva a operatiei de

  • 7/31/2019 doc_ssc

    10/15

    8

    inmultire, se foloseste biblioteca ieee_proposed, care permite folosirea tipului de

    date sfixed, ce suporta numerosi operatori matematici:+,-,*,/, modul, etc.

    Componenta addcalculeaza suma a doua numere cu semn, pe cate 16 biti,

    reprezentate in complement fata de 2, rezultatul fiind trunchiat de la 17 biti la

    16. Restrictia pentru numere mari se aplica si in cazul componenteiadd.

    Asemanator lui muleste realizata componenta div, care realizeaza

    impartirea a doua numere in virgula fixa. Din nou, se foloseste biblioteca

    ieee_proposed. Conventia de dimensiune se mentine, rezultatul fiind tot pe 16

    biti.

    Componenta exp este implementata sub forma unui sistem multi-cycle.

    Daca semnalul rst este 1 logic, intrarea x este memorata in registrul de

    deplasare (dupa executarea unor procesari prealabile - complementare fata de 2,

    daca este cazul), se reseteaza contorul de stare si registrul acumulator se

    initializeaza cu valoarea 1 in virgula fixa. Valoarea functiei e-x

    se calculeaza

    secvential, descompunand bit cu bit exponentul. Daca valoarea ultimului bit din

    registrul de deplasare este 1, trebuie efectuata inmultire. Din memoria

    componentei, se extrage valoarea corespunzatoare indicelui la care s-a ajuns. In

    functie de semnul numarului x, se alege intre valoarea furnizata de memoria de

    valori pozitive (x este numar pozitiv), respectiv valori negative (x este numar

    negativ), apoi se efectueaza inmultirea intre registrul acumulator si valoareaextrasa. In continuare, se deplaseaza registrul la dreapta si se incrementeaza

    contorul de stare. Daca ultimul bit al registrului de deplasare este 0, nu se

    efectueaza inmultire, ci numai deplasare la dreapta. Executia se termina dupa 15

    pasi, adica dupa ce au fost parcursi toti bitii din registrul de deplasare, mai putin

    bitul de semn. Rezultatul obtinut este cel din registrul acumulator. Schema bloc a

    componentei exp poate fi consultata in Anexa A.

    Pentru imbunatatirea rezultatelor, s-au introdus registre pipeline intre

    toate componentele elementelor de procesare.Acestea sunt ilustrate in Figura 5.

  • 7/31/2019 doc_ssc

    11/15

    9

    Fig. 5 - Structura unui element de procesare implementat

    4.3. Interfata utilizator

    Pentru a facilita comunicarea cu utlizatorul, sistemul este prevazut cu un

    controller UART, implementat in modulul principal, care permite citirea si scrierea

    registrilor de intrare p1 si p2, precum si citirea iesirii z. Sistemul functioneaza la o

    rata de transfer de 19200 baud, data fiind frecventa de ceas a placii Nexys 3 de

    100MHz. Acesta este construit sub forma unui automat de stari finite, putand fi

    controlat de catre utilizator cu ajutorul aplicatiilor tip hiperterminal.

    Pentru a afisa continutul registrului de intrare p1, se utilizeaza tasta h.

    Imediat, se va afisa starea acestuia. pentru modificarea valorii lui p1, se utilizeaza

    tasta y, care asteapta patru caractere in hexazecimal, pentru a fi memorate in

    registrul respectiv. La introducerea unui caracter gresit, se scrie valoarea f pe

    pozitia respectiva. La fel se procedeaza si cu registrul p2, dar folosind tastele u

    pentru scriere, respectiv j pentru citire. In final, pentru citirea rezultatului, se

    apasa tasta q.

    Nota:liniile punctate

    separa etajele de

    pipeline

  • 7/31/2019 doc_ssc

    12/15

    10

    5. Rezultate experimentaleImplementarea a fost realizata cu succes folosind mediul de dezvoltare al

    firmei Xilinx, ISE Project Navigator, versiunea 13.4, in limbajul VHDL. Simularea

    diferitelor module, inclusiv a intregului proiect, a fost facuta in iSim, versiunea

    13.4, folosind bancuri de test generate si configurate in acelasi mediu de

    dezvoltare. Placa FPGA folosita, Digilent Nexys 3, face parte din familia Xilinx

    Spartan-6, care dispune de facilitati de comunicare UART cu ajutorul unui cablu

    USB - Micro USB. Frecventa ceasului propriu este de 100 MHz. Proiectul foloseste

    direct

    Mai intai, am testat fiecare neuron in simulator, pentru a verifica daca

    functiile de activare sunt corecte. Valorile actuale ale ponderilor si bias-ului

    pentru neuronul N1 indica faptul ca el modeleaza functia AND, in vreme ce

    neuronii N2 si Nf modeleaza functia NOR. Prin compunerea acestor trei neuroni,

    rezulta functia XOR. Apoi a urmat simularea intregului sistem, folosind un banc de

    proba. Cu ajutorul acestuia, se atribuie diferite valori succesive vectorilor de

    intrare p1 si p2, acestea fiind mentinute o perioada de cel putin 25 de semnale de

    ceas, pentru a parcurge intreg sistemul de la intrare spre iesiri.

    Simularea intregii retele - in iSim, ilustrata in Figura 6:

    Fig. 6 - Simularea retelei

    Testarea efectiva a retelei s-a realizat folosind aplicatia tip hiperterminal

    PuTTY. Parametrii de comunicare cu placa FPGA se specifica manual (19200 baud,

    8 biti de date, fara paritate, fara control al fluxului de date). Rezultatele obtinute

    au fost corecte matematic si in concordanta cu cele obtinute prin simulare.

  • 7/31/2019 doc_ssc

    13/15

    11

    6. ConcluziiSistemul prezentat rezolva problema XOR a retelelor neuronale, folosind o

    implementare hardware in virgula fixa, folosind o biblioteca predefinita de

    operatori matematici. Per total, sistemul ocupa o mare parte din placa de

    dezvoltare Nexys 3, motiv pentru care designul initial a si fost redus la 3 neuroni.

    Folosirea numerelor in virgula fixa, desi pare mai naturala decat reprezentarea in

    virgula mobila, prezinta cateva dezavantaje importante. In primul rand, precizia

    operatiilor este scazuta, in primul rand din cauza trunchierilor efectuate de-a

    lungul executiei, pentru a mentine datele in limita a 16 biti. In al doilea rand,

    folosirea numerelor in virgula mobila ar asigura un numar constant de biti,

    indiferent de operatia efectuata, nefiind necesare trunchieri. Totodata, ar elimina

    constrangerile de functionare pentru numere mari, nemaiexistand riscul aparitieierorilor aritmetice aberante.

    Implementarea unei retele neuronale cere, inainte de toate, precizie de

    calcul cel putin medie, daca nu chiar ridicata, pe un interval numeric mare. Un

    astfel de obiectiv este foarte greu de atins folosind numere in virgula fixa, dar

    pare tangibil folosind virgula mobila. Pentru realizarea unei retele competitive,

    este necesar un compromis intre precizie si numarul de neuroni din sistem, iar

    aceasta proportie castigatoare nu poate fi determinata decat experimental. De

    aici, apare dorinta continuarii proiectului, si anume realizarea unui generator

    dinamic si modular de retele neuronale, care ar permite o usurinta de testare si

    reconfigurare asemanatoare sistemelor software, dar care ar invinge net in

    competitia de viteza datorita implementarii paralele in hardware, obtinuta

    folosind tehnologia FPGA.

  • 7/31/2019 doc_ssc

    14/15

    12

    Bibliografie[1] de Dinechin, F., FloPoCo User Manual, INRIA FloPoCo Project, 2012,

    http://flopoco.gforge.inria.fr/flopoco_user_manual.html

    [2] Baruch, Z.F.,Structura sistemelor de calcul, Editura Albastra, Cluj-Napoca,2004

    [3] Bernacki,M.,Wodarczyk,P.,Principles of training multi-layer neural network

    using backpropagation, Virtual Laboratory of Artificial Intelligence, 2004,

    http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

    [4] Bishop,D.,Kodak,E.,Fixed- and floating-point packages for VHDL 2005, in

    Design & Verification Conference & Exhibition(DVCon), 2003

    http://flopoco.gforge.inria.fr/flopoco_user_manual.htmlhttp://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.htmlhttp://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.htmlhttp://flopoco.gforge.inria.fr/flopoco_user_manual.html
  • 7/31/2019 doc_ssc

    15/15

    13

    Anexa ASchema bloc a componentei exp