Interfata de Comenzi Vocale
Introducere
Reþele Neurale
Noþiuni generale
Unitãþile de procesare (neuronii)
Conexiunile dintre unitãþi
Activãri ºi reguli de calcul al ieºirilor
Terminologie
Topologii de reþea
Antrenarea reþelelor neurale
Clasificarea metodelor de antrenare
Modificarea caracteristicilor conexiunilor
Adaline ºi Perceptron. Scurtã istorie
Adaline (ADAptive LINear Element=element liniar adaptiv)
Perceptronul
Back–Propagation (propagarea înapoi)
Reþele feed-forward cu mai multe straturi
Regula delta generalizatã
Folosirea algoritmului back-propagation
Consideraþii finale asupra algoritmului back-propagation
22 pagini
+ Anexe
Programarea plãcii de sunet Sound Blaster
Adrese de port
Procesorul de semnal de pe placa audio
Comenzi DSP
Resetare DSP
Scrierea în DSP
Citirea din DSP
Întreruperi
Convertor numeric – analogic (CNA)
Controlerul de DMA
Paºi generali
Detalii
Extragerea coeficienþilor spectrali melscale
Formatele fiºierelor utilizate
Formatul standard RIFF–WAVE
Formatul fiºierelor binare de coeficienþi spectrali
Formatul fiºierulor text pentru vectorii de antrenare
Bibliografie
Bibliografie
[1]. Gîrlașu, Ș. — Prelucrarea în timp real a semnalelor fizice. Ed. Scrisul Românesc, Craiova 1978.
[2]. Kröse, B. J. A.; van der Smagt, P. — An introduction to Neural Neural Networks. University of Amsterdam, Faculty of Mathematics and Computers Science, 1984.
[3]. Minsky, M.; Papert, S. — Perceptrons. An Introduction to Computational Geometry. The MIT Press, 1969.
[4]. Pop, E.; Naforniță, I.; Tiponuț, V.; Mihăescu, A.; Toma, L. — Metode în prelucrarea numerică a semnalelor. Ed. Facla, Timișoara, 1986.
[5]. Rumelhart, D. E.; Hinton, G. E.; Williams, R. J. — Learning representation by back-propagating errors. Nature, 323, 533-536, 1986.
[6]. Spilcă, Adrian — Speech Recognition using Artificial Neural Network. Buletinul Științific al UTT 1994, Tom 39 (53), Seria Automatizări și Calculatoare.
[7]. Spilcă, Adrian; Pragay, Arthur. R. — Partially – Connected Topology Neural Network for Speech Recognition. CONTI 1996, vol.2.
[8]. Spilcă, Adrian; Pragay, Arthur. R. — Reducing the amount of data processed in speech recognition using ANN. Buletinul Științific al UPT 1996, Tom 41 (55), Seria Automatică și Calculatoare.
=== ANEXA ===
Anexe
Programarea plăcii de sunet Sound Blaster
Adrese de port
Tabelul 6-1. Adresele de port ale procesorului de semnal de pe placa audio.
Notă: în tabelul de mai sus, x poate lua una din valorile de mai jos, în funcție de versiunea plăcii audio:
x = 1,2,3,4,5,6 pentru Sound Blaster, versiuni mai mici sau egale cu 1.5;
x = 1,2,3,4,5,6 pentru versiunea Sound Blaster Micro Channel;
x = 2,4 pentru Sound Blaster 2.0;
x = 2,4 pentru Sound Blaster Pro.
Procesorul de semnal de pe placa audio
Din cauza versiunilor diferite de hardware de pe plăcile audio, frecvențele de eșantionare permise diferă de la o versiune la alta.
Tabelul 6-2. Plajele de frecvențe de eșantionare permise, in funție de versiunea de placă audio, pentru intrare (conversie analog-numerică).
Tabelul 6-3. Plajele de frecvențe de eșantionare permise, in funție de versiunea de placă audio, pentru ieșire (conversie numeric-analogică).
Comenzi DSP
Tabelul 6-4. Comenzi pentru placa audio compatibilă Sound Blaster.
Resetare DSP
Scrie 01h la portul 2x6h
Așteaptă 3 s
Scrie 00h la portul 2x6h
Citește portul 2xAh de 100 de ori sau pînă apare 0AAh
Dacă s-a citit 0AAh, declară existență Sound Blaster
Dacă nu, declară absență Sound Blaster sau eroare.
Scrierea în DSP
Toate înscrierile care se fac către DSP, trebuie să includă următorii pași:
Citește portul 2xCh pînă bitul 7 este zero
Scrie la portul 2xCh valoare dorită.
Citirea din DSP
Toate citirile care se fac din DSP, trebuie să includă următorii pași:
Citește portul 2xEh, pînă bitul 7 este 1
Citește octetul dorit de la portul 2xAh.
Întreruperi
În modurile de lucru: CNA prin DMA și CAN prin DMA, o singură întrerupere apare după ce blocul dorit de date a fost citit/scris din/în memorie. Pentru confirmarea întreruperii, se citește portul 2xEh o singură dată (concomitent cu confirmarea transmisă controlerului de întreruperi).
Cererea de întrerupre poate fi ignorată, interogînd controlerul de DMA. Controlerul de DMA înștiințează despre terminarea transferului, raportînd un număr de 0FFFFh octeți transferați. Pentru confirmarea terminării, se citește portul 2xEh o singură dată.
Deasemenea, se poate interoga registrul de stare al controlerului de DMA, așteptîndu-se ca bitul corespunzător, Terminal Count, să fie 1.
Calcularea constantei de timp
Pentru viteză normală:
<constantă de timp> = 256 – (1,000,000 / <frecv. de eșant.>)
Pentru viteză mare:
<constantă de timp>=(MSB)(65536–(256,000,000/<frecv. de eșant.>)),
unde prin operatorul (MSB) s-a notat partea ca mai semnificativă a rezultatului expresiei.
Convertor numeric – analogic (CNA)
În mod direct (transfer pe octet)
Scrie 0D1h la portul 2xCh
Scrie 10h la portul 2xCh
Scrie eșantion pe 8 biți la portul 2xCh
Așteaptă un timp corespunzător frecvenței dorite
Repetă pașii 2÷4, pînă la terminarea datelor
Scrie 0Dh la portul 2xCh.
În mod DMA, cu viteză normală
Scrie 0D1h la portul 2xCh
Ruteză rutina de deservire a întreruperii
Scrie 40h la portul 2xCh
Scrie constantă de timp la portul 2xCh
Programează controlerul de DMA
Scrie 14h la portul 2xCh
Scrie (LSB)(<lungimea datelor>-1)
Scrie (MSB)(<lungimea datelor>-1)
Deservește întreruperea (pașii 5÷7 se pot repeta în rutina de tratare a întreruperii)
Refă vechea rutina de tratare a întreruperii.
Scrie 0D3h la portul 2xCh
Obs.: în timpul transferului prin DMA, la viteză normală, se pot emite comenzi către DSP.
În mod DMA, cu viteză mare
Scrie 0D1h la portul 2xCh
Rutează rutina de tratare a întreruperii
Scrie 40h la portul 2xCh
Scrie constantă de timp la portul 2xCh
Programează controlerul de DMA
Scrie 48h la portul 2xCh
Scrie (LSB)(<lungimea datelor>-1)
Scrie (MSB)(<lungimea datelor>-1)
Scrie 91h la portul 2xCh
Deservește întreruperea (pașii 5÷8 se pot repeta în rutina de tratare a întreruperii)
Refă vechea rutină de tratare a întreruperii
Scrie 0Dh la portul 2xCh.
Obs.: în timpul transferului prin DMA, cu viteză mare, nu se pot emite comenzi către DSP. Pentru oprirea transferului în acest mod de lucru, se procedează la resetarea DSP.
Convertor analog – numeric (CAN)
În mod direct (transfer pe octet)
Scrie 20h la portul 2xCh
Citește eșantion pe 8 biți de la portul 2xAh
Așteaptă un timp corespunzător frecvenței dorite
Repetă pașii 1÷3 pînă la terminare.
În mod DMA, cu viteză normală
Rutează rutina de tratare a întreruperii
Scrie 40h la portul 2xCh
Scrie constantă de timp la portul 2xCh
Programează controlerul de DMA
Scrie 24h la portul 2xCh
Scrie (LSB)(<lungimea datelor>-1)
Scrie (MSB)(<lungimea datelor>-1)
Deservește întreruperea (pașii 5÷7 pot fi repetați în rutina de tratare a întreruperii)
Refă vechea rutină de tratare a întreruperii
Obs.: în timpul transferului prin DMA, în acest mod de lucru, se pot emite comenzi către DSP.
În mod DMA, cu viteză mare
Rutează rutina de tratare a întreruperii
Scrie 40h la portul 2xCh
Scrie constantă de timp la portul 2xCh
Programează controlerul de DMA
Scrie 48h la portul 2xCh
Scrie (LSB)(<lungimea datelor>-1)
Scrie (MSB)(<lungimea datelor>-1)
Scrie 99h la portul 2xCh
Deservește întreruperea (pașii 5÷7 se pot repeta în rutina de tratare a întreruperii)
Refă vechea rutină de tratare a întreruperii
Obs.: în timpul transferului prin DMA, cu viteză mare, nu se pot emite comenzi către DSP. Pentru oprirea transferului în acest mod de lucru, se procedează la resetarea DSP.
Mixerul de pe placa audio
Doar versiunile de plăci audio apărute după Sound Blaster Pro posedă mixer audio, care este folosit pentru mixarea următoarelor surse de semnal audio:
semnal audio digitizat;
semnal audio sintetizat prin modulare în frecvență (FM);
semnal audio provenit de la CD;
semnal audio provenit de la intrarea audio;
semnal audio provenit de la intrarea de microfon;
semnal audio provenit de la difuzorul PC-ului.
Mixerul audio permite ajustarea prin software a volumului următoarelor surse de semnal audio:
semnal digitizat;
semnal sintetizat FM;
CD audio;
intrare de semnal audio;
intrare de microfon;
volum general.
Comunicația cu mixerul poate fi făcută pe două adrese de port diferite: 2x4h și 2x5h, unde x=2 sau 4 pentru Sound Blaster Pro. 2x4h este adresa de port a registrului de adrese (doar scriere), iar 2x5h este adresa de port a registrului de date (citire / scriere).
Secvența de programare a mixerului este următoarea:
Scrie adresa registrului de mixare la adresa de port 2x4h
Citește / Scrie valoarea dorită de la / la adresa de port 2x5h.
Controlerul de DMA
În continuare se va prezenta un ghid de programare a comtrolerului de DMA, în vederea transferurilor directe, de la port la memorie.
Pași generali
Pregătește o zonă de memorie din / în care se va scrie
Dezactivează canalul de DMA care urmează a fi folosit
Înscrie registrul de pagină cu numărul paginii dorite
Șterge pointerul de deplasament
Înscrie registrul de adresă de bază cu adresa începutului zonei de memorie tampon
Înscrie registrul de numărare cu valoarea dorită minus 1
Alege modul de transfer DMA
Activează canalul DMA ales pentru startarea transferului.
Detalii
Controlerul de DMA 8237 deține 4 canale de DMA, din care se recomandă folosirea canalului 1.
Tabelul 6-5. Adresele de port ale controlerului de DMA.
Inițierea unui transfer DMA
1. Alocă o zonă de memorie tampon din / în care se vor scrie date.
Este optimă alocarea unui bloc de memorie care să fie aliniat cu marginea segmentului (deplasament 0), atîta timp cît controlerul de DMA nu poate depăși limita unui segment.
2. Dezactivează canalul de DMA care se va folosi.
Dacă se utilizează canalul 1, se va trimite 05h la adresa 0Ah (registrul de pagină).
3. Înscrie registrul de pagină cu numărul paginii dorite.
Paginile sînt blocuri de 64ko de memorie. Trebuie programate transferuri multiple de DMA, dacă se vrea transferarea a mai mult de 64ko, tîta timp cît controlerul de DMA este capabil să transfere maxim 64ko de date la un singur transfer.
Paginile de memorie au numere cuprinse între 00h și FFh, acoperind o arie de memorie în intervalul 0000h÷FFFFh. Aceste pagini de memorie sînt, de fapt, chiar segmente de memorie. De aceea, cînd se va vorbi de adrese, în continuare, se vor referi doar deplasamente și nu adrese întregi (cu segment și deplasament).
4. Șterge pointerul de deplasament
Registrul pointer de deplasament este un bistabil. Înscrierea oricărei valori în registru atrage după sine resetarea acestuia, valoarea înscrisă neavind importanță. Deci, pentru ștergere, se înscrie orice valoare la adresa 0Ch.
5. Înscrie registrul adresei de bază cu adresa începutului zonei de memorie tampon din / în care se face transferul.
Pentru aceasta se va înscrie deplasamentul zonei de memorie tampon destinată transferului, față de segmentul din care face parte. Acest deplasament va fi 0, dacă tamponul de date a fost aliniat cu marginea segmentului. Deplasamentul se înscrie la adresa de port 02h.
6. Înscrie registrul de numărare cu numărul de cuvinte care se vor a fi transferate.
În acest registru se va înscrie numărul dorit de cuvinte (8 sau 16 biți, depinzînd de modul de lucru), minus 1. Acest număr se va înscrie la adresa de port 03h.
7. Selectează modul transferului DMA (modul de lucru).
Registrul modului de lucru controlează tipul transferului, depinzînd de dispozitivul cu care se dorește transferul.
8. Activează canalul de DMA ales pentru startarea transferului.
Dacă controlerul de DMA a fost programat corect, poate fi pornit transferul, evident în ipoteza că dispozitivul cu care se face transfer este și el pregătit pentru transfer.
Extragerea coeficienților spectrali melscale
Extragerea coeficienților spectrali melscale, echivalează cu medierea unui număr dat de benzi inițiale de frecvență, în scopul reducerii numărului total de benzi spectrale și a centrării acestora la valorile dorite de frecvență.
Următorul tabel vine în sprijinul înțelegerii modului în care au fost materializate operațiile enumerate:
Tabelul 6-6. Detalierea modului în care au fost considerate benzile inițiale de frecveță, pentru formarea benzilor melscale.
Obs.: Pentru ușurarea interpretării tabelului de mai sus, se reamintește că benzile inițiale de frecvență sînt rezultatul aplicării transformatei Fourier discrete unei ferestre cu 128 eșantioane în domeniul timp, din care s-au considerat doar 62 de benzi, conform descrierilor din paragraful 3.1. (s-a ignorat și banda inițială de 62.5 Hz).
Deasemenea, dintr-un calcul sumar se poate deduce și valoarea pasului de calcul al benzilor inițiale de frecvență:
8000 <Hz> / 128 <puncte_DFT> = 62.5 <Hz>
Formatele fișierelor utilizate
Formatul standard RIFF–WAVE
Fișierele de eșantioane în format RIFF–WAVE, sînt compuse din două părți distincte:
un header, care conține informații utile referitoare la lungimea și forma de codificare a datelor;
un bloc de date, care reprezintă chiar valorile cuantizate ale amplitudinilor eșantioanelor de semnal.
Headerul fișierului de tip WAVE este o structură cu următoarea formă și semnificație:
Tabelul 6-7. Structura și semnificația antetului RIFF–WAVE.
Obs.: Semnificațiile și valorile cîmpurilor din header-ul RIFF–WAVE, au fost interpretate pentru apropierea de scopul propus în lucrare.
Formatul fișierelor binare de coeficienți spectrali
Fișierele binare, produse de programul wavproc.exe, conțin coefici-enții spectrali melscale, corespunzători claselor al căror număr se reflectă în numele respectivului fișier binar. Formatul acestor fișiere respectă următoarea structură:
Tabelul 6-8. Structura și semnificația antetului fișierelor binare de coeficienți spectrali.
Formatul fișierulor text pentru vectorii de antrenare
Fișierele de vectori de antrenare / testare, sînt rezultatul execuției programului b2a.exe, care convertește fișierele binare cu formatul specificat în paragraful anterior, în fișiere text, interpretabile de către programul de antrenare train.exe.
Acest format respectă structura:
Tabelul 6-9. Formatul și semnificațiile cîmpurilor fișierului de vectori de antrenare / testare.
Tabelul 6-10. Structura și semnificațiile cîmpurilor din cadrul blocului de date
=== CAP1 ===
Introducere
Acum, cînd tehnologia actuală permite recunoașterea a peste 50000 de cuvinte rostite fluent, această lucrare, care vorbește de recunoașterea unui dicționar redus de cuvinte, rostite izolat, poate părea nesemnificativă. Totuși nu este așa, avînd în vedere scopul dorit și tocmai acest lucru îmi propun să demonstrez în cele ce urmează.
Deci, cum spuneam, sistemul prezentat în această lucrare este capabil de a recunoaște un mic dicționar (pînă la 12 cuvinte rostite izolat). Cu toate acestea, el nu se află prea mult în urma produselor comerciale de același gen, luînd în considerare cantitatea uriașă de resurse necesitate de acestea. Un exemplu clasic este produsul Dragon System, care, deși permite dictare, funcționează corect pe un sistem care conține minim 6 Mocteți de memorie RAM, procesor Pentium și Windows. Acest necesar este inacceptabil pentru o implementare de comandă verbală în industrie, spre exemplu.
Capitolele următoare descriu tocmai încercarea de a construi o interfață de comenzi vocale, care să satisfacă următoarele deziderate:
să utilizeze un volum mic de resurse;
să fie suficient de rapidă, pentru a lucra în timp real;
să fie aplicabilă ușor în orice domeniu;
să fie adaptabilă;
să fie portabilă (gabarit redus), și, nu în ultimul rînd,
să aibă un preț de cost cît mai scăzut.
Toate aceste deziderate converg spre centralizarea sarcinilor de îndeplinit, în jurul unui procesor de semnal (DSP), care să implementeze o rețea neurală de cît mai mici dimensiuni, dată fiind cantitatea relativ mică de memorie pe care un procesor de semnal o poate adresa.
Totuși, avînd în vedere noutatea ideii și, din cauza necesității efectuării unui număr semnificativ de experimente, într-o fază preliminară s-a renunțat la utilizarea unui procesor de semnal, mergîndu-se pe ideea emulării soft, prin program, a rețelei neurale puse în discuție, pe un PC de uz general, dotat cu o placă de sunet compatibilă Sound Blaster.
Structura acestei lucrări a fost concepută, în încercarea de a prezenta gradat toate apropierile de scopul propus, începînd cu capitolul 2, unde se pun bazele unei abordări teoretice și continuînd cu celelalte capitole, care vor face referiri mai concrete asupra soluțiilor particulare adoptate (capitolul 3), a programelor utilitare folosite (capitolul 4), sau a rezultatelor obținute și propunerea unor eventuale înbunătățiri și extinderi ulterioare (capitolul 5). Deasemenea, un important rol în mai buna înțelegere a experimentelor efectuate, îl au explicațiile din anexa aflată în capitolul 6, unde pot fi găsite specificații foarte utile.
Toate realizările care stau la baza acestui proiect (programele și soluțiile adoptate), au necesitat un volum mare de muncă, desfășurat pe parcursul a aproximativ doi ani de studii și experimentări. Cu toate acestea, lucrarea nu se vrea exhaustivă, existînd loc pentru îmbunătățiri și extinderi ulterioare, cîteva din acestea fiind chiar formulate în capitolul 5.
=== CAP2 ===
Rețele Neurale
Bibliografia în domeniu fiind destul de săracă, în acest capitol se va încerca prezentarea, în linii generale, a părții teoretice.
Rețelele neurale artificiale, sînt variații ale ideii de procesare paralelă, distribuită (PDP). Arhitectura fiecărei rețele se bazează pe blocuri de procesare (calcul) asemănătoare din punct de vedere constructiv. În acest capitol vor fi puse în discuție cîteva aspecte teoretice referitoare, mai întîi, la aceste unități de procesare, iar mai apoi la diferite topologii de rețele, evidențiind avantajele și dezavantajele fiecăreia în parte. Către sfîrșitul capitolului vor fi atinse problemele legate de strategiile de antrenare, ca o caracteristică de bază pentru sistemele adaptive.
Noțiuni generale
O rețea neurală constă dintr-o mulțime de unități de procesare, care comunică transmițînd semnale una alteia printr-o rețea ponderată de conexiuni.
În contextul procesării paralele, ditribuite, se poate evidenția un set de noțiuni care vor face obiectul discuției din acest capitol:
o mulțime de unități de procesare (neuroni sau celule);
o stare de activare ai pentru fiecare unitate, care, deasemenea reprezintă și mărimea de ieșire asociată respectivei unități;
conexiunile dintre unități (echivalentul matematic al sinapselor). În general, fiecare conexiune este definită de o pondere wij care determină efectul pe care semnalul j îl are asupra unității i;
o lege de propagare, care determină mărimea efectivă de intrare ii a unei unități, din semnalele externe de intrare;
o funcție de activare Fi, care determină noua stare de activare, bazată pe intrarea efectivă ii(t) și starea curentă ai(t);
o intrare de compensare externă i pentru fiecare unitate;
o metodă de vehiculare a informației;
un mediu în cadrul căruia sistemul operează și care furnizează semnale de intrare și, dacă este necesar, semnale de eroare.
Figura 2-1 ilustrează grafic noțiunile prezentate anterior, noțiuni care vor fi tratate mai pe larg în paragrafele următoare.
Figura 2-1. Componentele de bază ale unei rețele neurale. În acest exemplu s-a folosit suma ponderată ca lege de propagare (vezi definirea lui wij).
Unitățile de procesare (neuronii)
Fiecare neuron are o sarcină, relativ simplu de îndeplinit: recepționează intrările provenite de la neuronii vecini sau din surse externe (mediu) și folosește aceste intrări calculînd un semnal de ieșire care se propagă mai departe, devenind intrări pentru alți neuroni sau ieșiri din rețea (în cazul ultimului strat). Diferită de cea prezentată, o a doua sarcină poate fi ajustarea ponderilor conexiunilor care reprezintă intrări pentru respectivul neuron.
Sistemul format dintr-o mulțime de neuroni (la care mă voi referi în continuare și sub numele de rețea neurală), poate fi considerată paralelă, în sensul că, la un moment dat, mai mulți neuroni își pot calcula și transmite mărimile de ieșire, în același timp.
În cadrul rețelelor neurale, se pot distinge trei tipuri de unități de procesare (neuroni):
unități de intrare, care pot recepționa date din exteriorul sistemului (din mediu);
unități de ieșire, care transmit date în exteriorul sistemului (în mediu);
unități ascunse, ale căror intrări și ieșiri provin și se propagă doar în interiorul sistemului.
În timpul operării, stările de activare ale unităților pot fi actualizate fie sincron, fie asincron. La actualizarea sincronă, toți neuronii își calculează simultan activarea, spre deosebire de actualizarea asincronă, unde fiecare unitate își calculează activarea la momentul t cu o anumită probabilitate (de obicei fixă) și, în general, o singură unitate va fi capabilă de a-și actualiza starea de activare la un anumit moment de timp. În unele cazuri, precum și în cel ce face obiectul acestei lucrări, această ultimă modalitate poate prezenta cîteva avantaje.
Conexiunile dintre unități
În cele ce urmează se va considera că fiecare unitate își aduce o contribuție aditivă pentru intrările unităților cu care este conectat. Intrarea efectivă pentru o anumită unitate este suma ponderată a tuturor mărimilor de ieșire ale neuronilor conectați în amonte, plus un termen de compensare sau echilibrare, i:
. (2.1)
Contribuția adusă la calculul activării unui anumit neuron, de către ieșirea altui neuron, propagată printr-o conexiune care are asociată o pondere wij, pozitivă, se consideră a fi o excitație, iar pentru o pondere negativă, inhibiție. În anumite cazuri sînt folosite reguli mai complexe de combinare a intrărilor, cazuri în care se face distincția între intrările excitatorii și cele inhibitorii. Un neuron care se supune unei reguli de propagare de forma celei din ecuația (2.1), se numește unitate sigma.
Activări și reguli de calcul al ieșirilor
Este necesară adoptarea unei reguli care să exprime măsura efectului pe care o are mărimea de intrarea efectivă asupra stării de activare a unui anumit neuron. Această "regulă" este o funcție Fi care are ca argumente intrarea totală ii(t) și valoarea stării curente de activare ai(t) și produce ca rezultat o nouă valoare a starii de activare pentru unitatea i:
ai(t+1)=Fi(ai(t), ii(t)). (2.2)
În cele mai multe cazuri, ca funcție de activare se folosesc funcții care prezintă praguri: cu limite bine definite, neliniare (cum ar fi funcția semn), semi-liniare sau liniare, cu limite rotunjite (vezi figura 2-2). Pentru această din urmă categorie, adesea o funcție sigmoid, cu expresia:
, (2.3)
este utilizată. În unele aplicații se utilizează tangenta hiperbolică datorită codomeniului acestei funcții, centrat pe axa Ox între limitele [-1, 1].
Figura 2-2. Tipuri de funcții cu praguri
În cele ce urmează, toate referirile la ieșirea unui neuron vor fi echivalente cu activarea acelui neuron.
Terminologie
Ieșirea sau activarea unei unități. Atîta timp cît nu este necesar de a se proceda altfel, în continuare se va considera că ieșirea și activarea unei unități vor fi unul și același lucru. Cu alte cuvinte, valoarea mărimii de ieșire a unui neuron va fi egală cu valoarea stării de activare a aceluiași neuron. A se remarca totuși faptul că notația oi este, în general, rezervată pentru neuronii plasați în stratul de ieșire al rețelei și nu pentru orice neuron i.
Compensare, echilibrare, prag. Acești termeni vor referii toți o constantă (independentă față de intrarea rețelei), constantă care este, totuși, intrare în rețea. Această constantă poate fi considerată și implementată ca o pondere dinspre un neuron care are valoarea activării egală cu 1.
Număr de straturi. Într-o rețea de tip feed-forward (cu propagare înainte), unitățile din stratul de intrare nu execută nici un calcul și, din această cauză, acest strat de intrare nu este cuprins în numărul de straturi ale unei rețele neurale. Astfel, o rețea cu un strat de intrare, un strat ascuns și unul de ieșire, va fi referită ca o rețea cu două straturi, și nu cu trei.
Învățare contra memorare. Merită a fi făcută o distincție între învățarea și memorarea informației vehiculate. Motivul pentru care s-a vrut această distincție este următorul. Algoritmul de învățare poate fi privit ca un proces în care starea rețelei converge către un oarecare optim. Acești algoritmi sînt, cel mai uzual, asociați cu rețele în care activarea este propagată numai înainte. Pe de altă parte, memorarea presupune metode care se referă la determinarea analitică a parametrilor rețelei.
Topologii de rețea
Această secțiune își propune să treacă sumar în revistă diferite configurații de conexiuni între neuroni și modurile de propagare a datelor în rețea.
În funcție de modurile de interconectare ale neuronilor, principala distincție se poate face între:
Rețele neuronale de tip feed forward, în cadrul cărora fluxul datelor se vehiculează de la intrarea spre ieșirea unităților. Procesarea datelor se poate extinde peste mai multe straturi de unități, dar fără să existe conexiuni înapoi, de tip feedback.
Rețele recurente, care conțin conexiuni de tip feedback.
Antrenarea rețelelor neurale
O rețea neurală trebuie gîndită în așa fel încît aplicarea unui set de mărimi de intrare să producă un set de mărimi de ieșire dorit. Există mai multe metode de a modifica "tăria" conexiunilor. O modalitate este de a modifica explicit valorile ponderilor asociate conexiunilor, utilizînd cunoștiințe a priori. O altă cale este de a "antrena" rețeaua alimentînd-o cu vectori de antrenare și lăsînd-o să-și modifice ponderile în concordanță cu o anumită lege de învățare.
Clasificarea metodelor de antrenare
Modalitățile de antrenare se pot categorisi în două tipuri distincte, și anume:
Învățarea supervizată sau Învățarea asociativă, în care rețeaua este antrenată furnizîndu-i-se seturi de mărimi de intrare și seturi corespunzătoare de mărimi de ieșire dorite. Aceste "perechi" de seturi de intrări-ieșiri pot fi furnizate, fie de un "învățător" extern, fie de către însuși sistemul care conține rețeaua.
Învățarea nesupervizată sau auto-organizarea, în care o unitate este antrenată să descopere singură anumite caracteristici ale seturilor vectorilor de intrare. Această metodă nefăcînd obiectul acestei teme, nu va fi amănunțită în continuare.
Modificarea caracteristicilor conexiunilor
Ambele metode de învățare prezentate mai sus presupun o ajustare a ponderilor ("tăriei") conexiunilor dintre neuroni, urmărind o anumită regulă. Ideea care stă la baza conceptului de antrenare este că, dacă două unități i și j sînt simultan active, interconexiunea dintre ele trebuie întărită. Dacă i primește semnal de intrare de la j, cea mai simplă modalitate de antrenare presupune modificarea ponderii wij cu
, (2.4)
unde este o constantă de proporționalitate pozitivă, reprezentînd rata de învățare.
O alta regulă uzuală de învățare folosește, nu activarea neuronului i, ci diferența dintre valoarea dorită a activării și valoarea efectivă a acesteia pentru ajustarea ponderilor cu:
, (2.5)
în care di este valoarea dorirtă a stării de activare, furnizată de un supervizor al antrenării. Această lege de antrenare, numită și regula delta, a fost folosită și în experimentele care vor urma și, de aceea, va face obiectul unor discuții mai largi pe această temă.
Există multe variații – unele chiar ciudate – ale regulilor modificare a ponderilor, dar acestea neputînd apărea, nici măcar ocazional, în paragrafele ce vor urma.
Adaline și Perceptron. Scurtă istorie
Acest paragraf își propune o scurtă trecere în revistă a cîtorva clasice apropieri de problema calculului neural și problema învățării. Se vor descrie în linii mari perspectivele principalelor cercetări în aceste scopuri, fără să se dorească o prezentare exhaustivă a eforturilor în acest domeniu.
Înainte de a se intra în mai multe amănunte, este necesar a se face distincția între reprezentare și învățare.
Reprezentarea se referă la abilitatea unui sistem neural de a simula (reprezenta) o anumită funcție. Pe de altă parte, învățarea necesită existența unei proceduri sistematice de ajustare a ponderilor unei rețele, în scopul declarat de a produce o anumită funcție, dată.
Cele mai vechi și cunoscute modele care materializează dezideratele celor prezentate mai sus, au următoarele caracteristici:
La Adaline, se face adaptiv o ponderare liniară (printr-un proces de învățare supervizată), care prduce semnalul dorit de ieșire la diferite seturi de vectori de intrare. Rezultatul este optimal, în sensul celor mai mici pătrate.
La Perceptron, există o preprocesare prin care rețeaua extrage caracteristicile seturilor de vectori de semnale de intrare. Circuitele de ieșire au rolul discriminării între diferitele seturi de intrare, fiecare răspunzînd de o anumită clasă de seturi de intrare.
Adaline (ADAptive LINear Element=element liniar adaptiv)
Cel mai simplu sistem de învățare însumează semnalele de intrare, unde fiecare semnal de intrare este furnizat corespunzător, printr-un parametru de ponderare. "Elemenul liniar adaptiv", numit și Adaline, este un exemplu clasic. Într-o implementare fizică, simplă (vezi figura 2-3), acest dispozitiv cuprinde un set de rezistoare variabile, conectate la un circuit capabil să însumeze curenții produși de diferențele de potențial de la intrare. Uzual, elementul central – sumatorul – este urmat de un bloc de cuantizare, ale cărui ieșiri pot lua una din valorile +1 sau –1, depinzînd de semnul sumei.
Spre deosebire de exemplul ales, unde se poate distinge doar o ieșire, este clar faptul că un sistem cu mai multe ieșiri paralele, poate fi implementat cu mai multe astfel de blocuri funcționale, precum cel exemplificat.
Figura 2-3. Dispozitivul Adaline.
Dacă mărimile conductanțelor din intrare sînt notate cu wi, cu i=0, 1, …, n, și semnalele de intrare și ieșire cu xi, respectiv a, atunci ieșirea blocului central, de însumare, este definită a fi:
, (2.6)
unde = w0. Scopul unui astfel de dispozitiv este de a produce o valoare ap la ieșire, atunci cînd la intrare este aplicat un set de valori xip, cu i=1, 2, …, n. Problema care se pune este de a determina coeficienții wi, cu i=1, 2, …, n, în așa fel încît răspunsul intrare–ieșire al sistemului să fie corect pentru un număr cît mai mare de seturi arbitrare de semnale de intrare. Dacă o clasificare exactă nu este posibilă, atunci trebuie căutat un minim pe suprafața erorilor, în sensul celor mai mici pătrate. O operație adaptivă presupune existența unui mecanism prin care wi poate fi ajustat, de obicei iterativ, în scopul atingerii valorii corecte. Pentru Adaline, a fost introdusă legea delta de ajustare a ponderilor, regulă care va fi discutată mai pe larg într-un paragraf următor.
Perceptronul
Perceptronul a fost propus în 1959 de Rosenblatt, și constă dintr-o rețea de tip feed-forward, compusă din unități binare. În forma sa cea mai simplă, Perceptronul presupune existența unui strat de intrare cu N elemente ("retina"), care comunică cu un strat cu M unități de "asociere" sau "mascare", i, și o singură unitate de ieșire. Scopul operării perceptronului este de a învăța o transformare T:{–1, 1}N{–1, 1} dată, folosind seturile de antrenare x și ieșirea corespunzătoare o=T(x). În definiția originală, activitatea unităților de asociere poate fi orice funcție i a stratului de intrare x, dar procedura de învățare ajustează doar conexiunile cu stratul de ieșire. Motivul pentru aceasta a fost faptul că nu s-a găsit o "rețetă" de ajustare a conexiunilor dintre x și i. Depinzînd de funcțiile i, perceptroanele pot fi grupate în diferite familii [3].
Ieșirea unui perceptron este un element liniar de limitare, care calculează marimea de ieșire conform formulei:
, (2.7)
în care F este funcția semn (sgn). În acest caz particular,
(2.8)
În figura următoare s-a reprezentat grafic modelul matematic al perceptronului.
Figura 2-4. Perceptronul
Back–Propagation (propagarea înapoi)
O rețea alcătuită dintr-un singur strat de neuroni are restricții severe în ceea ce privește clasa de sarcini pe care este în stare să o îndeplinească. Din această cauză, în cele ce urmează mă voi referi la rețele de tip feed-forward cu mai multe straturi, care reușesc să elimine cîteva din dezavantajele rețelelor cu un singur strat [2].
Problema care se pune în continuare este aceea de a găsi o modalitate de ajustare a ponderilor dintre intrare și stratul ascuns. Rezolvarea acestei probleme a fost dată în 1986 de Rumelhart, Hinton și Williams [5].
Ideea centrală care stă la baza acestei soluții este aceea că, pentru unitățile din stratul ascuns, eroarea se determină propagînd înapoi erorile stratului de ieșire. Din acest motiv, această regulă de învățare se numește back-propagation. Propagarea înapoi poate fi, deasemenea, considerată ca o generalizare a regulii delta pentru funcții de activare neliniare și rețele cu mai multe straturi.
Rețele feed-forward cu mai multe straturi
O rețea neurală de tip feed-forward are o structură oganizată pe straturi. Fiecare strat este compus din unități (neuroni) ce-și recepționează intrările de la unitățile din stratul imediat anterior și-și transmit ieșirile unităților din stratul imediat următor. Nu există conexiuni între unitățile din cadrul aceluiași strat.
Ni intrări sînt aduse în primul strat ce conține Nh,1 unități ascunse. Unitățile de intrare sînt defapt niște unități logice, ele neexecutînd nici o operație matematică, avind doar rolul de a distribui intrările din rețea. Activarea unei unități ascunse este o funcție Fi de intrările ponderate și însumate cu o constantă de compensare. Ieșirile stratului ascuns se distribuie următorului strat cu Nh,2 unități ascunse, pînă la ultimul strat ascuns, ale cărui ieșiri sînt aduse la intrarea stratului cu No unități de ieșire (vezi figura 2-5).
Figura 2-5. Perceptronul cu mai multe straturi.
Regula delta generalizată
Atîta timp cît se utilizează unități cu funcții de activare neliniare, este necesară generalizarea regulii delta, prezentată succint în unul din paragrafele anterioare. Activarea este o funcție diferențiabilă de intrarea totală, dată de expresia:
, (2.9)
în care
. (2.10)
Pentru a găsi forma corectă a expresiei regulii delta generalizată, trebuie mai întîi definit:
. (2.11)
Măsura erorii, Ep este definită ca fiind totalul erorii pătratice pentru vectorul p de la ieșire:
, (2.12)
în timp ce este masura erorii totale. Se poate scrie:
. (2.13)
Din ecuația (2.10) se vede că al doilea factor al ecuației (2.13) este:
. (2.14)
Dacă se definește:
, (2.15)
se obține o formă actualizată a regulii, care este echivalentă cu regula delta descrisă inițial, dar degenerînd într-o deplasare gradient spre un minim pe suprafața erorii, dacă se fac ajustări de ponderi în concordanță cu expresia:
. (2.16)
Ideea este de a observa cum ar trebui să arate ip pentru fiecare unitate i, din rețea. Rezultatul observației este că ip se poate calcula recursiv, prin propagarea înapoi în rețea a erorilor.
În vederea calculării lui ip, se va scrie această derivată parțială ca produs de doi factori, un factor reflectînd modificarea erorii în funcție de ieșirea unității, iar celălalt factor indicînd modificarea ieșirii în funcție de modificarea intrării. Astfel, vom avea:
. (2.17)
În continuare se va calcula al doilea factor. Din ecuația (2.9) transpare expresia:
, (2.18)
care este pur-și-simplu derivata funcției F pentru unitatea i, evaluată la intrarea iip, pentru acea unitate. Pentru calcularea primului factor din ecuația (2.17), se vor considera două cazuri. Primul presupune că unitatea i este o unitate de ieșire pentru rețea. În acest caz, din definiția lui Ep rezultă:
. (2.19)
Înlocuind aceasta și ecuația (2.18), în expresia (2.17), se va obține:
, (2.20)
pentru oricare unitate i.
În al doilea caz, dacă i nu este o unitate de ieșire, nu se cunoaște contribuția acestei unități la eroarea de ieșire a rețelei. Totuși, măsura erorii se poate scrie ca o funcție de intrările rețelei, de la stratul ascuns, pînă spre stratul de ieșire, adică Ep=Ep(i1p, i2p, …, iip, …) și se va uza de dezvoltarea în serie pentru a scrie:
. (2.21)
Înlocuind aceasta în ecuația (2.17), rezultă:
. (2.22)
Expresiile (2.20) și (2.22) dau o procedură recursivă pentru calculul lui pentru toate unitățile din rețea, care este apoi folosit în calculul modificărilor de ponderi, conform ecuației (2.16). Această procedură constituie generalizarea regulii delta pentru o rețea neurală de tip feed-forward, cu unități neliniare.
Folosirea algoritmului back-propagation
Aplicarea regulii delta generalizată, implică parcurgerea a două faze. În timpul primei faze, vectorul de intrare este prezentat la intrarea în rețea și propagat înainte prin rețea în scopul calculării valorilor de ieșire aip, corespunzătoare unităților de ieșire. Această ieșire este apoi comparată cu valoarea dorită, rezultînd un semnal de eroare ip, pentru fiecare unitate de ieșire. A doua fază presupune propagarea înapoi, în timpul căreia, semnalul de eroare este pasat fiecărei unități din rețea, calculîndu-se totodată ajustarea ponderii corespunzătoare.
Ajustarea ponderilor cu sigmoid ca funcție de activare. Rezultatul obținut în secțiunea anterioară se poate sumariza în trei ecuații distincte:
Ponderea unei conexiuni este ajustată cu o cantitate proporțională cu produsul unui semnal de eroare , al unității i care primește semnal de intrare, și ieșirea unității j, transmisă de-a lungul conexiunii:
. (2.23)
Dacă unitatea este o unitate de ieșire, semnalul de eroare este dat de:
. (2.24)
Luînd ca funcție de activare F funcția sigmoid:
, (2.25)
derivata funcției va avea expresia:
(2.26)
astfel că semnalul de eroare pentru o unitate de ieșire se va putea scrie ca fiind:
. (2.27)
Semnalul de eroare pentru o unitate ascunsă se determină recusiv, în funcție de semnalele de eroare ale unităților cu care este conectată direct și de ponderile acelor conexiuni. Pentru sigmod ca funcție de activare, se poate scrie:
. (2.28)
Rată de învățare și momentum. Procedura de învățare necesită ca modificările aduse ponderilor să fie proporționale cu . Coborirea pe gradient presupune înaintarea cu pași infinitezimal de mici. Constanta de proporționalitate este așa-numita rată de învățare . Din considerații practice, se dorește o rată de învățare cît mai mare posibil, fără ca să se ajungă la oscilații. O cale pentru evitarea oscilațiilor la valori mari ale lui , este de a face modificări ale ponderilor dependent de ultima modificare adusă ponderilor, adunînd un nou termen denumit momentum:
, (2.29)
unde t este indexul momentului de timp curent, iar este o constantă care determină efectul modificării anterioare a ponderi.
Rolul termenului momentum este ilustrat grafic în figura 2-6. Cînd nu se uzează de momentum, este necesar un timp mai lung pîna la atingerea unui minim, folosind o rată mică de învățare, în timp ce cu o rată mare de învățare, un minim nu se va atinge niciodată, din cauza oscilațiilor care apar. Însumînd și termenul momentum, minimul de pe suprafața erorii va fi atins mai repede.
Figura 2-6. Coborîrea pe suprafața erorii. a) pentru o rată de învățare mică; b) pentru o rată de învățare mare (a se nota oscilațiile produse); c) pentru o rată de învățare mare și cu un termen momentum în expresia modificării ponderilor.
Considerații finale asupra algoritmului back-propagation
În ciuda aparentului succes al algoritmului de învățare back-propagation, există cîteva aspecte care fac ca acesta să nu fie universal aplicabil pentru antrenarea rețelelor. Cel mai mare neajuns îl constituie durata, relativ mare a procesului de antrenare. Acest lucru poate fi o consecință a alegerii inadecvate a termenilor momentum și/sau rata de învățare. În acest scop s-au elaborat metode de modificare adaptivă, în timpul antrenării, a ratei de învățare.
În general, cînd se vorbește de imposibilitatea învățării, problema se reduce la una din următoarele aspecte: paralizia rețelei și munimul local.
Paralizia rețelei. Pe măsură ce rețeaua se antrenează, ponderile pot fi ajustate spre valori foarte mari, pozitive sau negative. În consecință, intrarea unei unități ascunse sau de ieșire, poate atinge o valoare foarte mare (în modul), iar, din cauza sigmoidului ca funcție de activare, unitatea va produce o activare foarte apropiată de zero sau unu. După cum se poate observa din expresiile (2.27) și (2.28), modificarea ponderilor, care este proporțională cu aip·(1–aip), va fi foarte apropiată de zero, iar procesul de antrenare va cădea într-o virtuală plafonare.
Minumul local. Suprafața erorii asociată unei rețele complexe, este marcată de o mulțime de maxime și minime locale. Datorită coborîrii pe gradient, care se presupune a fi făcută cu pași infinetizimal de mici, rețeaua poate fi surprinsă de atingerea unui minim local, în timp ce pe suprafață există minime mult mai adînci.
Metodele probabilistice pot evita acest neajuns, dar acestea încetinesc mult procesul antrenării.
O altă posibilă măsură pentru evitarea minimelor locale este creșterea numărului de unități de pe straturile ascunse. Creșterea unităților ascunse duce la extinderea suprafeței erorii, iar neșansa surprinderii rețelei într-un minim local este mai mică. Totuși, numărul unităților ascunse trebuie menținut sub o limită superioară, care, depășită fiind, poate creea alte minime locale pe suprafața erorii.
Un alt apect important, care trebuie luat în considerație, este modul în care se prezintă rețelei seturile de vectori de antrenare. O aplicare defectuasă a vectorilor de antrenare la intrarea rețelei, poate duce la incapacitatea acesteia de a generaliza informația utilă, rezultînd într-o paralizie a rețelei. În general se preferă o prezentare după un algoritm ce induce o ordine aleatoare a vectorilor din setul de antrenare.
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: Interfata de Comenzi Vocale (ID: 149315)
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.
