Prognoza Cursului Valutar Folosind Calculul Neuronal’
Introducere
La momentul actual economia reprezintă în societatea noastră o importanță deosebită. România este țară membră UE și NATO, având deschiderea politică și economică respectivă acestor calități.
În practica de comerț exterior sau a relațiilor internaționale actuale, este important cursul valutar liber determinat pe piața cererii-ofertei, care se modifică în funcție de influența unor factori de ordin economic, de ordin tehnic-valutar, factori legați de politica valutară a diferitelor state cu pondere în economia mondială, factori psihologici.
Analiza previzională sau prospectiva presupune determinarea evoluției viitoare a unui fenomen economic pe baza cercetării factorilor de influență(relații de cauzalitate), a acțiunilor noi în perspectivă. Prognoza ratei de schimb valutar este foarte importantă pe piața financiară pentru toți participanții: bănci comerciale, burse de valori, case de schimb valutar, persoane sau instituții pe post de brokeri sau de dealeri.
Determinarea unor elemente de tendință economico-financiară sunt în general greu de abordat din cauza numărului mare de parametrii și a imprevizibilității variației lor.
Rețelele neuronale artificiale, cunoscute ca unelte de aproximare, regresie și estimare eficientă, în special în cazul relațiilor neliniare, se oferă pentru a fi folosite în construirea modelelor și predicțiilor neliniare.
Rețelele neuronale artificiale, inspirate din organizarea creierului uman, au fost introduse în anii ’50 ca modele de raționament uman. După o perioadă de dezinteres științific, ele au început să fie analizate și utilizate din nou, în domenii variate, începând din anii ’80. Un aspect important al rețelelor neuronale artificiale este capacitatea lor de aproximare universală.
Scopul lucrării de față este tratarea problemei predicțiilor seriilor de timp și capacitățile rețelelor neuronale artificiale în contextul predicției economico-financiare. Ideea de bază a lucrării este că seriile de timp descriu procesele economice în cauză. Predicția seriilor de timp poate fi concepută ca o problemă de aproximare.
Structura lucrării:
În capitolul 1 am prezentat noțiunea de calcul neuronal: ce este acesta, calculul neuronal în inteligența artificială și elementele lui de bază.
În capitolul 2 am prezentat rețelele neuronale artificiale: mod de operare, clasificare, domenii de utilizare și modul de funcționare.
În capitolul 3 am prezentat implementarea în economie a rețelelor neuronale: problematica generală și preprocesarea datelor( metode de preprocesare, date pentru instruire și validare, măsura performanței).
Capitolul 4 conține aplicația lucrării „Prognoza cursului valutar folosind calculul neuronal”: prezentarea generală, funcționarea aplicației, prezentarea interfeței grafice, modul de implementare.
Capitolul 1 – Calculul neuronal – noțiuni introductive
1.1. Introducere în noțiunea de calcul neuronal
Ce este calculul neuronal
Calculul neuronal este o disciplină complexă, care folosește cunoștințe din multe alte discipline tradiționale : biologie, anatomie, chimie, fizică, neurologie, matematică, informatică, etc, apărută în încercarea de a modela structura și modul de funcționare al creierului uman. Deși modul în care funcționează creierul uman este departe de a fi cunoscut, totuși s-au făcut progrese în descifrarea modului de funcționare a sistemului neuronal.
Calculul neuronal constitue o metodă nouă de calcul cu influențe din disciplinele mai sus menționate și este reprezentat prin intermediul rețelelor neuronale. Rețelele neuronale au următoarele calități : capacitatea de aproximantă universală, abilitatea de a învăța și de a se adapta la mediul încojurător, de a extrage trăsături fundamentale din datele de intrare.
Într-o analogie cu un calculator, creierul uman este un sistem de procesare a informațiilor caracterizat prin : complexitate, neliniaritate și paralelism. Creierul uman are capacitatea extraordinară de a-și organiza activitatea neuronală în așa fel încât să realizeze activități complexe ( motrice, percepție, recunoșterea formelor, etc) mult mai rapid și mai performant decât cel mai puternic calculator din lume.
Încă de la naștere creierul uman are o structură complexă. Ne naștem cu reflexe necondiționate care nu dispar ( simple : clipit, strănut, râs, plâns, etc sau complexe : instinctul alimentar, de apărare și reproducere.). Dar cel mai important este faptul că în funcția psihică a scoarței cerebrale unii din centri de asociere conduc la acte reflexe învățate în cursul vieții ( vorbire, scriere, etc.. ) acestea fiind reflexe condiționate. Pe baza acestor reflexe condiționate, a învățării, a „ experiețelor ” constituite în ani de zile, este realizat calculul neuronal.
Creierul uman este cel mai complex sistem de calcul. Capacitatea creierului uman de a gândi, memora, de a rezolva probleme complexe au tentat în ultima perioadă de timp un mare număr de cercetători, în încercarea de a modela modul său de operare. Aceste încercări de a crea un sistem de calcul care să cuprindă trăsăturile fundamentale ale creierului uman, au generat o nouă direcție de cercetare, care poate fi numită pe scurt, calcul neuronal.
Oricine poate sesiza faptul că creierul uman este de departe superior oricărui calculator digital, aproape în orice domeniu. Un exemplu elocvent: un copil de 1 an de zile este mult mai rapid și mai precis în recunoașterea obiectelor și a persoanelor decât cel mai avansat sistem de inteligență artificială,care ar rula pe cel mai puternic supercalculator.
Creierul uman are numeroase trăsături care s-au dorit a fi modelate cu ajutorul unor sisteme de calcul artificiale:
– este robust și tolerant la deteriorări. Celulele nervoase din creier mor zilnic fără a afecta performanțele sale.
– este flexibil, putându-se adapta la un nou mediu prin “învățare”, pentru aceasta nu trebuie să fie programat într-un limbaj de programare ( Pascal, C, Fortran, Lisp, etc., ..).
– poate prelucra informații incomplete, inconsistente, probabilistice.
– este un sistem cu un înalt grad de paralelism.
– este de dimensiuni mici, compact, disipând o cantitate foarte mică de energie.
Doar în activități de calcul bazate pe operații algebrice putem spune că un sistem de calcul electronic (un computer), depășește performanțele creierului uman.
Trăsăturile de mai sus ale creierului uman constituie o motivație reală pentru necesitatea studiului calculului neuronal. Calculul neuronal, așa cum am mai precizat, reprezintă o alternativă viabilă la metodele de calcul tradițional, bazate pe programarea unei secvențe de instrucțiuni, indiferent dacă modul de procesare este serial sau paralel .
Calculul secvențial a fost introdus de von Neumann, constituind baza tuturor echipamentelor de calcul existente astăzi. Calculul neuronal are ca sursă de inspirație cunoștințele acumulate de științele neurologice, cu toate că nu întotdeauna elementele folosite sunt plauzibile din punct de vedere biologic. În lucrarea noastră, dorind să prezentăm un nou model de calcul, vom neglija plauzibilitatea biologică, noi fiind interesați de alte trăsături.
1.1.2. Concluzii
Toate cele prezentate până la acest moment reprezintă o pledoarie în favoarea calculului neuronal. Teoretic problemele sunt deosebit de atractive și bine fundamentate; practic aplicarea calculului neuronal și prin urmare construcția unei rețele neuronale trebuie să fie precedată de răspunsuri date la următoarele întrebări:
– Care este arhitectura optimală? Câte straturi sunt necesare? Câți neuroni sunt necesari în fiecare strat? Câte conexiuni sinaptice sunt necesare și cum trebuie organizate acestea? Ce fel de funcție de activare trebuie să folosim? Ce lege de învățare este mai eficientă? Trebuie să folosim o lege de învățare sincronă sau asincronă, deterministă sau stohastică?
– Câte exemple trebuie să prezentăm rețelei neuronale pentru a învăța ceea ce dorim noi? De câte ori trebuie să-i prezentăm aceste exemple? E nevoie ca procesul de învățare să fie supervizat sau poate fi doar reântărit?
– Ce poate efectua de fapt o rețea neuronală construită pentru o anumită problemă? Câte probleme poate ea rezolva? Cât de bine? Cât de repede? Cât de robustă este rețeaua neuronală față de date incorecte, deteriorări sau eliminări de neuroni? Poate rețeaua neuronală generaliza cu succes? Ce fel de clase de funcții poate reprezenta?
– Cum poate fi implementată din punct de vedere software și hardware rețeaua neuronală? Care sunt avantajele și dezavantajele diferitelor implementări hardware posibile, ce performanțe au în raport cu simularea software?
Calculul neuronal în inteligența artificială
Istoric al inteligenței artificiale
Artificial Intelligence ( A.I.) termenul în limba engleză tradus în română prin inteligență artificială, este un termen tehnic care se referă la un domeniu de cercetare în cadrul informaticii. În vorbirea curentă este un produs rezultat în urma desfășurării acestei activități, adică adaptarea comportamentului inteligent al omului la calculatoare.
Definiția cea mai acceptată a inteligenței artificiale a fost dată de John McCarthy, în anul 1955 : „o mașină care se comportă într-un mod care ar putea fi considerat inteligent, dacă ar fi vorba de un om”.
La început, crearea și cercetarea inteligenței artificiale s-a desfășurat pe domeniul psihologiei, punându-se accent pe inteligența lingvistică, ca de exemplu la testul Turing. Acest test constă într-o conversație de limbaj uman natural cu o mașină (computer) care a fost programată special pentru acest test. Există un juriu uman care conversează cu acest computer, dar și cu un om prin câte un canal pur text (fără ca ei să se vadă sau să se audă). În cazul în care juriul nu poate să-și dea seama care este computerul și care omul, atunci inteligența artificială (programul calculatorului) a trecut testul.
Turing a prezis în anul 1950 că până în anul 2000 vor exista mașini (calculatoare) cu 109 bytes (1 GB) de memorie care vor putea ,,păcăli” 30% din juriile umane într-un test de 5 minute. Însă, în timp ce pe de o parte tehnologia chiar a depășit previziunile lui Turing, inteligența artificială este încă departe de a fi realizată.
Testul lui Turing este important deoarece definește inteligența în termeni comportamentali și anume că o entitate, fie ea naturală sau artificială, trebuie considerată inteligentă în raport de comportamentul său.
Primul produs de inteligență artificială Logic Theorist, este lansat în anul 1957. Acest produs este destinat demonstrării automate de teoreme și este realizat de către: A. Newell, J.C. Shaw și H. Simon. În rezolvarea problemei se pleacă de la teorema care trebuie rezolvată realizându-se deplasarea spre axiome prin eliminarea progresivă a diferențelor dintre starea curentă a problemei și scopul propus.
General Problem Solver, este un proiect mult mai ambițios demarat imediat după lansarea Logic Theorist, prin care realizatorii săi urmăreau realizarea unui produs capabil să rezolve o gamă largă de probleme, prin încorporarea metodelor de raționament generale, care să îl facă aplicabil în domenii extrem de variate. Proiectul avea drept obiective identificarea
mecanismelor de gândire generale, universale, care sunt utilizate în rezolvarea oricărei probleme, în desfășurarea oricărei activități și transpunerea lor sub forma unor programe de calcul.
Anii ’70 au marcat introducerea și generalizarea conceptului de cunoștințe (knowledge) considerându-se că emularea comportamentului inteligent la mașini este posibilă prin memorarea și prelucrarea automată de cunoștințe. Produsele unor sisteme care dețin și utilizează cunoștințe denumite sisteme bazate pe cunoștințe sau sisteme cu bază de cunoștințe.
Sistemele de inteligență artificială cu cel mai mare succes comercial în domeniul civil au fost în acești ani sistemele expert: DENDRAL, MYCIN și PROSPECTOR.
Generația a 5-a de calculatoare apare în Japonia în anii ’80 fiind generația sistemelor de prelucrare automată a cunoștințelor (Knowledge Information Processing Systems). Proiectul a durat 10 ani și au fost raportate o serie de succese în special în domeniul hardware-ului paralel, dar au fost făcute puține referiri în ceea ce privește software-ul de prelucrare a cunoștințelor.
După apariția testului Turing în anii ’50 noile previziuni ale experților la acea dată se bazau pe așa numita „Legea lui Moore” care susținea faptul că : „Numărul de tranzistori pe un circuit integrat se va dubla la fiecare 18 luni, prin urmare și puterea de calcul”. Această lege s-a îndeplinit pentru ultimii 30 de ani destul de bine și poate că va mai fi valabilă încă 5-10 ani.
Pentru viitor se speră că noile tehnologii (cuantice, optice, holografice, nanotehnologiile, etc) vor permite menținerea creșterii exponențiale astfel încât în maxim 20 de ani computerele să depășească puterea de procesare a creierului uman. Unul din principalii susținători ai acestei ipoteze, pe lângă Vernor Vinge, este cunoscutul expert Ray Kurzweil cu a sa celebră „Lege a întoarcerilor accelerate”.
La momentul actual inteligența artificială vizează în continuare diversificarea metodelor și tehnicilor de lucru, a platformelor hardware pe care se realizează implementarea sistemelor de inteligență artificială, toate acestea fiind de natură cantitativă neglijându-se din păcate nenumăratele fațete calitative ale inteligenței umane.
O altă latură a inteligenței artificiale studiază animalele și aici în special insectele care sunt mai ușor de emulat pe roboți. Totuși încă nu au putut fi create modele computaționale satisfăcătoare pentru simularea inteligenței animale.
John Lucas a argumentat în lucrarea sa „Minți, mașini și Gödel” (1961), că mintea unui matematician nu poate fi reprezentată printr-un algoritm, bazându-se pe teorema incompletitudinii a lui Gödel : „Nu există sisteme formale care să fie și consistente (ne-contradictorii) și complete”.
Obiectul inteligenței artificiale
Obiectul inteligenței artificiale este obținerea de artefacte care să se comporte inteligent, similar unui om. Câteva exemple binecunoscute de astfel de artefacte sunt roboții antropomorfi, programele de jucat șah, calculatoarele care pot dialoga într-un limbaj similar celui uman, programele de traducere automată sau de regăsirea textelor relevante pe Internet.
În funcție de ideea fundamentală acceptată, în inteligența artificială sunt două abordări (nu neaparat antagoniste). Abordarea conexionistă se bazează pe ideea că inteligența este „emergentă” rețelelor neuronale deosebit de complexe. Pe de altă parte, abordarea simbolică, bazată pe așa numita ipoteză a sistemelor simbolice fizice a lui H. Simon și A. Newell, consideră că orice sistem inteligent (natural sau artificial) este un sistem fizic de prelucrare a simbolurilor.
Fiecare din cele două abordări are realizări și limite. De exemplu, rețelele neuronale artificiale au fost folosite cu succes în recunoașterea imaginilor sau a vocilor. Ele au limitări însă în înțelegerea limbajului uman, problemele sintaxei și a semanticii combinaționale, a compoziționalității fiind foarte greu de tratat. Un exemplu al lui Jerry Fodor se referă la exprimarea „rachetă antirachetă”, care este imediat înțeleasă de oamenii care nu au mai auzit-o, fapt foarte greu de explicat prin simple asociații (conform modelului ABC-Asociaționism, Behaviorism, Conexionism, care stă la baza rețelelor neuronale artificiale).
Înțelegerea exprimării de mai sus poate fi foarte ușor explicată prin abordarea simbolică, în care se postulează existența unui „limbaj al gândirii” (Anderson 1990). Avantajul reprezentării simbolice este foarte bine exprimat și de Daniel C. Dennett: „Simbolurile, spre deosebire de nodurile țesute în rețelele conexioniste, sunt mobile; ele pot fi manipulate; ele pot forma structuri mai mari, în care contribuția lor la sensul întregului poate fi o funcție definită, generabilă, a structurii ( a structurii sintactice) a părților ”.
În abordările simbolice de inteligență artificială, prelucrările sunt efectuate de un program care manipulează cunoștințe dintr-o așa numită bază de cunoștințe. Programele de calcul, în acest caz, sunt denumite sisteme bazate pe cunoștințe, caracteristica lor definitorie fiind că există o separare netă între baza de cunoștințe și un mecanism de efectuat raționamente. Una din cele mai grele probleme ale dezvoltării unui astfel de sistem este construirea bazei de cunoștințe, așa numita achiziție de cunoștințe.
Bazele de cunoștințe pot deveni nebănuit de mari. De exemplu, pentru înțelegerea unor propoziții în limbajul uman este necesar un volum foarte mare de cunoștințe de ,,bun simț” , pe care le știe și un copil de câțiva ani dar care sunt foarte greu de introdus într-un program. Astfel, înțelegerea instantanee de către noi a unei propoziții simple este foarte greu de realizat de către calculator.
În inteligența artificială există divergențe de opinii referitoare la mai multe probleme esențiale. Aceste dispute sunt datorate câtorva aspecte esențiale care pun sub semnul întrebării posibilitatea realizării de roboți cu „viață psihică” sau conștiință, elemente determinante în considerarea unui robot ca fiind egal omului.
Domenii ale inteligenței artificiale
Cercetarea asupra inteligenței artificiale a început încă din anii 1950 fiind împărțită în două :
Cea clasică (simbolică), ocupându-se cu manipularea simbolică a conceptelor abstracte, folosită azi în sistemele expert, și
Cea conecționistă, exemplu cel mai cunoscut fiind „rețelele neuronale”
În anii 1980 s-a ajuns la concluzia că ambele abordări aveau limitări severe, cercetarea în acest domeniu fiind parțial abandonată din lipsă de finanțare.
Domeniile inteligenței artificiale reprezintă zone majore de aplicații ale inteligenței artificiale structurate conform tipurilor de activități considerate drept semnificative pentru acest domeniu.
Prelucrarea limbajului natural cuprinde atât înțelegerea cât și generarea mesajelor în limbaj natural. Este considerat drept cel mai dificil domeniu al inteligenței artificiale. Comunicarea în limbaj natural presupune realizarea unor procese extrem de complexe și încă puțin cunoscute. Limbajul natural servește la vehicularea cunoștințelor, sub formă de mesaje, adesea foarte condensate. Înțelegerea limbajului natural este o problemă deosebit de complexă, de decodificare a acestor mesaje. Un sistem software capabil să înțeleagă un mesaj în limbaj natural ar trebui să posede tot atâtea cunoștințe contextuale și să efectueze tot atâtea prelucrări informaționale, câte au fost necesare celui care a redactat mesajul. În prezent, au fost decodificate și generate mesaje în limbaj natural pentru fragmente limitate de lexic.
De prelucrarea limbajului natural sunt legate o serie de alte aplicații de inteligență artificială, precum traducerile automate și programarea automată. Programarea automată presupune generarea unui program pe bază de specificații redactate într-un limbaj natural sau într-o altă formă de nivel înalt. Într-un anumit sens, compilatoarele realizează o programare automată, prin faptul că generează cod obiect pe baza unor enunțuri exprimate într-un limbaj formal (limbajul de programare utilizat pentru scrierea programului sursă). Această formă de programare automată nu este în spiritul a ceea ce se înțelege în cadrul inteligenței artificiale prin programare automată, întrucât nu este asigurată cerința ca specificațiile să fie de nivel înalt. Scrierea oricărui program este legată de demonstrarea faptului că programul respectiv determină obținerea unor rezultate corecte (verificarea programului). Toate sistemele de programare automată trebuie să realizeze această verificare a programului generat.
Modelarea diferitelor forme de raționament reprezintă un domeniu mai abstract, cu aplicabilitate în cadrul altor domenii teoretice și practice. Semnificative pentru acest domeniu sunt modelarea raționamentului inductiv, element de bază al sistemelor de învățare automată și modelarea raționamentului incert, esențială în cadrul sistemelor expert. În cadrul modelării raționamentului, un rol important îl deține demonstrarea automată a teoremelor, tratată uneori drept domeniu distinct.
Demonstrarea automată a teoremelor presupune abilitatea de a realiza deducții, plecând de la o serie de ipoteze, precum și intuiție, pentru stabilirea teoremelor anterior demonstrate a căror utilizare este utilă în demonstrația curentă. Multe activități curente, practice, precum diagnosticarea, regăsirea informațiilor pot fi formalizate drept probleme de demonstrare de teoreme. Formalizarea procesului deductiv, utilizând logica predicatelor de ordinul întâi a contribuit la mai buna înțelegere a diferitelor forme de raționament.
Problemele de percepție acoperă domenii precum vederea și vorbirea artificială, cu aplicabilitate în extinderea capacităților de interacțiune om-mașină. Problemele de percepție se pot încadra în domeniul mai larg al recunoașterii formelor. Conceptul de formă (patern) este extrem de general, nefiind limitat la formele vizuale sau auditive și având semnificația de clasă, de ansamblu cu anumite caracteristici. O aplicație importantă a recunoașterii formelor este clasificarea automată. Recunoașterea formelor vizuale și auditive ridică problema înțelegerii a ceea ce semnifică forma văzută sau auzită. Această înțelegere este posibilă numai atunci când se dispune de o mare cantitate de cunoștințe referitoare la contextul în care se realizează percepția. Procesul de percepție este descompus într-o serie de operații. De exemplu, perceperea unei scene vizuale presupune codificarea scenei de către senzori, sub forma unor valori (date de intrare brute), determinarea componentelor primitive de bază (linii, curbe etc.), determinarea caracteristicilor spațiale, de volum și reprezentarea scenei printr-un model (o descriere de nivel înalt). Aceste operații se bazează, fiecare pe un anumit nivel de descriere a scenei. Principala dificultate de realizare a acestor operații o constituie numărul enorm de descrieri posibile, candidate la fiecare nivel în parte. Pentru depășirea acestor dificultăți sunt definite clase (categorii) de scene, urmând a se testa dacă ceea ce a fost perceput aparține unei clase sau alteia. Fiecare clasă de scene are asociate numeroase cunoștințe, organizate de regulă în structuri denumite frame-uri sau scheme.
Jocurile cu partener calculator reprezintă probleme combinatoriale, pentru care încetinirea sau chiar împiedicarea exploziei combinatoriale a calculelor reprezintă aspectul teoretic și practic cel mai important de soluționat. Cercetările în domeniul inteligenței artificiale au vizat obținerea unor produse pentru care timpul de rezolvare să crească cât mai puțin în raport de creșterea dimensiunii problemei. În acest sens, au fost definite o serie de metode de controlare a exploziei combinatoriale. Elementul central în cadrul acestor metode îl constituie cunoștințele despre problemă.
Roboții inteligenți reprezintă acea clasă de sisteme fizice autonome care pot realiza planificarea acțiunilor într-un mediu necunoscut sau numai parțial cunoscut. Controlarea acțiunilor fizice ale roboților presupune utilizarea unor tehnici de modelare a stărilor mediului în care acționează robotul, mediu cunoscut sub numele de lumea robotului, a unor tehnici de descriere a procesului de trecere de la o stare la alta, de generare a unor planuri de acțiune și a unor tehnici de monitorizare a execuției acestor planuri. Reprezentarea lumii robotului se poate realiza prin frame-uri, rețele semantice, etc. Planificarea acțiunilor se poate realiza pe baza unor cunoștințe exprimate prin reguli, de forma unor perechi stare-acțiune. Generarea unui plan de acțiuni pentru atingerea unui anumit obiectiv înseamnă găsirea acelei secvențe ordonate de reguli, prin a căror aplicare să se transforme lumea din starea inițială într-o stare în care obiectivul să fie atins.
Sistemele expert reprezintă sistemele de inteligență artificială cu cel mai mare succes comercial și cu o largă difuzare în activitatea economico-socială curentă.
Calculul neuronal în inteligența artificială
Față de metodele de calcul tradițional, care timp de câțiva zeci de ani au dominat științele cognitive și domeniul inteligenței artificiale, calculul neuronal reprezintă o alternativă viabilă.
Calculul neuronal se bazează pe o serie de modele matematice inspirate din neurobiologie, numite modele conexioniste sau rețele neuronale. Rețelele neuronale pot fi caracterizate prin trei trăsături computaționale generale:
1. straturi distincte de unități de calcul interconectate.
2. reguli recursive de modificare a “tăriei” conexiunilor dintre unitățile de calcul.
3. unități de calcul simple și omogene.
Utilizând doar aceste trei trăsături se pot construi și modela sisteme deosebit de puternice și elegante, corespunzătoare memoriei, percepției, categorizării, controlului motric, recunoașterii formelor și chiar pentru gândirea umană.
1.3. Elemente de bază ale calculului neuronal
Neuronul biologic
Unitatea celulară de structură și funcție a sistemului nervos, (și implicit a creierului) este neuronul. Creierul uman este constituit din aproximativ 1011 neuroni, fiecare neuron fiind interconectat cu aproximativ 104 alți neuroni. În Fig.1.1. este reprezentat schematic un neuron biologic.
Neuronul biologic este constituit din trei părți fundamentale :
a). Arborele dendridic care colectează semnalele de intrare de la alți neuroni.
b). Soma (corp celular) care transformă în anumite condiții semnalele de intrare în semnale de ieșire.
c). Axonul care transmite semnalul de ieșire către alți neuroni prin intermediul arborelui axonic.
Neuronii sunt interconectați prin intermediul unor legături numite sinapse, care reprezintă punctele de contact dintre ramurile arborelui axonic ale unui neuron pre-sinaptic și ramurile arborelui dendritic ale unui neuron post-sinaptic.
Neuronii comunică între ei prin intermediul unor semnale electrice, numite potențiale de acțiune sau impulsuri, care sunt propagate de-a lungul axonului, prin păstrarea amplitudinii și formei semnalului electric, până când întâlnesc legătura sinaptică. La sinapsă o substanță chimică, numită neuro-transmițător, este stocată într-un număr mare de vezicule. Potențialul de acțiune eliberează conținutul anumitor vezicule către cleștele sinaptic.
Moleculele neuro – transmițătorului ajung la membrana neuronului post-sinaptic, unde recepția acestor molecule induc un potențial de acțiune post-sinaptic (PSP).
PSP-urile generate în diferite puncte ale arborelui dendridic difuzează prin atenuare către somă, unde ele sunt integrate. Dacă suma totală a PSP-urilor integrate în limita unui scurt interval de timp depășește un anumit prag (threshold) de aproximativ câteva zecimi de minivolți, numit nivel de activare, neuronul va deveni activ, generând un potențial de acțiune de-a lungul axonului.
Fig. 1.1. Reprezentarea schematică a neuronului biologic.
1 – Arborele dendridic; 2 – Soma (corp celular); 3 – Nucleu ; 4 – Axon; 5 – Teaca de mielină; 6 – Axon terminal.
Contribuția unui semnal de intrare la PSP caracterizează mărimea numită tărie sinaptică sau eficiență sinaptică. Un astfel de semnal de intrare are o valoare de aproximativ 1 minivolt, putând fi un semnal excitator sau un semnal inhibitor, în funcție de influența pozitivă sau negativă pe care o are în a face un neuron să devină activ. Trebuie să subliniem faptul că PSP-ul nu este unic determinat de semnalul de intrare. Diferite surse de zgomot, în relație cu fluctuațiile de cantitate de neuro-transmițător chimic, eliberată la conexiunea sinaptică, implică o relație de intrare-ieșire de tip probabilistic.
Intervalul de timp dintre momentul emisiei unui semnal la soma neuronului pre-sinaptic și momentul emisiei unui semnal indus de către neuronul post-sinaptic, este de aproximativ 1-2 msec. De aici rezultă că un neuron poate avea o emisie maximală de circa 500-1000 semnale pe secundă, care într-o rețea neuronală este redusă de circa 3-5 ori.
Din aceste considerente de dinamică a activității neuronale, se poate observa faptul că neuronul biologic este un dispozitiv biologic lent în comparație cu dispozitivele electronice construite de om – acestea pot fi chiar de sute de mii de ori mai rapide decât un neuron biologic. Cu toate acestea, orice sistem de calcul bazat pe dispozitive electronice are performanțe inferioare creierului uman constituit din neuroni. Concluzia evidentă este că puterea de calcul a creierului uman nu este datorată vitezei de procesare a neuronilor constitutivi, ci largii interconectări a unor dispozitive biologice lente – neuronii, care efectuează operații simple: integrarea semnalelor sosite de-a lungul arborelui dendridic și emisia unui semnal de-a lungul axonului, dacă semnalul de intrare integrat depășește nivelul de activare.
Modificarea tăriei sinaptice este rezultatul unui proces de “învățare” Legătura sinaptică și modul de procesare a semnalelor de către neuron formează mecanismul de bază al capacității de memorare al creierului.
Neuronul artificial
Înțelegerea funcționării procesului gândirii și în general al funcționării creierului uman a interesat oamenii de știință începând din antichitate. Fenomenul pare foarte misterios, și în realitate se cunoaște foarte puțin exact despre modul în care se întâmplă. Mai devreme, în secolele trecute s-a gândit că creierul funcționează ca un mecanism de ceas complicat. Începând din mijlocul secolului trecut cel mai popular model pentru creier a fost cel al calculatorului, fiind și el un sistem complex și misteric pentru mulți.
Neuronul artificial, definit prin analogie cu celula nervoasă, reprezintă unitatea de prelucrare de bază din cadrul calculului neuronal, unitate care procesează o serie de intrări (inputuri informaționale) și produce un rezultat (output informațional) considerat drept nivelul de activitate al neuronului.
Un neuron artificial are mai multe căi de intrare care corespund arborelui dendridic. Celei de-a i-a cale de intrare în neuronul al j-lea îi corespunde o valoare numerică reală xi, echivalentul semnalului electric din modelul biologic al neuronului. Fiecare mărime de intrare xi este ponderată valoarea numerică reală wji, echivalentul tăriei sinaptice din modelul biologic al neuronului. Valoarea xi wji reprezintă al i-lea semnal de intrare dendridic în al j-lea neuron artificial. Aceste valori sunt integrate (sumate), proces similar celui realizat de soma neuronului biologic.
Suma ponderată reprezintă argumentul unei funcții, numită funcție de activare care va determina valoarea de ieșire axonică yi din neuron. Cele mai utilizate funcții de activare sunt:
– funcția liniară:
– funcția treaptă (Heaviside):
– funcția rampă:
– funcția sigmoidală:
– funcția tangentă hiperbolică:
– funcția signum:
Funcția de activare depinde de modelul de rețea neuronală ales și de tipul problemei pe care dorim să o rezolvăm, alegerea sa nefiind constrânsă de nici o condiție, decât eventual de analogia cu modelul biologic.
Valoarea obținută prin aplicarea funcției de activare este propagată pe căile de ieșire, echivalente arborelui axonic din modelul biologic.
În concluzie, neuronul artificial efectuează următoarele operații:
Integrare(Sumare):
Activare(Transfer):
Neuronul McCulloch-Pitts
Primul tip de neuron artificial a fost definit în 1943 de către W. McCulloch și W. Pitts. În prezent, el este cunoscut sub numele de unitate prag – TU (threshold unit) sau neuron McCulloch-Pitts. Un neuron de tip TU primește pe fiecare dintre conexiunile sale de intrare un semnal boolean (0 sau 1) și emite la ieșire tot un semnal boolean. Conexiunile de intrare pot fi de două tipuri și anume: inhibatoare și excitatoare. Dacă într-un interval de timp dat neuronul beneficiază de o intrare 1 pe una dintre conexiunile sale inhibatoare, el va trece în stare inactivă (echivalentul unei ieșiri 0). Atunci când neuronul beneficiază de semnale de intrare numai prin conexiuni excitatoare și numărul acestor semnale depășește un prag fixat, neuronul devine activ (generează o ieșire 1), altfel este inactiv.
Fig. 1.2. Neuronul McCulloch-Pitts
Cu ajutorul unui neuron de tip TU se pot implementa numeroase funcții logice simple, prin asocierea lui 1 cu valoarea logică adevărat și a lui 0 cu valoarea fals. Neuronii TU fără conexiuni inhibatoare pot implementa numai funcții logice monotone.
Diferențe între neuronul biologic și cel artificial
Neuronul biologic comportă totuși multe alte elemente care în simplul model al neuronului artificial au fost cu bună știință omise. Cele mai semnificative diferențe sunt următoarele:
– neuronul biologic răspunde la semnalele de intrare într-un mod continuu si nu discret, ceea ce se numește răspuns gradual. Dar relația neliniară dintre semnalul de intrare și semnalul de ieșire la un neuron biologic este o trăsătură universală, care apare și la neuronul artificial prin intermediul funcției de activare.
– neuronii biologici nu au toți același moment fix de activare (t t+1) și nici nu acționează sub controlul central al unui tact generat de un ceas.
– cantitatea de substanță neuro-transmițătoare eliberată de sinapsă poate varia într-un mod impredictibil. Acest efect poate fi modelat, considerând o generalizare stohastică a dinamicii modelului determinist McCullogh – Pitts.
Legătura dintre rețelele neuronale biologice și artificiale nu este importantă la nivelul modelării detaliate, ci la nivelul reprezentării și la nivelul algoritmic. Deși implementările biologice și artificiale ale algoritmilor sunt diferite, totuși există numeroase trăsături comune la nivel algoritmic.
Obs.: Termenul xo se numește bias, având o valoare constantă xo = +1 sau xo = -1. Rolul termenului bias este de a permite includerea implicită sau explicită a nivelului de activare q i, care reprezintă pragul de activare al neuronului artificial.
Capitolul 2 – Rețele neuronale artificiale
Rețele neuronale artificiale
Rețelele neuronale artificiale sunt constituite din numeroși neuroni artificiali interconectați între ei. Neuronii constituenți sunt de obicei organizați în mulțimi distincte numite straturi (layers). Există cazuri de rețele neuronale particulare, având o topologie specială, când neuronii nu sunt organizați pe straturi bine definite, ci pe anumite submulțimi.
O rețea neuronală clasică constă dintr-o secvență de straturi de neuroni, cu conexiuni totale sau aleatoare între neuronii conținuți în straturi succesive. Întotdeauna vom avea pentru o rețea neuronală, cel puțin două straturi de neuroni, ce au rolul de a comunica cu mediul exterior:
– un strat de intrare: care are rolul de a prelua datele de intrare xi, i = 0, …, n cu termen bias x0 = 1, sau i = 1, …, n fără termen bias. Vectorul x = (x0, x1,…, xn) sau
x =(x1, x2,…, xn) va fi numit vector de intrare al rețelei neuronale.
– un strat de ieșire: unde se obțin rezultatele yj, j = 1, …, m furnizate de rețeaua neuronală, ca răspuns la vectorul de intrare prezentat la stratul de intrare și al propagării acestor date de la stratul de intrare către stratul de ieșire. Vectorul y = (y1, y2,…, ym) se numeste vector de ieșire al rețelei neuronale.
Toate celelalte straturi ale rețelei neuronale, dacă există, diferite de stratul de intrare și de stratul de ieșire vor fi denumite straturi ascunse (hidden layers).
Când vom spune despre o retea neuronală că are n straturi, nu vom lua în considerare și stratul de intrare, ceea ce înseamnă că vom avea n – 1 straturi ascunse + stratul de ieșire.
Neuronii din stratul de intrare au întotdeauna ca și funcție de activare funcția liniară, rolul lor fiind doar de a propaga către stratul succesor vectorul de intrare. Ceilalți neuroni, din celelalte straturi, pot avea orice funcții de activare.
În figura următoare putem vedea arhitectura generală a unei rețele neuronale.
Fig. 2.1
2.2. Modul de operare al rețelelor neuronale
Să considerăm o rețea neuronală având următoarea configurație:
l-1 straturi;
n – numărul neuronilor din stratul de intrare,
nk – numărul neuronilor din stratul al k-lea, k=1,2,…,l-2 (straturi ascunse);
wji(k) – tăria sinaptică dintre neuronul al i-lea din stratul k-1 și neuronul al j-lea din stratul k, k=1,2,…,l-1;
m – numărul neuronilor din stratul de ieșire;
fk – funcția de activare corespunzătoare straturilor ascunse și stratului de ieșire, k=1,2,…,l-1.
Modul de operare al rețelei neuronale este următorul: la neuronii stratului de intrare se prezintă valorile de intrare x0, x1, x2,…, xn. Aceste valori reprezintă intrările pentru primul strat ascuns. Asupra lor se aplică funcțiile de transfer ale neuronilor primului strat: , iar reprezintă datele de ieșire generate de primul strat ascuns.
În general, datele de ieșire ale stratului k-1 reprezintă date de intrare pentru următorul strat ascuns, k, unde k=2,3,…,l-2:
Datele de ieșire ale ultimului strat ascuns se vor prezenta stratului de ieșire, rezultând datele de ieșire din rețeaua neuronală:
.
În fiecare strat, cu excepția stratului de ieșire, poate exista un neuron special, numit termenul Bias care are rolul de a modela nivelul de activare. Uneori el va fi prezent explicit în arhitectura rețelei neuronale, alteori va fi prezent implicit prin intermediul funcției de activare.
Alte caracteristici importante ale modului de operare al unor rețele neuronale, care afectează neuronii unui întreg strat, sunt normalizarea și competiția.
Normalizarea reprezintă procesul de scalare a vectorilor de ieșire a neuronilor de pe un strat astfel încât suma totală a acestor valori să fie fixă. Acest lucru nu este specific rețelelor artificiale, fiind întâlnit și la rețelele neuronale biologice, unde neuronii de pe un strat sunt conectați unul cu altul; astfel există posibilitatea ca fiecare neuron să-și autoajusteze valoarea sa de ieșire în concordanță cu valoarea de ieșire totală a acestui strat. Scopul operației de normalizare constă în păstrarea unui nivel constant de activare la nivelul unui strat.
Competiția reprezintă procesul de interacțiune al unui neuron aflat pe un strat al rețelei neuronale cu ceilalți neuroni de pe același strat. Neuronul sau un grup de neuroni care generează valori maximale de ieșire vor fi declarați “învingători” și doar valorile generate de acești neuroni vor fi propagate spre straturile următoare.
2.3. Clasificarea rețelelor neuronale
1. După modul de propagare rețelele neuronale se clasifică în:
rețele de tip feed-forward (rețele cu propagare directă, sau mai scurt rețele directe), caz în care informația din stratul de intrare este transferată spre stratul de ieșire într-un mod direct folosind însumarea și funcția de transfer. Aceste rețele se clasifică, la rândul lor în:
rețele feedforward propriu-zise
rețele feedforward cu reacție inversă la nivel local
rețele recurente (conțin conexiuni de la stratul de ieșire spre stratul de intrare). Exemple de rețele recurente: Back-Propagation, Kohonen, Hopfield etc. Aceste rețele se clasifică la rândul lor în:
rețele parțial recurente (rețele feedforward cu reacție inversă la nivel local)
rețele propriu-zis recurente (rețele cu reacție inversă generalizată)
2. După modul de sincronizare, rețelele neuronale se clasifică în:
rețele sincrone, când toți neuronii lucrează simultan după un anumit tact.
rețele asincrone, când fiecare neuron lucrează independent.
2.3.1. Perceptronul simplu
În 1950 este definit un nou model al neuronului artificial și anume neuronul de tip LTU (linear threshold unit), denumit și perceptron simplu. Spre deosebire de neuronul de tip TU, perceptronul simplu introduce noțiunea de intensitate a unei conexiuni k, notată cu wk, sub forma unui factor multiplicator al semnalului de intrare care circulă prin conexiunea k. Intensitatea unei conexiuni prezintă valori reale și constituie o formă de modelare atât a tipului de conexiune, inhibatoare sau excitatoare, prin semnul valorii intensității, cât și a eficienței sinaptice, prin nivelul absolut al acestei valori. Astfel, o valoare pozitivă a intensității semnifică eficiența sinaptică a unei conexiuni excitatoare, în timp ce o valoare negativă are aceeași semnificație, dar pentru o conexiune inhibatoare.
Valoarea de intrare totală la nivelul perceptronului simplu este calculată ca o sumă ponderată a intrărilor, conform relației:
unde: xk reprezintă intrarea care circulă prin conexiunea k. Ieșirea perceptronului simplu este generată pe baza unei funcții prag de forma:
unde: reprezintă valoarea prag. Funcția f este cunoscută sub numele de funcție de transfer sau funcție de activare, întrucât permite stabilirea nivelului de activitate a neuronului în raport de inputul total și de valoarea prag. Valoarea prag mai este denumită și factor al deplasărilor de scală, pe scurt deplasament sau bias.
Frecvent, ieșirea unui neuron este exprimat în raport de intrarea net, pe scurt net , cu ajutorul unei relații de forma:
unde: net este definit de relația:
În acest caz, biasul este asimilat unei intrări recepționate de neuron printr-o conexiune cu intensitate – pe care circulă valoarea 1. Prin urmare:
unde: și .
Perceptronul simplu funcționează în continuare pe baza unor valori de intrare binare dar sunt acceptate și intrări reale, ieșirea fiind în continuare binară. Vectorul de intrare x = (x1, x2, … , xn) este extins prin includerea elementului 1. Vectorul (x1, x2, … , xn, 1) poartă numele de vector de intrare extins. Similar, vectorul (w1, w2, …, wn, -) este denumit vectorul extins al conexiunilor intensităților.
În cadrul unui sistem bazat pe calcul neuronal sunt utilizați mai mulți neuroni, organizați sub formă de rețea neuronală. Din această cauză, un neuron este referit drept unitate Uj a unei rețele neuronale, cu intrări provenind de la alte unități sau din afara
rețelei. Notând cu Oi ieșirea unității Ui, relația de calcul a intrării totale pentru unitatea Uj care recepționează intrări din rețea se va rescrie sub forma:
unde: wij reprezintă intensitatea conexiunii dintre Ui și Uj, conexiune prin care Oi, ieșirea unității Ui, este transmisă ca intrare a unității Uj. Sensul în care circulă informația în rețea este important, motiv pentru care conexiunile sunt reprezentate atât prin valoarea intensității cât și prin sensul de circulație al informațiilor.
Cu ajutorul unui perceptron simplu pot fi implementate funcții logice liniar separabile. Prelucrările realizate de către perceptronul simplu pot fi interpretate ca o separare liniară a spațiului intrărilor.
2.3.2. Perceptronul simplu generalizat
Generalizarea perceptronului simplu s-a realizat în următoarele direcții:
intrarea net este calculată cu ajutorul unei funcții g: Rn+1 Rn+1 R, adică:
ieșirea este calculată cu ajutorul unei funcții de activare f, eventual diferită de funcția prag și cu valori reale. Atunci când f nu este funcție prag, biasul reprezintă o caracteristică a neuronului, cu semnificația unei intrări speciale care modifică, deplasează intrarea totală.
rezultatul funcției g sau f se poate reîntoarce în unitate sub forma unei intrări decalate în timp (așa numita reacție locală).
Reprezentarea grafică a perceptronului simplu generalizat se poate realiza într-una dintre următoarele variante:
Fig. 2.2 Reprezentarea grafica a perceptronului simplu generalizat
Varianta (b) se preferă în cazul neuronilor cu reacție locală
2.3.3. Perceptronul multistrat
Perceptronul multistrat (multi-layer perceptron, MLP) este o extensie a perceptronului simplu, în care este permis să avem mai multe straturi de neuroni.
Sraturile intermediare, între receptori și stratul de ieșire le numim, straturi ascunse. Principala problemă a situației cu mai multe straturi este problema instruirii. Cum vom vedea în următoarele, când vom discuta învățarea rețelelor neuronale, în cazul în care avem al 2-lea strat, procedura de instruire nu mai funcționează din cauza nederivabilității funcției signum. Astfel pentru perceptroni cu mai multe straturi se folosesc neuroni McCulloch-Pitts cu funcție de activare neliniară derivabilă. De obicei se utilizează o funcție de activare care aproximează funcția signum pâna la un anumit grad, ca de exemplu funcția sigmoidală.
Perceptronul multistrat funcționează similar ca și perceptronul simplu. Inputurile sunt transmise fără modificare de receptori, iar pe urmă în fiecare strat, fiecare neuron aplică o transformare neliniară asupra inputurilor integrate, ultimul strat generând outputul rețelei.
Cum e ușor de văzut că o astfel de rețea este capabilă să genereze o decizie de clasificare ( în cazul că neuronii din ultimul strat au o funcție de activare threshold), sau să genereze o funcție vectorială de dimensiune n.
Fig. 2.3 reprezintă un perceptron multistrat cu un singur strat ascuns:
Fig. 2.3
– pentru stratul de intrare (stratul 0):
prezentarea vectorului de intrare
– pentru stratul 1:
integrare: ,
activare: ,
– pentru stratul k:
integrare: ,
activare: ,
– pentru stratul de ieșire (stratul l):
integrare: ,
activare: ,
2.3.4. Rețele neuronale de tip RBF
Rețele neuronale cu funcții de bază radială, sau rețele RBF, după denumirea engleză: Radial Basis Function, sunt similare cu rețelele MLP, însă ele sunt formate din numai două straturi. Componentele vectorului de input intră în rețea prin receptoarele care, ca și în cazurile anterioare nu modifică valoarea inputului primit.
Tehnica RBF oferă o alternativă puternică în cadrul procesului de învățare a rețelelor neuronale. Ideea principală este de a proiecta o rețea care să aibă o bună generalizare cu un număr minim de noduri (neuroni). Primii utilizatori ai rețelelor neuronale de tip RBF au fost Broomhead și Lowe în 1988, și Moody și Darken în 1989. Recent, alți cercetători au avut satisfacția de a putea utiliza aceste tipuri de rețele într-o serie de aplicații ca: recunoșterea vorbirii, recunoașterea formelor și clasificări de date.
Deci problema învățării în cadrul rețelelor neuronale de tip RBF, poate fi considerată ca o problemă de aproximare a curbelor într-un spațiu multidimensional. În acest caz procesul de învățare este echivalent cu găsirea acelei suprefețe care produce cea mai bună “potrivire” cu mulțimea datelor de instruire. Stratul neuronilor ascunși are rolul de a produce o mulțime de funcții pentru reprezentarea vectorilor de intrare, spațiul respectiv fiind format din așa numitele funcții radiale.
O rețea neuronală de tip RBF este organizată pe doua straturi, un strat ascuns și stratul de ieșire. Stratul ascuns este compus dintr-o serie de noduri (neuroni), noduri RBF, care sunt activați cu ajutorul funcțiilor RBF. Doi parametrii sunt asociați fiecărui nod de pe stratul ascuns. Acești parametrii sunt centrul nodului și varianța, ambii parametri referindu-se la funcția radială. Conexiunilor dintre fiecare nod de pe stratul ascuns și stratul de ieșire li se asociază tăriile sinaptice pe care le vom nota cu wi. Valoarea de intrare pentru stratul de ieșire este sumarea valorilor de ieșire furnizate de fiecare nod de pe stratul ascuns. Încă o caracteristică interesantă a acestor rețele este faptul că tăriile sinaptice între stratul de intrare al rețelei și stratul ascuns sunt 1. Fig. 2.6. reprezintă arhitectura unei rețele neuronale de tip RBF.
Fig. 2.6
Fie x vectorul de intrare al rețelei, cu funcția radială, și cu centrul funcției care aparține neuronului cu indicele i, tăriile sinaptice pe care le vom nota cu wi, atunci ieșirea rețelei va fi:
Funcția cel mai frecvent utilizată este funcția Gaussiană, , unde lățimea sau raza funcției radiale (r se ia strict pozitiv).
Mai sunt utilizate și funcțiile următoare:
Funcția multiquadratică:
(pentru funcția multiquadratică)
Funcția multiquadratică inversă:
(pentru funcția multiquadratică inversă),
unde și .
Avantajul acestor funcții este că valoarea lor este diferită de zero în mod seminficativ numai pe un domeniu mărginit, și deobicei restrâns, de exemplu r este relativ mic față de majoritatea valorilor posibile ale lui ||x-w||.
Aceasta permite formarea unor funcții prin outputul rețelei, care aproximează legături funcționale pe baza unor aproximări locale (funcțiile de activare a neuronilor din stratul ascuns). Rețelele RBF sunt folosite în principal în aplicațiile în care se cere aproximarea unei relații funcționale dintre caracteristicile unui sistem, și anume la un sistem de control sau la un sistem de predicție. Dacă numărul punctelor de antrenament este mică, putem să folosim toate punctele ca centre ale funcțiilor radiale. În acest caz numărul neuronilor de pe stratul ascuns va fi egal cu numărul punctelor de antrenament. Dacă avem multe puncte de antrenament, nu putem să le folosim ca centre pe toate. În acest caz este suficient să asociem un neuron la un grup de puncte. Pentru alegerea grupurilor există numeroase metode, numite algoritmi de clustering. Cel mai frecvent utilizăm algoritmul nesupervizat original de tip „Adaptive K-Means” sau „Batch K-Means”.
În continuare prezentăm un mic exemplu de aproximare a funcțiilor, pentru a face vizibil cele discutate anterior.
Considerăm funcția gaussiană
unde a este centrul funcției iar lățimea sau raza funcției radiale.
2.4. Domenii de utilizare ale rețelelor neuronale
Din cele prezentate până acum, rezultă faptul că rețelele neuronale sunt utile într-o gamă foarte diversificată de aplicații. Dacă studiem literatura de specialitate relativ la domeniul aplicativ al rețelelor neuronale, vom găsi aplicarea lor în toate domeniile activității umane. Pornind de la artă, științe naturale, științe sociale, industrie, agricultură, mergând până la sport, divertisment, aproape că nu există domeniu în care să nu găsim aplicații ale calculului neuronal. Acest lucru nu este de mirare, deoarece analizând trăsăturile calculului neuronal deducem caracterul său universal. Totuși cea mai adecvată utilizare a calculului neuronal o reprezintă domeniile apropiate percepției și gândirii umane.
În continuare vom prezenta câteva din utilizările rețelelor neuronale:
procesarea limbajului:
conversii text-limbaj;
procesarea limbajelor naturale;
comprimarea datelor;
recunoașterea caracterelor:
recunoașterea scrisului de mână;
prelucrarea imaginilor;
probleme combinatoriale;
recunoașterea formelor;
prelucrarea semnalelor;
modelare economică și financiară;
servo-control;
teoria aproximării.
Modul de funcționare al rețelelor neuronale artificiale
Modul de funcționare al oricărei rețele neuronale cuprinde două faze principale:
Învățarea (antrenamentul);
Generalizarea.
Învățarea rețelelor neuronale
Caracteristica fundamentală a rețelelor neuronale, caracteristică ce o deosebește în mod esențial de o mașină Von Neumann, este învățarea. Învățarea este procesul de modificare al tăriilor sinaptice ca răspuns la datele de intrare (și în unele cazuri al datelor de ieșire) în scopul configurării rețelei neuronale pentru a executa acțiunea dorită. Algoritmul de modificare a tăriilor sinaptice se numește lege de învățare. Această modificare a tăriilor sinaptice wji se poate efectua în mai multe modele ale mediului înconjurător în care are loc procesul de învățare, modele numite paradigme, legea de învățare luând forme diferite în fiecare dintre aceste cazuri:
învățarea supervizată;
învățarea nesupervizată;
învățarea reîntărită.
Există de asemenea mai mulți algoritmi de modificare a tăriilor sinaptice, fiecare dintre ei potrivindu-se unei paradigme de învățare:
învățarea pe baza minimizării unei funcții eroare;
învățarea Hebbiană;
învățarea competitivă;
învățarea Boltzmann.
Învățarea supervizată
Procesul de învățare se bazează pe comparația dintre datele de ieșire obținute la stratul de ieșire ca răspuns al rețelei la datele de intrare prezentate și răspunsul țintă ce se dorește a fi obținut. Răspunsul țintă este furnizat de un profesor (antrenor), de aceea acest mod de învățare se mai numește și învățarea cu profesor. În acest caz setul de date de antrenament este o mulțime de perechi (x, z), unde x reprezintă valoarea de intrare iar z răspunsul așteptat. După prezentarea unei date de antrenament, pe baza diferenței dintre răspunsul obținut și răspunsul țintă tăriile sinaptice se modifică cu ajutorul unui algoritm de tip gradient descendent.
Învățarea nesupervizată
Scopul acestui mod de învățare este ca rețeaua neuronală să creeze categorii. Singura informație disponibilă există în modul de corelare al datelor de intrare, din aceste corelații generând soluții de ieșire corespunzătoare categoriei datei de intrare. În această situație setul de date de antrenament trebuie să conțină o anumită redundanță.
Învățarea reîntărită
Această paradigmă de învățare poate fi privită ca un caz particular al paradigmei de învățare supervizată prin faptul că există și aici un antrenor (profesor), însă acesta doar aprobă sau nu răspunsul, fără a indica răspunsul corect.
Învățarea pe baza minimizării unei funcții eroare (Regula delta)
Învățarea folosind regula delta realizează modificarea ponderilor pe baza minimizării erorii dintre ieșirea generată la stratul de ieșire și ieșirea dorită. Această lege de învățare se utilizează în cadrul paradigmei de învățare supervizată, deoarece este nevoie de un supervizor care să indice răspunsul corect.
Învățarea Hebbiană
În acest caz tăria sinaptică asociată unei intrări a neuronului este întărită dacă intrarea și ieșirea dorită sunt active. În cazul creierului aceasta ar însemna că tăria sinapsei dintre doi neuroni este întărită dacă neuronul presinaptic și cel postsinaptic se activează simultan, respectiv diminuată dacă activarea neuronilor nu este sincronă.
Învățarea competitivă
Acest tip de învățare se bazează pe competiția neuronilor. Neuronii stratului de ieșire concurează între ei și numai unul este declarat câștigător, cel care dă răspunsul cel mai bun; doar acesta are dreptul să-și modifice tăriile sinaptice.
Învățarea Boltzmann
Acest tip de învățare se bazează pe o metodă probabilistică derivată din teoria termodinamicii și din teoria informațională.
Generalizarea
După ce rețeaua neuronală a fost învățată pe baza unui număr suficient de exemple, ea va fi capabilă să inducă o relație completă de interpolare sau extrapolare a exemplelor învățate. Generalizarea reprezintă faza de răspuns a rețelei neuronale, când prezentându-i-se vectori de intrare noi sau din mulțimea de antrenament, vectorul de ieșire va fi cel asteptat, cu o posibilă eroare foarte mică. Calitatea răspunsurilor în faza de generalizare reprezintă țelul fazei de învățare – trebuie să învățăm rețeaua neuronală până când va generaliza suficient de bine.
Modul de operare al rețelei neuronale poate fi influențat de modul de operare al neuronilor dintr-un strat, pe baza a două operații posibile:
1. Normalizarea.
Reprezintă procesul de scalare al vectorului de ieșire al unui strat al rețelei neuronale, astfel încât suma totală a componentelor acestui vector să fie constantă. Acest lucru este întâlnit și la rețelele neuronale biologice, unde neuronii de pe un strat sunt conectați la ceilalți neuroni ai aceluiași strat, făcând posibil ca fiecare neuron să-și auto-ajusteze semnalul de ieșire în concordanță cu semnalul total de ieșire a stratului. Rezultatul operației de normalizare este că păstrează un nivel constant de activitate la nivelul unui strat de neuroni.
2. Competiția (concurența).
Reprezintă procesul de interacțiune al unui neuron de pe un strat al rețelei neuronale, cu ceilalți neuroni de pe același strat. Neuronul sau un grup de neuroni care generează valori de ieșire maximale, vor fi declarați “câștigători”, fiind singurii a căror valoare de ieșire va fi propagată mai departe.
Rețelele neuronale ce conțin straturi cu mod de operare competitiv, le vom numi rețele neuronale competitive, iar cele care nu conțin straturi competitive le vom numi rețele neuronale pasive.
Capitolul 3 – Implementarea în economie a rețelelor neuronale
Problematica generală
Modelarea economică și financiară
Modelarea sistemelor economice și financiare cu scopul de a permite analize și prognoze eficiente, este de o foarte mare importanță. Determinarea unor elemente de tendință economico-financiară cum ar fi consum, preț, inflație, volum de vânzări, necesar de aprovizionat, etc., sunt în general greu de abordat datorită numărului mare de parametrii și a imprevizibilății variației lor.
Rețelele neuronale au căpătat în acest domeniu o recunoaștere semnificativă. Mari companii, cum ar fi Boeing, Volvo, Philips, folosesc sisteme de calcul neuronal în domeniul managementului firmei .
Serii de timp în economie
Implementări ale rețelelor neuronale legate de sectorul economic se întâlnesc în:
previziuni financiare(curs valutar-vezi aplicația, etc)
controlul proceselor industriale
cercetări de piață
validări de date pe bază de clasificări și tipare
managementul riscului
previziuni de marketing
Relațiile comerciale și financiare dintre țările care emit monede diferite fac necesare operațiuni de convertire între acestea. Astfel, ofertele și cererile, pentru fiecare din devizele convertibile sunt consecința firească a schimburilor de bunuri și servicii, sau a mișcărilor de capitaluri între națiuni. Ele se confruntă pe piața valutară, care este construită dintr-o rețea mondială de telecomunicații între bănci sau intermediari specializați
(brokerii). Din această confruntare permanentă rezultă prețul la care, la un moment dat, o monedă este schimbată cu o alta: curs de schimb valutar.
Variația cursurilor de schimb valutar conduce în cazul fiecărui participant pe această piață a incertitudinii și sporesc / micșorează riscurile asociate schimbului internațional.
Întrucât unicul scop în economie este obținerea de profit, folosind modelele dezvoltate ale seriilor de timp cu rețele neuronale, se pot face studii de efecte și predicții în vederea găsirii soluțiilor optime.
Analiza previzională sau prospectiva presupune determinarea evoluției viitoare a unui fenomen economic pe baza cercetării factorilor de influență (a relațiilor de cauzalitate), a acțiunilor noi în perspectivă. Prin această metodă se stabilesc obiectivele ce trebuie realizate în perioada viitoare.
Analiza economică-financiară reprezintă un ansamblu de concepte, metode și tehnici, procedee și instrumente care asigură tratarea informațiilor interne (microeconomice) și externe (macroeconomice) în vederea formulării
unor aprecieri pertinente referitoare le situația economico-financiară a unei entități (societate comercială) .
Rețelele neuronale fosind algoritmi genetici pot fi folosite în controlul roboților industriali. Un alt domeniu de interes pentru rețelele neuronale este medicina și sistemele biomedicale. În acest moment se utilizează rețele neuronale pentru descoperirea de boli prin recunoașterea unor tipare de pe cardiograme și altele.
Seriile de timp financiare de multe ori conțin componente neliniare dominante. Mai mult în cazul proceselor cu memorie lungă, efectul valorilor din trecut se exercită pentru timp îndelungat asupra valorilor curente. Astfel în cazul acestor serii de timp are sens să încercăm să găsim relații neliniare între valorile seriei, cu speranța că modelul neliniar rezultat va fi eficient în predicția valorilor seriei.
Modelarea acestor relații neliniare este bazată pe capacitatea de aproximare a rețelelor neuronale. Ele sunt folosite ca unelte de regresie neliniară, și încearcă să aproximeze relația neliniară dominantă a seriei de timp, care este ascunsă pentru metodele clasice.
3.2. Preprocesarea datelor
Prin preprocesarea datelor înțelegem o prelucrare a datelor înaintea construirii modelelor. Aceste prelucrări pot fi transformări, clasificări, filtrări sau alte procesări similare.
Importanța preprocesării este deobicei ușor de observat pentru că datele conțin componente deterministice simple, cum sunt trendul și sezonalitatea. Scopul modelării predictive cu rețele neuronale fiind găsirea componentelor de modele neevidente, este benefic să eliminăm efectul componentelor deterministice simple. Astfel s-ar putea întâmpla ca modelul predictiv să fie dominat de predicții triviale, de exemplu predicții ce se pot face fără utilizarea unui model complicat.
De multe ori datele nu sunt apropiat structurate pentru construirea modelelor predictive. Astfel de probleme comune sunt existența valorilor duplicate în vectori de date, includerea componentelor irelevante în date, diferențe de magnitudini între componentele vectorilor de date. De exemplu o componentă are mărimea de ordinul 10-2 iar alta are valori de ordinul 103. Mai există și relații ușor observabile sau apriori știute între componente ale vectorilor de date. În aceste cazuri este important să eliminăm componentele ce reprezintă informații redundante sau irelevante, astfel acestea ar putea cauza dominarea modelului de predicții triviale sau creșterea nivelului zgomotului în datele problemei.
Un alt aspect important este necesitatea validării modelelor rezultate. Pentru a face aceasta trebuie să avem date pentru construirea modelului și date pentru validarea modelului. Astfel este necesar să împărțim datele în date de instruire și date de validare.
În concluzie observăm că preprocesarea datelor este foarte importantă. Această importanță este cu atât mai mare cu cât dimensionalitatea și numărul de datelor este mai mare. Remarcăm că în cazul aplicațiilor de predicții în contextul data mising procesarea datelor poate reprezenta mai mult de 50% din timpul necesar creării modelelor.
3.2.1 Metode de preprocesarea datelor
Scopul general al preprocesării este eliminarea relațiilor deterministice observabile. În principiu, scopul este obținerea unor serii cu valoarea medie 0 și cu o variație mică.
Primul pas în preprocesarea datelor este uniformizarea ordinelor de mărime a componentelor vectorilor. În principiu se dorește rescalarea datelor astfel încât valorile componentelor să fie în intervalul [0,1] sau [-1,1].
Rescalarea se face prin transformări liniare, deobicei multiplicative, pe componente. Sigur nu totdeauna este posibil să obținem astfel de rescalări, un caz comun fiind atunci când, valorile unei componente a vectorilor de date au importante variații de magnitudine, de exemplu cazul când datele corespund unor sisteme cu mai multe regimuri diferite.
Următorul pas este eliminarea componentelor deterministice primare, ce sunt ușor de observat. Astfel de componente sunt trendul și sezonalitatea.
Exemple pentru acestea sunt seriile cu structurile următoare:
unde este o serie cu media 0. În primul exemplu avem trend liniar, iar în al doi-lea sezonalitate cu perioada T. De multe ori, în cazul seriilor financiare, trendul existent în serie nu este trend liniar ci trend exponențial, de forma
În cazul trendului liniar eliminarea lui se face prin diferențiere și rescalare liniară:
unde a poate fi determinat ca valoarea medie a seriei diferențiate primare. În cazul sezonalității transformarea imediată este
În cazul trendului exponețial eliminarea trendului se face prin formare de raporturi și prin logaritmare (în cazul seriilor cu valori pozitive) și diferențiere
pe urmă a respectiv lna pot fi eliminate prin calcularea mediei.
În continuare putem face o filtrare a datelor. Scopul acestor filtrări este eliminarea componentelor periodice netriviale, care sunt simple sezonalități, care au efecte dominante în evoluția datelor.
Pentru determinarea acestor componente putem face analiza Fourier a seriei prin calcularea periodogramului. Folosind periodogramul putem să determinăm componentele periodice netriviale. Pentru filtrarea acestor componente putem construi filtre liniare. Filtrele cele mai uzuale sunt cele numite filtre low-pass, high-pass și band-pass, care conform denumirii lor permit trecerea prin filtrare a componentelor periodice cu frecvențe mici, mari și dintr-o anumită bandă de frecvențe. Prin combinarea acestor filtre se pot filtra afară componentele periodice netriviale existente în seriile de timp. Aceste filtre au deobicei forma:
De multe ori se aplică filtrarea componentelor periodice cu frecvențe înalte prin filtre low-pass. Ideea din spatele acesteia este considerarea componentelor cu frecvențe înalte, ca fiind zgomotul nesemnificativ, să conțină legături deterministice netriviale. Astfel trebuie să fim foarte atenți la filtrare, și trebuie aplicate filtre ce filtrează componente periodice puternice specifice. Este mai recomandabilă utilizarea filtrelor combinate ce filtrează afară numai anumite benzi de frecvențe înguste.
Având în vedere trendul exponențial în seriile de timp financiare calculăm seria normalizată a ratei schimbării valorii seriilor considearate, notăm cu x vectorul de date și cu N lungimea vectorului de date, adică numărul datelor. Calculăm media aritmetică a datelor aplicând următoarea formulă:
Următorul pas este calcularea deviației standard a seriei:
După ce am aflat aceste două valori putem trece la calcularea valorilor noi a seriei, adică calcularea valorii normalizate a fiecărei date din seria:
După eliminarea componentelor deterministice observabile se construiesc vectorii de date ce conțin informații relevante. Pe de o parte aceasta se face prin eliminarea componentelor vectorilor de date ce nu sunt semnificative conform cunoștințelor apriori, pe de altă parte combină vectorii de date pentru a obține vectori noi cu conținut informațional mai complet. Cazul exemplar al acestor transformări este formarea datelor vectoriale în cazul când datele primare sunt o serie cu valori scalari, de exemplu seria valorilor ratelor de schimb între două valute. Întrebare la care încearcă să se răspunde este, care sunt datele anterioare de care depinde valoarea seriei într-un moment de viitor. Acesta nu înseamnă și căutarea relației funcționale ci numai căutarea informațiilor relevante. Această problemă se mai numește și determinarea dimensionalității reale a datelor. În următorul pas vom prezenta câteva metode de determinare a dimensionalității reale a datelor.
Dimensionalitatea datelor este esențială în contruirea modelelor predictive. Ne interesează care sunt datele din trecut, care sunt acele date care influențează datele din viitor. În acest moment nu ne interesează relația exactă între ele ci numai setul datelor ce au influență importantă asupra valorilor viitoare.
În cazul clasic liniar se aplică analiza funcției de autocorelație și autocorelație parțială și se determină care sunt datele din trecut ce influențează valorile datelor din viitor. Deobicei se specifică, care date din viitor ne interesează, de exemplu, valorile datelor corespunzătoare zilei următoare de lucru, valoarea de peste o săptămână, sau de peste o lună.
În final se analizează vectorii de date rezultate în vederea determinării eventualelor regimuri separate. Aceasta se face prin clasificarea simplă a datelor. Dacă se observă că ele pot fi grupate în clase clar distincte, se construiesc modele separate pentru clasele respective. Este posibil ca modelele construite să fie echivalente. Astfel echivalența modelelor trebuie verificată după determinarea lor, iar în caz de echivalență ele trebuie unite, pentru simplificarea modelului general al datelor.
3.2.2 Date pentru instruire și validare
Folosind datele problemei este posibil să construim modele predicitve. Însă o problemă importantă este testarea validității modelului generat. Pentru a rezolva această problemă împărțim datele problemei în două grupuri, date de instruire și date de validare. Idea este că modelul se construiește folosind numai datele de instruire, iar validarea modelului se face folosind datele de validare. Prin validare înțelegem testarea modelului și măsurarea performanței lui folosind o măsură de performanță. De exemplu profitul simulat sau eroarea mediei pătratice. În general se construiesc mai multe modele pornind de la diferite inițializări, iar validarea se folosește pentru selectarea modelului cel mai valid.
O primă metodă de împărțire a datelor, în date de instruire și date de validare, este împărțirea simplă pe baza unei caracteristici a datelor. Astfel putem considera datele xt cu t<=T0 ca date de instruire și datele xt cu t>T0 ca date de validare. O altă metodă similară este să considerăm datele xt cu
t mod 5 = 0 ca fiind datele de validare, și celelate date ca fiind datele de instruire. Însă dezavantajul acestor metode simple este că este posibil ca regimul datelor să fie diferit pentru datele de instruire și cele de validare, se presupune că această diferență de regim nu este observabilă prin folosirea metodelor de preprocesare.
O altă metodă de împărțire este selectarea aleatorie a datelor de instruire și cele de validare, astfel încât distribuția empirică a acestora să fie aceeași. Această metodă este atractivă dar în practică nu totdeauna este posibilă obținerea distribuțiilor egale. Însă această metodă reduce mult probabilitatea întâlnirii unei porbleme de regimuri diferite.
O observație parctică este că, selecția modelului depinde de setul de validare. Astfel o cale de selectare a modelului cel mai bun este folosirea mai multor seturi de validare. De exemplu datele de validare se grupează în mai multe seturi de validare. Pe urmă se tratează modelele generate cu fiecare test de validare și se calculează o validare ponderată. În teorie ar fi de dorit ca validitatea modelelor să fie testată pentru fiecare set de validare posibilă. Însă aceasta nu este posibilă în practică, din cauza calculelor excesive necesare pentru acesta.
O metodă care încearcă să rezolve problema testării cu toate seturile de validare posibile este metoda bootstrapping, conform căreia, se selectează mai multe seturi de validare prin selecția aleatoare a datelor din setul tuturor datelor originale. La fel și instruirea se face cu datele selectate aleator. Astfel, seturile de instruire și seturile de validare se pot suprapune parțial, însă dacă se face un număr mare de selecție de seturi de validare, metoda converge asimptotic la testerea cu toate seturile de validare posibile.
Măsura performanței
Măsurarea performanței modelelor predictive este crucială în aplicarea lor. Sigur, o măsură evidentă privind modelele predictive, incluzând rețelele neuronale, este folosirea mediei erorii pătratice, sau a erorii pe baza căreia ele au fost construite și selectate. Însă de multe ori erorile de predicție sunt prea mari în contextul aplicațiilor reale din cauza componentelor pur stohastice a seriilor finaciare(de exemplu efectele evenimentelor
politice sau a războaielor). De aceea este necesar să folosim măsuri de performanțe adiționale pentru testarea validității modelelor predictive pe tot parcursul utilizării lor.
Astfel de măsuri de performanțe adiționale pot fi: măsura profitului generat, măsura predicției corecte a direcției de schimbare a valorii predictate, măsura corelației între valorile reale și valorile predictate, măsura erorii procentuale față de valoarea reală a valorii predictate, și alte măsuri similare.
Aceste măsuri adiționale sunt măsuri ad-hoc, însă folosirea lor poate crește semnificativ eficiența modelării, prin semnalarea din timp a necesității construirii modelelor noi sau a ajustării modelului existent.
În concluzie, putem spune că rețelele neuornale sunt unelte foarte apropiate pentru detectarea relațiilor neliniare ce guvernează cel puțin parțial comportarea seriilor de timp. Cum majoritatea seriilor de timp financiare admit existența componentelor neliniare, rezultă imediat că este posibilă aplicara rețelelor neuronale pentru predicția acestor serii. Totodată trebuie să notăm că aplicațiile cu succes necesită o analiză și prelucrare bine gândită, astfel rezultatele pot fi dominate de factori ce pot fi predictați într-un mod mai simplu sau pur și simplu pot fi nesatisfăcătoare. Din cauza existenței componentelor stohastice importante în cazul seriilor financiare(de exemplu șocuri politice sau războaie). Este foarte importantă construirea rețelelor neuronale de tip RBF, ce aproximează suficient de bine seriile de timp.
În final menționăm câteva rezultate legate de predicția seriilor de timp financiare. Dintre acestea notăm câteva mai interesante: Refenes, Burgess și Bentz propun modelarea acțiunilor investitorilor prin rețele neuronale; de Bodt și Kivoluoto propun utilizarea rețelelor neuronale Kohonen pentru clasificarea financiare a firmelor; Zheng propune utilizarea rețelelor neuronale cu ondelete pentru eliminarea zgomotului; Harvey face comparația unui produs software de rețele neuronale aplicate în domeniu financiar cu metodele liniare clasice.
Capitolul 4 – Aplicația :
„Prognoza cursului valutar folosind calculul neuronal’’
Prezentarea generală a aplicației
Partea practică a acestei lucrări constă în implementarea unei rețele neuronale care să ofere posibilitatea de a aproxima seriile te timp și studierea modului în care procesul de învățare al rețelelor neuronale este influențat de anumiți parametrii. În cadrul acestei aplicații scopul procesului de învățare constă în aproximarea anumitor serii de timp întroduse de către utilizator. Parametrii de învățare care intervin în procesul învățării sunt: setul datelor de antrenament, numărul de prezentări ale datelor de antrenament, rata de învățare, stabilizatorul folosit pentru activarea neuronilor de pe stratul ascuns.
Funcționarea aplicației
Programul oferă utilizatorului posibilitatea de a deschide fișiere în care sunt datele cu evoluția cursului valutar.
Trebuie menționat faptul că datele au fost salvate cu ajutorul Internetului de pe site-ul Băncii Naționale a României.
Utilizatorul poate să aleagă între două tipuri de rețele neuronale, și anume între rețele neuronale de tip RBF sau MLP. Utilizatorul poate modifica numărul datelor de testare, această alegere va duce automat la modificarea numărului datelor de instruire.
Se poate alege funcția de activare pe stratul ascuns și pe stratul de ieșire.
În cazul rețelei de tip MLP funcțiile de activare pe cele două straturi sunt: liniară, sigmoidală și tangentă hiperbolică.
În cazul rețelei de tip RBF funcțiile de activare pe cele două straturi sunt: pe stratul ascuns se poate alege dintre funcțiile gaussian, multiquadratic și multiquadratic invers iar pe stratul de ieșire se poate alege dintre funcția liniară și sigmodală.
Programul permite reprezentare grafică a datelor în original precum și variația lor în procentaj, și nu în ultimul rând datele preprocesate care intră în rețeaua neuronală.
Programul permite suspendarea și repornirea procesului de învățare, precum și resetarea parametrilor de învățare. Se poate modifica rata de învățare în rețea precum și numărul de epoci. După antrenarea rețelei, utilizatorul, cu ajutorul unor butoane, poate reprezenta grafic datele de antrenament învățate și datele cu care nu a fost antrenată rețeaua, împreună cu datele originale preprocesate.
Prezentarea interfeței grafice
Interfața grafică la pornirea aplicației ,figura 4.1
Fig. 4.1
Bara de meniuri are următoarele comenzi:
File
Open – cu alegerea acestui meniu putem deschide fișierele în care se află valorile evoluției cursului valutar.
Exit – putem încheia sesiunea de lucru.
Help
Help – se deschide o freastră în care este descrisă funcționarea interfeței.
About – se deschide o fereastră în care putem afla date despre autorul programului.
Pe partea inferioară a interfeței grafice se află o suprafață pe care sunt afișate grafic datele.
Partea superioară a interfeței grafice se împarte în patru panouri. De la stânga spre dreapta panourile interfeței sunt:
Încărcare și preprocesare
Alegerea rețelei
Antrenarea rețelei
Reprezentare
Panoul ,,Încărcare și preprocesare”
fig.4.2
Pe partea stângă a panoului avem:
Butonul „Open” deschide fișierele în care se află valorile evoluției cursului valutar.
În câmpul „Nume Fișier” se va afișa numele fișierului ales.
În câmpul „Numărul datelor încărcate” vor fi afișate câte date s-au încărcat.
În câmpul „Numărul datelor de test” se poate modifica numărul datelor de testare. Implicit este afișat 10
Pe partea dreaptă a panoului avem:
Butonul „Încărcarea datelor” citește și încarcă datele din fișierul ales
Butonul „Preprocesarea datelor” calculează valorile normalizate ale datelor .
Butonul „Graficul datelor” trasează graficul datelor.
Checkbox-ul „originale” activarea lui duce la trasarea graficului datelor originale
Checkbox-ul „Preprocesate” activarea lui duce la trasarea graficului datelor preprocesate
Atenție, fără apăsarea butonului „Preprocesare” nu se poate lansa procesul de învățare.
Panoul ,,Alegerea Rețelei”
fig.4.3
Pe partea stângă a panoului avem:
Radiobutonul „RBF”, care setează tipul rețelei și activează meniurile de choice corespunzător arhitecturii rețelei RBF.
Meniul de choice „Stratul ascuns” setează tipul funcției de activare pentru stratul ascuns. Implicit va fi setată funcția „Gaussian”
Meniul de choice „Stratul de ieșire” setează tipul funcției de activare pentru stratul de ieșire. Implicit va fi setată funcția „Liniară”
Pe partea dreaptă a panoului avem:
Radiobutonul „MLP”, care setează tipul rețelei și activează meniurile de choice corespunzătoare arhitecturii rețelei MLP.
Meniul de choice „Stratul ascuns” setează tipul funcției de activare pentru stratul ascuns. Implicit va fi setată funcția „Liniară”
Meniul de choice „Stratul de ieșire” setează tipul funcției de activare pentru stratul de ieșire. Implicit va fi setată funcția „Liniară”
Panoul „Antrenarea Rețelei”
fig.4.4
Pe partea stângă a panoului avem:
În câmpul „Rata” se poate seta rata de învățare în procesul de învățare. Implicit este afișat ,,0.1”
În câmpul „Epoci” se poate seta numărul epocilor care să se parcurgă în procesul de învățare. Implicit este afișat ,,10000”
În câmpul „Epoca actuală” va fi afișat numărul epocilor parcurse de la pornirea procesului de învățare
În câmpul „Eroarea globală”, va fi afișată eroarea globală actuală
În câmpul „Eroarea generalizată”, va fi afișată eroarea generalizată actuală
Pe partea dreaptă a panoului avem:
Butonul „Start” lansează procesul de învățare
Butonul „Stop” oprește procesul de învățare
Panoul „Reprezentare”
fig.4.5
Pe partea stângă a panoului avem:
Butonul „Grafic date de antrenare” trasează graficul rezultatului obținut cu datele de antrenare.
Butonul „Grafic date de test” trasează graficul rezultatului obținut cu datele cu care n-a fost antrenată rețeaua .
Butonul „Graficul erorii globale” lansează o fereastră în care se poate reprezenta grafic eroarea comisă pe parcursul procesului de învățare.
Pe partea dreaptă a panoului avem:
Checkbox-ul „Date originale” permite trasarea graficelor datelor originale preprocesate cu culoarea albastră
Checkbox-ul „Date aproximate” permite trasarea graficelor rezultatelor obținute în procesul de învățare cu culoarea roșie
Funcționarea ferestrei de eroare
Se lansează prin apăsarea butonului „Graficul erorii globale”
Fig. 4.6
Pot fi introduse limitele intervalului pe care utilizatorul vrea să reprezenteze eroarea.
În primul câmp de text trebuie introdusă limita minimă de la care vrem să vedem variația erorii. În al doi-lea câmp introducem valoarea maximă a intervalului.
Cu apăsarea butonului „Reprezentare”, graficul erorii va fi trasat pe suprafața de afișare.
4.2. Modul de implementare al aplicației
Pentru scrierea aplicației s-a folosit mediul vizual de dezvoltare NetBeans IDE 6.5.1, iar ca tehnici avansate de programare s-a folosit programarea orientată la obiect, în limbajul java.
Preprocesarea datelor
Având în vedere trendul exponențial în seriile de timp financiare calculăm seria normalizată a ratei de schimbări a valorii seriilor considerate, notăm cu x vectorul de date și cu N lungimea vectorului de date, adică numărul datelor.
Calculăm media aritmetică a datelor aplicând următoarea formulă:
Următorul pas este calcularea deviației standard a seriei:
După ce am aflat aceste două valori putem trece la calcularea valorilor noi ale seriei, adică calcularea valorii normalizate a fiecărei date din serie:
Cu următorele două formule putem controla dacă am calculat bine sau nu media aritmetică și deviația:
valoarea formulei trebuie să fie totdeauna ;
iar pentru trebuie să obținem valoarea 1.
Folosind seria normalizată facem încă o transformare liniară, pentru că
datele care vor deveni inputurile trebuie să se încadreze în intervalul [0,1].
Formula la această transformare este: t(x):=xnou=a*xNormi+b
Unde a = (valoarea maximă al intervalului – valoarea minimă al intervalului)/(maximul dintre date – minimul dintre date);
b = valoarea minimă al intervalului – a * minimul dintre date
Figura 4.7 ne arată un exemplu repezentat grafic despre valorile normalizate ale unui vector de date.
Fig. 4.7
Sursa Java corespunzătoare transformării datelor:
public void PreProcesare(){
Convertizor();
double tao,taoNorm,u,uNorm,N = rind-1;
xPreP = new double[135];
yPreP = new double[135];
u = 0;tao = 0;uNorm = 0;taoNorm = 0;
// normalizarea datelor originale
for(i = 1; i<=N; i++){
u = u + ist[i]*(1/N);// N = este nr. date
}
for(i = 1; i<=N; i++){
tao = tao + (1/(N-1))*(ist[i] – u)*(ist[i] – u);
}
tao = Math.sqrt(tao);
System.out.println("tao = "+Double.toString(tao));
for(i = 1; i<rind; i++){
yPreP[i] = (ist[i] – u)/tao;
}
// Verificați corectitudinea operațiunilor
for(i = 1; i<=N; i++){
uNorm = uNorm + (1/N)*yPreP[i];
}
System.out.println("uNorm="+Double.toString(uNorm));
// uNorm = 0; !!!
//formula de control pentru dispersie
for(i = 1; i<=N; i++){
taoNorm = taoNorm +(1/(N-1))*
(yPreP[i] – uNorm)*(yPreP[i] – uNorm);
}
taoNorm = Math.sqrt(taoNorm);
System.out.println("taoNorm="+Double.toString(taoNorm));
// taoNorm = 1 !!!
// datele trebuie să se încadreze între 0 și 1
preP = new double[135];
for(i=1;i<rind;i++){
preP[i] = yPreP[i];
}
max = Maxim1(yPreP);
min = Minim1(yPreP);
max = max + Math.abs(min);
for(i=1;i<rind;i++){
preP[i] = preP[i] + Math.abs(min);
preP[i] = preP[i]/max;
}
}
Pentru construirea modelului predictiv utilizăm rețele neuronale de tip RBF cu funcția de activare gaussiană, multiqudratică și multiquadratic inversă, pe stratul ascuns, iar pe
stratul de ieșire se poate alege dintre funcțiile de activare liniară și sigmoidală. Din cauză că avem puține date, fiecare dintre date va deveni centru. Deci în construirea rețelei predictive vom avea numărul centrelor egal cu numărul datelor. Rețeaua construită va avea un singur neuron de intrare și un singur neuron de ieșire. În stratul ascuns vom avea numărul neuronilor egal cu numărul datelor. La antrenarea rețelei vom folosi și termenul bias cu valoarea de ieșire 1 și cu valoarea inițială 0 a tăriei sinaptice corespunzătoare termenului bias. După transformarea seriei originale intr-o serie ale cărui valori se află în intervalul [0,1] putem începe antrenrea rețelei.
În continuare construim încă o rețea de tip MLP pentru ca să putem compara rezultatele obținute cu rețeaua de tip RBF. Acest tip de rețea va fi antrenată conform algoritmului backpropagation. Arhitectura rețelei MLP va fi construită asemănător cu arhitectura lui RBF, numai că funcția de activare la stratul ascuns și pe stratul de ieșire va fi liniară, sigmoidală sau tangentă hiperbolică.
Testarea rețelelor RBF și MLP se face după antrenrea acestor rețele, cu date necunoscute, adică cu date care nu au fost folosite la instruire.
Rezultatele obținute sunt reprezentate grafic pe interfața programului.
Prognoza cursului valutar
Prognoza valorii ratei de schimb a valutelor are o mare importanță pentru investitorii de pe piețele financiare. În ultima vreme au apărut o serie de articole privind utilizarea tehnicilor din inteligența artificială pentru prognoza cursului valutar.
Pentru problema evaluării valorii valutelor considerăm două serii de date, reprezentând valoarea de schimb lunare, la Banca Națională Română, dintre Dolar SUA și Leu respectiv Euro și Leu, din perioada ianuarie 2000 – decembrie 2009. Seriile de timp menționate mai sus sunt reprezentate grafic în figura următoare.
Fig 4.8
Rata de schimb Dolar Sua – Leu Rata de schimb Euro – Leu
Preprocesarea datelor se face prin aplicarea acelor doi algoritmi de transformare pe care i-am prezentat în paginile anterioare. Pentru valoarea variației în RBF am luat 1/NrDate. Rețeaua a fost inițializată cu valori aleatoare.
Compararea rezultatelor obținute
În total am avut 120 de date ale cursului valutar Euro – Leu din care am folosit 110 date pentru insruire și 10 date pentru testarea rețelei, iar rata de învățare . În figura următoare se pot observa diferențele dintre rețelele de tip RBF și MLP, privind capacitatea lor de aproximare. În figura Fig. 4.9 sunt reprezentate grafic numai datele cu care am instruit aceste rețele.
Pe baza figurii putem observa că întradevăr rețelele neuronale pot fi folosite în predicția economică, și este evident faptul că rețelele de tip RBF sunt rețele care au performanțe semnificativ mai bune în privința aproximării seriilor de timp. Putem observa că modelul RBF indică mai bine direcția evoluției ratei de schimb valutar.
Fig. 4.9
Aproximare cu RBF Aproximare cu MLP
Pe baza rezultatelor obținute putem afirma că rețeaua de tip RBF, funcționează relativ bine, deși ea este doar o demonstrație.
Sursa Java a algoritmului de învățare la rețele neuronale de tip RBF arată în felul următor :
public void invatare_rbf(){
general_error=0;
for(i = 1; i<k;i++)
{ // stratul ascuns
for(j = 1; j<k;j++)
{
z[j]=activate1(xPrep[i],xPrep[j],k);
}
// calcule pe stratul de iesire
yin = 0;
for(j = 1; j<k;j++)
{
yin = yin + z[j]*w[j];
}
y_[i] = activate2(yin);
// delta
delta = (yPrep[i] – y_[i]);
// dw
for(j = 1; j<k;j++)
{
dw[j] = rata*delta*z[j];
}
for(j = 1; j<k;j++)
{w[j] = w[j] + dw[j];}
error = ((double)(1.0)/k)*(-y_[i] + yPrep[i])*(-y_[i] + yPrep[i]);
gerror[epocaActuala] = gerror[epocaActuala] + error;
general_error = general_error + Math.abs((y_[i] – yPrep[i])*(y_[i] – yPrep[i]));
}
gerror[epocaActuala] = Math.abs(gerror[epocaActuala]);
ero = gerror[epocaActuala]*0.1;
general_error = Math.sqrt(general_error)/k;
ap.jTextField7.setText(Double.toString(ero));
ap.jTextField8.setText(Double.toString(general_error));
}
În figura Fig. 4.10. este prezentat graficul celor 10 date care au fost păstrate pentru testare.
Fig. 4.10.
Sursa Java a algoritmului de testare la rețele neuronale de tip RBF arată în felul următor :
public void testare_rbf()
{
w_ = new double[rind+5];
for(j = 1; j<k;j++)
{
w_[j] = w[j];
}
for(i = k; i<rind;i++)
{
// hidden layer
for(j = 1; j<k;j++)
{
z[j]=activate1(xPrep[i],xPrep[j],k);
}
// calcule pe stratul de iesire
yin = 0;
for(j = 1; j<k;j++)
{
yin = yin + z[j]*w_[j];
}
y_test[i-k+1] = activate2(yin);
// delta
delta = (yPrep[i] – y_test[i-k+1]);
// dw
for(j = 1; j<k;j++)
{
dw[j] = rata*delta*z[j];
}
for(j = 1; j<k;j++)
{
w_[j] = w_[j] + dw[j];
}
}
}
Valorile erorii pătratice pentru ambele rețele (RBF, MLP) sunt prezentate în figura 4.11.
Fig. 4.11.
Pe baza acestor exemple prezentate, putem forma o imagine obiectivă asupra potențialului rețelelor neuronale artificiale aplicate pentru probleme de prognoză în context financiar.
Concluzii
Lucrarea prezintă o imagine generală privind aplicarea rețelelor neuronale în domeniul de predicție al seriilor de timp. În urma testelor realizate cu ajutorul aplicației practice am constatat că rețelele neuronale artificiale sunt foarte bune pentru predicțiile economico-financiare. În concluzie putem afirma că rețelele neuronale sunt unelte foarte importante în aproximarea seriilor de timp financiare. Totodată trebuie să notăm faptul că aplicațiile mai serioase necesită o analiză mai profundă și prelucrarea datelor trebuie făcută mai bine decât am prelucrat datele în aplicația de față. Evident, dacă prelucrarea datelor nu este bine gândită, pot apărea rezultate nesatisfăcătoare.
Prentru a scoate în evidență capacitățile rețelei de tip RBF, am comparat rezultatele obținute cu rezulatele obținute cu rețeaua de tip MLP care a fost antrenată conform algoritmului backpropagation. Din testele efectuate a reieșit că aproximarea rețelei RBF cu datele de instruire este destul de bună, deși modelul construit de mine nu este complet.
Ceea ce s-ar putea realiza în continuare ar fi prelucrarea mai bună a datelor cu alte metode de prelucrare și compararea rezultatelor cu rezultatele obținute cu aplicația de față.
Bibliografie
Enăchescu Călin, “Bazele teoretice ale rețelelor neuronale”, Editura Casa Cărții de Știință, Cluj-Napoca 1998;
Enăchescu Călin, “Calcul Neuronal”, PC-Report 12, Agora Press, 1993;
Enăchescu Călin,”Caracterizarea Rețelelor Neuronale ca și metode de aproximare-interpolare”, Buletinul Științific, Universitatea Tehnică din Tg.-Mureș, Vol. VII, 1994;
Enăchescu Călin,”Rețele neuronale și teoria aproximării”. Sesiunea științifică anuală a cadrelor didactice Universitatea Tehnică Tg. Mureș, 1995;
Enăchescu Călin,”Metodă de aproximare a procesului de învățare a rețelelor neuronale”. Sesiunea științifică anuală a cadrelor didactice, Universitatea “Petru Maior”, Tg. Mureș, Decembrie 1996;
Enăchescu Călin, „Aproximarea funcțiilor continue cu ajutorul rețelelor neuronale”, Academia Navală “Mircea Cel Bătrân”, Constanța, Octombrie 1997;
Ciocoiu Iulian, ,,Rețele neuronale artificiale”,Editura Cantes, Iași,2001
Ben Krose and Patrick van der Smagt, „An introduction to Neural Network”, Amsterdam 1996.
McCulloch, W.S.,Pitts, W., (1943)” A Logical Calculus of Ideas Immanent in Nervous Activity”., Bull. of Mathematical Biophysics 5, 115-133.
Haykin, S. (1994)” Neuronal Networks”, A Comprehensehive Foundation, Mackmillan Publishers
András, P., (2000) „Rețele neuronale pentru aproximare și predicția seriilor de timp”, Universitatea „Babeș-Bolyai” Cluj Napoca
12. Lackes, R. and Mack D.,(1998) „Neural Networks. Basics and Applications”, Springer-Verlag Berlin Heidelberg
13. Oide M., Leonard T., "Combining Regression Trees and Radial Basis Function Networks" , International Journal of Neural System 1999 , http://www.anc.ed.ac.uk/~mjo/rbf.html
Bibliografie
Enăchescu Călin, “Bazele teoretice ale rețelelor neuronale”, Editura Casa Cărții de Știință, Cluj-Napoca 1998;
Enăchescu Călin, “Calcul Neuronal”, PC-Report 12, Agora Press, 1993;
Enăchescu Călin,”Caracterizarea Rețelelor Neuronale ca și metode de aproximare-interpolare”, Buletinul Științific, Universitatea Tehnică din Tg.-Mureș, Vol. VII, 1994;
Enăchescu Călin,”Rețele neuronale și teoria aproximării”. Sesiunea științifică anuală a cadrelor didactice Universitatea Tehnică Tg. Mureș, 1995;
Enăchescu Călin,”Metodă de aproximare a procesului de învățare a rețelelor neuronale”. Sesiunea științifică anuală a cadrelor didactice, Universitatea “Petru Maior”, Tg. Mureș, Decembrie 1996;
Enăchescu Călin, „Aproximarea funcțiilor continue cu ajutorul rețelelor neuronale”, Academia Navală “Mircea Cel Bătrân”, Constanța, Octombrie 1997;
Ciocoiu Iulian, ,,Rețele neuronale artificiale”,Editura Cantes, Iași,2001
Ben Krose and Patrick van der Smagt, „An introduction to Neural Network”, Amsterdam 1996.
McCulloch, W.S.,Pitts, W., (1943)” A Logical Calculus of Ideas Immanent in Nervous Activity”., Bull. of Mathematical Biophysics 5, 115-133.
Haykin, S. (1994)” Neuronal Networks”, A Comprehensehive Foundation, Mackmillan Publishers
András, P., (2000) „Rețele neuronale pentru aproximare și predicția seriilor de timp”, Universitatea „Babeș-Bolyai” Cluj Napoca
12. Lackes, R. and Mack D.,(1998) „Neural Networks. Basics and Applications”, Springer-Verlag Berlin Heidelberg
13. Oide M., Leonard T., "Combining Regression Trees and Radial Basis Function Networks" , International Journal of Neural System 1999 , http://www.anc.ed.ac.uk/~mjo/rbf.html
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: Prognoza Cursului Valutar Folosind Calculul Neuronal’ (ID: 150166)
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.
