Retele Neurale. Proiectarea Retelelor Neurale Folosind Algoritmi Genetici
Retele Neurale
1. Introducere
Una din principalele directii de cercetare care preocupa specialistii din domeniile psihologiei, biologiei, matematicii, filozofiei, chimiei si chiar fizicii o reprezinta intelegerea comportamentului creierului uman si realizarea unor echivalente artificiale ale acestuia. In viitor este de asteptat ca rezultatele obtinute sa influenteze o serie de alte stiinte, si poate chiar modul actual de percepere a vietii.
Multi cercetatori isi limiteaza studiile doar la influentele pe care le are aceasta noua stiinta asupra propriiei lor ramura de activitate, si poate din acest motiv, sau poate datorita complexitatii, principiile generale ale memorarii si dezvoltarii comprotamentelor specifice naturale, nu au fost inca dezvaluite complet. Chiar daca momentul pionieratului in acest domeniu poate fi incadrat cu multi ani in urma, progresele remarcabile au inceput sa apara doar de cateva decenii, odata cu aparitia sistemelor de calcul si a capacitatilor de masurare performante la nivel de neuroni care au facut posibila testarea prin simulare a modelelor construite. Se poate spune ca ceea ce a intarziat dezvoltarea retelelor neurale a fost in primul rand lipsa unor echipamente electronive performante de calcul si simulare.
Cu toate ca primele referiri si chiar cercetari privind modalitatiile de implementare ale modelului neuronal au prins contur cu foarte mult timp in urma, a trecut doar o jumatate de secol de cand observatiile stintifice au inceput sa dea unele rezultate si o privire de ansamblu asupra mecanismelor biologice care fac posibil procesul de invatare. De aceea in zilele noastre mai exista o serie intreaga de necunoscute, iar cercetarea in acest domeniu este departe de a fi incheiata, modul exact de functionare al creierului ramanand inca un mister.
Cu toate acestea la ora actuala se cunosc cateva aspecte importante ale acestui complex mecanism. In particular elementul care sta la baza mecanismului de invatare este un tip special de celula, care, spre deosebire de celelalte celule ale corpului nu se regenereaza, si tocmai datorita faptului ca aceasta este singura celula cu o durata de viata egala cu cea a intregului organism, se presupune ca ea asigura abilitatiile de memorare, gandire si utilizare voluntara sau involuntara a experientelor trecute in actiunile si deciziile prezente. Aceste celule, in numar de 100 de miliarde sunt cunoscute sub numele de neuroni. Fiecare neuron se poate conecta cu pana la 200 de mii de alti neuroni, numarul mediu de conexiuni fiind insa de doar 1.000 pana la 10.000. „Puterea” mintii umane este data tocmai de numarul acestor legaturi, coroborat cu mostenirea genetica si procesele de invatare care au in rol deosebit de important in evolutia oricarui individ.
Forma interna a unui neuron este deosebit de complexa. Acesta contine o multitudine de parti, subsisteme si mecanisme de control, dar intrucat comportarea creierului este data in primul rand de legaturile dintre neuroni si nu de comportarea fiecarui neuron in parte, aceste subsisteme nu sunt relevante pentru directia de cercetare prezentata. Neuronii comunica prin intermediul unor stimuli electrici, dar cu toate acestea, mecanismul complex pe care il formeaza nu poate fi comparat cu nici un sistem de calcul electronic existent la ora actuala, chiar si retelele neurale artificiale fiind departe de acest ideal.
In particular, orice neuron are la baza patru componente. Acesta primeste date de intrare de la alti neuroni, le combina intr-un anumit mod, aplica rezultatului o transformare neliniara si apoi il transmite catre iesire. In figura urmatoare sunt prezentate cele patru componente de baza ale neuronului:
In creierul uman exista variatii diverse ale acestui model de baza al neuronului, toate continand insa cele patru componente, cunoscute prin numele lor biologice: dendrita, soma, axion si sinapsa. Dendritele sunt niste extensii ale somei de tipul firelor de par, cu rol de canale de intrare. Acestea receptioneaza datele de intrare de la sinapsele altor neuroni. Soma proceseaza apoi semnalele primite si transmite rezultatele catre alti neuroni prin axon si sinapse.
Cercetari recente au aratat ca neuronii biologici au o structura mult mai complexa decat explicatia simplista data. O data cu avansul tehnologiei, cercetatorii pot oferii o imagine tot mai larga a acestor elemente care stau la baza intelegerii comportamentului creierului uman.
Retelele neurale artificiale incearca sa reproduca doar elementele de baza, si acestea in cel mai primitiv mod posibil, dar scopul acestora nu este sa reproduca creierul uman, ci sa ofere o noua modalitate de abordare a problemelor practice existente in acest moment, metoda inspirata doar din modelele biologice.
Retelele neurale artificiale sunt considerate de multi specialisti ca un posibil viitor in evolutia sistemelor clasice de calcul. Ele sunt mecanisme cu posibilitati de autoinvatare care nu necesita traditionalele abilitati ale unui programator esentiale pana acum. Cu toate acestea posibilitatiile acestor retele sunt totusi limitate, acest lucru starnind o reactie de dezamagire din partea posibililor clienti in randul carora se formase ideea ca noua tehnologie poate rezolva aproape orice problema. Concluzia la care au ajuns acestia, dupa ce nu au reusit sa rezolve unele probleme cu ajutorul retelelor neurale, a fost ca acestea sunt complicate si confuze. Confuzia a rezultat in urma numeroaselor articole care au aparut in acea vreme, fiecare propunand alte configuratii si alte exemple de folosire a retelelor. In prezent doar o mica parte din modelele propuse atunci sunt folosite pe plan comercial, o structura aparte, numita „feedfoorward back-propagation” find de departe cea mai populara. Multe din modele de retele existente in prezent reprezinta inca doar niste prototipuri studiate in laboratror. Retelele neurale sunt doar niste simple unelte si pentru a putea fi folosite cu succes este necesar ca „arhitectul” sa stie cum sa le exploateze posibilitatiile.
2. Ce sunt retelele neurale artificiale
Retelele neurale artificiale sunt niste modele electronice bazate pe structura neurala a creierului, care invata din experientele trecute. Este deja un lucru unanim acceptat faptul ca exista unele probleme care depasesc capacitatiile calculatoarelor moderne, dar care pot fi rezolvate folosind aceste modele.
Aceste metode inspirate din domeniul biologiei sunt considerate ca fiind o noua era in evolutia industriei sistemelor de calcul, chiar si creierul unui simplu animal fiind capabil sa indeplineasca functii imposibile pentru un calculator clasic. Acesta se descurca destul de bine atunci cand trebuie sa rezolve o problema matematica, dar are mari probleme in momentul in care trebuie sa recunoasca cele mai simple forme, cu atat mai putin in cazul in care modelele din trecut trebuie transpuse in actiuni viitoare.
Cercetarile recente in domeniul biologic au aratat faptul ca creierul retine nformatiile sub forma unor tiparuri, unele dintre acestea de o complexitate ridicata permitand de exemplu recunoasterea unei fete umane din diferite unghiuri. Acest model de reprezentare a informatiilor si folosirea ulterioara a acestora pentru rezolvarea unor probleme deschide un nou domeniu de lucru pentru programatori, care nu trebuie sa mai folosesaca metodele traditionale algoritmice de programare, ci trebuie sa creeze niste retele paralele a caror antrenare ar permite rezolvarea unor probleme specifice. Domeniul implica de asemenea folosirea unor termeni necunoscuti pana acum in aceasta lume, cum ar fi „comportare”, „reactie”, „autoorganizare”, invatare” sau „generalizare”.
Pentru a-si indeplini scopul pentru care au fost construite retele neurale artificiale simuleaza cele patru functii de baza ale neuronului biologic. In figura urmatoare este reprezentata o schema fundamentala a unui neuron artificial:
Fiecare intrare a neuronului este reprezentata sub forma unui simbol matematic x(n), care este multiplicat cu ponderea intrarii respective w(n). In cazul cel mai simplu, intrarile sunt doar sumate, apoi rezultatul este trecut prin functia de transfer care genereaza rezultatul transmis la iesire. Implementarea acestei reprezentari este posibila printr-un circuit electronic, chiar utilizand functii de sumare si de transfer mai complexe, intreaga retea neurala creata ocupand un spatiu fizic destul de redus.
Cele mai multe aplicatii necesita o iesire de tip adevarat/fals, adica un raspuns binar. Printre acestea se numara recunoasterea textelor, identificarea vorbirii, si obiectualizarea imaginilor, deci aplicatii care transforma lumea reala in valori numerice specifice unui sistem de calcul. Valorile obtinute sunt restranse la un set limitat binecunoscut, cum ar fi setul de caractere ASCII sau cele mai folosite 50.000 de cuvinte dintr-o limba.
Alte retele rezolva probleme in care valoarea de iesire nu mai face parte neaparat din multimea de valori cunoscute, putand avea un numar infinit de raspunsuri, cea mai folosita aplicatie de acest tip fiind cea care sta la baza „inteligentei” in miscari a robotilor. In acest caz parametri de intrare genereaza un numar practic infinit de valori de iesire care reprezinta niste miscari foarte precise. Aceste retele urmaresc uniformizarea intrarilor cuantizate datorita limitarilor impuse de senzori (datele masurate vin intr-un flux discontinuu) prin insumarea acestora si aplicarea unei functii de transfer de exemplu de tip tangenta hiperbolica. In acest fel valorile de iesire sunt continue si astfel miscarile rezultate reproduc mult mai bine lumea reala.
Cea de-a doua etapa a crearii retelei neurale presupune conectarea neuronilor intr-unul din nenumaratele moduri posibile. In cazul retelelor biologice fiecare neuron este o componenta microscopica tridimensionala capabila sa creeze un numar infinit de legaturi. Acest lucru este imposibil in cazul retelelor artificiale datorita limitarilor fizice. Circuitele integrate realizate folosind tehnologiile curente sunt bidimensionale, si au un numar limitat de interfete de conectare, aceasta restrangand numarul si scopul retelelor implementate fizic.
Retelele neurale artificiale actuale sunt doar niste simple multimi de neuroni realizate prin crearea unor interfete si conectarea acestora. Modul in care se conecteaza neuronii este partea esentiala a proiectarii care practic indreptateste aceste structuri artificiale sa fie numite solutii pentru probleme din lumea reala.
Majoritatea retelelor neurale create artificial au la baza topologia prezentata in figura de mai sus, in care cativa neuroni reprezinta interfata cu lumea reala prin citirea intrarilor sau oferirea valorilor de iesire, iar restul sunt neuroni ascunsi dar care implementeaza functiile retelei.
Cativa dintre pionierii acestei stiinte au incercat sa realizeze retele prin simpla conectare intr-un mod aleator a neuronilor, dar cu un procent redus de reusita, aceasta deoarece retelele neurale nu sunt doar o ingrengatura de neuroni, pozitia si interfetele acestora fiind specifice problemei pentru care a fost conceputa reteaua.
Cea mai intalnita modalitate de a realiza retele consta in impartirea neuronilor in straturi, legaturile dintre aceste grupuri si proprietatiile neuronilor fiind cele care dau functionalitatea retelei. Cu toate ca exista retele, utilizabile pentru anumite probleme, formate dintr-un singur strat, sau chiar un singur neuron, majoritatea aplicatiilor necesita trei tipuri de straturi, unul de intrare, unul ascuns si unul de iesire. Neuronii de intare receptioneaza datele din fisiere sau direct de la senzori in cazul aplicatiilor in timp real iar cei de iesire transmit informatiile obtinute catre lumea exterioara, catre un alt proces virtual, sau catre un sistem mecanic de control. Intre cele doua nivele de interfata exista unul sau mai multe nivele ascunse interconectate in moduri variate.
Un mod uzual de proiectare presupune conectarea fiecarui neuresupune conectarea fiecarui neuron de pe un strat ascuns cu toti neuronii din stratul imediat superior, realizandu-se un traseu de tip „numai inainte” (feed forward) catre iesire.
Linile de comunicatii reprezinta o componenta importanta a retelei, prin „puterea” pe care o confera intrarilor. Exista doua tipuri de legaturi, una cauzand excitarea si cealalalta inhibarea neuronului. Ca un exemplu la aplicatiile de recunoastere a caracterelor, se determina o probabilitate a apartenentei simbolului de intrare corespunzatoare fiecarui caracter cunoscut, iar reteaua va urmari alegerea neuronului din stratul de iesire care reprezinta caracterul cu probabilitatea cea mai mare, si inhibarea tuturor celorlalti. Metoda folosita pentru indeplinirea acestei sarcini este inhibarea laterala, iar intregul concept poarta numele de „competitie”.
Un alt tip de legatura este cea de reactie, prin care o iesire a unui strat se conecteaza la una din intrarile unui strat anterior.
3. Antrenare
Dupa ce o retea a fost structurata pentru o aplicatie particulara aceasta trebuie sa fie antrenata, adica trebuie sa invete sa asocieze valorile primite la intrare cu una din iesirile dorite.
Antrenarea incepe cu o initializare aleatoare a ponderilor legaturilor, si se termina in momentul in care acestea au fost ajustate astfel incat reteaua sa poata indeplini scopul pentru care a fost construita.
Exista doua moduri in care poate fi antrenata o retea (supravegheat si nesupravegheat) alegerea unuia dintre ele facandu-se in functie de scopul proiectarii retelei, adica de problema care trebuie rezolvata. Antrenarea supravegheata implica folosirea unui mecanism de furnizare a intrarilor si asocierea acestora cu iesirile, iar cea nesupravegheata este cea in care reteaua trebuie sa culeaga informatiile de intrare direct din lumea reala fara nici un ajutor extern, si sa se adapteze la aceasta.
Majoritatea retelelor utilizeaza antrenarea supravegheata, cealalta metoda fiind folosita doar pentru o caractreizare initiala a intrarilor, conceptul de „autoinvatare” fiind deocamdata doar o posibila perspercectiva, venita din lumea laboratoarelor de cercetare.
3.1 Antrenarea supravegheata
In acest caz sunt cunoscute atat intrarile cat si iesirile. Reteaua citeste un set de valori de intrare si compara iesirile obtinute cu setul dorit, erorile fiind apoi propagate inapoi in retea implicand ajustarea ponderilor. Acest proces se repeta de un numar mare de ori folosind seturile de date de intrare speciale numite „seturi de invatare” pana cand reteaua ajunge la un nivel de performanta acceptat.
Cu toate acestea exista cazuri in care retelele nu invata niciodata. Acest lucru se poate intampla fie datorita faptului ca datele de intare nu contin destule informatii specifice din care sa rezulte iesirea dorita, sau daca nu exista seturi suficiente de date de intrare pentru convergenta. Retelele mari cu multe straturi ascunse pot fi capabile sa memoreze seturile de date de intare si iesirile corespunzatoare dorite, acest lucru ducand la o incapacitate de recunoastere a altor seturi de date diferite de cele folosite la antrenare. Pentru a verifica acest neajuns metoda de antrenare supravegheata necesita pastrarea unui set de date care nu va fi folosit in procesul de invatare ci numai la sfarsitul acestuia pentru testare. Fenomenul de memorare poate fi evitat prin folosirea unor retele cu un numar cat mai redus de componente.
Daca o retea pur si simplu nu poate rezolva o problema se revizuieste intregul proces de proiectare incluzand numarul de elemente de pe fiecare strat, legaturile dintre straturi, functiile de sumare si transfer si chiar initializarea parametrilor.
In final cand reteaua a fost antrenata complet valorile ponderilor pot fi „inghetate” si apoi intregul sistem este implementat fizic prin circuite electronice, sau reteaua poate functiona direct in varianta virtuala, caz in care va fi capabila sa invete in continuare din propria experienta.
3.2 Antrenarea nesupravegheata
Lumea reala este plina de exemple de situatii in care nu poate fi definit un set de valori de intrare de antrenare pentru ca acesta pur si simplu nu exista, solutia la aceasta problema fiind folosirea antrenarii nesupravegheate. In acest caz se ofera doar valorile de intrare, sistemul trebuind sa decida singur cum le va grupa pentru obtinerea iesirilor, concept numit „autoorganizare” sau „adaptare”.
In prezent antrenarea nesupravegheata nu este inca foarte bine inteleasa adaptarea fiind doar un ideal care va permire realizarea unor roboti inteligenti capabili sa invete singuri din experientele anterioare si sa se adapteze la schimbarile survenite in mediu si la incercarile la care sunt supusi.
O posibila aplicare a acestei situatii ar fi in domeniul militar unde sunt descoperite continuu noi arme si tehnici de lupta care schimba complet „ecuatiile problemei” lucru care duce la inutilitatea folosiri in scopuri defensive a unor roboti antrenati in mod supravegheat adaptati exact la niste parametrii fixi, mult mai utilie fiind niste sisteme inteligente capabile sa se adapteze singure la noile provocari ale mediului, create cu ajutorul unor algoritmi de antrenare nesupreavegheati.
Datorita aspectului neasteptat al vietii si datorita dorintei omului de a fi intotdeauna pregatit, se fac in continuare cercetari intense in acest domeniu al viitorului.
Unul dintre principalii sustinatori ai retelelor autoadaptabile este Tuevo Kohonen, un inginer de la Universitatea Tehnica din Helsinki, care a creat o retea numita „autoasociator”, capabila sa invete fara sa cunoasca rospunsul corect. Este o retea cu topologie neobisnuita care contine un singur strat cu multe legaturi, iar neuronii sunt angrenati intr-o competitie de tipul „castigatorul ia tot”.
Kohonen isi continua studiile pe retele structurate diferit de standardul „feedforward back-ropoagation”, ideea fiind gruparea neuroniilor in grupuri, neuronii apartinatori unui grup fiind ordonati topologic. Topologia este o ramura a matematicii care studiaza modul in care se pate face o trecere de la un spatiu la altul fara a se schimba configuratia geometrica a acestora.
Kohonen a aratat ca lipsa topologiei in modelele neurale curente face din acestea doar niste simple abstractizari ale retelelor naturale. In viitor, o data cu continuarea cercetarilor si dezvoltarea capacitatilor de calcul, aceste retele autoadaptive nu vor mai fi doar un subiect de cercetare, iar implicarea lor in lumea reala va fi din ce in ce mai evidenta.
4. Evolutia sistemelor de calcul
Calculatoarele traditionale sunt ideale pentru multe aplicatii cum ar fi gestionarea si procesarea de date, comunicatii, etc. deci in general aplicatii care nu necesita caracteristicile speciale de adaptare ale retelelor neurale. Sistemele expert sunt o extensie a algoritmilor traditionali, numite de multe ori sisteme de generatia a cincea (prima generatie este formata din fire si comutatoare, a doua apare o data cu folosirea tranzistoarelor, a treia implica folosirea circuitelor integrate si a limbajelor de nivel inalt COBOL, Gortran sau C, iar a patra foloseste sisteme vizuale si generatoare de cod).
Un sistem expert tipic este format din doua parti, un modul de interfata si o baza de cunostinte. Interfata este generica, realizand legatura cu utilizatorul, datele externe, accesarea programelor si programarea activitatiilor, iar baza de cunostinte contine informatii specifice unei anumite probleme. Aceasta permite expertului sa defineasca regulile dupa care functioneaza un proces. expertul nefiind nevoit sa cunoasca un limbaj de programare. Expertul uman trebuie sa stie doar ce trebuie sa faca sistemul de calcul, si modul de functionare a mecanismului sistemului expert. Generarea sistemelor exper a intampinat insa o serie de probleme odata cu cresterea complexiattii problemelor, si deci a necesarului de resurse de calcul. Sistemele expert au avut totusi un succes major, dar au intalnit probleme in domenii cum ar fi vizualizarea, sinteza si recunoasterea vocala, invatarea. Un alt dezavantaj al inteligentei artificiala este serialitatea acesteia, ceea ce implica dependenta de procesorul pe care se ruleaza, fiind restrictionata la folosirea unui singur procesor. Inteligenta artificiala este stramtorata de faptul ca de multe ori expertii nu gandesc sub forma de reguli clare.
Retelele neurale artificiale vin ca o completare a metodelor de calcul traditionale, incercand sa ofere primele solutii pentru probleme care nu s-au gasit incarezolvare, dar si solutii alternative pentru probleme clasice. Acestea ofera o vizine complet diferita asupra rezolvarii prolemelor si sunt de multe ori numite a sasea generatie a sistemelor de calcul, prin incercarea de a oferi un mediu care se poate autoprograma si poate invata fara influenta externa. Au capacitatea de a rezolva probleme fara ajutorul unui expert uman si fara necesitatea programarii prealabile, recunoscand modele unepri inaccesibile perceptiei operatorului uman.
Totusi, in ciuda avantajelor pe care le au retelele neurale in fata sistemelor expert si a programarii clasice, acestea nu reprezinta solutia la orice problema existenta. Ele invata continuu, deci sunt suscectibile sa comita erori, si deasemenea, chiar daca o retea a fost proiectata, nu exista niciodata garantia ca aceasta reprezinta solutia optima pentru problema respectiva.
Retelele neurale pot rezolva exact problemele pe care sunt capabile sa le rezolve, dar numai odata cu satisfacerea urmatoarelor conditii:
Existenta unui set de parametri care poate caracteriza problema data
Un set de date de antrenare si testare de o marime adecvata
Intelegerea naturii problemei de rezolvat, astfel ca deciziile initiale cerute de procesul de proiectare sa poata fi luate. Aceste decizii includ alegerea functiilor de transfer si activare a metodelor de invatare etc.
Putere de procesare adecvata (unele aplicatii necesita o procesare in timp real care depaseste capacitatiile sistemelor secventiale de procesare hardware standard)
O data ce aceste conditii au fost indeplinite, retelele neurale ofera oportunitatea rezolvarii problemelor in domenii in care metodele traditionale sunt deficitare atat datorita puterii reduse de procesare cat si a metodologiei algoritmice folosite. Un numar semnificativ de probleme complexe nu poate fi rezolvat de catre mediile traditionale de calcul. De exemplu vorbirea, sau chiar diferentierea accentelor este ceva usor de inteles pentru orice fiinta umana, dar inaccesibila calculatorului fara puterea de processare paralela oferita de retelele neurale. Recunoasterea formelor este o alta sarcina usoara pentru om dar imposibil de rezolvat chiar de catre cele mai puternice calculatoare clasice. O persoana poate recunoaste de exemplu un avion in intoarcere, rasturnat, sau indepartandu-se, in timp ce pentru un calculator singura posibilitate de abordare este compararea imaginilor cu niste modele predefinite stocate in memorie.
5. Istoria retelelor neurale
Studiul creierului uman a inceput cu sute de ani in urma, iar o data cu avansul tehnologic si cu aparitia echipamentelor electronice, incercariloe de reproducere artificiala a acestui model de gandire s-au nascut in mod natural. Primul pas catre aparitia retelelor neurale moderne a fost facut in 1943, cand neuropsihologul Warren McCulloch, impreuna cu un tanar matematician Walter Pitts au scris o carte in care ofereau o prima presupunere a modului in care neuronii ar putea functiona, ei modeland apoi pe baza acesteia o retea neurala simpla din circuite electrice.
Donald Hebb, in cartea sa „Organizarea comportamentelor” scrisa in anul 1949 reintroduce conceptul de neuroni, elementul de noutate fiind ipoteza ca puterea legaturilor dintre neuroni creste la fiecare folosire.
Aparitia primelor sisteme electronice de calcul in anii ’50, a facut posibila aparitia primelor implementari, bineinteles rudimentare la inceput, care sa modeleze teoriile referitoare la modul uman de gandire. Nathanial Rochester de la laboratoarele de cercetare IBM a fost primul care a incercat sa simuleze o retea neurala biologica. Chiar daca prima incercare a esuat sustinatorii teoriei au adus noi argumente in favoarea caesteia, o adevarata piatra de temelie fiind pusa in anul 1956 la tabara de cercetare de vara de la universitatea Darthmount. Proiectrul propus aici (proiectul Darthmount) urmarea stimularea cercetarilor atat in domeniul inteligent, sau AI cum este denumit in industrie, cat si, intr-o mai mica masura intradevar, in domeniul proceselor neurale ale creierului.
In anii care au urmat proiectului Dartmouth, John von Neumann a sugerat posibilitatea imitarii functilor simple ale neuronilor prin folosirea releelor telegrafice sau a tuburilor vidate. In acealsi timp Frank Rosenblatt, un neurobiologist la Cornell University, si-a inceput munca la ceea ce urma sa poarte numele de perceptorn. Totul a inceput de la fascinatia lui asupra modului de operare al ochilor unei muste, acolo unde apare reflexul care ii spune acesteia sa zboare in caz de pericol. Perceptronul, care a rezultat in urma acestor cercetari, a fost implementat hardware, si a devenit cea mai veche retea neurala care se mai foloseste in prezent. Un percepron cu un singur strat s-a dovedit a fi suficient pentru clasificarea unui set de intrari in doua clase distincte. Perceptronul calculeaza o suma a intrarilor, extrage un prag si trimite una sau doua valori posibile catre iesire. Din pacate capacitatile perceptronului sunt totusi limitate, dupa cum reiese foarte clar din cartea „Perceptroni” scrisa de Marvin Minsky si Seymour Papert in anu 1969.
In 1959 Berbard Widrow si Marcian Hoff de la Stanford au realizat doua modele numite „Adaline”, si „Madaline”, care foloseau elemente liniare adaptive multiple. Cel de-al doilea model, „Madaline” a fost prima retea neurala folosita pentru rezolvarea unei probleme adevarate din lumea reala, construirea unui filtru adaptiv care sa elimine ecoul din liniile telefonice.
Din pacate aceste succese initiale, au dus la o exagerare a potentialului retelelor neurale, lucrarile academice pe aceasta tema saturand prcatic literatura vremii, si o data cu primele promisiuni nerespectate au aparut inevitabil primele dezamagiri. Combinate cu o frica indusa de literatura SF care descria posibilele influente pe care masinile intelogente le vor avea asupra oamenilor, acestea au dus la aparitia primelor voci care sa conteste noile teorii. Principalele lucrai care au accentuat aceste critici au fost cele ale lui Isac Asimov care descriau decaderea morala a societatii in momentul in care masinile vor fi capabile sa inlociasca omul in toarte sarcinile acestuia, dar si perspectivele mult mai sinistre asupra viitorului date de calculatorul HAL din filmul „2001: O odisee spatiala” regizat de Stanley Kubrick.
Aceste temeri au facut ca o serie de personalitati respectate ale vremii sa critice cercetarile in domeniul retelelor neurale, rezultatul fiind o injumatatire a fondurilor alocate acestui domeniu in Statele Unite, acolo unde practic s-a nascut acesta, si unde se faceau si cele mai mari progrese. Aceasta recesiune a durat pana in anul 1982 cand o serie de evenimente au dus la renasterea interesului pentru sistemele inteligente. John Hopfield de la Caltech prezinta o lucrare in fata Academiei Nationale de Stiinte in care exprima necesitatea crearii unor dispozitive utile, si nu doar incercarea reproducerii functionarii creierului uman. Folosind o analiza matematica concisa el a demonstrat cat de multe pot realiza retelele neurale in folosul omenirii.
In acelasi timp, in cadrul unei conferinte americano-japoneze organizata la Kyoto, Japonia si-a anuntat intrarea in cea de-a cincea etapa de cercetare in domeniu iar publicatiile americane au preluat aceasta stire, generand temerile ca Statele Unite ar putea pierde teren in fata competitorilor. Imediat fondurile au inceput sa curga din nou.
In anul 1985 Institutul American de Fizica a inaugurat intalnirea anuala „Retele Neurale pentru Calculatoare”, iar in 1987, la conferinta internationala a institutului de inginerie electrica si electronica (IEEE), avand ca tema retelele neurale au participat peste 1800 de invitati.
Astazi discutiile privitoare la retele neurale apar pretutindeni. Promisiunile par deosebit de optimiste, natura insasi fiind o dovada a faptului ca acest mod de gandire functioneaza. Totusi cheia acestei tehnologii o reprezinta puterea de calcul. Cele mai multe retele neurale realizate in prezent sunt doar o dovada ca principiul functioneaza, dar datorita limitarilor hardware, antrenarea acestora dureaza de multe ori mai mult decat poate fi acceptat. Pentru a scoate aceste prototipuri din laboratoarele de cercetare, este nevoie de realizarea unor cipuri speciale, companiile specializate efectuinad cercetari pentru realizarea unor modele digitale, analogice sau optice. Viitorul pare a fi al cipurilor optice, totusi vor trebui sa mai treaca destui ani pana cand acestea sa-si poata face intrarea in aplicatiile comerciale.
6. Componente si mod de functionare
Retelele neurale artificiale reprezinta o clasa mai larga de arhitecturi de procesare paralela utile in diferite aplicatii complexe. Aceste arhitecturi nu trebuie confundate cu procesarea paralela uzuala care aplica doar unitati de procesare secventiale unor topologi de calcul clasice. In schimb retelele neurale sunt complet diferite de arhitectura clasica Von Nuemann, ideea de baza fiind imitarea modului de functionare al creierului uman.
Dupa cum a fost mentionat mai sus, retelele neurale artificiale sunt bazate putin pe biologie, cercetarile efectuate pana in prezent asupra creierului dezvaluind doar o mica parte a misterului functionarii neuronilor si al inteligentei in general. Cercetatorii lucreaza atat in domeniul biologic cat si in cel ingineresc pentru a descifra mecanismele de baza ale modului in care omul invata si reactiioneaza la experinetele zilnice. Imbunatatirea cunostintelor despre procesele neurale ajuta la crearea unor retele tot mai performante si mai succinte. Kunihiko Fukushima, un cercetator japonez, descrie pasii de realizare a unui model neural: „Incercam sa urmarim evidentele psihologice cu cea mai mare incredere. Pentru partile inca nu foarte clare totusi, construim o ipoteza si formam un model care o urmareste. Apoi analizam si simulam comportarea acelui model si o comparam cu cea a creierului. Daca gasim diferente de comportament schimbam ipoteza initiala si modificam modelul. Repetam aceasta procedura pana cand modelul se comporta la fel ca si creierul.” Acest algoritm obisnuit a dus la crearea a sute de topologii de retele.
Calculul neural se refera totusi la masini si nu la creiere. Este procesul prin care se incearca construirea de sisteme care sa urmeze modelele de succes biologice create de natura pentru rezolvarea unor probleme reale, dar nu sa le reproduca pe acestea in totalitate. Aceasta legatura cu biologia este motivul pentru care s-a format o tendinta arhitecturala comuna referitoare la retelele neurale artificiale de astazi. Figura de mai sus reprezinta modelul unui neuron artificial, sau element de procesare folosit intr-o mare varietate de retele neurale.
Figura este adaptata din modelul de simulare al firmei NeuralWare folosit la simulatorul NeuralWorks Profession II/Plus. NeuralWare comercializeaza un model de retea neurala si un pachet software de proiectare. Modelul elementului de procesare al acestora arata ca retelele folosite pentru predictie pot fi foarte similare cu cele folosite pentri clasificare, si in general cu orice tip de retele, toate elementele de procesare avand elemente comune.
6.1. Componente
Componenta 1: Factorii de ponderare.
Un neuron primeste de obicei mai multe intrari simultan. Fiecare dintre acestea are o anumita pondere care ii da impactul necesar asupra functiei de insumare. Aceste ponderi realizeaza aceleasi functii ca si rezistenta legaturilor sinaptice ale neuronilor naturali. In ambele cazuri unele intrari sunt mai importante decat altele astfel incat au un efect mai mare asupra elementului de procesare si a combinatiei care da raspounsul final.
Ponderile sunt niste coeficienti adaptabili ai retelei care se modifica in functie de regulile specifice de antrenare la aplicarea unor seturi de date de intrare.
Componenta 2: Functia de insumare
Primul pas al operatiei elementului de procesare este calcularea sumei tuturor intrarilor ponderate. Matematic, intarrile si ponderile corespunzatoare pot fi reprezentate sub forma de vectori: (i1, i2, i3, …, in) si (w1, w2, w3, …, wn), semnalul total de intrare fiind produsul celor doi vectori. Functia de sumare cea mai simplista inmulteste fiecare componenta a vectorului i cu corespondentul din vectorul w si apoi aduna rezultatele obtinute, rezultand un singur numar.
Geometric, produsul vectorial poate fi considerat o masura a similaritatii dintre cei doi vectori. Daca acestia indica aceeasi directie produsul este maxim, iar daci directile sunt opuse produsul este minim.
Dar functia de sumare poate fi mult mai comlexa decat atat, intrarile si ponderile putand fi combinate in multe alte moduri inainte de a fi transmise catre functia de transfer. Ca o adaugire la sumarea simpla, functia poate selecta minimul, maximul, produsul, sau alti algoritmi de normalizare. Algoritmul specific de combinare a intrarilor este determinat de arhitectura de retea aleasa, si de modelul acesteia.
Unele functii de sumare pot aplica un proces aditional rezultatului inainte de a-l transmite catre functia de trnsfer. Acest proces este deseori numit functie de activare. Scopul folosirii acestei functii este acela de a permite rezultatului insumarii sa varieze in functie de timp. Totusi cele mai multe retele folosesc o functie de activare de tip „unitate” ceea ce este similar cu a nu avea o asemenea functie, la nevoie functia putand fi adaugata intregii retele, nu fiecarui element de procesare in parte.
Componenta 3: Functia de transfer
Rezultatul functiee de insumare este transformat intr-o iesire cuantizata printr-un algoritm cunoscut sub numele de functie de tranmsfer. Daca rezultatul depaseste o valoare de prag elementul de procesare genereaza un semnal.
Functia de transfer este in general neliniara, functiile liniare fiind limitate datorita proportionalitatii cu intrarea si de aceea nu sunt folosite.
Un alt tip de functie de transfer, rampa, reproduce intrarea pe un anumit interval, si actioneaza ca un limitator in afara intervalului.
In figura urmatoare sunt date cateva exemple de functii de transfer:
Inaintea aplicarii functiei de transfer, se adauga de obicei un zgomot aleator uniform distribuit, natura si nivelul acestuia fiiind date de algoritmul de antrenare al retelei respective. Zgomotul este de obicei echivalentul electronic al temperaturii neuronilor biologici. Notiunea este derivata din fenomenul fizic de alterare a capacitatilor mintale ale oamenilor in momentul cresterii sau scaderii temperaturii corpului. Pentru a mima cat mai bine caracteristicile naturale, uni cercetatori folosesc o sursa de zgomot gausian.
Componenta 4: Scalare si limitare
Dupa aplicarea functiei de transfer, rezultatul poate trece printr-un proces aditional de scalare si limitare. Scalarea multiplica doar valoarea cu un factor de timp si adauga o compensare, iar limitarea este mecanismul prin care se asigura faptul ca rezultatul scalat nu depaseste limitele domeniului.
Componenta 5: Iesirea (Competitia)
Fiecare element de procesare poate genera un singur semnal de iesire la un moment dat, pe care il poate transmite catre un numar teoretic nelimitat de alti neuroni. In mod normal iesirea este direct proportionala cu rezultatul functiei de transfer, dar exista unele retele care implementeaza un mecanism de competitie intre neuronii vecini. Prin competritie un neuron cu un nivel ridicat al semnalului de iesire (cu putere mare) poate inhiba iesirile neuronilor vecini. Competitia poate aparea la unul sau ambele nivele de functionare. In functionare normala competitia va determina neuronul care va fi activ , deci va transmite iesirea, iar in cazul invatarii elementul de procesare care va participa la procesul de antrenare.
Componenta 6: Functia de eroare si valoarea de reactie
La majoritatea retelelor antrenate, diferenta dintre iesirea curenta si cea dorita se calculeaza si se transforma prin functia de eroare intr-o arhitectura particulara de retea. Cea mai simpla arhitectura foloseste aceasta eroare direct, iar altele, mai complexe, aplica operatori de extragere de radacini, etc. pentru a indeplni scopuri particulare. Eroarea unui neuron este apoi transmisa catre functiile de adaptare ale altor elemente de procesare.
Compponenta 7: Functia de adaptare
Aceasta este componenta care modofica ponderile intrarilor fiecarui element de procesare in functie de algoritmul de antrenare folosit, pana cand eroarea de iesire va avea o valoare acceptabila.
6.2. Legi de antrenare
Exista multe legi de antrenare folosite in mod curebt. Majoritatea sunt variatii ale primei, si celei mai cunoscute legi a lui Hebb. Cercetarile asupra noilor functii de antrenare continua, si ideile noi apar frecvent in publicatii. Exista cercetatori care au ca principal obiectiv modelarea gandirii biologice. Altii experimenteaza adaptari ale perceptiilor propri dspre gandirea naturala. In orice caz, gradul de intelegere al acestor procese este inca foarte limitat. Invatarea este cu mult mai complexa decat simplificarile reprezentate de legile descrise mai jos:
Regula lui Hebb: Prima, si fara dubii, cea mai cunoscuta regula a fost introdusa de Donald Hebb in anul 1949 in cartea „Organizarea comportamentelor”. Enuntul este urmatorul: „Daca un neuron primeste o intrare de la alt neuron, si daca ambii sunt activi (matematic au acelasi semn), legatura dintre ei trebuie starnsa.”
Regula Hopfield: Este similara cu regula lui Hebb, cu mentiunea ca specifica valoarea cu care se va creste sau scade o pondere. „Daca intrarea si iesirea sunt ambele active, sau ambele inactive, creste ponderea legaturii cu rata de invatare, in caz contrar scade ponderea cu aceeasi rata.”
Regula Delta: Este o noua variatie a regulii lui Hebb, fiind una dintre cele mai folosite. Se bazeaza pe simpla idee a modificarii continue a ponderiilor pentru a reduce diferenta (delta) dintre iesirea dorita si cea obtinuta la un element de procesare. Aceasta regula modifica ponderile in directia minimizarii erorii patratice medii a retelei. Regula mai poate fi referita si ca regula Widrow-Hoff, sau regula LMS(Least Mean Square).
Regula functioneaza in sensul transformarii erorii de catre derivata functiei de transfer, si apoi folosirii acesteia in stratul anterior pentru ajustarea ponderilor. Cu alte cuvinte, eroarea este propagata inapoi catre straturile anterioare, procesul continuand pana cand se ajunge la primul nivel. Retelele de tip „FeedForward Back-propagation” sunt derivate din aceasta metoda de tratare a erorii.
La utilizarea regulii Delta este important ca datele de intrare sa fie bine amestecate. Un set de antrenare ordonat poate duce la o imposibilitate a retelei de a converge catre gradul de acuratete dorit. Daca acest lucru se intampla reteaua este incapabila sa rezolve problema.
Regula gradientului descrescator: Este similara cu regula Delta, prin folosirea derivatei functiei de transfer, dar ponderea nu se mai modifica cu factorul de antrenare, ci cu o constanta legata de aceasta. Aceasta regula se foloseste chiar daca reteaua converge foarte incet catre punctul de stabilitate.
S-a demonstrat ca rate de invatare diferite pentru straturi diferite ale retelei ajuta la cresterea vitezei de convergenta. Pentru nivelele mai apropiate de iesire s-au alocat rate mai mici decat pentru cele de la intrare. Acest lucru este important mai ales pentru cazurile in care datele de intrare nu sunt derivate dintr-un model fundamental de baza.
Legea lui Kohonen: Procedura elaborata de Teuvo Kohonen a fost inspirata de sistemele biologice. In acest caz, elementele de procesare se intrec pentru a avea oportunitatea de a invata, deci de a-si ajusta ponderile. Elementul cu iesirea cea mai mare are capacitatea de a-si inhiba competitorii si deci numai succesorii acestuia isi pot ajusta ponderile.
Marimea vecinatatii poate varia in functie de perioada de invatare. Ideea uzuala folosita este de a incepe cu o vecinatate mai larga, si de a o restrange pe parcurs. Deoarece elementul castigator se defineste ca cel mai apropiat de structura intrarii, retelele Kohonen modeleaza distributia intrarilor. Acest lucru este util pentru modelele statistice sau topologice de date, si este de multe ori referit ca harta autoadaptiva.
7. Clasificare
Datorita faptului ca toate retelele neurale artificiale se bazeaza pe conceptele de neuroni, legaturi si functii de transfer, exista o similitudine intre diferitele structuri si arhitecturi de retele. Majoritatea variatilor deriva din varietatea legilor de antrenare, si modificarile aduse de acestea asupra topologiei retelei. In continuare sunt prezentate cele mai folosite tipuri de retele neurale grupate pe categorii de aplicatii.
Aplicatiile pentru care se folosesc retele neurale se pot clasifica in urmatoarele categorii:
predictie
clasificare
asociere de date
conceptualizare
filtrare
Tabelul prezinta principalele diferente dintre categoriile cele mai raspandite de retele, si apartenenta acestora la cele cinci clase de aplicatii. Unele retele care au fost grupate aici se folosesc pentru a rezolva probleme din mai multe domenii, un exemplu fiind retelele de tip inainte, cu propagare inversa a erorii, care se folosesc aproape orice tip de problema, si sunt in concluzie cele mai populare.
In continuare sunt descrise in detaliu cele cinci tipuri de retele.
7.1. Retele pentru predictie
Cea mai uzuala aplicabilitate a retelelor neurale este pentru a proiecta ce este cel mai probabil sa se intample in viitor. Exista multe aplicatii la care predictia ajuta la stabilirea prioritatilor (de exemplu, la sectia de urgenta a unui spital, este important sa se cunosaca care dintre pacienti are cel mai repede nevoie de ajutor in functie de sinptomele aparute). In general, orice organizatie trebuie sa-si stabileasca un set de prioritati care sa gfuverneze alocarea resurselor. Aceste planificari ale viitorului au dus la crearea retelelor neurale pentru predictie.
a) Feedforward, Back-Propagation
Arhitectura a fost construita la inceputul anilor ’70 din mai multe surse independente (Werbor, Parker, Rumelhart, Hinton si Williams). Aceasta co-dezvoltare independenta a fost rezultatul aparitiei unui numar mare de articole si discutii in cadrul conferintelor, care au stimulat intreaga industrie. In prezent aceasta arhitectura este cea mai populara, efectiva si usor de construit, fiind folosita mai mult decat toate celelalte topologii la un loc.
Modelul tippic este format dintr-un strat de intrare, unul de iesire si cel putin unul ascuns. Teoretic numarul nivelelor ascunse este nelimitat, dar in practica se folsoesc doar unul sau doua. S-a demonstrt ca un numar minim de patru nivele (trei ascunse si unul de iesire) sunt suficiente pentru a rezolva probleme de orice complexitate. Fiecare nivel este conectat complet la nivelul urmator, dupa cum se poate vedea si din schema urmatoare:
Propagarea inversa este folosita numai in procesul de antrenare si nu mai are utilitate in perioiada de functionare normala.
Numărul nivelelor si numarul de elemente de procesare pe nivel sunt decizii importante care trebuie luate. Nu exista o lege stricta dupa care se iau aceste decizii, existand doar cateva regulti generale formulate de-a lungul timpului si urmate de toti cercetatorii care aplica acest tip de arhitectura pentru rezolvarea problemelor lor.
Regula 1: O data cu cresterea complexiattii relatiei dintre datele de intrare si iesiera dorita trebuie sa creasca si numarul de elemente de procesare din nivelele ascunse.
Regula 2: Daca procesul care se modeleaza este separabil in subprocese, atunci sunt necesare straturi ascunse suplimentare. Daca procesul nu este separabil, nivelele suplimentare ar favoriza memorarea si nu ar fi o solutie pentru problema data.
Regula 3: Volumul de date de antrenare disponibile impune o limita superioara pentru numarul de elemente ale nivelului ascuns. Pentru a calcula aceasta limita, se imparte numarul de perechi intrare/iesire existente la numarul de elemente de procesare de intrare si iesire, apoi rezultatul se imparte la un factor de scalare de obicei cuprins intre 5 si 10. Factori de scalare mai mari se folosesc pentru date afectate de zgomote, putandu-se ajunge pana la valori de 20 sau chiar 50 pentru datele foartre afectate, iar pentru datele curate se poate cobora pana la 2 sau 3. Este important ca nivelele ascunse sa aiba putine elemente de procesare pentru a se evita procesul de memorizaree care ar ducea la inutilitatea retelei pentru seturi noi de date.
Dupa ce aceste reguli au fost folosite pentru crearea retelei, incepe procesul de invatare. Aceesta folsoeste de obicei variante ale regulii Delta, care incep prin calcularea diferentei dintre iesirea dorita si cea obtinuta dupa fiecare trecere, ponderile modificandu-se apoi proportional cu aceasta diferenta. Partea complexa a mecanismului de invatare o constituie determinarea elementului care a contribuit cel mai mult la eroare si cum trebuie schimbate ponderile acelui element pentru a se corecta eroarea. Un nod inactiv nu contribuie la eroare deci ponderile acestuia nu vor trebui schimbate.
Pentru a rezolva aceasta problema, seturile de intrare de antrenare sunt aplicate la nivelul de intrare al retelei iar iesirile obtinute la iesire sunt verificate. In timpul procesului de invatare se ransmite un flux de date de-a lungul retelei si iesirea fiecarui element este calculata strat cu strat. Diferenta dintre iesirile stratului de intrefata si iesirea dorita este apoi propagata inapoi in retea de obicei ajustata cu derivata functiei de transfer, iar ponderile sunt corectate folosind regula Delta. Acest proces se repeta pana cand se ajunge la stratul de intrare.
Exista multe variatii ale regulilor de invatare pentru retele cu reactie, diferite functii de eroare, functii de transfer sau chiar metode modificate de derivare ale acestora putannd fi folosite. Conceptul de „eroare de moment” a fost introdus pentru a permite o invatare mai prompta o data cu minmizarea comportarii instabile. Aici, functia de eroare, sau ecuatia ponderala delta, este modificata astfel incat o parte a ponderii delta anterioare este propagata catre ponderea curenta. In termeni ingineresti, aceasta metoda reprezinta un filtru trece jos aplicat ponderii delta care opreste comportamentul oscilatoriu. Acest lucru permite posibilitatea folosirii unui coeficient de invatare mai redus, care duce la o invatare mai rapida.
Alta tehnica cu efect asupra vitezei de convergenta modifica ponderile doar dupa ce se aplica mai multe perechi de intrari, metoda fiind referita ca propagare inversa cumulativa, deoarece ponderile delta sunt cumulate pana cand se transmite un set intreg de perechi intrare-iesire. Numarul de perechi transmise in timpul unei acumulari poarta numele de „epoca”. O epoca poate coresppunde intregului set de perechi de antrenare sau unui subset.
Exista limitari ale arhitecturii feedforward back-propagation. Aceasta necesita o antrenare riguroasa cu multe perechi intrare-iesire. In plus, prcedurile interne de mapare nu sunt foarte bine intelese, si nu exista o garantie a faptului ca sistemul va converge catre o solutie acceptabila. La diferite momente de timp procesul de invatare poate ramane blocat intr-un minim local, limitand gasirea solutiei optime. Acest lucru apare cand sistemul gaseste o eroare mai mica decat posibilitatiiile inconjuratoare, dar totusi nu ajunge la eroarea minima posibila. Multe aplicatii de invatare adauga un termen pentru a „zgudui” ponderile catre barierele de superficialitate si pentru a gasi minimul actual in schimbul unei erori temporale.
Aplicatiile tipice care folosesc aceste retele sunt sintetizarea vorbirii, miscarea bratelor robotilor mobili, evaluarea imprumuturilor bancare, procesarea imaginlor, reprezentarea cunostintelor, prognoze si predictii, urmarirea tintelor etc. Anual in jurnalele de specialitate sunt prezentate noi solutii back-propagation.
b) Delta Bar Delta
Utilizeaza aceeasi arhitectuta ca si reteaua back-propagation. Diferenta consta in algoritmul unic de invatare. Delta bar Delta a fost dezvoltata de catre Robert Jacobs pentru a creste rata de invatare a clasicelor feedforward back-propagation.
Dupa cum este subliniat mai sus, procedura de propagare inversa se bazeaza pe abordarea in pasi descrescatori care minimizeaza eroarea de predictie in timpul procesului prin care se modifica ponderile fiecarui neuron. Regulile standard de invatare sunt aplicate nivel cu nivel iar termenul de moment este de obicei asignat global. Unele variante de propagare inversa permit scaderea ratelor de adaptare (invatare) pe masura ce cantitati largi de seturi de intrae strabat reteaua. Desi medoda are succes in rezolvarea unor probleme, rata de convergenta este totusi prea scazuta pentru aplicarea cu succes in practica.
Metoda delta bar delta foloseste o modalitate de invatare in care fiecare pondere are propriul coeficient de autoadaptare. De asemenea nu se foloseste factorul de moment. Celelalte proceduri sunt identice cu arhitectura back-propagation. Delta bar delta eset o abordare euristica pentru antrenarea retelelor neurale. Aceasta inseamna ca valorile de eroare anterioare pot fi folosite pentru a calcula erorile viitoare. Counoscand erorile probabile se permite sistemului sa ia decizii inteligente in ajustarea ponderilor. Totusi procedura este complicata datorita faptului ca evidenta empirica sugereaza ca fiecare ajustare poate avea efecte complet diferite asupra erorii globale, Jacobs spunand ca regulile de propagare inversa ar trebui sa tina cont de efectele acestor variatii asupra erorii globale. Cu alte cuvinte fiecare pondere a unei retele ar trebui sa aiba propria rata de invatare. Ideea este ca marimea pasului corespunzator pentru o pondere poate sa nu fie potrivit pentru toate celelalte ponderi ale nivelului. In continuare, aceste rate ar trebui sa poata varia in timp, introducandu-se astfel mai multe grade de libertate care sa reduca timpul de convergenta.
Regulile care se aplica direct acestui algoritm sunt directe si usor de implementat. Fiecare pondere are propria rata de invatare. Aceste rate variaza in functie de eroarea curenta. Cand o pondere se modifica, daca eroarea locala are acelasi semn pentru mai multi pasi consecutivi rata de invatare pentru aceasta legatura creste, liniar pentru a preveni o crestere prea rapida. Cand eroarea isi schimba semnul frecvent rata este redusa geometric, asigurandu-se pozitivitatea permananta a acesteia. Descresterea poate fi mai rapida in zone in care eroarea se modifica mult.
Permitandu-se rate de adaptare diferite pentru fiecare pondere a retelei, nu mai este necesara o cautare in directia gradientului negativ. In schimb, ponderile sunt modificate pe baza derivatelor partiale ale erorii in functie de pondere insasi. Metoda se bazeaza de asemenea pe estimarea curbei suprafetei erorii in vecinatatea punctului valorii ponderii curente. In plus, schimbarea ponderii satisface constrangerile locale adica necesita informatii numai de la elementul de procesare cu care este conectata.
c) Delta bar Delta extins
Ali Minai si Ron Williams au dezvoltat algoritmul delta bar delta extins ca o evolutie naturala a muncii lui Jacob. Ei au modificat algoritmul initial prin aplicarea unei decade exponentiale cresterii ratei de invatare, au readaugat componenta de moment si au limitat rata de invatare si coeficientul de moment. Dupa cum s-a prezentat in sectiunea despre propagare inversa, momentul este un factor folosit pentru netezirea ratei de invatare. Este un termen adaugat schimbarii standard a ponderii proportional cu schimbarea anterioara. In acest fel, tendintele constructive sunt intarite iar oscilatiile sunt eliminate.
Rata de invatare si rata de moment ale fiecarei ponderi au constante separate de control al cresterii si descresterii. Inca o data, semnul erorii curente este folosit pentru a indica daca o crestere sau descrestere este potrivita. Ajustarea pentru scadere este identica ca forma cu cea de la delta bar delta, totusi cresterea ratei de invatare si a celei de moment sunt modificate pentru a deveni functii exponentiale descrescatoare de magnitudinea componentelor gradientilor ponderilor. Cresteri mai mari vor fi aplicate pe suprafete cu pante sau curbe mici, in detrimentul suprafetelor cu curbura mare, aceasta fiind o solutie partiala a problemei saltului din cazul delta bar delta.
Pentru a face un nou pas inainte in prevenirea salturilor necontrolate si oscilatiilor, sunt plasate limitari ale ratelor de invatare si de moment individuale. Si in final algoritmul implementeaza o functie de memorie cu recuperare. Cand aceasta se folsoeste dupa fiecare epoca este evaluata eroarea acumulata. Daca eroarea este mai mica decat eroarea minima anterioara, ponderile sunt salvate in memorie ca optime temporare. Un parametru de toleranta controleaza faza de recuperare. In mod specific, daca eroarea curenta depaseste eroarea anterioara minima, modificata cu parametrul de toleranta, atunci toate valorile ponderilor revin stohastic la setul de valori optime memorate. In continuare ratele de moment si invatare sunt scazute pentru a incepe procesul de recuperare.
d) Cautare aleatoare directa
Arhitecturile anterioare erau toate bazate pe reguli de invatare sau modele bazate pe calcule matematice. Acestea folosesc o tehnica de gradient descrescator pentru a ajusta fiecare pondere. Arhitectura cautarii aleatoare directe foloseste o structura standard feed-forward dar care nu este bazata pe propagare inversa. In schimb, ponderile se ajusteaza aleator. Pentru a impune o ordine acestui proces se adauga o componenta de directie pasului aleator care asigura faptul ca ponderile tind catre o directie de cautare de succes. Toaste elementele de procesare sunt influentate individual.
Metoda cautarii aleatore are cateva caracteristici importante. La baza este rapida si usor de folosit daca problema este bine inteleasa si relativ redusa ca dimeniuni. Motivul pentru care problema trebuie sa fie bine inteleasa este ca cele mai bune rezultate apar atunci cand prezicerile initiale sunt cat mai aproape de ponderile optime. Rapiditatea este data de faptul ca pasii algoritmului sunt mult mai simpli decat tehnicile bazate pe calcule, si nu se calculeaza nici o eroare pentru elementele de procesare individuale, fiind calculata doar eroarea de iesire globala. Aceasta metoda de invatare este usor de folosit pentru ca foloseste doar doi parametri asociati. Dar solutia trebuie sa fie o retea redusa, deoarece in cazul in care aceasta se mareste procesul de antrenare devine lung si greoi.
Pentru a facilita pastrarea ponderilor in interiorul regiunilor in care algoritmul functioneaza cel mai bine este necesara o limitare superioara a magnitudinii acestora. Totusi, prin mentinerea acesteia la un nivel ridicat reteaua este capabila sa caute necunoscuta (adevaratul optim global). Al doilea parametru cheie al acestei reguli implica variatia initiala a distributiei aleatoare a ponderilor. In majoritatea aplicatiilor comerciale exista o valoare recomandata de producator pentru acest parametru initial de variatie. Totusi, setarea acestui numar nu este foarte important, functia de autoajustare dovedindu-se robusta pentru o gama larga de variatii initiale.
Se definesc patru componente de baza pentru o retea de cautare aleatoare. Acestea sunt pasul aleator, pasul de intoarcere, o componenta directa si o variatie autoajustabila.
Pasul aleator: O valoare aleatoare este adaugata fiecarei ponderi. Apoi intregul set de date de antrenare este transmis in retea producand o eroare de predictie. Daca aceasta este mai mica decat eroarea precedenta optima ponderile curente (care includ si pasul aleator) devin noul set de ponderi optime. Eroarea de predictie curenta este apoi salvata ca eroare optima.
Pasul invers: Daca rezultatul obtinut este mai slab decat optimul temporar, atunci valoarea aleatoare este scazuta din valorile ponderilor initiale, obtinandu-se un set de ponderi in directie opusa pasului aleator anterior. Daca eroarea totala de predictie este mai mica decat cea optima ponderile curente sunt salvate ca optime temporare. De asemenea eroarea curenta ese salvata ca eroare optima de predictie. Daca atat pasul direct cat si cel invers esueaza un nou set de valori aleatoare sunt adaugate la setul optim si procesul se reia de la inceput.
Componenta directa: Pentru a creste convergenta se creaza un set de componente directe. Acestea reflecta istoria de succese si esecuri pentru pasii aleatori anteriori. Componentele directe, care sunt initializate cu zero, sunt adaugate la componentele aleatoare la fiecare pas al procedurii. Componentele directe ofera cautarii un element de tip „consens”. Sa demosntrat ca adaugarea acestor componente duce la o crestere substantiala a performantelor de convergenta ale retelei.
Varianta autoajustabila: Un parametru initial este specificat pentru a controla marimea (lungimea) initiala a pasilor aleatori adaugati la ponderi. Un mecanism adaptiv schimba parametri de varianta bazandu-se pe rata curenta de succes sau esec relativ. Regula de invatare presupune ca marimea curenta a pasilor pentru ponderi are directia corecta daca se inregistreaza mai multe succese consecutive, si apoi se incearca folosirea unor pasi mai mari. Contrar, daca se detecteaza mai multe esecuri consecutive se micsoreaza varianta pentru a reduce marimea pasului.
Pentru retele de marime mica si medie, o cautare aleatoare directa produce un rezultat satisfacator intr-un timp rezonabil. Procesul de antrenare se desfasoara automat, interventia utilizatorului fiind extrem de redusa. Numarul de ponderi impune insa o limitare a complexitatii problemelor pe care le poate rezolva acest algoritm. Daca o retea are mai mult de 200 de legaturi, o cautare aleatoare directa poate necesita un timp de antrenare relativ lung, iar in final solutia oferita poate fi departe de cea optima.
e) Retele de ordin superior, sau retele legatura functionala
Oricare din cele doua nume se poate atribuie retelelor care extind arhitectura standard feedforward back-propagation pentru a include noduri suplimentare la nivelul de intrare oferind retelei o mai buna intelegere a intrari. In esenta, intrarile sunt transformate intr-un mod matematic bine inteles, astfel incat reteaua nu mai trebuie sa invete functiile matematice de baza. Aceste functii cresc nivelul de intelegere al problemei date, transformand intrarile prin functii de nivel inalt cum ar fi patrate, cuburi sau sinusoide.
Aceasta tehnica a fost adaugata pentru a imbunatati dramatic ratele de invatare ale unor aplicatii. Un avantaj in plus este acela ca aceste functii de nivel inalt pot fi aplicate si altor derivatii (delta bar delta, extended delta bar delta, si in general oricarei extensii feedfroward back-propagation).
Exista doua moduri de baza prin care se pot adauga noduri de intarre auxiliare. Primul, reprezinta incrucisarile termenilor de intare pot fi adaugate modelului mai poate fi numit „produs de iesire” sau „tensor”, unde fiecare componenta a modelului de intare multiplica intregul model al vectorului de intrare. Un mod rezonabil de a realiza acest lucru este prin adaugarea tuturor termenilor de intercatiune printre valorile de intarre. De exemplu, pentru o retea cu propagare inversa cu trei intrari (A, B si C), incrucisarile ar include AA, BB, CC, AC si BC. Acest exemplu adauga termeni de ordinul doi structurii de intrare a retelei. De asemenea ar putea fi adaugati si termeni de ordinul trei cum ar fi ABC.
Cea de-a doua metoda, cea de adaugare de intrari aditionale este extinderea functionala a intrarilor de baza. Deci reteaua de mai sus cu intrarile A, B si C ar putea fi transformata intr-o retea de ordin superior cu intrarile A, B, C, SIN(A), COS(B), LOG(C), MAX(A,B,C), etc. In acest model, variabilele de intare sunt actionate individual de catre functiile corespunzatoare. Pot fi folosite multe astfel de functii. Efectul global este de a oferi retelei o reprezentare extinsa a intrari. Este posibila de asemenea si o combinare a modelelor tensor si expansiune functioinala.
Nu se adauga informatii noi, dar reprezentarea intrarilor este extinsa, reprezentari de nivel superior ale datelor de intarre putand face reteaua mai usor de antrenat. Asocierile sau activarile functionale devin disponibile direct modelului. In unele cazuri un nivel ascuns nu mai este necesar. Totusi exista limitari ale modelului. Trebuie folosite mult mai multe noduri pentru a procesa transformarile intrarilor originale. Cu sisteme de nivel superior, problema este agravata. Totusi, datorita timpilor de procesare finiti este important ca intrarile sa nu fie extinse mai mult decat este necesar pentru a obtine solutia adecvata.
Retelele cu legaturi functionale au fost dezvcoltate de catre Yoh-Han Pao si sunt descrise in cartea „Adaptive Pattern Recognition and Neural Networks”. Pao face o distinctie intre adevarata adaugare a termenilor de ordin superior in sensul ca o parte dintre acesti termeni reprezinta activari asociate, si extinderile functionale care cresc dimensiunea spatiului reprezentat fara a adauga activari asociate. Chiar daca majoritatea producatorilor recunosc aceste diferente, cercetatorii trateaza in general cele doua aspecte in acelasi fel. Pao a obtinut o brevetare pentru reteaua legatura functionala, deci comercializarea acesteia necesita licentiere.
f) Retea harta autoasociativa cu propagare inversa
O retea hibrida foloseste o harta autoorganizabila pentru a face o separare conceptuala a datelor inainte de folosirea acestora la propagarea inversa. Aceasta harta ajuta la vizualizarea topologiilor si a structurilor ierarhice a spatiilor de ordin superior inainte ca acestea sa fie introduse in reteaua feedforward back-propagation. Modificarile aduse intrarilor sunt similare cu a avea o structura de intare de tip legatura functionala automata. Aceasta harta autoorganizabila antreneaza stratul de intrare intr-un mod nesupravegheat, restul retelei trecand insa prin procesul normal supravegheat de antrenare.
7.2. Retele pentru clasificare
Sectiunea precedenta descria retelele care incearca sa faca previziuni asupra viitorului. Dar intelegerea tendintelor si a efectelor viitoare ale acestora este doar una din multele aplicatii in care se poate implica aceasta stiinta. Cea de-a doua clasa de aplicatii este clasificarea. O retea capabila sa clasifice ar putea fi folosita de exemplu in industria medicala la procesarea atat a rezultatelor de laborator cat si a simptomelor inregistrate de doctori pentru a determina cea mai probabila boala a unui pacient.
a) Cuantizarea vectorului de antrenare
Aceasta topologie de retea a fost sugerata la inceput de catre Tuevo Kohonen la mijlocul anilor 80, cu mult timp in urma cercetarile lui initiale asupra hartilor autoorganizabile. Atat acest tip de retea, cat si hartile autoorganizabile se bazeaza pe modelul Kohonen de antrenare cu competitie, care este capabil sa sorteze intrarile in subcategorii de obiecte similare. Cuantizarea vectorului de antrenare este o retea neurala artificiala folosita atat pentru clasificare cat si pentru probleme de segmentare de imagini.
Topologic, reteaua contine un nivel de intrare, un singur nivel ascuns Kohonen si un nivel de iesire. Un exemplu este dat in figura urmatoare:
Nivelul de iesire are tot atatea elemente de procesare cate clase distincte de clasificare exista. Nivelul Kohonen are un numar de elemente de procesare grupate pentru fiecare dintre clase, numarul de elemente pentru o clasa depinzand de complexitatea relatiei intrare-iesire. Uzual, toate clasele vor avea alocat acelasi numar de elemente de procesare. Nivelul Kohonen este cel care invata si realizeaza clasificarile relationale cu ajutorul unui set de date de antrenare. Aceasta retea foloseste reguli de antrenare supravegheate. Totusi, aceste reguli difera semnificativ de cele pentru propagare inversa. Pentru a optimiza functiile de invatare si reamintire, nivelul de intare necesita un singur element de procesare pentru fiecare parametru al intrarii, dar se pot folosi de asemenea structuri de intrare de nivel superior.
Cuantizarea vectoriala clasifica datele de intrare in grupuri deterministe. Teoretic aceasta mapeaza un spatiu n-dimensional intr-un spatiu m-dimensional, adica ia n intrari si produce m iesiri. Reteaua poate fi antrenata sa clasifice intrarile conservand topologiile inerente ale setului de antrenare. Hartile topologice de conservare conserva relatiile de vecinatate din setul de antrenare astfel incat intrarile care nu au fost invatate anterior sunt clasificate in functie de cei mai apropiati vecini din setul de antrenare.
In modul de antrtenare aceasta retea foloseste nivelul Kohonen in sensul ca distanta dintre vectorul de antrenare si fiecare element de procesare este calculata si cel mai apropiat este declarat castigator. Exista un singur castigator pentru intregul nivel. Acesta va activa un singur element de procesare din stratul de iesire, anuntand clasa sau categoria din care face parte vectorul de intrare. Daca elementul castigator se afla in interiorul clasei asteptate a vectorului de anrenare acesta intareste vectorul de antrenare, iar daca este in afara clasei, ponderile de la intrarile elementului de procesare castigastor sunt scoase din vectorul de antrenare, operatie denumita repulsie. In timpul procesului de antrenare elemente de procesare individuale asignate unei clase particulare migreaza catre regiunea asociata cu clasa specifica.
In timpul modului normal de functionare, distamta dintre un vector de intrare si fiecare element de procesare este calculata si din nou cel mai apropiat element este declarat castigator.
Exista unele deficiente ale acestei arhitecturi. Evident pentru probleme de clasificare complexe cu obiecte sau vectori de intarre similare, reteaua necesita un nivel Kohonen de dimensiuni mari, cu multe elemente de procesare pentru fiecare clasa. Acest lucru poate fi evitat insa prin selectarea unor parametri mai semnificativi, sau o reprezentare de nivel mai inalt a intrarilor.
Mecanismul de invatare are unele deficiente care au fost abordate de variante ale modelului. In mod normal aceste variante sunt aplicate in diferite faze ale procesului de invatare. Ele impregneaza un mecanism concis, un algoritm de ajustare a marginilor si o functie de atractie in diferite puncte in timpul antrenarii.
Forma simpla a retelei de cuantizare vectoriala are defectul ca unele elemente de procesare tind sa castige prea des, in timp ce altele practic nu fac nimic. Acest lucru se intampla mai ales in cazul cand elementele de procesare sunt initializate departe de vectorii de antrenare. In acest caz unele elemente se apropie prea repede iar altele raman permanent departe. Pentru a evita aceasta problema se adauga un mecanism prin care un element de procesare care castiga prea des primeste o pedeapsa si este penalizat. De fapt acest mecanism se concretizeaza prin adaugarea unui coeficient de distanta adaugat fiecarui element. Acest coeficient este proportional cu diferenta dintre frecventa de castig a elementului respectiv si frecventa de castig medie pentru toate elementele. O data cu avansul retelei de-a lungul curbei de adaptare acesti coeficienti trebuie sa scada.
Algoritmul de ajustare a marginilor este folosit pentru a rafina raspunsul de fiecare data cand se gaseste o solutie relativ buna. Acest algoritm afecteaza cazurile in care elementul castigator este intr-o clasa eronata iar elementul urmator este in clasa potrivita. O viitoare limitare este aceea ca vectorul de antrenare trebuie sa fie aproape de mijlocul spatiului care imparte cele doua elemente. Elementul castigator va fi scos din vectorul de antrenare iar cel de-al doilea element va fi mutat in locul acestuia. Aceasta procedura uniformizeaza limitele dintre regiuni, acolo unde apar de obicei clasificarile eronate.
De multe ori la inceputul antrenarii este bine sa se opreasca repulsia. Elementul castigator este mutat in vectorul de antrenare doar daca cele doua fac parte din aceeasi clasa. Aceasta optiune este folositoare atunci cand un element de procesare trebuie mutat de-a lungul unei regiuni avand o clasa diferita, pentru a ajunge la regiunea in care este nevoie de el.
b) Reteaua cu parcurgere inversa
Robert Hecht-Nielsen a dezvoltat aceasta retea ca un mijloc de a combina un nivel nesupravegheat Kohonen cu un nivel de iesire antrenabil. Aceasta este o alta topologie de sintetizare a problemelor complexe de clasificare, incercandu-se minmizarea numarului de elemente de procesare si a timpului de antrenare. Modul de operare este similar cu cel folosit la cuantizarea vectoriala prin prezenta nivelului de mijloc Kohonen care actioneaza ca o baza de date adaptiva, gasind cea mai apropiata asemanare cu un stimul de intare si producand maparea echivalenta.
Prima retea de acest tip consta dintr-o mapare bidirectionala intre nivelele de intrare si iesire. In esenta in timp ce datele sunt furnizate stratului de intrare pentru a genera un model pentru stratul de iesire, acesta va accepta in plus un vector de intrare aditional si va genera o iesire clasificata. Reteaua si-a luat numele de la aceasta parcurgere in sens contrar a informatiilor prin structura. Majoritatea dezvoltatorilor folosesc o varianta uni-flow pentru aceast areprezentaree formala a propagarii inverse. Cu alte cuvinte, exista o singura cale de parcurgere de la nivelul de intrare la cel de iesire.
Un exemplu de retea este prezentat in figura urmatoare:
Reteaua cu propagare inversa unidirectionala are trei nivele. Daca intrarile nu sunt deja normalizate inainte de a intra in retea este adaugat de obicei un al patrulea nivel, de normalizare. Nivelurile de baza includ un buffer, un nivel Kohonen autoorganizabil si un nivel de iesire care foloseste regula delta pentru a-si modifica ponderile legaturilor de intrare. Uneori acest nivel este denumit Grossberg Outstar.
Marimea nivelului de intrare depinde de cat de multi parametri separabili definesc problema. Daca sunt prea putini reteaua poate sa nu fie capabila sa rezolve problema, daca sunt prea multi timpul de procesare poate fi prea lung.
Pentru ca reteaua sa opereze corespunzator vectorul de intrare trebuie normalizat. Acest lucru se poate realiza folosind o preprocesare a datelor, inainte ca acestea sa fie introduse in retea, sau prin introducerea unui nivel suplimentar de normalizare intre nivelul de intrare si cel Kohonen. Nivelul de normalizare necesita un element de procesare pentru fiecare intrare, plus inca unul suplimentar pentru un element oscilant. Acest strat modifica setul de intrare inainte de a ajunge la stratul Kohonen pentru a se asigura faptul ca toate seturile de intrare au acelasi total.
Normalizarea intrarilor este necesara pentru a se asigura faptul ca nivelul Kohonen identifica clasa reala pentru problema. Fara noremalizare stratul vectorilor de intrare ar influentea multe din elementele de procesare Kohonen astfel incat seturile de intrare cu caractreistici mai slabe nu pot fi clasificate corect. Datorita naturii competitive ă stratului Kohonen vectorii de intrrare cu valori mai mari ii inving pe cei mai slabi. Propagarea inversa folosește un model Kohonen standardizat care autoorganizeaza seturile de intrare în zone de clasificare. El urmareste legea clasica de invatare Kohonen descrisa mai sus. Acest strat actioneaza ca un clasificator in sensul apartenentei la cel mai apropiat vecin astfel ca elementele de procesare ale stratului competitiv isi ajusteaza în mod autonom legaturile pentru ă multiplica spațiul vectorului de intrare intr-o corespondenta aproximativa cu frecventa de aparitie ă intrarilor. Este nevoie de un numar de elemente de procesare in nivelul Kohonen cel putin egal cu numarul de clase de clasificare existente la iesire. Nielul Kohonen are de obicei mult mai multe elemente din simplul motiv ca acest lucru va duce la o diferentiere mai exacta ă elementelor asemanatoare.
Stratul de ieșire pentru propagare inversa este alcatuit la baza din elemente de procesare care invata sa produca o ieșire când li alpicata o anumita intrare. Datorita faptului ca stratul Kohonen include competitie, o singura ieșire este oferita pentru un vector dat de intrare, stratul oferind o modalitate de decodare a intrarilor in clase de ieșire semnificative. Se folosește regula Delta pentru propagarea inapoi a eroarii dintre iesirea dorita și cea generata de setul de intrare, dar erorile ajusteaza doar ponderile intrarilor din stratul de ieșire, stratul Kohonen nefiind afectat.
Deoarece o singura ieșire a stratului competitiv Kohonen este activa la un moment dat și toate celelalte sunt inhibate, singurele ponderi ale elementelor din stratul de ieșire ajustate sunt cele conectate direct la elementul castigator al stratului competitiv. În acest fel stratul de ieisire invata sa asocieze un model predefinit pentru fiecare element castigator din stratul competitiv.
Exista o problema care sa apara in cazul acestei arhitecturi. Stratul competitiv Kohonen invata fara o supervizare externa. Din acest mtiv este posibil ca un element de procesare Kohonen sa incerce sa-și asume responsabilitatea pentru doua sau mai multe intrari de antrenament care apartin unor clase diferite. Când acest lucru se intampla iesirea retelei va fi ambigua pentru orice intrare care va activa acest element de procesare. Pentru a evita aceasta problema elementele de procesare din startul Kohonen ar putea fi conditionate sa se asocieze cu o singura clasa de clasificare.
c) Reteaua neurala probabilistica
Retelele neurale probabilistice au fost dezvoltate de către Donald Specht. Arhitectura lui a fost pentru prima data prezentata în lucrarile “Probabilistic Neural Networks for Classification, Mapping or Associative Memory” și “Probabilistic Neural Networks”, aparute în anul 1988, respectiv 1990.
Aceasta retea ofera o solutie generala la probleme de clasificare a modelelor urmarind o abordare numita clasificare Bayesiana. Teoria Bayes aparuta în anii ’50 tine cont de relatriva asemanare dintre evenimente și folosește o informatie priorica pentru a imbunatati predictia.
Intreaga teorie se bazeaza pe teorema lui Bayes prezentata intr-un eseu numit ”O problema in doctrina sanselor” descoperit postum si citit in fata Societatii Regale Britanice in anul 1793.
Teorema defineste relatia dintre probabilitatea de aparitie a unei perechi de evenimente in functie de probabilitatea de aparitie individuala a fiecaruia dintre evenimente astfel:
„Daca se cunosc probabilitatile de aparitie individuale ale celor doua evenimente L si M, si daca se presupune ca evenimentul M a aparut la un moment dat, atunci probabilitatea ca si evenimentil L sa fi aparut este data de formula:
, unde P reprezinta functia de probabilitate, iar L si M sunt cele doua evenimente”.
Acest model de retea folsoeste de asemenea estimatori Parzen pentru a construi funcții de densitate de probabilitate necesare aplicarii teoriei Bayes.
Retelele neurale probabilistice folosesc un set de antrenare supervizat pentru a construi funcții de distributie în interiorul unui nivel modelat. Aceste funcții, în modul de reamintire sunt folosite pentru estima apartenenta unui vector al caracteristicilor de intrare la o anumita clasa de clasificare. Modelele invatate pot fi combinate sau mediate cu o probabilitate priorica numita frecventa relativa a categoriei pentru a determina cea mai apropiata clasa pentru un vector de intare dat. Daca frecventa relativa a acestor categorii este necunoscuta atunci de poate presupune ca toate categoriile sunt egale și determinarea categoriei de apartinatate se determina doar pe baza apropierii vectorului caracteristicilor de intarre de funcția de distributie a unei clase.
Un exemplu de retea probabilistica este reprezentata în figura următoare:
Aceasta retea are trei nivele. Reteaua conține un strat de intrare cu un numar de elemente egal cu numarul parametrilor necesari pentru a descrie obiectele care vor fi clasificate. Are de asemenea un nivel de modelare care organizeaza setul de antrenare astfel incat fiecare vector de intare este reprezentat de un element de procesare individual. Și in final reteaua conține un strat de ieșire numit strat de insumare cu numarul de elemente egal cu numarul claselor distincte care vor fi identificate. Fiecare element din acest strat combina cu ajutorul elementelor de procesare ale startului de modelare apartenentele la clasele de clasificare. Este posibila adaugarea unui strat suplimentar pentru a normaliza vectorul de intrare, in cazul in care intrarile nu sunt deja normalizate inainte de intrarera în retea. La fel ca și in cazul retelei cu propagare inversa vectorul de intrare trebuie sa fie normalizat pentru a asigura separarea corecta a obiectelor în stratul de modelare.
După cum s-a mentionat mai sus, stratul de modelare reprezintă o implementare neurala a unei versiuni a clasificarii Bayer, in care functiile de densitate de probabilitate ale claselor sunt aproximate folosind estimatori Parzen. Aceasata abordare ofera un rezultat optim în sensul minimizarii riscului de clasificare gresita a unui obiect. Folosind estimatorul, abordarea se apropie de adevaratele funcții de densitate o data cu cresterea numarului de seturi de incercare atat timp cat setul de antrenare este o reprezentare adecvata a distinctiilor dintre clase.
În stratul de modelare exista un element de procesare pentru fiecare vector al setului de antrenare. În mod normal, exista cantitati egale de elemente de procesare pentru fiecare clasa de ieșire, dar este posibil ca una sau mai multe clase sa fie asignate incorect in acest caz reteaua generand rezultate eronate. Fiecare element de procesare al stratului de modelare este antrenat intr-o singiura trecere. Un element este antrenat sa genereze un semnal de ieșire pozitiv daca vectorul de intrare se poate identifica cu vectorul de antrenare. Funcția de antrenare poate include un factor de finisare global pentru a generaliza mai bine rezultatele clasificarii. Vectorii de antrenare nu trebuie sa fie aranjati intr-o ordine particulara în setul de antrenare, din moment ce categoria de apartenenta a fiecarui vector este specificata prin intrare și iesirea dorita. Funcția de invatare asigneaza doar primului element de procesare neantrenat clasa de ieșire corespunzatoare vectorului dat de intrare și ii modifica ponderile pentru a putea raspunde in viitor la intrari asemanatoare.
Stratul de modelare opereaza competitiv, numai cea mai apropiata asemanare fata de un vector de intrare castigand și generand o ieșire. În acest fel un vector de intrare dat este asignat unei singure clase de clasificare. Daca intrarea nu poate fi identificata cu nici un model programat nu este generata nici o ieșire.
Estimarea Parzen poate fi adaugata stratului de modelare pentru a ajusta clasificarea obiectelor. Acest lucru se realizează prin adaugarea frecventei de aparitie pentru fiecare model de antrenare construit în elementul de procesare. La baza, distributia de probabilitate a aparitiei fiecarui exemplu dintr-o clasa este multiplicata în nodul respectibv de antrenare. În acest fel o previziune mai exacta a expectantei unui obiect este adaugata caracteristicilor, facandu-l mai usor de recunoscut ca membru al unei clase.
Antrenarea unei retele neurale probabilistice este mult mai simpla decât a uneia cu propagare inversa. Totusi stratul de modelare poate fi destul de mare daca distinctiile dintre categorii sunt variate și în acelasi timp acestea sunt similare în anumite parti. Exista foarte multe propuneri pentru acest tip de retea tinand cont ca optimizarea are la baza componente ale matemeticii clasice.
7.3. Retele pentru asocieri de date
Clasa anterioara de retele, era legata de retelele pentru asocieri de date. Si in cazul retelelor pentru asociere se realizeaza aceeasi clasificare a datelor. In plus insa apare un element aditional ca o consecinta a faptului ca datele de intrare pot fi alterate, Retelele neurale asociative pot corecta uneori aceste date alterate, si le pot asocia corect si pe acestea.
a) Reteaua Hopfield
John Hopfield și-a prezentat pentru prima data reteaua asociativa în anul 1982 la Academia Nationala de Stiinte. În onoarea succesului lui Hopfield, și a intregii lui activitati în domeniul retelelor neurale, aceasta arhitectura ii poarta numele. Reteaua poate fi conceptualizata în termeni energetici și de fizica a sistemelor dinamice. Un element de procesare al nivelului Hopfield isi va schimba starea doar daca energia globala a spatiului starilor se reduce. Cu alte cuvinte starea unui element de procesare va varia doar daca aceasta schimbare va reduce gradul general de “frustrare” al retelei. Primele aplicatii pentru acest tip de retea au inclus memoriile asociative si o serie intreaga de probleme de optimizare cum ar fi cea mai buna ruta pentru un comisvoiajor.
Figura următoare prezinta o retea Hopfield:
Reetaua originala are fiecare element de procesare operand în format binar. Acestea calcuelaza suma ponderata a intarilor și cuantizeaza iesirea tot sub forma de zero sau unu. Aceste restrictii au fost relaxate insa mai tarziu în sensul ca implementarile imbunatatite pot sa folsoesaca o funcție de transfer sigmoidala pentru o distinctie mai clara intre clase, Hopfield insusi aratatand ca reteaua rezultata este echivalenta cu cea originala din 1982.
Reteaua Hopfield folosește trei straturi: un buffer de intrare, un strat Hopfield și un strat de ieșire, fiecare dintre acestea avand acelasi numar de elemente de procesare. Intrarile stratului Hopfield sunt conectate la iesirile elementelor corespunzatoare din stratul de intrare prin legaturi cu ponderi variabile. Iesirile stratului hopfield sunt conectate inapoi la intrarile tuturor celorlalte elemente de procesare exceptandu-se pe el insusi. De asemenea sunt conectate la intrarile corespondente ale stratului de ieșire. În operatiile normale de reamintire reteaua aplica datele introduse in stratul de intrare prin legaturile cu ponderi ajustate către stratul hopfield. Acesta oscielaza pana la un numar prefixat de cicluri complete, și apoi starea curenta a stratului este transmisa către ieșire. Aceasta stare se va asemana cu un model deja programat în retea.
Antrenarea unei retele Hopfield necesita ca modelul de de antrenare sa fie aplicat simultan la intarre și ieșire. Natuira recursiva a stratului Hopfield ofera un mijloc de ajustare a tuturor ponderile legaturilor. Regula de invatare este legea Hopfield în care legaturile sunt stranse când atat elementul de intarre cat sii cel de ieșire au acelasi semn și sunt slabile daca intrarea difera de iesire. Evident orice implementare nebinarizata a retelei trebuie sa includa un mecanism de limitare în funcția de transfer in caz contrar existand posibilitatea ca perechile intare/ieșire sa fie prea rarificate pentru a putea antrena reteaua.
Reteaua Hopfield are doua limitari majore când este folosita ca memorie adresabila prin continut. Prima, numărul de forme care pot fi stocate și reamintite cu acuratete este foarte limitat. Daca prea multe forme sunt inregistrate reteaua poate converge către o forma falsa inventata, diferita de toate cele stocate, sau este posibil sa nu convearga deloc. Capacitatea de stocare este limitata la aproximativ 15 procente din numărul de elemente de procesare din stratul Hopfield. Cea de-a doua limitare consta in faptul ca nivelul Hopfield poate deveni instabil daca formele pe care le retine sunt prea asemanatoare. O forma este considerata instabila atunci cand, după ce este aplicata la momentul zero reteaua converge către o alta forma dintre cele retinute. Aceasta problema poate fi rezolvata prim modificarea setului de forme astfel incat sa se creasca ortogonalitatea dintre ele.
b) Masina Boltzman
Este similara ca functionalitate și operatii cu reteaua Hopfield dar, ca element de noutate, adauga folosirea unei tehnici simulate de intarire pentru determinarea formei originale. Masina Boltzman incorporeaza conceptul de intarire simulata la cautarea spațiului starilor stratului de modelare pentru un minim global. Datorita acestui fapt masina va gravita către un set de valori imbunatatit în timp o data cu trecerea datelor prin sistem.
Ackley, Hinton și Sejnowski au dezvoltat regula de invatare Boltzman în 1985. La fel ca și în cazul retelelor Hopfield, masinile Boltzman au o energie asociata în spațiul starilor bazata pe ponderile legaturilor stratului de modelare. Procesul de invatare al unui set de antrenare plin de forme implica minimalizarea acestei energi. Din acest motiv masina va gravita către un set imbunatatit de valori pentru ponderile legaturilor o data cu trecerea datelor prin sistem.
Masina Boltzman necesita un program de intarire simulata , care se adauga procesului de antrenare a retelei. La fel ca și în cazul caliri fizice temperaturile pornesc de la valori ridicate și descresc în timp. Temperatura ridicata va adauga un factor de zgomot suplimentar fiecarui element de procesare al stratului de modelare. Tipic temperatura finala este zero. Daca reteaua nu reuseste sa se stabilizeze, adaugarea de noi iteratii la temperaturi scazute poate ajuta la obținerea solutiei optime.
O masina Boltzman care invata la temperaturi ridicate se comporta ca un model aleator iar la temperaturi reduse ca un model determinist. Datorita componentei aleatoare în antrenare un element de procesare isi poate uneori asuma o noua valoare a starii care creste în loc sa scada energia globala ă sistemului. Acest lucru mimeaza calirea fizica și este folosit pentru a evita minimele locale si a evolua catre un minim global.
La fel ca și reteaua Hopfield o data ce un set de forme este invatat, o forma partiala poate fi prezentata retelei iar aceasta va fi capabila sa completeze informatia lipsa. Limitarea numarului de clase la mai putin de 15 procente din numărul total de elemente de procesare ale stratului de modelare se aplica și în acest caz.
c) Reteaua Hamming
Este o alta extensie a retelei Hopfield prin adaugarea unui clasificator de probabilitate maxima la intrarea in retea. Arhitectura, dezvoltata de către Richard Lippman la mijlocul anilor ’80, implementeaza o clasificare bazata pe o eroare minima pentru vectorii de intrare, unde eroarea este definita prin distanta Hamming. Distanta Hamming reprezinta numărul de biti care difera intre doi vectori de intrare corespondenti de lungimi egale. Unul din vectorii de intare reprezintă forma de exemplificare, fara zgomot, iar celalalt este o forma alterata a evenimentelor din lumea reala. În aceasta arhitectura categoriile de ieșire sunt definite printr-un set modelat fara zgomot. In modul normal de functionare vectorii de intare sunt asignati categoriei pentru care distanta hamming dintre vectorul exemplu și cel curent este minima.
Arhitectura Hamming are trei nivele, reprezentate în figura următoare:
Reteaua folosește un strat de intrare cu numarul de noduri egal cu numarul caracteristicilor binare individuale. Urmeaza un strat al categoriilor, care este stratul Hopfield cu atatea noruri cate categorii sau clase exista, prin aceasta se diferentiindu-se de arhitectra Hopfield clasica care are în stratul din mijloc un numar de noduri egal cu al celor de intare. Și în final exista un strat de ieșire cu acelasi numar de noduri ca si stratul Hopfield.
Reteaua are o arhitectura simpla feed-forward cu un strat de intare conectat complet la cel al categoriilor. Fiecare element din stratul Hopfield este conectat inapoi la toate celelalte elemente din strat și, printr-o legatura directa, la elementul de procesare de ieșire corespunzator, legatura intre stratul categoriilor si cel de ieșire facandu-se prin competitie.
Antrenarea retelei Hamming este similara cu metodologia Hopfield realizandu-se printr-o singura trecere. Totusi la aceasta arhitectura supervizata, forma de antrenare dorita este aplicata prin stratul de intrare iar clasa corespondenta prin stratul de ieșire. Inca o data, natura recursiva a nivelului Hopfield ofera un mijloc de ajustare a ponderilor tuturor legaturilor.
Ponderile dintre straturile de intrare și cel al categoriilor sunt la inceput fixate astfel incat rezultatele de comparație generate sa fie egale cu numărul de nodutri de intrare minus distantele Hamming fata de vectorul de intrare de exemplificare. Aceste valori de asemanare variaza intre zero si numărul total de elemente de intrare, fiind maxime pentru acei vectori de intrare care se aseamana cel mai bine cu formele invatate. Legaturile recursive ale stratului categoriilor au ponderile antrenate în acelasi fel ca și în cazul retelei Hopfield. În operatiile normale de propagare inainte un vector de intrare este aplicat stratului de intrare și trebuie mentinut un timp suficient astfel incat sa permita determinarea categoriei din care face parte. Astfel se va initializa intrarea functiei Hopfield în stratul categoriilor și se va permite acelei parti a retelei sa gaseasca cea mai apropiata clasa fata de vectporul de intrare. Stratul este competitiv, deci la un moment dat o singura ieșire este activa.
Reteaua Hamming are o serie de avantaje fata de cea Hopfield deoarece implementeaza o clasificare a erorii minime optima, atunci când bitii de intrare sunt aleatori și independenti. Astfel reteaua Hopfield, prin natura sa aleatoare poate oferi o solutie doar echivalenta sau mai inexacta decât cea Hamming, intr-un timp mai scurt. Mai putine elemente de procesare sunt necesare pentru soluția Hamming din moment ce stratul de mijloc necesita doar un element pentru fiecare categorie în loc de un element pentru fiecare nod de intrare. In final reteaua Hamming nu genereaza clasiificarile eronate prezente în cazul Hopfield.
d) Memorii asociative bidirectionale
Aceasta retea a fost dezvoltata de către Bart Kosko, generalizand și ea modelul Hopfield. Un set de perechi de forme sunt invatate printr-o reprezentare a acestora sub forma de vectori bipolari. La fel ca și în cazul Hopfield, când se aplica o versiune alterata a unei forme se determinata forma cunoscuta cea mai apropiata de aceasta.
O diagrama a unui exemplu de memorie asociativa bidirectionala este prezentata în figura următoare:
Arhitectura are un numar egal de noduri de intrare și de ieșire. Cele doua straturi ascunse sunt formate din doua memorii asociate separate, și reprezintă marimea a doi vectori de intrare. Cele doua lungimi nu trebuie sa fie neaparat egale, asa cum se observa in acest exemplu. Straturile de mijloc sunt conectate complet intre ele, iar cele de intrare și ieșire sunt, din ratiuni de implementare, mijloacele de intrare și ieșire a informatiti din retea. Dar forma originala a lui Kosko urmarea construirea memorilor asociative bidirectionale pentru procesare optica, acolo unde nu sunt necesare structuri de intarre și ieșire formale.
Straturile de mijloc sunt destinate memorarii perechilor asociate de vectori. Când un vector alterat este aplicat la intrare cele doua niveluri oscileaza inainte și inapoi pana când se ajunge la o stare de echilibru. Aceasta stare, presupunand ca reteaua nu este supraantrenata, corespunde celei mai apropiate forme memorate și va genera la ieșire aceasta forma originala, nealterata. La fel ca și reteaua Hopfield memoria asociativa bidirectionala este succeptibila sa determine forme incorecte atunci când componente ale setului de antrenare sunt folosite ca vectori de intrare necunoscuti.
e) Recunoastere spatiotemporala (Avalanche)
Aceasta retea, asa cum este prezentata în figura este rezultatul muncii de cercetare a lui Stephen Grossberg de la inceputul anilor ’70, in lucrarile lui autorul numind-o „Avalanche”.
A fost în primul rand dezvoltata pentru a explica cateva procese cognitive de recunoastere a secventelor de evenimente variabile în timp. Robert Hecht-Nielsen s-a inetresat de modul în care aceasta retea poate fi aplicata pentru probleme ingineresti, scopul principal fiind realizarea unei retele de recunoastere a formelor spatio-temporale. Semnale specifice, cum ar fi cel audio, sunt memorate și apoi refolosite pentru a clasifica semnale periodice de intrare. Aceasta retea foloseste o serie de parametri care permit reglarea pentru eficientizarea detectiei semnalelor variabile în timp.
Exista un termen atasat fiecarui element de procesare, folosit pentru normalizarea activitatii din intreaga retea. Acesta impune o bariera variabila impotriva careia elementele de procesare trebuie sa concureze, și se asigura ca cel mai bun va invinge. Metoda de antrenare pentru aceasta retea folosește o variatie a regulii Kohonen și adauga o componenta variabila în timp functiei de antrenare numita funcție de atac. Aceasta funcție este folosita și în modul de amintire pentru a asigura o latenta istoriei trecerii semnalelor prin retea.
Principala ramura de aplicare a arhitecturii spatiotemporale pare a fi în domeniul recunoasterii semnalelor audio. Un grup de cercetatori de la General Dynamics a folosit aceasta retea pentru a clasifica tipurile de nave maritime pe baza zgomotelor pe care le fac elicele acestora. O alta caracteristica a acestor retele consta in faptul ca, datorita deteriorarii in timp a functiei de atac, chiar daca periodicitatea semnalelor de intrare variaza, intradevar, in interiorul unor limite acceptabile, reteaua este totusi capabila sa clasifice corect semnalele.
7.4. Retele pentru conceptualizare
Un alt tip de aplicatie este conceptualizarea datelor. In multe cazuri datele nu sunt doar calsificate deoarece nu toate aplicatiile implica folosirrea unor date care pot fi integrate intr-o clasa. Unele aplicatii necesita gruparea unor seturi de date care pot sa fie, sau pot sas nu fie clar definite. Un exemplu il constituie procesarea datelor bazate pe o lista de adrese postale ale potentialilor clienti. Clientii pot fi clasificati în diferite clase, în funcție de varsta sau posibilitati materiale, dar de asemenea în viata reala se pot strecura și alte informatii care sa influenteze categoriile din care pot face parte potentiali cumparatori. Acest proces incearca doar sa identifice un grup cat mai bine posibil.
a) Retele cu rezonanta adaptiva
Dezvoltata de catre Stephen Grossberg la mijlocul anilor ’70 aceasta retea ceraza categorii ale datelor de intrare bazate pe rezonanta adaptiva. Topologia este plauzibila din punct de vedere biologic și folosește o funcție de antrenare nesupervizata. Sunt analizate datele de intrare semnificative pentru determinarea comportamentului și se detecteaza posibile caractreistici sau clasificari ale modelelelor din vectorul de intrare.
Aceasta retea a stat la baza construirii unui numar mare de arhitecturi derivate, cum ar fi propagarea inversa și memoria asociativa bidirectionala. Creierul retelei cu rezonanta adaptiva consta din doua straturi puternic interconectate de elemente de procesare localizate intre un strat de intrare și unul de ieșire. Fiecare model de intrare către stratul inferior de rezonanta va induce trimiterea unui model asteptat de la stratul superior la cel inferior pentru a influenta următoarea intrare. In acest fel se creaza o rezonanta intre cele doua straturi pentru a se facilita adaptarea retelei la modele.
Reteaua este folosita în mod normal pentru modelare biologica, existand totusi si cateva aplicatii ingineresti. Limitarea majora este succectibilitatea la zgomot a retelei, chiar și cel mai mic nivel de zgomot al vectorului de intrare alterand capabilitatile de clasificare ale retelei. Topologia de retea bazata pe teoria rezonantei adaptive este protejata de un patent existent la universitatea din Boston.
b) Harta autoorganizativa
Potrivit modelului dezvoltat de catre Teuvo Kohonen la inceputul anilor ’80, datele de intrare sunt proiectate intr-un strat bidimensional care mentine ordinea, compacteaza spațiul de reprezentare, și subgrupeaza datele dense. Cu alte cuvinte, doi vectori de intrare apropiati vor fi asociati cu doua elemente de procesare apropiate în stratul bidimensional Kohonen. Stratul contine caracteristicile grupurilor de date de intrare, elementele de procesare reprezintand o harta bidimensionala a datelor de intare.
Principala aplicabilitate a hartilor autoorganizative este vizualizarea topologiilor și a structurilor ierarhice de spatii de intare de dimensiuni mari. Retelele autotrganizative au fost folosite pentru a crea curbe de umplere a suprafetelor în spatii bidimensionale create de stratul Kohonen. Stratul Kohonen poate fi de asemenea folosit pentru probleme de optimizare prin permiterea ponderilor legaturilor sa se fixeze intr-un model de energie minima.
O diferenta semnificativa intre aceasta retea și majoritatea celorlalte este modul de antrenare fara supraveghere externa folosit. Totusi, atunci când topologia este combinata cu alte arhitecturi, de exemplu de predictie sau clasificare, reteaua invata mai întâi intr-un mod nesupravegheat, pentru a trece apoi în modul supravegheat pentru antrenarea straturilor atasate.
Un exemplu de harta autoorganizativa este prezentata în figura următoare:
Aceasta are de obicei doua straturi, unul de intrare si unul Kohonen bidimensional, interconectate complet. Stratul de ieșire aditional reprezentat aici este folosit pentru o problema de clasificare și reprezintă cele trei clase din care poate face parte vectorul de intrare. Acest strat de ieșire invata de obicei folosjind regula delta și este similar ca mod de operare cu modelul propagarii inverse.
Elementele de procesare ale nivelului Kohonen măsoară individual distanta euclidiana dintre ponderi și valorile de intrare. În timpul modului normal de functionare elementul Kohonen cu distanta minima este desemnat castigator și poate trimite un semnal catre stratul de ieșire, in cazul in care acesta exista. Functionarea fiind competitiva, toate celelalte elemente vor fi setate forțat pe zero pentru acel vector de intrare. Astfel, elementul de procesare castigator este intr-un mod masurabil cel mai apropiat de valoarea de intrare și deci reprezintă valoarea de intrare în harta bidimensionala Kohonen. Deci, datele de intrare de dimensiuni multiple, ajung sa fie reprezentate intr-un vector bidimensional care mentine ordinea existenta in vectorul de intrare de dimensiune superioara. Aceasta metoda poate fi privita ca un mod de proiectare cu conservarea ordinii a unui spațiu de intrare de orice dimensiune intr-un spațiu bidimensional Kohonen.
În timpul antrenarii, elementul de procesare cel mai apropiat isi ajusteaza ponderile pentru a se apropia si mai mult de valorile din setul de intrare. De asemenea vecinii elementului castigator isi ajusteaza și ei ponderile pentru a se apropia de setul de intrare, acest lucru mentinand ordinea în spațiul de intrare. Antrenarea se face prin regula de competitie Kohonen descrisa în sectiunea de antrenare a retelelor neurale.
Problema existentei unui singur element de procesare care isi asuma responsabilitatea pentru un numar prea mare de date de intrare exista si la aceast aarhitectura. La fel ca și în cazul propagarii inverse aceasta problema este rezolvata printr-un mecanism de constiinta construit în interiorul functiilor de antrenare. Regula de constiinta depinde de mentinerea unor inregistrari privind rata de succes a fiecarui element de procesare Kohonen, iar aceste informatii sunt foloasite în timpul antrenarii pentru a normaliza măsurarea distantelor. Acest mecanism ajuta stratul Kohonen sa evolueze catre cea mai buna reprezentare posibila. Elementele de procesare reprezintă în mod natural informatii aproximativ egale despre setul datelor de intrare. Daca spațiul de intrare are putine date, reprezentarea este compactata în spațiul Kohonen, iar daca spațiul are date dense elementele de procesare reprezentative se raspandesc pentru a permite o discriminare mai fina. În acest fel nivelul Kohonen pare sa reproduca reprezentarea cunostintelro în sistemele biologice.
7.5. Retele pentru filtrarea datelor
Ultimul tip major de retele este cel folosit pentru filtrarea datelor, o prima aderenta fiind Madaline. Madaline elimina ecoul dintr-o linie telefonica printr-un circuit dinamic de filtrare. Rezultate mai recente au permis modemurilor sa lucreze scceptabil la 4800 și 9600 baud prin tehnici de egalizare dinamica. Ambele aplicatii utilizeaza retele neurale incorporate în cipuri speciale.
a) Retele cu recirculare
Retelele cu recirculare au fost introduse de Geoffrey Hinton și James McClelland ca o alternativa biologica plauzibila la retelele cu propagare inversa. În cazul propagari inverse erorile sunt transmise inapoi prin aceleasi legaturi folosite și pentru propagarea directa folosind o scalare aditionala prin derivata functiei de transfer, acest lucru facand dificila implementarea electronica a algoritmului de propagare inversa.
Intr-o retea recilculanta datele sunt procesate intr-o singura directie iar antrenarea se face folosind doar cunostintele locale. În particular cunostintele sunt date de starea elementului de procesare și valoarea de intrare pentru legatura care trebuie sa fie adaptata. Aceste retele folosesc antrenarea nesupravegehata astfel ca nu este necesar un vector de ieșire aplicat stratului de iseire al retelei. Reteasua este autoasociativa, numărul de intrari și iesiri fiind egal.
Arhitectura este compusa din doua straturi aditionale intre cel de intrare și cel de ieșire, numite start vizibil și strat ascuns. Scopul metodei de antrenare este construirea in stratul ascuns a unei reprezentari interne a datelor prezentate la stratul vizibil. Un important rol al acesteia este acela de a comprima datele de intrare folosind mai putine elemente de procesare în stratul ascuns. În acest caz, reprezentarea ascunsa poate fi considerata o varianta comprimata a reprezentarii vizibile. Stratul vizibil și cel ascuns sunt conectate complet în ambele directii. De asemenea fiecare element din cele doua straturi este conectat la un element de calitate (bias). Aceste legaturi au ponderi variabile ajustabile în acelasi fel ca și celelalte ponderi din retea.
Procesul de antrenare pentru aceasta retea este similar cu tehnica folosita pentru memoriile asociative bidirectionale. Aici datele de intare sunt prezentate stratului vizibil și trecute către stratul ascuns. Acesta le transmite inapoi către stratul vizibil care la randul lui le retransmite către stratul ascuns și de acolo către cel de ieșire. La cea de-a doua trecere prin stratul ascuns apare procesul de invatare. În acest fel datele de intrare sunt recirculate prin retea.
În timpul antrenarii iesirea stratului ascuns la primul pas reprezinta versiunea codificata a vectorului de intrare. Iesirea stratului vizibil la urmatorul pas este reconstructia intrarii originale din vectorul codificat în stratul ascuns. Scopul antrenarii este de a reduce erorile dintre vectorul reconstruit și cel de intrare. Aceste erori sunt de asemenea reflectate în diferenta dintre iesirile stratului ascuns la primul și la ultimul pas, din moment ce o reconstituire corecta va insemna ca valori identice vor trece prin stratul ascuns la ambele parcurgeri. Antrenarea urmareste sa reduca de asemenea eroarea de reconstituire a stratului ascuns.
În majoritatea aplicatiilor un semnal de intare este netezit prin compresie și apoi reconstituit la ieșire. Reteaua actioneaza ca un filtru trece jos al carui punct de tranzitie este controlat de numărul de noduri ascunse.
8. Aplicatii
Retelele neurale se supun achimbarilor care apar atunci cand un concept paraseste mediul academic si este aruncat in lumea salbatica a utilizatorilor al caror unic scop este pur si simplu resolvarea problemelor. Multe retele proiectate pana acum sunt destul de exacte dar lasa totusi un gust amar utilizatorilor care se asteptau ca sistemele de calcul sa le resolve problemele in mod exact. Rata de acuratete a acestor retele se incadreaza in limitele 85, 90%. Din pacate putine aplicatii tolereaza astfel de erori.
In timp ce cercetatorii continua sa-si imbunatateasca creatiile, unii exploratori le gasesc aplicabilitate pentru tehnologia curenta.
In prezent retelele neurale nu sunt inca interfata care transforma limbajul uman in instructiuni pentru calculator, dar se spera ca intr-o zi comunicatia cu acestea se fa putea face intr-un limbaj natiural iar clasicele butoane vor deveni o simpla amintire. Dar, deocamdata, retelele doar isi fac intrarea pe piata in interiorul unor nise unde eroarea lor statistica este acceptabila, asteptand cu incredere viirotul.
Multe din aceste nise implica aplicatii pentru care raspunsurile sunt neclare. Aprobarea imprumuturilor este unul dintre acestea. Institutiile financiare economisesc enorm prin utilizarea celor mai mici rate ale dobanzilor pentru imprumuturi pe care le pot obtine. Sistemele cu un procent de exactitate de 90% pot fi un progress aplicat proceselor curente. Totusi, unele banci au aratat ca rata de esec a imprumuturilor aprobate de retele neurale este mai mica decat a celor aprobate prin metodele traditionale folosite in trecut.
Cea mai noua metoda de prevedere a viitorului prin analizarea experientelor trecute a generat propriile probleme. Una din aceste probleme o constituie oferirea obligatorie din punct de vedere legal a unei justificari a raspunsului generat de calculator, privind motivul pentru care, de exemplu, s-a refuzat un imprumut. Dupa cum s-a mentionat anterior, modul intern de functionare a retelelor neurale este pentru multi o “cutie neagra”. Unii utilizatori au numit chiar aceasta metoda de abordare “inginerie voodoo”. Explicarea modului in care invata o retea si de ce ia o anumita decizie este dificil. Pentru a facilita acest proces de justificare o serie intreaga de furnizori de unelte de simulare au oferit programe care explica fluxul de informatii si indica intrarile dominante in procesul de luare a unei decizii, precum si drumul parcurs de acestea prin retea. Folosind aceste informatii, expertii in domeniul aplicatiei ar trebui sa fie capabili sa inteleaga de ce un anumit set de date este important.
Pe langa umplerea niselor de pe piata, retelele neurale progreseaza si in domenii de aplicabilitate mult mai promitatoare. In continuare se vor descrie cateva din aceste domenii si detalii despre gradul current de dezvoltare. Aceasta pentru a sublinia variatele probleme pentru care retelele neourale ar putea oferi solutii, probleme cum ar fi procesarea limbajului, recunoasterea caracterelor, compresia imaginilor sau recunoasterea formelor.
Procesarea limbajului natural
Procesarea limbajului natural inconjoara o mare varietate de aplicatii, cum ar fi conversia sunet-text, utilizarea comenzilor vocale, traducerea automata, ajutor pentru personae cu dizabilitati fizice etc.
Multe companii si universitati studiaza modul in care un calculator, cu ajutorul retelelor neurale, poate fi programat sa raspunda la comenzi vocale. Recompensa economica ar putea fi o adevarata mina de aur. Daca aceasta capabilitate ar putea fi redusa la un cip, acesta ar putea fi integrat in toate aparatele electronice existente, ceea c ear duce la un numar enorm de asemenea cipuri vandute. Cipul ar trebui sa poata intelege cele mai folosite 50.000 de cuvinte. In present majoritatea retelelor neurale anrenate in acest scop sunt capoabile sa inteleaga un singur utilizator, iar numarul maxim de cuvinte recunoscute este de doar cateva mii, aceasta in conditiile in care limbajul este clar, literar iar distinctia intre cuvinte se face prin folosirea unor pause in vorbire dupa fiecare dintre acestea.
Unii cercetatori au ajuns totusi la performante imbunatatite, dar, datorita potentialului economic enorm, sunt pastrate o serie de secrete privind rezultatele obtinute si metodele folosite.
Recunoasterea caracterelor
Recunoasterea caracterelor este un alt domeniu in care retelele neural eofera solutii. Unele din aceste soutii au in spate doar simple curiozitati academice. Dar in prezent se comercializeaza retele capabile sa recunoasca caractere scrise de mana cu ajutorul unui scanner. Acest tip de produse ar putea procesa orice formular, cum ar fi cerereile de eliberare de carti de credit si le-ar stoca automat in forma electronica intr-o baza de date. Produsele au o rata de exactitate de aproximativ 99% pentru numere si putin mai slaba pentru caractere alfabetice.
In prezent majoritatea cercetarilor in acest domeniu implica realizarea unor solutii pentru recunoasterea caracterelor din alfabetul oriental, deoarece pentru stocarea fiecarui astfel de caracter sunt necesare aproximativ cinci apasari de taste. Acest complicat process prelungeste munca de tehnoredactare a unei pagini la cateva ore. Din acest motiv o serie de producatori au anuntat ca sunt foarte aproape de realizarea unor produse care sa poata scana o intreaga pagina de text si sa recunoasca caracterele orientale scrise pe aceasta.
Compresia imaginilor (datelor)
Un numar insemnat de studii au demonstrate ca retelele neurale pot realize o compresie a datelor in timp real. Aceste retele sunt autoasociative si sunt capabile sa reduca 8 biti de date la doar 3 si apoi sa restaureze cei 8 biti de informatie. Totusi compresia se face cu pierdere de informatie, din acest motiv metoda se foloseste in general pentru compresia imaginilor acolo unde nu este in general necesara o refacere exacta a contextului initial.
Recunoasterea formelor
Pana in prezent au fost dezvoltate o serie intreaga de aplicatii de recunoastere a formelor. Exista sisteme care pot detecta explozivi sau arme in bagaje la aeroporturi, prin identificarea unor forme standard stocate in memorie in imaginile provenite de la niste senzori de scanare specializati. O alta aplicatie este folosita in salile de urgenta ale spitalelor pentru a determina probabilitatea ca un pacient sa faca atac de cord, sistemul dovedindu-se de un real folos in zonele in care trebuie luate decizii in functie de prioritati.
Alta aplicatie implica gradarea monezilor rare. Imaginile digitalizate provenite de la o camera video sunt procesate de o retea neurala. Aceste imagini, care includ diferite unghiuri de privire frontale si laterale, sunt comparate apoi cu forme cunoscute reprezentand calificative ale monezilor. Rezultatele au aratat ca gradarea cu retele neurale este la fel de eficienta ca si cea manuala.
Totusi, de departe cea mai raspandita utilitate a retelelor neurale pentru recunoasterea formelor este in domeniul controlului calitatii. Aceste aplicatii sunt proiectate sa descopere defectele si sa inlocuiasca astfel in procesul de productie elementul uman care poate fi de multe ori neatent sau extenuat. Aceste sisteme evalueaza taieturi, lipituri, sau calitatea si nuanta vopselei in industria constructilor de masini prin digitalizarea imaginilor unor zone vopsite pentru a determina daca nuanta este cea corecta. O alta aplicatie majora in care retelele neurale sunt folosite este realizarea de procesoare pentru senzori. Senzori pot oferi foarte multe cantitati de date astfel incat unele informatii mai putin importante nu pot fi procesate in timp util si se pot pierde. Operatorii umani si-ar putea pierde intereseul privind in mod continuu un ecran pentru a cauta “acul in carul cu fan”. Multe din aceste aplicatii de procesare a datelor provenite de la senzori sunt intalnite in aplicatiile militare, retelele neurale dovedindu-se folositoare in descoperirea tintelor. Aceste procesoare preiau datele de la camere video, sonare, inregistratoare seismice sau sisteme cu unde infrarorii, si le folosesc pentru a identifica fenomene probabile.
Un alt doemniu legat de procesarea senzorilor este industria medicala. O retea neurala poate fi folosita pentru interpretarea radiografiilor, metoda dovedindu-se de multe ori mai eficienta decat cea clasica umana in identificarea fracturilor sau cheagurilor cancerigene.
Procesarea semnalelor
Retelele neurale au dat rezultate in multe experimente privind procesarea semnalelor in laborataorele universiotatilor. Aestea s-au dovedit capabile sa filtreze zgomotele, Madaline fiind prima implementare aplicata intr-o problema din lumea reala.
O alta aplicatie este un sistem care poate detecta functionarea defectuasa a unui motor si motivul acesteia prin simpla analiza a zgomotului. Acest sistem dezvoltat de catre Odin Corp. este efficient pentru motoare de pana la 10.000 RPM. Sistemul detecteaza arderile incomplete care sunt o principala cauza a poluarii. Solutia Odin necesita doar 3 kiloocteti de cod software ruland pe un microprocessor Motorola 68030.
Aplicatii financiare
Retelele neurale isi fac intrarea si in lumea finaciara. Bancile, companiile de carti de credit si institutiile de imprumuturi se lovesc de necesitatea luarii unor decizii neclare care implica analiza tendintelor statistice si experienta trecuta. Procesele de aprobare a imprumuturilor implica completarea unor formulare care ar trebui sa-l ajute pe reprezentantul companiei sa ia o decizie. Datele din aceste formulare sunt interpretate acum de retele neurale care au fost antrenate folosind datele din experientele anterioare. Pentru a satisface cerintele legislative privitoare la oferirea motivelor pentru care un credit nu a fost acordat, aceste aplicatii ofera informatii privind combinatiile de intrari care au cantarit cel mai mult in luarea deciziei.
Companiile de carti de credit au si ele nevoie de retele similare pentru stabilirea riscurilor si limitelor de credit.
Servo control
Controlul sistemelor complexe este una din promisiunile retelelor neurale. Majoritatea sistemelor conventionale de control modeleaza functionaerea intregului process printr-un singur set de formule, iar pentru a adapta un sistem pentru un process specific parametri acestor formule trebuie ajustati manual, printr-un process interactiv care implica ajustarea pana cand se gaseste combinatia care da rezultatele dorite. Retelele neurale ofera doua avantaje. In primul rand modelul statistic al reteleleor neurale este mai complex decat un simplu set de formule, permitand manipularea intr-o gama mai larga de conditii de functionare fara a fi necesara o recalibrare. In al doilea rand, datorita capacitatii retelelor de a invata singure, nu an nevoie de la experti in controlul sistemelor si numai de suficiente date istorice pentru a se putea antrena.
In industria petroliera o retea neurala este folosita in procesul de rafinare pentru controlul curgerii de materiale, realizand acest lucru mult mai efficient si mai exact decat un operator uman a carui atentie ar putea fi distrasa.
NASA foloseste un sistem pentru controlul navetelor in timpul manevrelor de decolare, cunoscut sub numele de “Martingale’s Parametric Avalanche” (practic o retea neurala spatiotemporala). Un alt proiect este ALVINN (Autonomus Land Vehicle in a Neural Network) care foloseste o camera video si o raza laser montate pe un vehicul care ar trebui sa se deplaseze ramanand in mijlocul unui drum serpuit.
British Columbia Hydroelectric a realizat un prototip pentru controlul unei statii de distributie a energiei, capabil sa realizeze optimizarea a patru condensatoare sincronizate.
Cum se determina daca o aplicatie poate fi rezolvata folosind retele neurale?
Dupa cum s-a vazut, retelele neurale au fost aplicate cu success in domenii variate. Fiecare din aceste domenii poate fi grupat in doua mari categorii, acestea oferind un test pentru oricine doreste sa foloseasca retele neurale. In principal o aplicatie ar trebui sa indeplineasca urmatoarele criterii pentru a putea intra in categoria celor rezolvabile prin retele neurale:
poate inlocui o retea neurala tehnologiile existente intr-un domeniu in care modificari minore ale performantei duc la un impact economic major?
Exemple de astfel de aplicatii sunt urmatoarele:
aprobarea imprumuturilor
aprobarea cartilor de credit
previziunuie pietei financiare
analiza potentialilor clienti pentru alcatuirea listei de contacte
poate fi folosita o retea neurala in domenii in care tehnologiile curente sau dovedit inadecvate in rezolvarea problemelor? Exemple de aplicarii care indeplinesc acest criteriu sunt:
sinteza vocii
recunoasterea textelor
analiza tintelor militare
Un alt exemplu in care alte tehnologii sau dovedit incapabile este detectarea explozibililor la aeroporturi. Sistemele existente in trecut nu au putut sa obtina certificarile de calitate necesare, dar prin adaugarea unei retele neurale nu numai ca s-au obtinut aceste certificari, dar s-a reusit si inlocuirea unei componente in valoare de 200.000$.
Cea mai simpla utilizare a retelelor neurale a fost pentru aplicatii in care acestea se puteau integra in sistemele deja existente, simpla inlocuire a unei componente deja existente cu o retea neurala usurand munca, si crescand de asemenea rata de success.
9. Previziuni pentru viitor
Daca secolul 21 va fi secolul masinilor inteligente, atunci retelele neurale artificiale vor deveni o parte integranta a vietii.
Pentru ca inginerii de sisteme sa puata indeplini aceste promisiuni trebuie sa inceapa prin folosirea noilor tehnologii neurale. Pentru aceasta ei trebuie sa-si optimizeze timpul prin utilizara sistemelor hardware si software deja implementate anticipand in acelasi timp ceea ce va veni. Din acest motiv aceasta sectiune este impartita in doua parti, ceea ce exista in prezenmt si ceea ce se prevede ca va veni.
In prezent pe piata exista un numar destul de mare de producatori de retele neurale, fiercare impartindu-si o parte din afacere. Exista retele neurale care sunt simple adaugiri la bazele de date si procesoarele de text clasice, dar alte produse sunt folosite pentru operatii particulare pe masini particulare.
Unele din aceste aplicatii constituie unelte pentru aplicatii concrete cum ar fi procesarea imaginilor, iar altele sunt capabilitati generale dar mai putin eficiente de rutare a datelor. Pentru fiecare din aceste aplicatii se identifica punctele slabe si se lucreaza pentru imbunatatirea acestora.
In alegerea unei unelte de dezvoltare un inginer software trebuie sa tina cont de toate noile apartitii in domeniu. Majoritatea produselor nu au evoluat in rutine prietenoase pentru utilizator.
Sistemele de dezvoltare permit utilizatorului sa realizeze un prototip al unei retele. Majoritatea acestor sisteme ruleaza pe orice calculator clasic, existand insa si unele care necesita sisteme de calcul specializate. In generat acestea sunt niste simple unelte care realizeaza retele dar care sunt niste concepte care rezolva problemele dar intr-un timp inacceptabil de lung.
Procesoarele neurale dedicate au capabilitati specifice cere le permit sa fie folosite pentru retele neurale. O serie de producatori de cipuri au realizat astfel de procesoare unele comandate special de catre dezvoltatorii de sisteme neurale. O parte din aceste procesoare incapsuleaza o sere de neuroni intr-un singur cip, altele incorporeaza o serie de concepte cum ar fi crearea unui model special de neuron fuzzy. Aceste cipuri s-au construit in multe tehnologii analogice, digitale, hibride sau optice, pana in present nici una din acestea nedetasandu-se ca invingatoare.
Producatorii prezic ca migrarea de la unelte la aplicatii va continua. In particukar tendinta este de evolutie catre sisteme hibride. Aceste sisteme vor ingloba si alte tipuri de procese, fuzzy, sisteme expert sau algoritmi cinetici, cel mai mare interes avandu-l in prezent integrarea retelelor neurale in tehnicile fuzzy. Tehnicile fuzzy incorporeaza inexactiatile in matemastica. Majoritatea datelor nu se pot incadra exact in categorii predefinite. De exemplu o persoana nu este doar scunda sau inalta. Aceasta poate fi foarte inalta, medie, sau foarte scunda. Logica fuzzy ia aceste variatii din lumea reala in considerare. In aplicatiile potentiale pentru retele neurale in sisteme care rezolva probleme reale fuzificarea este o parte importanta a problemei. La automatizarea unui automobil oprirea nu inseamna o franare brusca iar pornirea nu este o demarare in tromba. Pentru a ajuta retelele neurale sa se acomodeze cu aceasta fuzificare a vietii cercetatorii realizeaza neuroni fuzzy. Acestia nu ofera doar un raspuns de tip da sau nu, ci unul mult mai diversificat.
Sistemele construite cu neuroni fuzzy pot fi initiate catre ceea ce un expert crede ca reprezinta regulile aplicatiei date. Aceasta contopire a retelelor neurale cu logica fuzzy si sistemele expert utilizeaza puterea reunite a celor trei discipline pentru a oferi un sistem mai bun decat este capabila fiecare dintre aceste stiinte individual. Sistemele expert iau problemele pentru care majoritatea expertilor umani nu sunt capabili sa inteleaga toate nuantele si implicatiile deci nu sunt capabili sa stabileasca setul de reguli care definesc problema. Dar pentru retelele neurale nu conteaza daca regulile nu sunt foarte exacte,, deoarece acestea pot invata si apoi corecta erorile umane. Pot adauga noduri sau concepte pe care expertul uman nu le intelege, pot implica folosirea logici fuzzy care defineste concepte de inalt, scund, rapid, incet etc.
10. Concluzii
In concluzie retelele neurale artificiale sunt una din promisiunile privind viitorul calculatoarelor. Ele ofera abilitati de realizare a unor sarcini peste posibilitatile procesoarelor obisnuite. Pot recunoaste forme in ineriorul unor seturi de date pentru ca apoi sa generalize acele forme in directii recomandate de actionare. Retelele neurale invata, deci nu sunt programate prin algoritmi exacti.
Totusi, chiar daca nu sunt programate traditional, realizarea lor necesita o indemanare. Aceasta implica intelegerea diferitelor topologii de retele, a posibilitatilor hardware si software curente, a problemaei care trebuie rezolvata, precum si o strategie de achizitie a datelor necesare pentru antrenarea retelei.
Apoi arta construirii retelei implica o munca de introducere a datelor in sistem precum si o monitorizare a performantelor, adaugarea de noi legaturi, modificari de reguli, pana cand reteaua ajunge sa ofere rezultatele dorite.
Aceste rezultate sunt in natura statistice. Reteaua nu are intotdeauna dreptate. Din acest motiv retelele neurale se folosesc la aplicatii pentru care nici oamenii nu sunt intotdeauna exacti.
Totusi viitorul promite. Retelele au nevoie de componente hardware mai rapide, trebuie sa se integreze in sisteme hibride impreuna cu sisteme expert si logica fuzzy. Atunci vor fi capabile sa auda, sa vada sa ia decizii si sa formuleze actiuni. Atunci vor deveni inteligenta din spatele robotilor care nu obosesc niciodata si nici nu devin distrati. Atunci va incepe cu adevarat epoca masinilor inteligente.
Algoritmi genetici
1. Introducere
Retelele neurale artificiale s-au bucurat de un success enorm in multe din domeniile de activitate curente, una dintre cele mai interesante si cu unul dintre cele mai ridicate potentiale de utilitate fiind controlul arhitecturilor care implica comportamente inteligente adaptive.
Tipurile de arhitecturi de retele si configuratii necesare pentru aceste tipuri de aplicatii sunt mult mai complexe decat cele clasice folosite pentru recunosaterea formelor sau predictii. Chiar daca exista algoritmi unanim acceptati care s-au dovedit efectivi pentru antrenarea retelelor de tip feed-forward sau competitie, configurarea unei retele este inca privita ca o forma de arta mistica. In multe aplicatii de control dependente de timp, in special cele care interactioneaza cu stimuli exetrni dinamici, nu poate fi aplicat un algoritm de antrenare eficient iar arhitectul trebuie sa recurga cu ardoare la metode ad-hoc, de tip incercare si analiza a erorilor de multe ori supuse greselilor, pentru alcatuirea legaturilor retelei. Natura acestui tip de cautare este complicata si mai mult de efectele de multe ori nebanuite pe care schimbarea ponderii unei legaturi le poate avea asupra celorlalte. De aceea este nevoie de o metoda geniala de cautare capabila sa genereze solutii in acest spatiu deosebit de complex. Cu unele modificari adecvate algoritmii genetici pot face fata cu succes acestei provocari.
Algoritmul genetic reprezinta o metoda de cautare euristica bazata pe teoria evolutionista a selectiei naturale. Foloseste paralelismul implicit dintre blocurile construite de informatii numite scheme. Aceasta metoda euristica este aplicata prin luarea unor modele din spatial de cautare, si asignarea unui rang pentru fiecare. Informatia este apoi schimbata intre modelele cu cele mai inalte ranguri in speranta ca, combinatiile rezultate vor duce la aparitia unor modele de rang superior. De exemplu, in timpul evolutiei unei retele neurale daca un model contine ponderile corecte pentru un nod al retelei, iar alt model contine ponderile corecte pentru alt nod, combinarea sau incrucisarea ar putea duce la aparitia unui model cu ponderile ambelor noduri corecte.
Desi s-au realizat mult cercetari in domeniul folosirii algoritmilor genetici pentru construirea retelelor neurale, majoritatea s-au axat pe aplicatii specifice retelelor de tip feed-forward. Foarte putine lucruri s-au realizat pentru retelele recurente dependente de timp, iar ceea ce s-a realizat de multe ori nu satisface si cerintele unor aplicatii mai complexe. Exista mai multe motive pentru care s-a ajuns la acewasta situatie:
Algoritmii genetici sunt folositi in general pentru optimizare. Operatorii genetici sunt aplizati continuu pana cand este gasita cea mai buna solutie posibila. In mod natural ceea ce este optim nu este intotdeauna si cel mai bun pentru o aplicatie data.
Algoritmi genetici supraspecializeaza reteaua. In timpul cautarii solutiei optime reteaua rezultata se va dedica problemei curente si nu va mai fi dinamica. Daca spatiul cerintelor problemei va suferi cea mai mica modificare va trebui construita o noua retea, cea curenta nemaifiind capabila sa gaseasca solutii.
Aplicarea unui operator genetic urmareste un model adaptationist de evolutie care incurajeaza eliminarea unor informatii apparent inutile la un moment dat, dar care se pot dovedi utile in ajutarea retelei sa se adapteze intr-un mediu dinamic
Prin urmarirea unui model antiadaptationist de evolutie si prin modificarea modului in care algoritmul genetic cauta solutii conform propriilor incipii, exista posibilitatea eliminarii acestor deficiente ale geneticii conventionale. Prin cautarea unor solutii care indeplinesc doar criteriile minime necesare in loc sa se caute optimalitatea, prin evolutia adaptabilitatii si nu adaptarea la o nisa particulara si prin pastrarea unor blocuri de informatii posibil folositoare in viitor, un algoritm genetic antiadapotationist va permite realizarea unor structuri neurale mai complexe si mai robuste.
In continuare se vor detalia principliile si operatorii care stau la baza geneticii conventionale, se va face o comparative intre modelul de evolutie classic adaptationist si cel antiadaptationist si se vor sublinia modificarile care trebuie facute pentru a indeparta neajunsurile teorie clasice prezentate mai sus.
2. Istoria algoritmilor evolutivi
Algoritmii evolutivi pot fi imparitit in trei directii de cercetare distincte: Algoritmi genetici, strategii de evolutie, si programare evolutionista. Programarea genetica a aparut la inceput ca un model general pentru procese adaptive, dar a devenit in scurt timp o unealta utila de optimizare, int timp ce strategiile evolutioniste au fost implementate inca de la inceput pentru optimizarea variabilelor.
Originile calculului evolutionist pot fi associate cu lucrarile aparute in ani ’50 si ’60 care lansau idea ca procesele evolutionist ear putea fi aplicate pentru probleme ingineresti de optimizare, acest lucru ducand la crearea celor treei implementari distincte enumerate mai sus.
Algoritmii genetici au fost dezvoltati la inceput de catre Bremermann in anul 1958, dar cel care i-a mediatizat si este considerat practice parintele acestora este Holland, care a aplicat algoritmii cu scopul transpunerii mecanismelor biologice naturale in lumea calculatoarelor, acest lucru ducand la aparitiei teoriei schemei incepand cu anul 1968, teorie pe care o explica in detaliu in cartea “Adaptation in Neural and Artificial Systems”.
Teorema incearca sa ofere o explicatie teoretica a functionarii algoritmilor. Prima dezvoltare a teoriei a fost realizata de catre Goldberg care face supozitia cunoscuta sub numele de “Building Block Hypnothesis” privind capacitatea incrucisarii de a oferi o mare parte din performantele algoritmilor genetici. Aceasta ipoteza cintrazice teoria clasica care se baza pe natura distructiva a operatorilor de incrucisare si mutatie.
In anii ‘90 au aparut si primii critici ai teoriei initiale. Grefenstette afirma ca teorema de baza favorizeaza indivizii castigatori ai unor competitii locale in detrimental celor care se incadreaza cel mai bine in mediu. Fogel si Ghozeil critica teorema pentru imposibilitatea estimarii proportia schemei intr-o populatie in care se folosesc metode de selectie bazate pe putere in prezenta zgomotului si a altor efecte stocastice. In apararea lui Holland, Poli afirma ca criticile aduse de catre Fogel si Ghozeil nu privesc teorema originala, care este foarte eficienta pentru modelarea in prezenta zgomotului, ci unele adaptari ale acesteia.
Pentru a argumenta teorema, au fost dezvoltate modele matematice mai exacte care fac predictii privind compozitia populatiei, viteza de convergenta si distributia puterilor in timp, elemente neabordate direct de catre teorema initiala. In anul 1991, Vose si Liepins au rezolvat un algoritm genetic simplu folosind un model exact care oferea o reprezentare geometrica a comportarii algoritmului, din acel moment o serie de autori realizand modele exacte. Exista metode de abordare si mai putin exacte, cum ar fi incercarea de aplicare a lanturilor Markov de analiza de catre Nix si Vose, dar care a dus la realizarea unor formule dificil de rezolvat datorita dimensiunilor ridicate si a neliniaritatilor acestora.
Recent au fost aplicate metode de statistica mecanica prin modelarea unui set de variabile macroscopice care ar trebui sa fie capabile sa caracterizeze sistemul. Gradele de libertate ramase trebuie sa urmeze o distributie de entropie maxima. Prugel-Bennett si Shaprio au aplicat aceasta metoda pentru modelarea algoritmilor genetici simpli, dar o abordare mai recenta a fost folosita pentru intelegerea diferentelor dintre diferite tipuri de algoritmi genetici. (de exemplu Rogers si Prugel-Bennett au comparat algoritmul generational cu cel al starilor optime).
Alte dezvoltari recente include introducerea unui cromozom de lungime variabila de catre Kotani, Ochi, Ozawa si Akazawa in anul 2001. Acestia u aplicat o forma a algoritmului genetic pentru a determina diferentele liniare dintre doua seturi de date. Prin folosirea unui cromozom de lungime fixa ei au realizat faptul ca cresterea numarului de termini din discriminator (folosind cromozomi din ce in ce mai mari) duce la o crestere a puterii finale. Dupa dezvoltarea cromozomului de lungime variabila acestia au descoperit faptul ca exista o limita pentru lungimea cromozomului, o depasire a acesteia nemaiprovocand o crestere a puterii totale a algoritmului.
Totusi, in timp ce Holland a popularizat algoritmii geneitci Bremermann face progrese semnificative privitoare la dezvoltarea acestora, idea fiind ca calculatoarele viitoare vor fi capabile sa implementeze metodele avansate realizate. Bremermann a fost primul care a implementat un algoritm genetic codat in timp real, dar si primul care a oferit un model mathematic pentru algoritmi cunoscut ca “functie cu un singir maxim”.
In contrast cu algoritmii genetici, strategiile de evolutie au fost dezvoltate inca de la inceput ca unelte de optimizare parametrica. Conform spuselor lui Rechenberg, primele strategii evolutioniste au fost dezvoltate in anul 1964 la Universitatea Tehnica din Berlin. Ideea era de a imita principiile evolutieo organice in optimizarea experimentala a parametrilor pentru aplicatii cum ar fi controllere PID pentru sisteme nelineare. Propriile lui cuvinte au fost:”metoda evolutiei organice reprezinta o strategie optima pentru adaptarea fiinteor vi la mediul in care traiesc, si deci merita osteneaza sa se foloseasca principiile evolutiei biologice pentru optimizarea sistemelor tehnice.
Algoritmul folosea o schema de mutatie-selectie cunoscut ca (1+1)ES. In acest caz, se genereaza un copil dintr-un parinte, se compara puterile celor doi indivizi, sic el mai bine adaptat va supravietui trecerii in noua epoca.
Pentru a calcula rata de mutatii optime pentru aceasta schema Rechemberg calculeaza ratele de convergenta a doua functii model si apoi determina deviatiile standard optimale pentru mutatii eficiente. De aici el postuleaza regula de succes 1/5.
“Numarul mutatiilor eficiente trebuie sa fie 1/5 din numarul total de mutatii. Daca este mai mare creste diversitatea, iar daca este mai mic scade diversitatea mutatiilor”.
Datorita faptului ca metoda folosita nu este o metoda Monte Carlo pura ea a fost modificata mai tarziu prin adaugarea notiunii de populatie. Rechenberg propune sistemul evolutionist multimembru in care cel putin doi parinti participa la crearea unui nou membru. Aceasta noua metoda a fost numita ES, unde reprezinta numarul parintilor. In aceasta metoda toti parintii au aceleasi posibilitati de combinare, si in final individual cel mai putin adaptat este eliminat din populatia care include parintii si copilul.
Strategia nu este foarte raspandita dar a dus la aparitia unor noi adaptari cum ar fi cea a lui Schwefel care include autoadaptarea parametrilor cum ar fi abaterea standard a mutatiilor. induce crearea unui numar de ? elemente noi din parintii . Aceasta abordare prezinta probleme in cazul optimelor locale care conduc la situatii in care durata de viata a fiecarui individ este de doar o epoca. Chiar daca Schwefel recomanda aceasta noua abordare, rezultatele recente sugereaza ca abordarea initiala este mai eficienta in aplicatiile practice.
Cei doi algoritmi implementeza de asemenea autoadaptarea prin permiterea parametrilor de avolutie sa se autoevalueze. Chiar daca aceasta abordare introduce perioade scurtye de recesiune va ezita perioadele de stagnare in care un singur individ domina intreaga populatie.
Ca o completare la schema descrisa, o noua schema numita mutatie aleatoare a fost dezvoltata de catre Hansen si Ostermeier. In acest caz se observa evolutia unei populatii de-a lungul mai multo epoci si se realizeaza o corelare intre puterea marita a unei populatii si directia mutatiei.
In timp ce selectia ratei de mutatie a fost explorata intens, succesele si limitarile algoritmilor au fost observate doar prin metode empirice. Datorita faptului ca toate schemele autoadaptabile pot fi private ca maxime locale in anumite situatii, Rudolph a inceput dezvoltarea unui model de modelare a ES folosind lanturi Markov. Intre timp el a aratat si faptul ca regula 1/5 nu garanteaza convergenta catre maximul global intr-o problema de optimizare.
In ultimii ani o serie de componente ale metodelor diferite de evolutie au fost combinate, rezultand algoritmi evolutivi hibrizi. Un asthel de system hibrid este si algoritmul gentic autoadaptationist. Back, care a contribuit la autoadaptare atat in domeniul algoritmilor genmetici cat si a sistemelor de evolutie, a adaugat rata de mutatie cromozomilor din algoritmul genetic care au permis ratei de mutatie sa evolueze in ritmul variabilelor din cromozom.
Un alt domeniu de interes aparut in ultimii ani il constituie dezvoltarea algoritmilor evolutivi multiobiect. Majoritatea implementarilor se bazeaza pe algoritmi genetici, dar cateva pornesc de la strategiile evolutive. In aceste probleme este posibil sa existe mai multe soltuii, cunoscute sub numele de Paretooptimale. Primul astfel de algoritm a fost introdus de catre Schaffer in anul 1985, fiind numit VEGA(Vector Evaluated Genetic Algorithm).
2. Prezentare algoritmi genetici
Algoritmul genetic este o metoda de cautare euristica bazata pe principiile selectiei naturale ale lui Charles Darwin. Chiar daca programarea bazata pe genetica a fost implementata cu mult timp in urma, algoritmii genetici in implementarea curenta au fost realizati de catre John Holland la universitatea din Michigan la inceputul anilor ’80. Pana atunci genetica a fost aplicata pentru o serie de probleme in implementari si ajustari variate, totusi functionalitatea si filozofia de baza din spatele operatorilor a ramas strans legata de conceptul initial.
In cea mai simpla forma, algoritmul genetic incepe de la generarea aleatoare a unei populatii de indivizi, fiecare dintre acestia reprezentand o posibila solutie a problemei date. Solutiile sunt evaluate apoi pentru a se determina cat de aproape sunt de scopul propus iar pe baza acestei evaluari li se atribuie o valoare a aplicabilitatii. Operatorii genetici sunt aplicati in functie de probabilitatiile definite de utilizator, indivizii cu cele mai mari valori date avand cele mai mari sanse de a se reproduce si de a produce descendenti mai valorosi. Acest process continua in general pana cand se ajunge la o solutie aceptabila, sau pana cand utilizatorul considera ca pragul de acceptabilitate nu poate fi atins.
2.1. Principii de operare
O parte din succesul algoritmilor genetici ca tehnici de cautare deriva din paralelismul implicit al acestora. Pentru a intelege acest concept pentru inceput este necesara explicarea teoremei fundamentale a algoritmilor genetici (teoria schemei). Fiecare individ al unei populatii contine un genom (o reprezentare codificata a posibilei solutii a problemei pe care o ofera). De obicei doar o parte a acestei reprezentari este importanta pentru a satisface cerintele.
Sa consideram de exemplu un genom binar de opt biti reprezentand numarul 193 (11000001). Este evident ca partea cea mai semnificativa a acestei reprezentari o reprezinta primii doi biti, ceilalti sase avand un impact mult mai redus asupra valorii genomului. O schema reprezinta un model care ia cei mai semnificativi biti ai genomului original, si ii ignora pe ceilalti. Cea mai potrivita schema pentru acest exemplu ar fi H1=11******, unde * reprezinta o valoare nesemnificativa. Orice genom care se incadreaza in aceasta schema va fi o posibila reprezentare a numarului 193. Totusi, este de notat, ca datorita generalitatii acestei scheme ea poate fi la fel de bine o solutie si pentru alte probleme, de exemplu solutia optima a functiei f(x)=x2 asa cum se poate observa si din tabelul urmator:
Pe de alta parte se poate aplica o schema mai specifica H2=11000001, care se va potrivi intotdeauna cu valoarea 193. Dar facand acest lucru eliminam posibilitatea ca un numar semnificativ de mmbrii ai populatiei sa poata corespunde schemei date si astfel aceasta va fi supraspecializata. Aceasta supraspecializare va duce la eliminarea posibilitatii unui numar de indivizi sa evolueze in continuare. De exemplu presupunand ca se foloseste schema H1 se poate gasi individual 20-1 cu reprezentarea binara 11001001 care se incadreaza in schema. Aceasta va fi considerata o solutie acceptabila (exactitate 96%) dar nu optima pentru solutia cautata. Sa presupunem ca in continuare se modifica parametrii cautarii pentru a se identifica indivizii care se incadreaza in schema mai specifica H3=11**11**. Se observa ca orice individ care nu s-a incadrat in schema cea mai specifica H2, va fi indepartat chiar daca ar fi fost potrivit pentru schema H3. Pe de alta parte toti indivizii cu caracteristicile schemei H3 au putut fi incadrati si in schema H1, si pot oferi o cantitate mult mai mare de informatii din care sa se aleaga solutii pentru aceasa schema mai specifica H3. Concluzia care se trage de aici este ca prin folosirea teoriei schematice pentru optimizare se pot gasi solutii mai exacte dar se reduce semnificativ plasticitatea (adaptabilitatea) acestora.
Teoria schematica demonstreaza de asemenea ca schemele mai mici si mai compacte sunt mai capabile sa se opuna efectelor operatorilor genetici decat cele lungi, imprastiate. Aceasta datorita faptului ca probabilitatea de aparitie a unui operator genetic cum ar fi mutatia sau incrucisarea, deci de distrugere a integritatii, creste proportional cu cresterea schemei.
Paralelismul implicit este o functie de numarul de scheme procesate pe un genom. Fiecare genom poate avea pana la 2(l-1) scheme, unde l reprezinta lungimea genomului. Prin alegerea unei populatii de marime n = 2(ls/2), unde ls reprezinta lungimea schemei date se poate arata ca numarul maxim de schemate procesate este O(n3) in timp ce numarul de structuri procesate este numai n. Acest efect de sabloane multiple combinat cu partitionarea multipla a spatiului de cautare fac din principiul cautarii genetice un algoritm puternic.
2.2 Operatori genetici
Cei trei operatori de baza folositi de catre algoritmii genetici sunt selectia, incrucisarea si mutatia. Aplicarea acestor operatori este determinata de probabilitatile definite de catre utilizator, care afecteaza semnificativ eficacitatea algoritmilor.
Selectia este procesul prin care se aleg o parte din indivizii unei populatii care vor putea sa se reproduca. Selectia este de obicei executata folosind principiul rotii de ruleta ponderata, in care fiecarui individ ii este atribuita o sectiune a rotii in functie de puterea acestuia. In general indivizilor cu putere mai mare li se vor atribui sectiuni mai mari ale rotii, aceasta implicand o sansa mai mare de a se reproduce. Se va arata mai tarziu ca aceasta optimizare implicita poate duce la o reducere a capacitatiilor de evolutie si a plasticittaii solutiilor.
Incrucisarea este mijlocul prin care indivizii schimba intre ei material genetic. Cele mai comune tipuri de incrucisare aplicate reprezentarilor binare sunt interschimbarile a unul sau doi biti.
In cazul incrucisarii intr-un singur punct se aleg doi indivizi prin selectie care vor fi considerati parinti, apoi se alege un punct intamplator in care se va interschimba materialul genetic rezultand doi indivizi modificati.
In cazul incrucisarii in doua puncte genomii sunt tratati ca niste gogosi. O bucata este luata diun fiecare gogoasa si inlocuita cu bucata taiata din cealalta gogoasa.
Din figura se poate observa ca schemele mici, mai compacte sunt mai putin vulnerabile la operatii de incrucisare decat cele mari. De fapt se poate arata ca o schema de o lungime definita va supravietui in urma incrucisarii cu o probabilitate , unde pc reprezinta probabilitatea de incrucisare determinate de catre utilizator, iar l este lungimea genomului. Deci, optimizarea prin folosirea schemelor specifice, si de multe ori mai lungi, va conduce la o reprezentare mai fragile si mai succeptibila la distrugere prin incrucisare.
Mutatiia asigura o acoperire mai completa a spatiului de cautare prin alterarea aleatoare a valorilor unui genom. La intervale determinate de probabilitati definite de utilizator este ales un punct al unui genom iar valoarea acestuia este schimbata in functie de modul de reprezentare folosit. Pentru genomi binari acest lucru inseamna trecerea din zero in unu sau din unu in zero.
Si in acest caz din teoria schematica se poate deduce ca schemele mai lungi sunt mai vulnerabile la acest tip de operatie.
2.3. Operatori aditionali
Exista o serie intreaga de operatori aditionali care pot fi implementati pentru a imbunatati eficienta algoritmilor genetici. In continuare vor fi prezentati doar doi dintre acestia: elitismul si insamantarea, care vor fi implementati in diferite forme in cadrul proiectului.
Elitismul este o variatie a selectiei prin care utilizatorul determina un procent al indivizilor de cel mai inalt rang carora li se va permite sa se incadreze in noua populatie. Aceasta asigura faptul ca intotdeauna va exista o cantitate minima de material genetic de cel mai inalt rang caruia sa i se aplice operatori genetici. Chiar daca aceasta forma de elitism nu se va implementa in mod direct, versiuena antiadaptationista de selectie se bazeaza pe un principiu similar.
Insamantarea este procesul prin care populatia initiala este adaugita cu un numar procentual de indivizi cu grad minim de incadrare. Acesti indivizi pot fi rezultatul unui pas anterior de rulare a algoritmului genetic sau pot fi creati special pentru ca alti genomi sa poata evolua cu ajutorul lor. Insamantarea poate lua de asemenea forma unei preevaluari, prin care indivizii sunt supusi unui test de viabilitate minimala inainte de a li se permite intrarea in noua populatie. De exemplu in cazul in care se construieste o retea neurala de tip feedforward populatia este insamantata cu genomi care nu incalca constrangerea de propagare a informatiilor prin retea doar inainte. Genomii care reprezinta retele recurente sau in care informatia se propaga inapoi vor fi distrusi.
2.4. Implementare matematica
Calculul evolutiv reprezinta o familie de tehnici de cautare care mimeaza evolutia naturalapropusa de Charles Darwin in 1858. Pozitia ocupata de catre algoritmii evolutivi in familia tehnicilor de cautare, poate fi observata in figura urmatoare:
Daca se considera inteligenta ca fiind capabilitatea unei entitati de a se adapta la schimbariel mediului in care traieste, atuni algoritmii evolutivi ar putea fi priviti ca o subdiviziune a programarii software:
Toate variantele si modificarile aduse acestui tip de algoritmi se bazeaza pe iteratii diverse ale ciclului de evolutie prezentat in gigura urmatoare:
Diferitele variatii incorporeaza acelasi ciclu de baza cu reprezentari diferite al emodelelor, sau ale combinarilor metodelor de variatie, mutatie, selectie si inlocuire. Partea interesanta a implementarii o constituie balanta dintre doua operatii opuse. Pe de o parte selectia care incearca sa reduca dimensiunile populatiei, sip e de alta parte mutatiile care incearca sa creasca diversitatea. Aceasta combinare este cea care determina rata de convergenta si calitatea solutiilor.
Fiind un algoritm de optimizare, algoritmul genetic trebuie analizat din punctual de vedere al ratei de convergenta, calitatii solutiei obtinute si resursele de calcul necesare.
Pana in present majoritatea analizelor s-au indreptat spre formele generale al ealgoritmilor, dar investifgatii teoretice sau chiar empirice pot fi dezvoltate si pentru variantele mai specifice ale algoritmilor. Abordarea teoretica incearca sa descopere adevaruri matematice , in timp ce abordarea empirica evalueaza performantele unei implementari pe un domeniu de aplicare specific. Ambele metode au avantaje si dezavantaje, de aceea ar trebui folosite in mod complementar in procesul de dezvoltare si ajustare a algoritmilor.
Forma canonica a unui algoritm genetic urmeaza pasii descrisi in continuare:
Defineste functia obiectiv
Prezinta solutiile posibile sub forma de siruri binare (cromozomi). Toti parametrii de optimizare trebuie plasati undeva in interiorul structurii cromozomiale.
Ex. Daca functia obiectiv trebuie sa optimizeze trei parametric x, Y, si Z, o posibila structura ar fi urmatoarea:
F(x,y,z)
Genereaza aleator o populatie de dimensiune specificata. Marimea acestei populatii afecteaza eficienta si performantele algoritmului. Pentru aplicatiile tipice numarul recomandat este intre 5 si 150 de cromozomi.
Evalueaza puterea fiecarei solutii cu ajutorul functiei obiectiv. Exista o multitudine de metode prin care se evalueaza acest parametru si se asociaza un numar real fiecarui cromozom, cea mai populara fiind metoda de selectie proportionala
Selecteaza o pereche de cromozomi printr-o anumita metoda de selectie (de obicei ruleta).
Se aplica operatorul de incrucisare pentru cei doi cromozomi alesi, in cazul in acre au fost selectati pentru acest scop. Cea mai folosita metoda de incrucisare este cea intr-un singur punct:
Bazandu-ne pe probabilitatea de mutatie pn, se modifica un bit aleator in cromozomul selectat pentru mutatie.
Repeta pasul 5 pana cand noua populatie produsa o va depasi in marime pe cea veche.
Inlocuieste populatia veche cu cea noua.
Reface pasii 4-7 pana cand se indepl;ineste criteriul de performanta.
Exemplu:
Considerand -1x,y 1, sa se determine minimul pentru functia:
Primul pas este determinarea structurii cromozomilor:
Se alege o populatie initia;a de 50 de cromozomi.
Dupa 150 de generatii:
Evolutia puterii medii este urmatoarea:
O serie de cercetatori au incercat sa simuleze mathematic comportarea algoritmilor genetici. Holland a fost cel care a dus cea mai indelungata munca de cercetare in acest domeniu, bazanduse pe teoria schemei, dar a fost contrazis de Fogel, care a incercat sa modeleze algoritmul cu ajutorul lanturilor Markov. In ciuda rezultatelor remarcabiel obtinute pana in present, problema este inca controversata si este deschisa spre cercetare. In continuare se va prezenta o privire de ansamblu asupra implicarilor dar si a crtticilor adsuse teoriei schemei.
Schema: Cuvant grecesc care inseamna forma, sau in cazul acestei lucrari un sir format din caracterele ‘0’, ‘1’ si ‘*’. Un exemplu simplu ar fi 0**1, adica o schema care poate reprezenta urmatoarele variatii:
0001, 0011, 0101, 0111
Schema este utila pentru analiza algoritmilor genetici, deoarece pot fi caractreizate puncte apartinand unor spatii de cautare prin scheme diferite. Conceptul poate fi descries prin figura urmatoare:
In acest exemplu, spatial de cautare in diferite parti ale functiei obiectiv a fost caracterizat prin trei scheme diferite s1, s2, s3. Daca se genereaza o populatie de cromozomi aceasta va contine instante ale celor trei scheme.
Distanta dintre bitii semninificativi ‘*’ cei mai departati se numeste lungime definitorie. De exemplu lngimea definitorie a lui *00*1*10* este 5. Ordinul schemei este dat de numarul de biti semnificativi, 4 in acest exemplu.
Teoria schemei: In forma canonica a algoritmului genetic cu o singura probabilitate de incrucisare pc si o pribabilitate de mutatie pm, numarul asteptat de instante ale schemei H, (MH), cu lungimea l. lungimea definitorie ld, ordin O(H) si putere medie fh(t), la urmatoarea generatie va satisface inegalitatea:
unde f(t) represinta puterea medie a populatiei curente.
Holland concluzioneaza ca daca s-ar considera doar efectele distructive ale incrucisarii si mutatiei asupra structurii schemei, inegalitatea de mai sus se va transforma intr-o egalitate, deci, la urmatoarea generatie, numarul de instante cu putere medie mai mare va creste exponential, in timp ce numarul instantelor mai putin adaptate va scadea.
Principala critica adusa acestei teorii se refera la indiferenta fata de efectele constructive ale incrucisarii si mutatiei. Pe de o parte, aceste prezumtii nu par a fi niste simplificari rezonabile, iar pe de alta parte fara acestea teoria schemei nu ar conduce la o implicatie valida a schimabrii adaptarii populatiilor de-a lungul ciclurilor de evolutie. In plus, aceasta teorema nu raspunde la multe intrebari de baza privitoare la rata de convergenta sau implementarea linilor directive, cum ar fi marimea populatiei.
Teorema schemei nu este sufficient de puternica sa ofere o baza analitica satisfacatoare , din acest motiv, realizandu-se o serie de eforturi de oferire a unei intelegeri matematice mai robuste a algoritmului genetic. O contributie deosebit de importanta au avut-o Vose si Liepins prin introducerea lanturilor Markov, oferind astfel convergenta asimptotica a algoritmului genetic cu probabilitate unitara.
3. Aplicatii practice
Problema planificarii
Madurea sugereaza posibilitatea aplicarii algoritmilor genetici pentru rezolvarea unor probleme de planificare reale, si propune un system de coordinate specific. Datorita schimbarilor frecvente aparute in mediul dinamic current, oferirea unui management efficient al productiei, si o furnizare in timp util, sunt unele din cele mai dificile probleme aparute. Planificarea inseamna alocarea unui grup de masini sau oameni sa realizeze un set de sarcini intr-un anumit timp, scopul acesteia fiind o alocare optima a resurselor pentru maximizarea profitului. DFin ratiuni de implementare, solutile sunt codificate in reprezentare naturala, si eset aplicat operatorul ordonat de incrucisare. Se foloseste mecansimul de inversare ca operator de mutatie. In final, Madurea rezolva problemele dinamioce de planificare folosind un set de planificare statica optimizat prin algoritmul genetic, si arata fazabilitatea algoritmului in aceste aplicatii.
Managementul sarcinilor in timp real
Sandstrom a aplicat algoritmii genetici pentru asignarea prioritatilor unor sarcini specifice, pentru a garanta constrangerile timpului. Se presupune ca constrangerea temporara nu este o problema triviala in sistemele in timp real. Autorul a demonstrate modul in care se aplica constrangerile temporare asupra atributelor sarcinilor periodice care ruleaza pe sisteme de operare in timp real standard (RTOS – Real Time Operating Systems), cum ar fi VxWorks sau QNX. Sunt folosityi algoritmii genetici datorita abilitatilor acestora de a gebera un rezultat care satisface o parte din constrangerile temporare, in cazul in care indeplinirea tuturor acestora este imposibila. Mecanismul selectiei naturale imbunatateste gradual constrangerile aplicate fiecarui individ dintr-o populatie. Aceste tehnici au fost testate pentru multe cazuri practice generand rezultate incurajatoare.
Planificarea drumului unui robot
Zein-Sabatto si Ramakrisham au aplicat algoritmii genetici pentru maparea diferitelor drumuri posifile ale unui robot mobil, si determinarea variantei optime. Ei au generat drumul optim, tinand cont si de marimea robotului, dar si de obstacolele cunoscute si de topologia terenului, datorita naturii pur tridimensionale a mediului. Pentru a initializa problema trebuie cunoscute toate obstacolele, algoritmul concentrandu-se doar asupra planificarii globale. Cautarea drumului pentru mai multi roboti a cauzat aparitia unor provocari suplimentareprivitoare la minimizarea distantei totael parcurse dar si a energiei consummate de fiecare robot. Algoritmul genetic a fost folosit pentru ca ofera posibilitatea realizarii unei cautari robuste intr-un spatiu complex, si este mai ieftin decat celelalte variante de cautare.
Planificarea drumurilor bazata pe senzori
Yasuda si Takai au aplicat acelasi algoritm pentru robotii bazati pe senzori. Dupa identificarea unui obstacol modulul de planificare genereaza o cale scurta si eficienta de evitare a acestuia folosind o secventa de vectori de control ai orientarii. Folosind un algoritm genetic drumul este reprezentat printr-un set de vectori de orientare de distnta egala, deci, calea finala va fi o compozitie intre lini poligonale (suma vectorilor). Pentru a minimize dimensiunile, schimbarea orientarii este restrictionata la 5 valori fixe intre -45o si 45o. Pentru functia obiectiv s-au folosit parametri de distanta dintre scopuri si obstacole, incercand sa faca sistemul usor de folosit in timp real.
Procesarea imaginilor
Gong si Yang au aolicat algoritmii genetici pentru procesarea imaginilor stereo. Sistemele de stereoviziune genereaza harti de inegalitate, care ar trebui sa fie netede si detaliate. Sa golosit abordarea bazata pe intensitate. Stereopotrivirea a fost formalizata ca o problema de optimizare, algoritmii genetici optimizand compatibilitatea dintre punctele corespondente si continuitatea hartii de dispersie. Mai intai spatial 3D este populat cu valori de disimulare bazate pe imaginile sursa iar functia obiectiv este definite pe baza lanturilor Markov.
4. Justificarea folosirii algoritmilor genetici pentru proiectarea retelelor neurale
Retelele neurale artificiale sunt constructii cu procesare distribuita parallel bazate pe sistemele biologice neurale de procesare a informatiei. Constau dintr-un numar de elemente de procesare numite noduri care sunt interconectate prin legaturi ponderate numite sinapse. Datele sunt stocate in retaua neurala sub forma valorilor ponderilor acestor sinapse, iar informatiile se proceseaza trtecandu-le prin aceste sinapse si generand un raspuns la iesire. In general retelele neurale artificiale sunt cel mai des folosite ca memorii associative. Pot fi antrenate sau configurate sa produca la iesire rezultate specifice bazate pe intrarile date, si pot deseori sa generalizeze asocierile si pentru informatii pentru care nu au fost antrenate in mod specific. Exista o mare varietate de arhitecturi si teorii cu privire la retele neurale artificiale, asa cum au fost descrise in prima parte a lucrarii, in continuare fiind detaliate doar doua dintre aceste tipuri, care sunt relevante pentru experimentele descrise.
In general arhitecturile se pot divide in doua mari clase: feed-foreward si recurente. Arhitecturile feedforwrd sunt raspandite in domeniul recunoasterii formelor, previziuni si aplicatii de mapare asociativa. Retelele recurente prin includerea dependentei temporare pot genera iesiri mult mai complexe si mai flexibile, facandu-le un instrument ideal pentru structurile dinamice de control si pentru sistemele inteligente adaptive. Algoritmul antiadaptationist descris in continuare a fost conceput pentru realizarea acestui din urma tip de retele.
In cazul retelelor simple feedforward o arhitectura de noduri este conectata astfel incat informatia curge intr-o singura directie, de la nodurile de intrare catre cele de iesire. Retelele de tip feedforward sunt impartite in straturi de noduri, finnd necesare un strat de intare, unul de iesire si cel putin unul ascuns.
In cartea lor ajunsa celebra “Perceptrons”, Marvin Minskys si Seymour Papert au demonstrat ca exista o clasa de probleme care nu pot fi rezoovate prin retele cu un singur nivel. Aceasta clasa nu este liniar separabila, unele valori de intrare trebuind legate la acelasi rezultat ca si o intrare polar opusa. Figura urmatoare ofera o demonstratie grafica a separabilitatii liniare:
Se face presupunerea ca vectorul din grafic reprezinta vectorul ponderilor unei legaturi sinaptice intr-o retea neurala. Orice model de intrare al carui vector este reprezentat in zona gri va cauza nodul corespunzator vectorului ponderilor reprezentat sa furnizeze la iesire un raspuns pozitiv. Orice alt model va cauza un raspuns negative pentru nodul respective. Pentru ca o problema sa poata fi numita linear separabila trebuie sa nu existe doi vectori de intrare, unul in zona gri si celalalt in afara acesteia, amandoi necesitand acelasi raspuns.
Pr oblema “SAU Exclusiv” (XOR) este un exemplu de problema care nu poate fi separabila liniar.
Este evident faptul ca perechile de intarre polar opuse (0,0) si (1,1) necesita aceeasi iesire acest lucru ducand la imposibilitatea separii neliniare. Problema XOR este de asemenea interesanta pentru rezolva unei serii intreagi de aplicatii practice. Un exemplu ar fi problema a doua intrerupatoare care controleaza aceasi sursa de lumina. Indiferent de starea unui intrerupator, actionand asupra celuilalt trebuie sa se poate schimba starea sursei de lumina.
Solutia oferita pentru a rezolva incapacitatea retelelor cu un singur strat sa resolve acest tip de probleme este introducerea unuia sau mai multor starturi ascunse suplimentare. Prin aplicarea teoriei maparii, a matematicianului rus A.N. Kolmogorov, se poate demonstra ca orice problema de mapare poate fi rezolvata cu o retea avand maxim trei straturi ascunse.
Inainte de a rezolva oproblema, o retea feed forward trebuie antrenata, adica valorile ponderilor trebuie ajustate astfel incat sa se produca iesirea dorita in functie de intrarile aplicate. Pentru a realize acest lucru ponderile sunt la inceput initializate aleator, apoi un set de date este aplicat la intrare si propagate prin retea pana cand se ajunge la generarea unui raspuns la iesire. In timp ce informatia strabate reteaua, fiecare nod realizeaza o ajustare a intrarilor la iesire printr-un process in trei pasi:
Se calculeaza suma intrarilor
In functie de aceasta suma se decide noul nivel de activare
Se genereaza un semnal de iesire corespunzator acestui nivel
Gradul de activare final al unui nod este determinat de catre functia sa de transfer. O data ce informatia ajunge la iesirea retelei, rezultatul obtinut este comparat cu cel dorit iar daca se constata o diferenta inacceptabila intre cele doua valori se aplica un algoritm de ajustare a ponderilor, astfel incat urmatorul set de date introdus in retea sa produca o iesire mai apropiata de cea dorita. Acest process se va repeat pana cand nu mai exista seturi de date de antrenare, sau pana cand se considera ca reteaua este pregatita pentru folosire.
Chiar daca exista o multitudine de metode bine definite de antrenare a retelelor feedforward, nici una dintre acestea nu poate fi aplicata in cazul retelelor recurente, mai ales in cazul in care acestea trebuie sa reactioneze la un set complex de intrari dinamice. Deoarece este in general imposibil sa se genereze toate, sau chiar o mica combinatie reprezentativa de seturi de intrare dinamice, construirea unui algoritm de antrenare pentru aceste retele devine extreme de dificila. In multe cazuri, arhitecturile pentru aplicatii inteligente de control trebuie construite manual, prin determinarea individuala a fiecarei ponderi printr-un process indelungat de incercari.
Pentru a ilustra acest lucru se poate privi un exemplu de retea recurenta foarte simpla, dar capabila sa genereze un comportament foarte complex, care variaza intr-un mod previzibil in functie de intari, reprezentata in figura urmatoare:
Aceasta retea reprezinta creierul sistemului care controleaza locomotia unui gandac de bucatarie artificial “Periplaneta computatrix” proiectat si construit de catre Randall Beer la Case Western Reserve University. Aceasta retea de control consta din sase neuroni capabili sa produca impulsuri ritmice numai in functie de propria dinamica intrinseca. Aceste performante au fost realizate prin folosiera unor neuroni construiti virtual prin cod software, care emuleaza potentialul neuronilor biologici printr-o retea simulata reezistiva/capacitiva. Potentialul acestor membre artificiale este manipulat prin intrari de curenti intrinseci dar si prin legaturi sinaptice obisnuite. Aceasta retea cauzeaza neuroinii sa actioneze cu o rata de frecventa determinata de intrarile sinaptice si cele intrinseci.
In mod explicit comportamentul acestor neuroni este urmatorul:
Cand neuronal este injectat cu un curent intrinsic negativ suficient de puternic (hiperpolarizare) nu face nimic. Cand este excitat cu o cantitate sufcienta de current pozitiv (depolarizare) actioneaza continuu. Intre hipeprpolarizare si depolarizare completa neuronul actioneaza sub forma de impulsuri de lungimi egale la rate determinate de valoarea curentului intrinsic. Prin variatia curentului impulsurile pot fi accelerate sau decelerate.
In cazul “Periplaneta computatrix” sase astfel de neuroni sunt conectati prin legaturi fixe inhibitorii. Fiecare dintre acesti neuroni este conectat prin legaturi fixe sinaptice cu alte retele sau motoare si neuroni senzoriali care controleaza picioarele insectei. Fiecare neuron este conectat de asemenea printr-o alta sinapsa fixa la un neuron unic de control al miscarii. Gradul de activare al acestui neuron central, in conjuctie cu ponderile legaturilor sinaptice cu ceilalti neuroni determina modelul de actionare al intregului circuit.
Gradul de complexitate implicat de functionarea acestor sase neuroni este remarcabil. Prin simpla variatie a voltajelor de iesire ale neuronului de control valorile de iesire ale retelei sunt transformate in impulsuri care pun in miscare “Periplaneta computatrix”.
Chiar daca aceste rezultate sunt extraordinare, ele nu sunt rezultatul unui algoritm de antrenare sau unei tehnici de configurare euristice. De fapt, datorita complexitatii extreme a comportamentuolui dorit, si a interdependentei temporale complexe intre datele de intrare si starea curenta a retelei ar fi extreme de dificil de gasit un algoritm capabil sa antreneze acest tip de retea.
In schimb, reteaua este rezultatul unei implementari scrpuloase a unui model biologic foarte detaliat, implementare a carei implementare a durat cativa ani pana cand a fost completa. Dar, destul de frecvent nu va exista un model biologic pentru mediul sau comportamentul care se studiaza. Fara acest model, construirea unei astfel de retele va fi la fel de eficienta ca si o cautare completa a tuturor solutiilor posibile. In acest caz o cautare euristica, cum ar fi implementarea antiadaptationista a algoritmilor genetici va evita folosirea celor doua extreme, adica cautarea completa sau cea manuala. Prin folosirea unui algoritm antiadaptationist se va face trecerea de la cautarea detaliilor irelevante catre analiza comportamentului practice al retelei. Operatorii genetici vor asigura faptul ca cautarea nu este exhaustiva, iar functiile obiectiv vor ramane singura parte a implementarii care trebuie construita manual.
5. Evolutia antiadaptationista
Adaptationismul este o teorie a evolutiei care a prevalat in studiul biologiei evolutioniste pentru multi ani. Datorita acestei aprobari unanime teoria adaptationista a avut efect asupra multor domenii legate de evolutie si genetica. Prezenta acesteia este puternica si in cazul algoritmilor genetici uzuali. La baza, presupune existenta unui mediu (nisa), in care evolueaza un organism. Din aceasta perspectiva se poate gasi un organism care se integreaza cel mai bine in acest mediu, iar scopul evolutiei este modificarea organismelor existente pentru a se ajunge la organisme cat mai bine adaptate la mediu. Selectia naturala continua pana cand se gaseste solutia optima, adica acel organism care se incadreaza cel mai bine in nisa. Odata ce aceasta solutie este gasita, existenta ei este explicata ca fiind cel mai bun raspuns la o anumita provocare a mediului (de exemplu pasarile au aripi pentru a putea sa zboare, iar pestii au inotatoare pentru a se putea deplasa in apa). Aceasta teorie este numita de catre critici “Panglosiana”, dupa numele caracterului Dr. Pangloss din romanul lui Voltaire “Candide”, o caricatura bizara a filozofului Leibniz care sustinea ca poate dovedi ca aceasta lume este cea mai buna dintre toate lumile posibile.
In mod contrar, evolutia antiadaptationista sustine ca rezultatul selectiei naturale nu trebuie sa fie intotdeauna veriga optima dintre organism si mediu, trebuie doar sa fie una satisfacatoare. Antiadaptationismul nu este o negare a rolului pe care il are adaptarea la evolutie, dar considera ca o serie de alti factori pe care adaptationismul ii ignora pot juca un rol important in procesul de evolutie. In particular antiadaptationismul sustine ca unele dintre cele mai importante caracteristici ale organismelor nu sunt rezultatul adaptarii, ci mai degraba rezultatul unei schimbari de functionalitate a unei caracteristici existente, sau rezultatul unui alt operator genetic sau evolutionist. De asemenea sustine ca mediul si organismele sunt inseparabile, ele evoluand impreuna. Antiadaptationismul sustine ca optimalitatea este uneori atinsa, dar nu acesta este adevaratul scop al selectiei naturale. Adaptarea este ceva diferit de optimizare.
Din acest punct de vedere evolutia nu forteaza un organism sa se contopeasca cu un model preexistent. Dinpotriva, odata ce organismul evolueaza acesta intervine asupra mediului, care in schimb exercita asupra organismului o noua forta evolutionista. Aceasta filozofie permite caracteristicilor si atributelor organismelor existente sa-si schimbe scopul, si deci, sa-si modifice contributia la forta organismului in timpoul istoriei evolutiei acestuia. De asemenea previne supraspecializarea unor specii, iar organismele capabile sa se adapteze cel mai repede la schimbarile externe sau provocate de propria lor influenta asupra mediului vor avea o probabilitate mai mare de supravietuire.
Teoria adapttaionista este de natura teologica. Din punctual de vedere adaptationist evolutia prin selectie naturala alege un design particular pentru un motiv specific. Acest motiv este de obicei descris in termini panglosieni ca cel mai bun rezultat posibil in circumstantele date. Aceasta motivare este in general considerata problematica din cel putin trei motive:
Cui ii este atribuit sistemul de credinta care a ales acest motiv si cu ajutorul caror standarde se masoara aceasta credinta
De ce trebuie sa acceptam faptul ca acele caracteristici care acum sunt considerate benefice au fost la inceput destinate aceluiasi scop
Cum trebuie luat in calcul, pentru evidenta ecvolutionista, faptul ca o serie de aspecte ale organismelor cunoscute nu pot fi consecinta adaptarii optimale prin selectie naturala
Antiadaptationismul recunoaste ca de multe ori acele atribute care sunt la un moment dat benefice pentru un organism au evoluat tocmai cu acest scop. Totusi permite de asemenea fenomene de tipul “autostop genetic” adica gene care sunt responsabile pentru atribute care la un anumit moment nu au avut nici o valoare selectiva, sau au putut fi chiar dezavantajoase pentru evolutie se reproduce tocmai datorita apropierii de gene care sunt avantajoase.
De asemenea se permite schimbarea functionalitatii atributelor. Un atribut sau comportament care este in prezent benefic pentru un anumit scop ar fi putut fi fost selectat in trecut atunci cand servea cu totul altui scop, sau la fel ca in cazul autostopului nu avea pur si simplu nici un scop.
Cel mai important, antiadaptationismul nu limiteaza justificarea comportamentelor doar la optimalitate. Strategiile de optimizare pot de multe ori sa restranga variabilitatea si viabilitatea organismelor rezultante, reducand plasticitatea si flexibilitatea genetica. Prin permiterea procesului de selectie naturala sa accepte solutii care indeplinesc niste standarde minime, deci satisfac teoria antiadaptationista, se permite nasterea unor structuri mai robuste si cu resurse crescute din care sa se poata face alegeri pentru variabilitate.
De ce un algoritm genetic antiadaptationist?
Algoritmii genetici nu sunt in general folositi ca unelte pentru modelarea proceselor genetice, si in concluzie, alegeri si compromisuri s-au facut pentru a se alege operatorii genetici care sa se implementeze si cum sa se implementeze acestia. In particular, interpretarea functionalitatiilor acestor operatori nu a potut justifica teoria adapattionista a evolutiei. Chiar daca eficienta acestei abordari pentru multe aplicatii curente de optimizare nu poate fi pusa in discutie se nasc dubii cu privire la eficienta potentiala pentru aplicatii care necesita sisteme de evolutie complexe si strans legate intre ele. Dupa cum poate fi pus in evidenta de extraotrdinara complexiate si diversitate a organsimelor biologice, sistemele de evolutie naturala sunt deja capabile sa rezolve aceste tipuri de probleme. Trebuie acum sa decidem cum sa interpretam cel mai bine metodele naturale de evolutie si cum putem sa le aplicam pentri sistemele artificiale.
Exista un bun motiv pentru a crede ca evidenta biologica suporta punctul de vedere antiadaptationist. Lewontin a sustinut ca existenta “autostopului genetic” si efectele “remorcarilor genetice” nu sunt luate in considerare de catre curentul adaptationist. Aceste fenomene nu sunt de asemenea prezente in cadrul algoritmilor genetici adaptationisti datorita naturii zgarcite a operatorilor. Incrucisarea si selectia, in modul de implementare current, sunt indreptate numai catre acele scheme care contribuie la un moment dat la cresterea puterii organismului. Se presupune ca viitoarele aptituduni ale organismului vor fi bazate tocmai pe aceste scheme. Schemele care in prezent nu sunt determinative sau nu contribuie la abilitatile curente sunt indepartate.
Exista motive sa credem ca, din contra, natura nu este la fel de eficienta cu folosirea propriior resure cromozomiale.Un procent relativ mare din genomii biologici constau din AND inutil fara expresivitate pentru organism. Dar studiile recente au sugerat faptul ca aceasta portiune nefolositoare a genomului nu trebuie sa fie considerata “deseu” ci material valoros pentru evolutia viitoare a speciei.
In aplicatiile algoritmilor genetici aceasta teorie se poate dovedi de asemenea adevarata. O data ce aplicatiile cresc in complexitate si scopuri, genomii vor creste probabil si ei, iar efortul de calcul necesar pentru gasirea unei solutii aceeptabile se va mari. Daca implementarea operatorilor genetici continua sa elimine partile din genom care pot fi utile in viitor, procesul evolutionist va trebui sa se reinitializeze la fiecare schimbare a starilor sistemului, intr-un spatiu de cautare larg acest lucru fiind inacceptabil.
Un argument fundamental care poate fi adus pentru sustinerea teoriei antiadaptationiste este presupunerea ca schemele care contribuie la aptitudinile organismului current nu vor avea acelasi rol intr-un organism mai bine integrat. Exemple specifice biologice de esecuri ale teoriei adaptationiste sunt usor de gasit.
De exemplu specia de broaste testoase Chelonia Mylas isi foloseste inotatoarele pentru a se tara pe plajele nisipoase si pentru a sapa gauri in care sa-si depuna ouale. Poate parea evident ca aceste inotaoare au evoluat initial pentru a-i permite speciei sa inoate, iar acum servesc unui nou scop care contribuie la supravietuire. Contrar teoriei adaptationiste, inotatoare nu au fost adaptate pentru acest scop specific, sunt doar cele mai eficiente unelte la care specia a avut acces. Punctul de vedere limitat al adaptationiosmului nu va putea accepta folosirea evidenta a inotatoarelor pentru deplasare in apa dar si ca mijloc de ajutorare a procesului de inmultire.
Un argument poate si mai convingator a fost adus cu privire la originea aripilor insectelor. Un adept al adaptationismului va spune ca scopul acestora este evident pentru zbor. Totusi unele studii au aratat ca aceste aripi nu au evoluat ca mijloc de locomotive ci ca o modalitate de reglare termica. Experimentele au aratat ca acele extensii colorate din apropierea toracelui insectelor paleozoice prezburatoare le-ar fi crescut temperatur corpului cu 55% fata de insectele care nu erau echipate similar. Acest lucru le-a conferit un real avantaj in evolutie prin posibilitatea evolutiei mai rapide catre un echilibru termic dar si prin eficenta locomotorie, un avantaj crucial pentru supravietuire.
Pentru a extinde acest exemplu sa consideram o alta situatie in care aripile servesc la scopuri secundare. Albinele isi folosesc in general aripile ca ventilatoare pentru racire si protejare a larvelor din stup. Sa consideram acum o situatie ipotetica in care climatul global se va modifica gradual astfel incat acest mijloc de racier va deveni de o importanta primara. Teoria adaptationista ar fi atunci fortata sa considere ca aceasta sarcina de racire este scopul natural al aripilor ceea ce este in mod evident eronat. O evolutie adaptationista ar fi eliminat aceste aripi cu scop secundar, rezultatuul fiind distrugerea speciei in momentul in care ele ar fi devenit o conditie esentiala de supravietuire.
In cazul algoritmilor genetici adaptationisti operatorii genetici sunt aplicati continuu pana cand este gasita cea mai buna incadrare. In cazul aplicatiilor cu un grad limitat de definire, sau cand algoritmul este folosit ca un optimizator aceasta abordare ar putea fi satisfacatoare. Totusi, in cazul aplicatiilor in care structuri complexe sau comportamente multiple trebuie sa evolueze, aplicarea operatorilor pana la un punct de optim ar putea impiedica variabilitatea si ar reduce robustetea. Sunt foarte rare cazurile in care ceea ce este optim este neaparat si robust, iar robustetea este esentiala pentru generarea unor raspunsuri adecvate intr-un mediu dinamic. Singurul argument care poate fi adus in sprijinul acestei teorii este definirea optimalitatii in termini de robustete. Aceasta accentuare a plasticitatii este exact scopul pe care si-l propue o abordare antiadaptationista.
Este foarte posibil ca rezultatul optimizarii sa supraspecializeze reteaua, caz in care aceasta va raspunde perfect la seturile de date de antrenare, dar va fi incapabila sa raspunda la o intrare din afara acestui set. Reteaua va deveni supraspecializata si fragile in fata provocarilor unor intrari dinamice. In mod natural tocmai acesta este motivul care sta la baza disparitiei unor specii. Cand o specie nu mai poate raspunde la provocarile unui mediu in schimbare va disparea indubitabil.
Aceasta tehnica antiadaptationista de optimizare in cadrul unei nise specifice, si de fragilitate rezultata de aici este tipica pentru multe tehnici de inteligenta artificiala. Prin ingustarea artificiala a spatiului interactiunilor dintre structura si mediu si prin alegerea doar a acelor operatii si atribute care par cele mai bune pentru aplicatiile imediate, aceasta tehnica tinde catre optimalitate in acest spatiu dar in acelasi timp induce fragilitate. Cand tehnica este aplicata unor probleme mai largi si mai complexe, sau noi constrangeri trebuie impuse spatiului de cautare, trebuie adaugate functionalitati suplimentare tehnicii, sau pur si simplu aceasta va da gres, va deveni un “savant idiot”.
O abordare antiadaptationista prezinta premise incurajatoare in evitarea capcanelor eliminarii de informatii utile din genomi, deoarece nu foloseste operatori genetici de optimizare ci de statisfacere. Acest lucru promoveaza robustetea prin retinerea unei cantitati mai mari de material genetic din care se poate alege pentru variabilitate si plasticitate. Acest efect va fi privit atat din punct de vedere istoric (prin oferirea unei game mai mari de indivizi intr-o populatie care pot reprezenta cai de evolutie diverse catre o solutie satisfacatoare) dar si al genomilor individuali (prin evoluarea indivizilor cu librari mai largi de material genetic din care sa se poata extrage solutii viitoare).
5.1. Implementare antiadaptationista
Scopul realizarii unui algoritm genetic antiadaptationist este folosirea acestuia in aplicatii in care trebuie sa fie evaluate structuri cu multe atribute sau comportamente complexe, sau pentru structuri care trebuie sa opereze in medii dinamice unde adaptabilitatea reprezinta o necessitate. Aceste tipuri de structuri vor necesita o robustete si flexibilitate care n-ar putea fi obtinuta prin tehnici de optimizare. Prima intrebare care se pune este cum va diferi implementarea antiadaptationista de una clasica in modul de folosire current.
In primul rand o structura va evolua numai pana cand va indeplini conditiile minime de incadrare in mediu. Acest lucru se realizeaza pentru a preveni supraspecializarea structurii, si pentru a preveni operatorii genetici sa indeparteze mai mult material genetic decat este ecesar. Se poate intampla ca incadrarea minimala sa fie si cea optima, dar acest lucru se intampla foarte rar.
In al doilea rand, modul de masurare al incadrarii unei structuri sau organism va ramane acelasi, dar procesul de selectie va fi diferit. Distinctiile aptitudinale vor fi inca preznete, acei indivizi care functioneaza cel mai bine in momentul current fiind evaluati mai bine decat cei care nu se incadreaza la fel de bine. Totusi, toti indivizii care indeplinesc niste conditii minime de incadrare vor avea sanse egale de a se reproduce. Acest lucru diferentiaza aceasta tehnica de cea clasica in care indivizii se puteau reproduce in functie de probabilitatiile date de gradul de incadrare in mediu. Acest lucru va incuraja diversitatea genetica printer membrii populatiei, generand o gama mai mare de atribute din care operatorii genetici sa poata alege, si inhiband distrugerea unor informatii care ar putea fi relevante in viitor.
Se poate oferi un exemplu al modului in care functiuoneaza aceasta selectie prin procesul de admitere la o facultate. Chiar daca in urma unor criterii de examinare se va realiza un clasament al pretendentilor, toti cei care indeplinesc un barem minim de admitere vor avea sanse egale in viitor ca studenti, nefiind intotdeauna necesar ca cei care au fost plasati cel mai sus in procesul de admitere sa fie in viitor si cei mai buni studenti.
In final, algoritmul antiadaptationist va creste adaptabilitatea unei structurii, si nu va adapta structura la un mediu particular. Prin incurajarea adaptabilitatii in detrimental optimalitatii se poate construi in cadrul structurii abilitatea de a interactiona si de a-si modifica mediul. De asemenea se elimina specificatiile scopurilor pentru o structura sau un comportament permitandu-se generalizarea si functionalitatea. Aceasta va duce la evolutia structurilor si comportamentelor de baza care se pot adapta in viitor la scopuri mai specifice.
Se poate observa un tip similar de evolutie in multe forme de reflexe. De exemplu tresarirea unui cal de iarba apare indiferent de sursa disturbarii. Acesta reactioneaza la fel ca raspuns la aparitia unui dusman sau a unei simple pale de vant prin iarba. Daca acest raspuns ar fi fost optimizat pe o sursa specifica de disturbanta, un reflex complet nou ar fi trebuit sa evolueze pentru fiecare noua amenintare intalnita, In schimb o mica cantitate de energie este pierduta in cazul amenintarilor falsae in schimbul unui comportament general si robust de supravietuire.
Totusi, cele mai multe schimbari asupra implementarii algoritmului genetic apar in procedura de selectie. Multe din celelalte aspecte ale algoritmului vor ramane neschimbate, dar schimbarile facute vor avea un impact semnificativ asupra eficientei algoritmului in rezolvarea unor probleme complexe, dar si asupra robustetii solutiilor pe care le ofera.
Dupa cum s-a mentionat mai sus exista foarte putini algoritmi de antrenare a retelelor care implica comportamente complexe, dinamice, sau care trebuie sa interactioneze cu un mediu, sau set de intrari, dependent de timp. In continuare se va implementa un algoritmm genetic care foloseste abordarea antiadaptationista de evolutie pentru a genera arhitecturi de retele aplicabile tocmai acestor tipuri de probleme. Pentru a realize acest lucru se vor sublinia doar modificarile specifice care trebuie facute asupra algoritmului genetic classic.
Mai intai, arhitectura neurala se va separa de ponderi. Acest lucru se realizeaza pentru a se permite cea de-a doua modificare specifica: operatiile genetice au loc in cadrul populatiilor cu arhitecturi neurale asemanatoare. Acest lucru se realizeaza prin utilizarea unui process de control al populatiei globale care guverneaza interactiunile dintre o serie de subpopulatii.
Se considera problema proiectarii unei retele simple pentru rezolvarea problemei XOR. Toate arhitecturile viabile vor avea acelasi numar de noduri de intrare si iesire, totusi exista un mare grad de variatie in cazul numarului de nivele ascunse si de noduri din fiecare dintre acestea. Pentru prevenirea incercarilor de incrucisare intre noduri sau nivele inexistente, doar modelele cu aceeasi arhitectura pot evolua impreuina. Aceasta restrictie este analoga cu idea biologica a compatibilitatii ADN intre specii.
Ultima specializare permite oricarei arhitecturi nou create sa intre in competitie pentru resursele globale. Pe masura ce noile arhitecturi apar prin mutatiile suferite de arhitecturile deja existente acestea sunt angrenate intr-o competitie cu subpopulatia cu cel mai mic grad de adaptabilitate. Fiecarei arhitecturi i se ofera propria subpopulatie cu care sa lucreze. Daca noua arhitectura, aparuta prin mutatie va produce precursori mai bine adaptati decat cea cu care a intrat in competitie intr-o perioada limitata de timp o va inlocui pe aceast a in cadrul populatiei globale. In acest fel orice arhitectura nou aparuta va avea oportunitatea sa concureze pentru resursele globale limitate de numarul initial de subpopulatii.
Aplicatie practica
Proiectarea retelelor neurale folosind algoritmi genetici
1. Prezentare aplicatie
Pentru demonstrarea capabilitatilor algoritmilor genetici, si abilitatii acestora de a proiecta o retea neurala pentru o aplicatie specifica se foloseste o problema simpla de tip XOR, poate nu cea mai buna solutie in acest caz, dar suficienta pentru a exemplifica modul de lucru al algoritmului.
Este o problema simpla, dar utila in diverse aplicatii practice, cel mai raspandit exemplu fiind cazul in care doua intrerupatoare controleaza aceeasi sursa de lumina. Actionand asupra oricaruia din cele doua intrerupatoare independent, starea sursei de lumina trebuie sa se modifice. Codificarea problemei poate fi dedusa din tabelul urmator:
In cazul particular prezentat, se considera doua date de intrare avand valori in intervalul 0-9. Iesirea sistemului va fi dictata de valoarea aplicarii functiei XOR asupra rezultatului unei comparatii intre fiecare din cele doua date de intrare si un prag stabilit, in acest caz egal cu 5.
Problema a fost implementata folosind o retea neurala de tip Feed-Forward, datorita simplitatii si eficientei acesteia. In prezent retelele de tip Feed-Forward se folosesc in majoritatea aplicatiitiilor practice. Reteaua este formata dintr-un strat de intrare cu doua elemente de procesare, uns trat ascuns cu trei elemente, si unul de iesire avand un singur neuron. Cele trei straturi sunt conectate complet intre ele prin legaturi de tip inainte.
Pentru introducerea in retea a celor doua valori de intrare s-a folosit forma binarizata a acestora, astfel justifcandu-se cele patru intrari ale fiecarui neuron (toate valorile admisibile de intrare se pot reprezenta pe maxim 4 biti).
Toate functile de insumare sunt functii simple de tipul S=i1*w1+i2*w2+…, iar ca functie de transfer s-a folosit un filtru trece sus, cu o valoare de prag data de jumatatea sumei ponderilor legaturilor de intrare in neuronul respectiv.
Algoritmul genetic intervine in procesul de antrenare pentru ajustarea ponderilor retelei, astfel incat iesirea acesteia sa fie cat mai aproape de cea dorita.
Algoritmul genetic primeste ca argument marimea unei populatii initiale, pe care o populeaza in mod aleator cu indivizi de lungime 64 rerezentand forma binara a celor 17 ponderti reprezentata fiecare pe cate 4 biti, concatenate. Datorita acestei reprezentari pe 4 biti, valoarea maxima pe care o poate lua o pondere este de 15 (1111). In continuare algoritmul aplica un numar de operatorii de incrucisare intr-un punct ales aleator la fiecare pas, si de mutatie, pentru indivizii selectati. Data fiind abordarea antiadaptationista, se incearca propagarea unui numar cat mai mare de indivizi de la o generatie la alta, si nu se urmareste obtinerea unei solutii optime, ci oferirea unui numar semnificativ de solutii cat mai apropiate de cea optima, pentru a se incuraja evolutia ulterioara a sistemului si adaptarea acestuia la provocarile mediului. Din acest motiv functia de selectie nu aplica o implementare de probabilitati de reproducere, toti indivizii cu o valoare a adaptabilitatii mai mare decat un prag impus, tot mai ridicat la fiecare generatie, au sanse egale de a se reproduce si de a genera indivizi noi. Pentru a creste adaptabilitatea la fiecare generatie se adauga un numar predefinit de indivizi noi, generati aleator, care vor contribui si ei la evolutia ulterioara a sistemului.
Functia obiectiv, si implicit puterea fiecarei solutii, se calculeaza in functie de numarul de erori pe care le genereaza propagarea tuturor valorilor de test prin reteaua ajustata cu ponderile respective.
2. Implementare
Algoritmul genetic implementat in limbajul C++ contine urmatoarele functii:
int intreg2binar(int numar)
Primeste un numar intreg si intoarce valoarea binara a acestuia, obtinuta prin impartiri succesive la 2. Functia va fi utilizata pentru implementarea unor functii ulterioare.
int binar2intreg(int binar)
Este forma inversa a functiei precedente, transformand numarul binar in forma zecimala a acestuia.
int rotunjire(float numar)
Functia intoarce partea intreaga a argumentului, necesara in viitor.
populatie adaugareindivid(populatie &populatieveche)
Functie de generare aleatoare a unui individ si introducere a acestuia in populatie.
populatie inserareindivid(populatie &populatieveche,persoana individ1)
Introduce in populatia data individul primit ca argument. Functia este necesara in procesul de selectie.
persoana incrucisare(persoana individ1,persoana individ2)
Implementeaza operatorul genetic de incrucisare intre cei doi indivizi primiti ca argument, intr-un punct obtinut in mod aleator, si returneaza noul individ obtinut
persoana mutatie(persoana individ)
Implementeaza operatorul genetic de mutatie intr-un punct obtinut in mod aleator si returneaza noul individ obtinut.
populatie selectie(populatie &populatieveche,int prag)
Implementeaza operatorul genetic de selectare a indivizilor care se incadreaza n pragul stabilit. Fiecare individ selectat este introdus in cadrul noii populatii folosinf functia inserareindivid. In cazul in care nici un individ din vechea populatie nu indeplineste baremul de trecere, functia va returna aceasta populatie, incercandu-se o evolutie ulterioara cu ajutorul noilor indivizi care vor fi adaugati ulterior.
populatie generarepopulatie(int marime)
Functia este folosita la generarea populatiei initiale. Apeleaza functia adaugareindivid pentru adaugarea fiecaruia din cei n indivizi, unde n este marimea populatiei initiale.
int obiectiv(persoana individ1)
Implementeaza functia obiectiv de calcul al puteri fiecarui individ. Este folosita de fiecare data cand este generat un nou individ prin adaugare, incrucisare sau mutatie. Functia foloseste functia retea descrisa mai jos.
int retea(int i1,int i2,int pond[18])
Simuleaza reteaua neurala specifica dscrisa in sectiunea de prezentare a apliocatiei si intoarce raspunsul acesteia pentru intrarile si ponderile date.
Pentru reprezentarea datelor se folsoesc urmatoarele structuri:
struct persoana
{
int pondere[70];
int fitness;
};
Fiecare individ este o variabila de tip persoana formata dintr-un tablou de 68 de elemente reprezentand forma binarizata a ponderilor acestuia, si o valoare intreaga reprezentand puterea acestuia.
struct populatie
{
struct persoana individ [200];
int marime;
};
Reprezinta o populatie formata din maxin 200 de indivizi. Structura contine si marimea populatiei date.
Dupa terminarea procesului de antrenare, ponderile obtinute sunt salvate in fisier de unde sunt preluate automat de proiectul „LabView” in care este prezentata o reprezentare grafica a retelei neurale.
3. Concluzii
Rezultatele obtinute de acest algoritm pot parea laprima vedere destul de slabe in comparatioe cu cele obtinute folosind tehnicile de antrenare standard BackPropagation, dar scopul acestei lucrari a fost demonstarrea capaciattilor algoritmilor genetici de a ajusta ponderile unei retele neurale. Algoritmul nu a fost proiectat pentru a fi folosit in acet tip de aplicatii, ci pentru cele complexe de adaptare la parametri de intrare dinamici pentru care in general nu se pot aplica tehnicile standard de antrenare, algoritmul genetic fiind singura posibilitate de abordare viabila.
O posibila justificare a erorilor aparute ar putea deriva si din insasi arhitectura retelei folosite. Este foarte posibil ca, folosind o arhitectura mai complexa. Cu mai multe straturi si elemente de procesare, eventual si cu straturi de tip Kohonen preponderente in problemele de clasificare, rezultatul obtinut sa fie unul mai apropiat de cel optim.
Bibliografie:
Antognetti, P. and Milutinovic, V., Neural Networks: Concepts, Applications,
and Implementations (Eds.) Volumes I-IV, Prentice Hall, Englewood Cliffs, NJ., 1991.
Baba, Norio – Neural Networks, Volume 2, 1989.
Bäck T. et Hoffmeister F., " Global optimization by means of evolutionary
algorithms ", in A.N. Antamoshkin, editor, Random Search as a Method for Adaptation and Optimization of Complex Systems, p. 17-21, Divnogorsk, ex-URSS, mars 1991.
Bäck T., " Self-Adaptation in Genetic Algorithms ", Proceedings of the 1st
European Conference on Artificial Life, p. 263-271. Cambridge, MA : MIT Press, 1992.
Beasley D., Bull D.R. et Martin R.R., " An Overview of Genetic Algorithms :
Part 2, Research Topics ", University Computing, vol. 15, n°4, p. 170-181, 1993b.
Bergson H., L'évolution créatrice. Paris : PUF, 1907.
Brown, Robert J., "An Artificial Neural Network Experiment", Dr. Dobbs
Journal, April 1987.
Carpenter, Gail A., and Grossberg, Stephen, "ART 2: Self-Organization of
Stable Category Recognition Codes for Analog Input Patterns", Applied Optics, 1987.
Carpenter, Gail A., and Grossberg, Stephen, "The ART of Adaptive Pattern
Recognition by a Self-Organizing Neural Network", Computer, March, 1988.
Caudill, Maureen, and Butler, Charles, Naturally Intelligent Systems, The MIT
Press, ISBN 0-262-03156-6, 1990.
Daniel C. Dennett. Intentional systems in cognitive ethology: The „Panglosian
paradigm'' defended. Behavioral and Brain Sciences, 6:343-390, 1983.
Darwin C., The Origin of Species, 1859.
Ion Dumitrache – Tehnica Reglarii Automate, curs UPB 2002/2003
Fukushima, Kuniko, "Cognitron: A Self-Organizing Multilayered Neural
Network", Biological Cybernetics, Volume 20, 1975.
Gaudiano, P., and Grossberg, Stephen, "Vector Associative Maps: Unsupervised
Real-Time Error-Based Learning and Control of Movement Trajectories", Neural Networks, Volume 4, 1991.
AL Geist et al. PVM 3 Users's Guide and Reference Manual. Oak Ridge
National Laboratory, Oak Ridge, TN, 3.2 edition, 1993.
D. E. Goldberg. Genetic Algorithms in Search, Optimization, and Machine
Learning. Addison-Wesley, Reading MA, 1989.
Yoh-Han, Adaptive Pattern Recognition and Neural Networks, Addison-Wesley,
1989.
Hebb, D. O., The Organization of Behavior, Wile, New York, New York, 1949.
Hecht-Nielsen, Robert, "Counter-Propagation Networks", IEEE First
International Conference on Neural Networks, Volume II, 1987.
Jürgen Brosius and Stephen Jay Gould – On „genomenclature'': A
comprehensive (and respectful) taxonomy for pseudogenes and other „junk DNA''. Proceedings of the National Academy of Sciences, 89:10706-10710, 1992.
Kohonen, T., Self-Organization and Associative Memory, Second Edition,
Springer-Verlag, New York, 1988.
Kohonen, T., et al., "Statistical Pattern Recognition with Neural Networks:
Benchmark Studies", Proc. of the Second Annual IEEE I nternational Conference on Neural Networks, Volume 1, 1988.
Matyas, J., "Random Optimization", Automation and Remote Control, Volume
26, 1965.
McEliece, R.J., Posner, E.C., Rodemich, E.R., and Venkatesh, S.S., "Capacity of
the Hopfield Associative Memory", California Institute of Technology Internal Report, 1986.
Minsky, Marvin L., and Papert, Seymour S., Perceptrons: An Introduction to
Computational Geometry, MIT Press, Cambridge, MA 1969.
Moshe Sipper – On the Origin of Environments by Means of natural Selection
© Copyright American Association for Artificial Inteligence
Niles Eldridge. A la recherche du docteur Pangloss. Behavioral and Brain
Sciences, 6:361-362, 1983.
Reece, Peter, "Perceptrons and Neural Nets", AI Expert, Volume 2, 1987.
Randall D. Beer and John C. Gallagher – Evolving dynamical neural networks
for adaptive behavior Adaptive Behavior, 1(1):91-122, 1992.
Scheff, K. and Szu, H. "Gram-Schmidt Orthogonalization Neural Networks for
Optical Character Recognition", Journal of Neural Network Computing, Winter, 1990.
Specht, D.F., "Probabilistic Neural Networks for Classification, Mapping or
Associative Memory", ICNN-88 Conference Proceedings, 1988
Specht, D.F., "Probabilistic Neural Networks", Neural Networks, November
1990.
Stanely,Jeannette, "Introduction to Neural Networks", Californian Scientific
Software, 1988.
Stephen J. Gould and Richard C. Lewontin. The spandrels of San Marco and the
Panglossian paradigm: A critique of the adaptationist programme. In Proceedings of the Royal Society of London, pages 147-164, 1979.
VAlluru B. Rao – C++ Neural Networks and Fuzzy Logic,IDG Books
Worldwide, Inc
Patrick Henry Winston. Artificial Intelligence. Addison-Wesley, Reading MA,
third edition, 1992.
Anexa 1
Codul sursa al algoritmului genetic:
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <time.h>
int iobiectiv,jobiectiv;
int jrezerva;
int er;
struct persoana
{
int pondere[70];
int fitness;
};
struct populatie
{
struct persoana individ [200];
int marime;
};
int obiectiv(persoana individ1);
int retea(int i1,int i2,int pond[18]);
int intreg2binar(int numar)
{
int binar=0;
for (;numar>1;)
{
int numar1=numar;
numar=numar/2;
binar=10*binar+(numar1-2*numar);
}
binar=10*binar+1;
return (binar);
}
int binar2intreg(int binar)
{
int intreg=0;
if (binar/1000==1)
intreg=intreg+8;
binar=binar%1000;
if (binar/100==1)
intreg=intreg+4;
binar=binar%100;
if (binar/10==1)
intreg=intreg+2;
binar=binar%10;
if (binar==1)
intreg=intreg+1;
return (intreg);
}
int rotunjire(float numar)
{
if (numar>=5)
return 1;
else
return 0;
}
int validareindivid(persoana individ)
{
int eroare=0;
for (int i=1;i<=68;i=i+4)
{
int binar=1000*individ.pondere[i]+100*individ.pondere[i+1]+10*individ.pondere[i+2]+individ.pondere[i+3];
int intreg=binar2intreg(binar);
if (intreg>9)
eroare=1;
}
return (eroare);
}
populatie adaugareindivid(populatie &populatieveche)
{
int i=populatieveche.marime;
for (int j=1;j<=68;j++)
{
int numar=rotunjire(random(10));
populatieveche.individ[i].pondere[j]=numar;
}
populatieveche.individ[i].fitness=0;
populatieveche.individ[i].fitness=obiectiv(populatieveche.individ[i]);
populatieveche.marime++;
return(populatieveche);
}
populatie inserareindivid(populatie &populatieveche,persoana individ1)
{
int i=populatieveche.marime+1;
for (int j=1;j<=68;j++)
{
populatieveche.individ[i].pondere[j]=individ1.pondere[j];
}
populatieveche.individ[i].fitness=individ1.fitness;
populatieveche.marime++;
return(populatieveche);
}
/*persoana stergereindivid(numarindivid, persoana populatie)
{
int i=numarindivid;
int k=marimepopulatie;
for (int j=1:j<=68:j++)
{
populatie[i].pondere[j]=populatie[k].pondere[j];
populatie[i].fitness=populatie[k].fitness;
}
return(populatie);
}
*/
persoana incrucisare(persoana individ1,persoana individ2)
{
int i=random(68);
for (int k=1;k<=i;k++)
{
individ1.pondere[k]=individ2.pondere[k];
}
individ1.fitness=obiectiv(individ1);
return (individ1);
}
persoana mutatie(persoana individ)
{
int i=random(68);
if (individ.pondere[i]==0)
individ.pondere[i]=1;
else
individ.pondere[i]=0;
return (individ);
}
populatie selectie(populatie &populatieveche,int prag)
{
populatie populatienoua;
populatienoua.marime=0;
for (int i=1;i<=populatieveche.marime;i++)
{
if (populatieveche.individ[i].fitness<prag)
{
populatienoua=inserareindivid(populatienoua,populatieveche.individ[1]);
}
}
if (populatienoua.marime==0)
return(populatieveche);
return (populatienoua);
}
populatie generarepopulatie(int marime)
{
populatie populatienoua;
populatienoua.marime=0;
for (int i=1;i<=marime;i++)
{
adaugareindivid(populatienoua);
}
return (populatienoua);
}
int obiectiv(persoana individ1)
{
int putere;
int kobiectiv=1;
int pond[22];
iobiectiv=1;
for (iobiectiv=1;iobiectiv<=68;iobiectiv=iobiectiv+4)
{
pond[kobiectiv]=0;
if (individ1.pondere[iobiectiv]==1)
pond[kobiectiv]=pond[kobiectiv]+8;
if (individ1.pondere[iobiectiv+1]==1)
pond[kobiectiv]=pond[kobiectiv]+4;
if (individ1.pondere[iobiectiv+2]==1)
pond[kobiectiv]=pond[kobiectiv]+2;
if (individ1.pondere[iobiectiv+3]==1)
pond[kobiectiv]=pond[kobiectiv]+1;
kobiectiv++;
}
er=0;
int optim;
int raspuns;
for (iobiectiv=0;iobiectiv<10;iobiectiv=iobiectiv+3)
for (jobiectiv=0;jobiectiv<10;jobiectiv=jobiectiv+3)
{
jrezerva=jobiectiv;
raspuns=retea(iobiectiv,jobiectiv,pond);
jobiectiv=jrezerva;
if ((iobiectiv<5) && (jobiectiv<5))
optim=0;
if ((iobiectiv<5) && (jobiectiv>=5))
optim=1;
if ((iobiectiv>=5) && (jobiectiv<5))
optim=1;
if ((iobiectiv>=5) && (jobiectiv>=5))
optim=0;
if (raspuns!=optim)
er++;
}
putere=49-er;
return (putere);
}
/*
int retea(int i1,int i2,int pond[17])
{
i1 = i1;
i2 = i2;
pond[0] = pond[0];
return (0);
}
*/
int retea(int i1,int i2,int pond[18])
{
int int1[5],int2[5];
int iesirei1,iesirei2;
int iesireh1,iesireh2,iesireh3,iesireh4;
int iesire;
int intrare1=intreg2binar(i1);
int intrare2=intreg2binar(i2);
for (int i=1;i<=4;i++)
{
int1[5-i]=intrare1%10;
intrare1=intrare1/10;
int2[5-i]=intrare2%10;
intrare2=intrare2/10;
}
iesirei1=pond[1]*int1[1]+pond[2]*int1[2]+pond[3]*int1[3]+pond[4]*int1[4];
int prag=(pond[1]+pond[2]+pond[3]+pond[4])/2;
if (iesirei1>=prag)
iesirei1=1;
else
iesirei1=0;
iesirei2=pond[5]*int2[1]+pond[6]*int2[2]+pond[7]*int2[3]+pond[8]*int2[4];
prag=(pond[5]+pond[6]+pond[7]+pond[8])/2;
if (iesirei2>=prag)
iesirei2=1;
else
iesirei2=0;
iesireh1=pond[9]*iesirei1+pond[10]*iesirei2;
prag=(pond[9]+pond[10])/2;
if (iesireh1>prag)
iesireh1=1;
else
iesireh1=0;
iesireh2=pond[11]*iesirei1+pond[12]*iesirei2;
prag=(pond[11]+pond[12])/2;
if (iesireh2>prag)
iesireh2=1;
else
iesireh2=0;
iesireh3=pond[13]*iesirei1+pond[14]*iesirei2;
prag=(pond[13]+pond[14])/2;
if (iesireh3>prag)
iesireh3=1;
else
iesireh3=0;
iesire=pond[15]*iesireh1+pond[16]*iesireh2+pond[17]*iesireh3;
prag=(pond[15]+pond[16]+pond[17])/2;
if (iesire>prag)
iesire=1;
else
iesire=0;
return (iesire);
}
populatie populatienoua,populatieveche;
void main()
{
randomize();
persoana individnou;
int maxim,marimeinitiala;
printf("\n Marime populatie initiala:");
scanf("%d",&marimeinitiala);
int eroareminima;
eroareminima=1;
populatieveche=generarepopulatie(marimeinitiala);
int prag=100;
int epoca=0;
for (;(prag>eroareminima);)
{
/*Selectie*/
populatienoua=selectie(populatieveche,prag);
/* Incrucisare */
for (int i=1;i<=populatienoua.marime/4;i++)
{
int element1=random(populatienoua.marime);
int element2=random(populatienoua.marime);
individnou=incrucisare(populatienoua.individ[element1],populatienoua.individ[element2]);
populatienoua=inserareindivid(populatienoua,individnou);
}
/* Mutatie */
for (i=1;i<=populatienoua.marime/4;i++)
{
int element1=random(populatienoua.marime);
individnou=mutatie(populatienoua.individ[element1]);
populatienoua=inserareindivid(populatienoua,individnou);
}
/* Adaugare elemente noi */
for (i=1;i<=populatienoua.marime/10;i++)
{
populatienoua=adaugareindivid(populatienoua);
}
prag=prag-1;
epoca++;
maxim=0;
for (int contor=1;contor<=populatienoua.marime;contor++)
{
if (populatienoua.individ[contor].fitness>maxim)
maxim=populatienoua.individ[contor].fitness;
}
populatieveche=populatienoua;
}
// getch();
// if (populatieveche.marime<1)
// {
// printf("Nu am gasit nici o solutie. Cresteti eroarea minima acceptabila.");
// }
// if (prag<=eroareminima)
// {
int pozitiefitnesmaxim=0;
int fitnesmaxim=0;
printf("\n Solutia optima a fost salvata \n");
FILE *fp;
fp=fopen("sol1.txt","w");
fclose(fp);
fp=fopen("sol2.txt","w");
fclose(fp);
fp=fopen("sol3.txt","w");
fclose(fp);
fp=fopen("sol4.txt","w");
fclose(fp);
fp=fopen("sol5.txt","w");
fclose(fp);
fp=fopen("sol6.txt","w");
fclose(fp);
fp=fopen("sol7.txt","w");
fclose(fp);
fp=fopen("sol8.txt","w");
fclose(fp);
fp=fopen("sol9.txt","w");
fclose(fp);
fp=fopen("sol10.txt","w");
fclose(fp);
fp=fopen("sol11.txt","w");
fclose(fp);
fp=fopen("sol12.txt","w");
fclose(fp);
fp=fopen("sol13.txt","w");
fclose(fp);
fp=fopen("sol14.txt","w");
fclose(fp);
fp=fopen("sol15.txt","w");
fclose(fp);
fp=fopen("sol16.txt","w");
fclose(fp);
fp=fopen("sol17.txt","w");
fclose(fp);
int pond=0;
for (int i=1;i<=populatienoua.marime;i++)
{
if (populatienoua.individ[i].fitness>fitnesmaxim)
{
fitnesmaxim=populatienoua.individ[i].fitness;
pozitiefitnesmaxim=i;
}
}
for (int j=1;j<=68;j=j+4)
{
if (populatienoua.individ[pozitiefitnesmaxim].pondere[j]==1)
pond=pond+8;
if (populatienoua.individ[pozitiefitnesmaxim].pondere[j+1]==1)
pond=pond+4;
if (populatienoua.individ[pozitiefitnesmaxim].pondere[j+2]==1)
pond=pond+2;
if (populatienoua.individ[pozitiefitnesmaxim].pondere[j+3]==1)
pond=pond+1;
if (j==1)
fp=fopen("e:\sol1.txt","a+");
if (j==5)
fp=fopen("e:\sol2.txt","a+");
if (j==9)
fp=fopen("e:\sol3.txt","a+");
if (j==13)
fp=fopen("e:\sol4.txt","a+");
if (j==17)
fp=fopen("e:\sol5.txt","a+");
if (j==21)
fp=fopen("e:\sol6.txt","a+");
if (j==25)
fp=fopen("e:\sol7.txt","a+");
if (j==29)
fp=fopen("e:\sol8.txt","a+");
if (j==33)
fp=fopen("e:\sol9.txt","a+");
if (j==37)
fp=fopen("e:\sol10.txt","a+");
if (j==41)
fp=fopen("e:\sol11.txt","a+");
if (j==45)
fp=fopen("e:\sol12.txt","a+");
if (j==49)
fp=fopen("e:\sol13.txt","a+");
if (j==53)
fp=fopen("e:\sol14.txt","a+");
if (j==57)
fp=fopen("e:\sol15.txt","a+");
if (j==61)
fp=fopen("e:\sol16.txt","a+");
if (j==65)
fp=fopen("e:\sol17.txt","a+");
if (pond==0)
{
printf("%d ",pond);
fputc(48,fp);
fclose(fp);
}
if (pond==1)
{
printf("%d ",pond);
fputc(49,fp);
fclose(fp);
}
if (pond==2)
{
printf("%d ",pond);
fputc(50,fp);
fclose(fp);
}
if (pond==3)
{
printf("%d ",pond);
fputc(51,fp);
fclose(fp);
}
if (pond==4)
{
printf("%d ",pond);
fputc(52,fp);
fclose(fp);
}
if (pond==5)
{
printf("%d ",pond);
fputc(53,fp);
fclose(fp);
}
if (pond==6)
{
printf("%d ",pond);
fputc(54,fp);
fclose(fp);
}
if (pond==7)
{
printf("%d ",pond);
fputc(55,fp);
fclose(fp);
}
if (pond==8)
{
printf("%d ",pond);
fputc(56,fp);
fclose(fp);
}
if (pond==9)
{
printf("%d ",pond);
fputc(57,fp);
fclose(fp);
}
if (pond==10)
{
printf("%d ",pond);
fputc(49,fp);
fputc(48,fp);
fclose(fp);
}
if (pond==11)
{
printf("%d ",pond);
fputc(49,fp);
fputc(49,fp);
fclose(fp);
}
if (pond==12)
{
printf("%d ",pond);
fputc(49,fp);
fputc(50,fp);
fclose(fp);
}
if (pond==13)
{
printf("%d ",pond);
fputc(49,fp);
fputc(51,fp);
fclose(fp);
}
if (pond==14)
{
printf("%d ",pond);
fputc(49,fp);
fputc(52,fp);
fclose(fp);
}
if (pond==15)
{
printf("%d ",pond);
fputc(49,fp);
fputc(53,fp);
fclose(fp);
}
pond=0;
}
printf(" ");
printf("%d \n",fitnesmaxim);
getch();
}
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: Retele Neurale. Proiectarea Retelelor Neurale Folosind Algoritmi Genetici (ID: 148815)
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.
