logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Implementacja sieci neuronowych na FPGA – przykłady w VHDL, artykuły, materiały

Lukee 04 Cze 2007 21:45 11509 23
REKLAMA
  • #1 3954053
    Lukee
    Poziom 12  
    Posty: 108
    Witam,

    Interesują mnie wszelkie informację na temat implementacji sieci neuronowych w FPGA. Jak to się robi i itp. (jakieś artykuły, wykłady). Fajnie byłoby jakby były jakieś przykłady w VHDL.

    Z góry dziękuje za zainteresowanie.

    Pozdrawiam
    Lukee
  • REKLAMA
  • #2 3955820
    sepher
    Poziom 19  
    Posty: 301
    Pomógł: 21
    Ocena: 4
    Jeśli chodzi o klasyczne sieci neuronowe o działaniu ciągłym, to mam doświadczenie w przenoszeniu tego na sprzęt ale bez algorytmów uczenia (wagi były na stałe zapisane w FPGA). Jest to dość prosta sprawa: jeden układ mnożący do każdej z wag, drzewo sumatorów (na wynik sumy dawałem nasycenie, żeby nie przekroczył pewnej wartości) i na koniec tablica LUT z funkcją aktywacji neuronu. Jak to połączysz zależy już od Ciebie - możesz powołać do życia kilka takich neuronów, możesz używać jednego modelu i sterować przepływem danych oraz zapisywać pośrednie wyniki w rejestrach, żeby emulować działanie pełnej sieci. Trochę więcej robiłem z neuronami impulsowymi, ale zakładam że nie to Ciebie interesuje. Jeśli chodzi o materiały i artykuły, to jest tego naprawdę sporo. Szczególnie ciekawe rzeczy można znaleźć, jeśli ma sie dostęp do baz artykułów IEEE, Springera, Elseviera itd. - jeśli robisz coś dla uczelni/na uczelni to nie powinno być z tym problemu.
  • #3 3959644
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    właśnie robię z tego pracę magisterską, jak skończę to mogę coś opublikować :)
    generalnie nie jest to takie proste, oczywiście nie implementuję algorytmów uczenia, wagi i biasy pobieram z matlaba. jak chcesz to mogę wrzucić schematy ideowe budowy takie sieci. największym problemem jest ilość pamięci jaką zużywa taka sieć. zakładając 16bit precyzję i reprezentację stałoprzecinkową każda z warstw sieci potrzebuje NxM 16bit wag. czyli np dla max 64 neuronów na warstwę będziesz potrzebował 8 KB pamięci.
    kolejnym problemem jest funkcja aktywacji, jeśli chcesz ją implementować w postaci LUT to będziesz mieć problem z zaadresowaniem bo mnożąc 16bit x 16bit otrzymasz 32, nie mówiąc o tym że te dane trzeba akumulować to daje ok 40bit czyli z takim adresem będziesz potrzebować 128 GB pamięci :), stąd też musisz to jakoś obcinać, ale wtedy tracisz dynamikę, stąd też niezbędne są symulacje, jak chcesz to mogę ci rzucić skryptem w matlabie, który symuluje działanie takiej sieci (tej na matrycy) przy pomocy fixed point toolbox.
  • #4 3960218
    Lukee
    Poziom 12  
    Posty: 108
    Ja się tym tematem chce zając hobbistycznie. Ostatnio robiłem coś z rozpoznawania za pomocą sieci, więc postanowiłem to przenieść do FGPA. Uczyć chcę na PCie, a przenosić do FPGA tylko strukturę i wagi. Potrzebne mi są raczej jakieś przykłady opisane za pomocą VHDL, tak aby zobaczyć jak to się robi, chodzi mi głownie o liczby stałoprzecinkowe - w jakis sposob się je koduje, czy w kodach Q?. Jak wygląda realizacja takie struktury w FPGA.

    Na razie jestem na etapie gromadzenia informacji i uczenia różnych sieci za pomocą PCta.

    Pozdrawiam
  • #5 3960265
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    ja korzystam z gotowych IP core'ów z ISE. łącze układ mnożący z akumulatorem i sumatorem, czyli mnożę wagi, dodaje je do siebie, a na końcu dodaje jeszcze bias. wszystkie te układy działają na liczbach ze znakiem, zdaje się że jest to kod uzupełnieniowy do 2. ważne jest żeby do sieci wchodziły liczby znormalizowane, co więcej wagi i biasy muszą być także poddane normalizacji, przynajmniej ja to tak robie :). wtedy wszystkie liczby mieszczą się w przedziale od <-1; 1> ze skokiem co 1/2^16.
  • #6 4265967
    lukasdev
    Poziom 13  
    Posty: 68
    Ocena: 10
    Ja też interesuje się sieciami neuronowymi, zaprojektowałem już kilka
    układów , zamiast ładowania pełnej funkcji aktywującej do pamięci (128GB) można zastosować interpolator, np. układ(32 neurony, wagi 32X256, 32 bitowe wy. z akumulatora, shift, interpolator) taki układ spokojnie wejdzie do np. EP2C35 i jeszcze 40% miejsca zostanie.
  • REKLAMA
  • #7 4267628
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Witam,

    Moge Was prosic o umieszczenie linkow do ciekawych artykulow na temat sieci nueronowych i FPGA.

    Nie chodzi mi o prace typu:
    - Mnozarka wygenerowana w ISE,
    - sumator
    - Funkcja aktywacji jako skokowa
    - to x2 i mamy siec neuronowa :)

    Ale np:
    - implementacje f. aktywacji jako tanh, sigmoid, (aproksymacje , optymalizacje pod katem implementacji w FPGA)
    - parametryzacja: szerokosci danych, dokladnosci odwzorowania, szybkosci dzialania <-> liczba zajmowanych zasobow, zrownoleglanie, struktury sieci itp.

    Cytat:
    Szczególnie ciekawe rzeczy można znaleźć, jeśli ma sie dostęp do baz artykułów IEEE, Springera, Elseviera itd.


    sepher,

    Moglbys mi podeslac kilka artykulow, o ktorych piszesz?

    Pozdrawiam
    Mariusz
  • #8 4267716
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    Wystawiam paczkę kilku artykułów, większość ściągnięte z sieci, jeśli jednak myślisz, że masz tam napisane kody w VHDL'u to się mylisz :). Są to artykuły prezentujące różne sposoby podejścia do problemów implementacji sieci neuronowych w strukturach FPGA
    Załączniki:
    • FPGA_ANN.RAR (1.52 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #9 4275614
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Bardzo dziekawe materialy. Dziekuje.
    Masz moze jeszcze cos wiecej?

    Pozdrawiam
    Mariusz
  • #10 4275675
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    Niestety za darmochę to strasznie trudno coś dobyć. Jeśli studiujesz, to najczęściej uczelnie mają dostęp do części artykułów, niestety na mojej nie znalazłem za dużo, co prawda to co znalazłem mi starczyło. Natrafiłem jeszcze na jedną książkę, której nie czytałem ale zapowiada się obiecująco, niestety w Polsce kosztuje prawie 500 PLN.
    http://www.gambit.nazwa.pl/books/?p=productsMore&iProduct=9780387284859&PHPSESSID=1a2f5f6d09171965bce264409b5b5008
  • REKLAMA
  • #11 4280821
    lukasdev
    Poziom 13  
    Posty: 68
    Ocena: 10
    Książka jak wyżej.
    Załączniki:
    • FPGA Implementations of Neural Networks.pdf (4.09 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 4285518
    sepher
    Poziom 19  
    Posty: 301
    Pomógł: 21
    Ocena: 4
    Mariusz, pokopię w Internecie w poniedziałek i postaram się coś jeszcze dołączyć (chociaż koledzy, którzy mnie wyprzedzili wysłali już dużą część tego, co planowałem tu dołączyć :)).

    Tak z ciekawości- czy komuś udało się fizycznie upchnąć do FPGA uczącą się sieć o sensownym rozmiarze (ok. 50-100 neuronów)? Czy ktoś może zajmuje się klasą sieci opisaną w tej książce?

    http://icwww.epfl.ch/~gerstner/SPNM/node1.html

    Jeśli pndemon studiuje AiZ na PP, to wydaje mi się, że jest jakiś temat pracy inżynierskiej czy magisterskiej z tym związany :).
  • #13 4285973
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    Cytat:
    Tak z ciekawości- czy komuś udało się fizycznie upchnąć do FPGA uczącą się sieć o sensownym rozmiarze (ok. 50-100 neuronów)?


    Mój koprocesor fizycznie tworzy 8 neuronów, reszta jest emulowana, do tego nie przeprowadzam nawet nauki sieci, całość zajmuje ok 27% matrycy Spartan 3E. Wykorzystuje wbudowane układy mnożące. Myślę że 100 bezpośrednio realizowanych neuronów to strasznie dużo, potrzebowałbyś najprościej licząc ok 10000 takich układów mnożących, do tego jeszcze pamięć wag. Moja sieć może mieć maksymalne rozmiary 4 warstw i po 31 neuronów na warstwę. Do tej matrycy może byłbyś w stanie podwoić ilość neuronów.

    Cytat:
    Jeśli pndemon studiuje AiZ na PP, to wydaje mi się, że jest jakiś temat pracy inżynierskiej czy magisterskiej z tym związany Smile.

    Owszem mój :)
  • #14 4286207
    J.A
    Poziom 28  
    Posty: 596
    Pomógł: 159
    Ocena: 12
    Cytat:
    Myślę że 100 bezpośrednio realizowanych neuronów to strasznie dużo,
    potrzebowałbyś najprościej licząc ok. 10000 takich układów mnozacych

    nic nie wiem [a szkoda, bo wyglada ciekawie] o omawianym przez was
    temacie sieci neuronowych, ale z pewnoscia da sie tak zaprojektowac algorytm,
    by tych mnozarek byla rozsadna ilosc, oczywiscie kosztem wolniejszego
    dzialania;

    JA
  • #15 4287686
    sepher
    Poziom 19  
    Posty: 301
    Pomógł: 21
    Ocena: 4
    Ano właśnie, jak kiedyś bawiłem się w sieci, to zrobiłem to podobnie - stała struktura przetwarzająca, do której po kolei podawane były odpowiednie dane z BlockRAM. Uczenia takiej sieci z 'tradycyjnych' neuronów nawet nie próbowałem ćwiczyć, za to męczyłem uczenie neuronów impulsowych w FPGA i nawet to działało :). Później faza sieci neuronowych mi przeszła i teraz męczę przetwarzanie obrazów :).
  • #16 4289188
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    lukasdev,

    Dziekuje.
  • #17 4292249
    sepher
    Poziom 19  
    Posty: 301
    Pomógł: 21
    Ocena: 4
    Oto obiecana paczka. Dobór jest subiektywny, starałem się nie iść w ilość i zamieszczać prace, w których ludzie piszą jak coś zrobili (a nie tylko, że zrobili :)).
    Załączniki:
    • pack.zip (1.76 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 4305340
    lukasdev
    Poziom 13  
    Posty: 68
    Ocena: 10
    Co do ilości neuronów to można uzyskać ponad 1000 stosując dosyć skomplikowane struktury, czyli struktury dynamiczne np. układu DRP
    (dynamically reconfigurable processor), lub struktury polimorficzne
    nieznam komercyjnego odpowiednika tych ostatnich, lub mieszane z tych co wymieniłem w których częścią sterującą może być sprzętowy system czasu rzeczywistego HW-RTOS.
  • #19 4308711
    mariusz102102
    Poziom 12  
    Posty: 67
    Pomógł: 2
    Witam,

    Jeszcze raz bardzo dziekuje Wszystkim za udostepnione materialy. Rewelacja!

    lukasdev

    Cytat:
    (dynamically reconfigurable processor),

    Masz na mysli dynamiczna rekonfiguracje FPGA podczas pracy ukladu? Jakos szczerze mowiac nie widze polaczenia dynamicznej rekofiguracji i sieci neuronowej.

    Cytat:
    struktury polimorficzne

    Mozesz cos powiedziec wiecej na ten temat?
  • #20 4308943
    pndemon
    Poziom 19  
    Posty: 444
    Pomógł: 35
    Ocena: 18
    Ja myślę, że chodzi o to, iż sieci można realizować na 2 skrajne sposoby:
    - każdy neuron jest umieszczony na matrycy i na stałe połączony i innymi, tzw. realizacja bezpośrednia
    - oraz realizacja pośrednia, ta taka w której na matrycy fizycznie umieszcza się tylko kilka neuronów, wtedy trzeba emulować pozostałą część sieci, np. masz 8 neuronów, a potrzebujesz sieć 20x10x5, wtedy żeby policzyć pierwszą warstwę potrzebujesz 3 razy podać dane do neuronów i potem je zapamiętać, kolejno dla drugiej warstwy zapamiętanie wyjścia z pierwszej stają się wejściami itd.


    ps. widzę że całkiem ładny temacik o sieciach tu powstał, bardzo dobrze :D
  • #21 6068801
    retsef
    Poziom 14  
    Posty: 151
    Pomógł: 1
    Ocena: 13
    czy ma ktoś już jakieś wyniki?

    inna sprawa, poszukuję jakiegoś zbioru programów przykładowych do fpga, coś byście polecili? może podesłali?
  • #22 6070045
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    To może ja jeszcze dorzucę swoje 3 grosze do tematu...

    Problemem z klasycznymi ANN w FPGA jest b.duża ilość połączeń (a więc i wag) pomiędzy poszczególnymi warstwami neuronów. Jak już koledzy zauważyli każda waga to współczynnik, czyli dane, które trzeba uwzględnić w iloczynie + sumie ważonej + funkcji aktywacji neuronu.
    Dodatkowo poza normalnym funkcjonowaniem sieci trzeba jeszcze zaimplementować tryb uczenia, bo inaczej po co komu niewytrenowana sieć? A to rodzi dodatkowe problemy i wychodzi na to, że FPGA po prostu nie za bardzo nadaje się do implementacji klasycznych ANN.

    Np. w uniwersytecie w Ulster mają duży projekt badawczy polegający na symulacji zachowania mózgu ludzkiego w FPGA. Korzystają z sieci impulsowych (Spiking Neural Network) i struktury komunikacyjnej pomiędzy neuronami typu network-on-chip (NoC).
    Taki neuron z tego co pamiętam da się zaimplementować jako licznik + komparator, a więc wszystko jest dużo prostsze niż np. multiplikator + sumator dla klasycznego neuronu. Poza tym nie ma problemów z precyzją obliczeń, bo kodowanie informacji polega na zmianie częstotliwości impulsów wejściowych/wyjściowych neuronu.

    Nie pamiętam dokładnie dla jakich ilości neuronów udało się wykonać udane implementacje/eksperymenty, ale jak ktoś jest zainteresowany to się dowiem/zdobędę kilka artykułów.

    Pozdrawiam,
    Dr.Vee
  • #23 6071086
    retsef
    Poziom 14  
    Posty: 151
    Pomógł: 1
    Ocena: 13
    Dr.Vee napisał:
    jak ktoś jest zainteresowany to się dowiem/zdobędę kilka artykułów.


    Byłoby miło
  • #24 7918611
    nepomuch
    Poziom 11  
    Posty: 12
    retsef napisał:
    Dr.Vee napisał:
    jak ktoś jest zainteresowany to się dowiem/zdobędę kilka artykułów.


    Byłoby miło

    Witam, mogę liczyć na odświeżenie tematu i zamieszczenie artykułów ewentualnie linków związanych z tym tematem.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy implementacji sieci neuronowych na FPGA z naciskiem na przykłady w VHDL oraz materiały edukacyjne. Wskazano, że klasyczne sieci neuronowe można realizować sprzętowo poprzez mnożarki dla wag, sumatory i tablice LUT do funkcji aktywacji, jednak bez implementacji algorytmów uczenia – wagi są wówczas stałe i pobierane np. z Matlaba. Problemy techniczne obejmują dużą ilość pamięci potrzebnej do przechowywania wag i funkcji aktywacji (szczególnie przy wysokiej precyzji 16-bitowej i reprezentacji stałoprzecinkowej), co wymaga kompromisów i symulacji. Proponowane są metody optymalizacji, takie jak interpolacja funkcji aktywacji zamiast pełnych LUT, co pozwala zmieścić układ w popularnych FPGA (np. EP2C35). W implementacjach stosuje się liczby ze znakiem w kodzie uzupełnieniowym do 2 oraz normalizację danych i wag do zakresu . Wspomniano o ograniczeniach w liczbie neuronów realizowanych bezpośrednio w FPGA (np. 8-31 neuronów na warstwę w Spartan 3E), a także o podejściach dynamicznej rekonfiguracji FPGA i emulacji neuronów w celu skalowania sieci. Dyskutowano również o alternatywnych modelach, takich jak sieci neuronów impulsowych (Spiking Neural Networks), które są prostsze do implementacji sprzętowej i wykorzystywane w projektach badawczych (np. na Uniwersytecie Ulster). Użytkownicy dzielili się linkami do artykułów naukowych, książek (np. kosztowna pozycja o implementacji sieci neuronowych na FPGA) oraz przykładami schematów i skryptów symulacyjnych w Matlabie. Podkreślono, że implementacja uczenia w FPGA jest trudna i rzadko realizowana, a większość projektów przenosi wytrenowane wagi z PC do FPGA. Wskazano na dostępność gotowych IP core’ów w środowisku ISE do realizacji mnożarek i sumatorów. Temat jest rozwojowy i wymaga dalszych badań oraz wymiany materiałów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA