doc_ssc
-
Upload
bogdan-popa -
Category
Documents
-
view
213 -
download
0
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