Akcelerátor pro KSOM Marek Bártů České vysoké učení v Praze, Fakulta elektrotechnická
[email protected] Abstrakt: In this work we are describing hardware implementation of Kohonen Self-Organizing Map. We examined existing neurocomputers and decided to work out our own neurocomputer with a different, more suitable architecture. Our neurocomputer is being realized on FPGA (Field-Programmable Gate Array). In this article we are describing basic neurocomputer unit structure as well as linkage of these elements into neurocomputer and units participation on computation process.
1.
Úvod
Při zpracování řeči lze využít metody založené na aplikacích umělých neuronových sítí. Jedním z typů umělých neuronových sítí (UNS) jsou KSOM. Jsou to UNS učící se bez učitele (viz [5]). KSOM jsou vhodnou alternativou ke klasickým metodám, a to zvláště v případech, kdy pracujeme se zašuměnými nebo nekompletními daty. KSOM lze s výhodou požít, mimo jiné, v úlohách vizualizace dat. KSOM mají schopnost konvertovat nelineární statistické vztahy mezi vícedimenzionálními daty do jednoduchých geometrických vztahů jejich obrazů v obvykle tří či dvourozměrném prostoru. Na našem pracovišti používáme KSOM ke klasifikaci a vizualizaci dat. Podstatnou nevýhodou KSOM je, tak jako u ostatních typů neuronových sítí, náročnost na výpočetní výkon. Pro reálné využití je výkonnost KSOM realizovaných na osobním počítači obvykle nedostatečná, proto se snažíme zkonstruovat akcelerátor - neuropočítač, který by umožnil vlastní výpočet výrazně zrychlit. Naším cílem je vyvinout neuropočítač, který by umožnil maximálně využít výhod hradlových polí - FPGA (Field Programmable Gate Array). Tím míníme možnosti integrace do autonomního systému a rekonfigurovatelnost (využíti prostředků FPGA i pro další úlohy spojené s příslušnou úlohou). Dalším požadavkem je možnost přizpůsobit neuropočítač konkrétnímu typu dat a dosáhnout zrychlení výpočtů. Posledním požadavkem na navrhovaný systém je možnost realizovat neuropočítač na komerčně dostupné vývojové desce s FPGA.
2.
Problémy spojené s implementací KSOM
Při hardwarové implementaci KSOM je důležitým faktorem konečná délka slova v realizovaném systému. Dostatečný počet bitů datového slova - délka slova - má zásadní vliv na rychlost konvergence sítě realizované neuropočítačem. Pokud je délka slova nižší než jistá kritická mez, dochází k divergenci sítě. Zároveň se zvyšujícím se počtem bitů stoupá složitost a nároky na hardware. To ovlivňuje vlastní výkonnost neuropočítače. Výsledná délka slova je tedy kompromisem mezi požadavky na rychlost konvergence sítě a hardwarovými nároky. Minimální délka slova pro konvergenci sítě záleží na distribuční funkci vstupních vektorů. Není možné vytvořit analytický popis pro obecný případ, a proto jsme při zjišťování optimální délky slova pro konkrétní úlohu odkázáni na simulace prováděné na reprezentativním vzorku vstupních dat. Při bližším rozboru v [1] se ukázalo že na vhodnou volbu délky slova jsou nejnáročnější synaptické váhy a funkce okolí neuronu.
Pro snazší implementaci byl algoritmus KSOM zjednodušen. Realizovaná zjednodušení nemají vliv na konvergenci algoritmu, to bylo již prokázáno v existujících akcelerátorech [2], [3]. Uvažujeme hlavně zjednodušení výpočtu vzdálenosti vstupního vektoru, funkce okolí neuronu a realizace učícího faktoru. Pro výpočet vzdálenosti je použita bloková vzdálenost (2) místo eukleidovské. Použití blokové vzdálenosti částečně zpomalí konvergenci, ale přináší výrazné úspory v implementaci – nemusíme realizovat násobičku a odmocninu. V
d =∑ ∣xi−mi∣
(1)
i =1
3.
Akcelerátor
Akcelerátor je tvořen zřetězením jednotek realizujících funkce neuronu (na obrázcích značených N) doplněných jednotkami realizujícími komparátory (označeno K). Akcelerátor lze tedy jednoduše přizpůsobit konkrétní aplikaci, potřebné velikosti sítě, požadované rychlosti a použitému hardware. Každé jednotce je přiřazena logická adresa, takže "sousedství" neuronů je respektováno bez ohledu na fyzické uspořádání jednotek. Na následujících obrázcích je znázorněn návrh několika možných realizací.
Obrázek 1: Realizace akcelerátoru zřetězením jednotek Na Obrázku 1 je neuronová síť tvořená zřetězením jednotek - neuronů. Toto uspořádání neuronů nevyžaduje použití podpůrných jednotek komparátorů. Příklad je pouze ilustrativní, takto realizovaný akcelerátor by měl velmi pomalou odezvu (úměrnou počtu neuronů) a toto uspořádání není vhodné pro praktickou realizaci. Mnohem výhodnější je realizace zobrazená na Obrázku 2. Na obrázku 2 je znázorněna realizace akcelerátoru řazením neuronů do paralelních větví zakončených stromem komparátorů. Popis komparátoru je uveden dále v textu. Výhodou tohoto uspořádání je mnohem rychlejší odezva než v předchozím případě. Odezva bude rovna pouze počtu neuronů ve v nejdelší větvi a hloubce stromu komparátorů.
Obrázek 2: Realizace akcelerátoru řazením neuronů do paralelních větví Vhodným uspořádáním neuronů a komparátorů je možné realizovat strukturu na Obrázku 3. Tato struktura vychází přímo z původního algoritmu KSOM. V místě spojení větví je zařazen komparátor a v místě spojování cest v prostředním neuronu je dvojstupňový "strom" komparátorů. Data do struktury vcházejí z vnějšího okraje struktury a výsledek (vítěz) je nalezen po průchodu strukturou komparátorů uprostřed.
Obrázek 3: Přirozená struktura KSOM Akcelerátor lze realizovat samostatně, je třeba pouze doplnit další podpůrné jednotky. Schéma takto realizovaného akcelerátoru je znázorněno na Obrázku 4. Vhodně uspořádané neurony jsou doplněny lokální pamětí, řadičem pro řízení výpočtu, řadičem pro řízení RAM paměti a blokem komunikace s osobním počítačem. Paměť RAM je externí paměť na prototypové desce FPGA. Řadič paměti se stará o její řízení a přesun dat do vyrovnávacích lokálních blokových pamětí (BRAM).
Obrázek 4: Schéma akcelerátoru Komunikační kanál má zajistit dodání potřebných dat neuročipu. Je třeba zadat inicializační hodnoty neuronů (přímý zápis do datových struktur jednotlivých neuronů) a sadu vstupních vektorů (uloženou v paměti RAM). Při trénování se vlastní kanál používá pouze k zadání dat a předávání výsledků, výpočet probíhá samostatně v čipu. Pro účely ladění předpokládám vybavení neuročipu diagnostickým režimem, který umožní pozastavit výpočet a přistupovat ke všem datovým strukturám v neuročipu. V režimu klasifikace bude nejvýhodnější, kvůli rychlosti komunikace, aby byla data zadána v dávkách. Data se uloží do RAM paměti, klasifikují a výsledky se potom odešlou všechny najednou. Prozatím máme k dispozici řadič pro UART [4]. Pokud by ale bylo třeba rychlejší komunikace, bylo by vhodné realizovat rychlejší komunikační kanál, např. USB. Základní funkcí řadiče je řídit vlastní neurony. V řadiči může být implementováno „promíchání vstupních vektorů“ tedy postup, kdy se v jedné epoše vybírají vstupní vektory x náhodně, a to tak, že každý vektor je vstupem právě jednou. Klasická implementace předpokládá vstup vektorů v každé epoše v pořadí jak byly zadány. Další funkcí řadiče je určení poloměru okolí vzhledem k probíhající epoše trénování. Předpokládám využití tabulky, která bude předepisovat změny v určitých epochách. Obsah této tabulky bude součástí inicializačních dat, posílaných z PC. Jak bylo popsáno v předchozím odstavci, na konvergenci sítě má vliv konečná délka slova. Proto je v akcelerátoru možnost změnit počet bitů slova použitého k uložení synaptických vah neuronu, počet bitů akumulátoru i dimenzi vektoru vstupních dat. Je tedy možné generovat akcelerátor přímo přizpůsobený aplikaci, a to tak se, že se jednoduše změní tento parametr a znovu se provede syntéza. Simulaci vlivu konečné délky lze uskutečnit přímo ve VHDL simulátoru nebo v jiném vhodném prostředí s dostatečnou podporou pro matematické operace (Matlab). Akcelerátor lze také realizovat jako součást systému na čipu (SoC), akcelerátor pak bude v roli periferie.
4.
Popis neuronu
Schéma neuronu je na Obrázku 5. Silná čára reprezentuje tok dat, slabší čáry potom řídící signály. Neuron se do struktury akcelerátoru zapojuje pomocí vstupní a výstupní brány. Dále neuron obsahuje datovou paměť. Tato paměť slouží k uložení synaptických vah neuronu. Veškeré výpočty probíhají v SAD (Substitute-ADd) jednotce. Výpočty řídí řadič, který je implementován jako jednoduchý stavový automat. Bližší popis bloků včetně propojení s ostatními bloky, je uvedeno dále v textu.
Obrázek 5: Schéma neuronu V akcelerátoru jsou neurony vzájemně propojeny pomocí vstupních a výstupních bran. Brány obsahují datové vodiče a indikaci přítomnosti dat. Dále pak obsahují signál "break", který indikuje, že příchozí datové slovo bude kódem příkazu. Bezprostřední průchod dat mezi vstupní a výstupní branou umožňuje neuronu fungovat v průchozím režimu – bez zpracovávání dat. Tento mód je nutný v režimu ladění (debug) a inicializace. Pro realizaci paměti vah je možné využít blokové paměti na čipu FPGA nebo paměti distribuované – složené z hradel FPGA obvodu. Distribuovaná paměť odčerpává část prostředků čipu FPGA, která by mohla být jinak použita k realizaci dalších neuronů. Nicméně, využití distribuované paměti je nutné, protože množství blokové paměti je omezené. Napojení na datovou sběrnici umožňuje nejen do paměti nahrát inicializační váhy, ale i číst obsah v ladícím módu.
Obrázek 6: SAD jednotka
Veškeré aritmetické operace jsou realizovány v SAD (Substitute-Add Accumulate) jednotce. SAD jednotka má na starosti výpočet vzdálenosti mezi vstupním vektorem a váhami, nalezení vítěze, výpočet vzdálenosti od vítězného neuronu a úpravu vah v režimu trénování. Schéma SAD jednotky je na Obrázku 6. SAD jednotka se skládá z bloku výpočtu absolutní hodnoty rozdílu, akumulátoru, posuvného registru a bloku pro úpravu vah. Blok výpočtu absolutní hodnoty spolu se sčítačkou a akumulátorem se uplatní při výpočtu vzdálenosti neuronu od vstupního vektoru dat a při výpočtu vzdálenosti od vítězného neuronu. Podle výsledku tohoto výpočtu se nastaví posuvný registr. Posuvný registr se uplatní při výpočtu úpravy váhy podle vítězného neuronu. Při tomto výpočtu se vypočítá rozdíl váhy a příslušné složky vektoru a tento přírůstek se posune o určitý počet bitů – vydělí mocninou dvou. Blok pro úpravu vah je sčítačka, která vypočítává hodnotu váhy neuronu podle vztahu (2). Konstanta představuje bitový posun – dělení. w n1i =w nik⋅∣wn i −mi∣
5.
(2)
Postup výpočtu
Neuropočítač funguje následovně: v první, přípravné fázi, je pomocí PC nahrán soubor inicializačních hodnot a vstupních vektorů do paměti RAM na prototypové desce s vlastním hradlovým polem, v němž je neuropočítač realizován a jsou inicializovány jednotlivé neurony. Další fází je trénování - vstupní vektor je distribuován složku po složce. Jednotlivé neurony přímo provádí výpočet vzdálenosti. Mezivýsledek výpočtu je uložen v akumulátoru každého neuronu. Hledání vítěze provádí neuropočítač tak, že krajní neurony pošlou hodnotu svého akumulátoru (a svou adresu) následujícímu neuronu. Ten provede porovnání s vlastním akumulátorem a vítěznou hodnotu pošle dalšímu neuronu v cestě (včetně adresy). Tímto způsobem bude po posledním porovnání v prostředním neuronu znám vítěz pro daný vstupní vektor. Poslední částí trénování je adaptace. Všem neuronům je předána adresu vítězného neuronu a poloměr okolí. Každý neuron pak srovnáním obdržené a vlastní adresy individuálně zjistí svou příslušnost k okolí vítězného neuronu a provede úpravu svých vah.
6.
Závěr
Hlavní výhodou je plně distribuovaná architektura. Další výhodou je přímé komunikační schéma mezi neurony, bez nutnosti implementovat dlouhé a výpočet zpomalující sběrnice. Neurony přenášejí data přímo mezi sebou. Implementace v FPGA, které je založeno na SRAM, umožní škálovatelnost systému, použití v komplexním systému nebo při rekonfiguraci. Po první verzi jsem po implementaci získal následující odhady: implementace až 40 neuronů v obvodu XC2V1000, kdy každý neuron může pracovat na maximální hodinové frekvenci 150 MHz. V současné době dokončuji druhou verzi a plánuji numerické testy konvergence sítě akcelerátoru a porovnání rychlosti s osobním počítačem.
7.
Poděkování
Tento projekt je podporován grantem Transdisciplinární výzkum v biomedicínském inženýrství II, MSM6840770012 Českého Vysokého Učení technického v Praze.
Reference [1]
Thiran P., Peiris V., Heim P., Hochet B.: Quantization Effects in Digitally Behaving Circuit Implementations of Kohonen Networks, IEEE Transactions on Neural Networks No. 3, Vol. 5., 1994
[2]
Porrman, M., Witkowski, U., Kalte, H., Ruckert, U.: Implementation of Artifical Neural Networks on a Reconfigurable Hardware Accelerator, In Proceedings of the 10th Euromicro Workshop on Parallel, Distributed and Network-based Processing, Grand Canaria Island, Spain, 2002, pp. 243 – 250
[3]
Ienne, P.: Architectures for Neuro-Computers: Review and Performance Evaluation, Technical Report of the EPFL-DI no. 93/21, Lausanne, Swiss (1993)
[4]
Bártů M.: Implementation of communication protocol between the FPGA kit and the PC via the serial interface. Unpublished technical report Z06-3 (in Czech), FEE CTU Prague, 2006. Available at http://amber.feld.cvut.cz/fpga/ .
[5]
Kohonen, T.: Self-Organizing Maps. Springer-Verlag Berlin, Heidelberg, New York, 3rd ed., 2001, ISBN 3-540-67921-9