INFORMATICA APLICATA IN STIINTE TEHNOLOGIE [306296]

UNIVERSITATEA “AUREL VLAICU” [anonimizat].univ.dr. Valeriu Beiu

Masterand: [anonimizat]

2018

SCURT REZUMAT AL LUCRĂRII

Lucrarea de față își propune să prezinte conceptele fundamentale ale controlului neuronal alături de principalele modele conexioniste ale inteligenței artificiale. După trecerea în revistă a [anonimizat].

Capitolul 1 [anonimizat] o prezentare a [anonimizat]. [anonimizat], modul de instruire a rețelelor și algoritmul de back propagation.

Capitolul 2 [anonimizat] a apărut, motivațiile biologice care au stat la baza definirii ca model si unele modele de aplicare in calculul neuronal.

Capitolul 3 grupează ceeace ține de aplicabilitatea in Matlab a modelelor de rețele neuronale convoluționale.

Capitolul 4 face referire la una din ramurile de aplicabilitate ale Deep Learning in lumea reală si anume Image Recognition.

Capitolul 5 este dedicat derulării procesului de Image Recognition cu ajutorul AlexNet. Prin intermediul acestei exemplificări voi arăta cum se utilizează o rețea neuronală precompilată pentru a clasifica conținutul imagininilor care alcătuiesc setul de date analizat. [anonimizat] / clasifica.

Capitolul 6 [anonimizat]-i facă având la dispoziție nivelul actual de cunoștințe si dotare tehnică.

[anonimizat], Str. Macilor, Bl. 56, Ap. 14, Jud.

Timiș, născut la data de 22.03.1974, [anonimizat]. Mehedinți,

[anonimizat] C.I. seria TZ. nr. 425045, [anonimizat]: [anonimizat], din cadrul Universitații “Aurel Vlaicu”

Arad, [anonimizat], [anonimizat] “FOLOSIREA METODELOR NEURONALE

DE TIP DEEP LEARNING PENTRU ANALIZA DATELOR” elaborată in vederea susținerii

publice in sesiunea 2018, este o lucrare originală.

[anonimizat]/disertație, tratate, monografii,

[anonimizat]., [anonimizat].

Data,

Semnătura,

CUPRINS

Introducere………………………………………………………………………pag 6-8

Capitolul 1. SISTEME NEURONALE ARTIFICIALE…………………………pag 8-21

1.1. Definire concept…………………………………………………………….pag 8-9

1.2. Scurt istoric al evoluției conceptului……………………………………….pag 9-10

1.3. Cum funcționează………………………………………………………….pag 10-21

1.3.1. Micrographia electronică a unui neuron………………………………pag 10-11

1.3.2. Comparații computer vs. neuron………………………………………pag 11-12

1.3.3. Reprezentări matematice.……………………………………………. pag 12-14

1.3.4. Neuronul Prag( Threshold Neuron) – perceptron…………………….pag 14-16

1.3.5. Clasificarea rețelelor neuronale artificiale…………………………….pag 16-17

1.3.6. Algoritmii cei mai cunoscuți…………………………………………..pag 17-18

1.3.7. Back Propagation……………………………………………………..pag 18-19

1.3.8. Aplicații practice in care se utilizeaza Rețelele Neuronale Artificiale……………………………………………………………………….pag 19-21

Capitolul 2. CONCEPTUL “DEEP LEARNING” …………………………….pag 21-32

2.1. Definire concept…………………………………………………………….pag 21-22

2.2. Interpretări………………………………………………………………….pag 22-23

2.3. Istoric si evoluție……………………………………………………………pag 23-26

2.4. Motivații pentru utilizarea Deep Learning………………………………….pag 26-29

2.4.1. Motivații biologice…………………………………………………….pag 26-27

2.4.2. Puterea computațională……………………………………………….pag 27-29

2.5. Metode………………………………………………………………………pag 29-31

2.5.1. Modele incipiente……………………………………………………. pag 29-30

2.5.2. Deep Belief Networks…………………………………………………pag 29-30

2.5.3. Autocodificatori stratificați……………………………………………pag 29-30

2.5.4. Rețele neuronale convoluționale………………………………………pag 30-31

2.5.5. Codarea scăzută – Sparsity……………………………………………pag 30-31

2.6. Aplicații in securitatea datelor………………………………………………pag 31-32

Capitolul 3. UTILIZAREA MATLAB DEEP LEARNING TOOLBOX………pag 32-36

3.1. Tipuri de rețele utilizate…………………………………………………….pag 32-36

3.1.1. Rețele precompilate…………………………………………………….pag 32-33

3.1.2. Rețele nou create……………………………………………………….pag 33-34

3.1.3. Monitorizarea progreselor inregistrate in procesul de Deep Learning….pag 34-36

Capitolul 4. IMAGE RECOGNITION……………………………………………pag 36-39

4.1. Abstract. Definire concept…………………………………………………… pag 36-37

4.2. Regula de decizie și clasificatorul……………………………………………pag 37-38

4.3. Interpretarea matematică in luarea deciziilor…………………………………pag 38-39

Capitolul 5. ALEXNET……………………………………………………………pag 40-58

5.1. Definire concept. Caracteristici generale……………………………………..pag 40-41

5.2. Setul de date accesat………………………………………………………….pag 40-41

5.3. Funcția de activare……………………………………………………………pag 41-42

5.4. Mod de implementare/aplicare……………………………………………….pag 42-43

5.4.1. Sintaxa…………………………………………………………………..pag 42-43

5.4.2. Descrierea……………………………………………………………….pag 42-43

5.4.3. Pachet support……………………………………………………………pag 42-43

5.4.4. Vizualizarea structurii rețelei……………………………………………pag 42-43

5.5. Exemplu de utilizare Alexnet…………………………………………………pag 43-58

5.5.1. Baza de date de analizată(Datastore)…………………………………….pag 43-44

5.5.2. Crearea Datastore…………………………………………………………pag 44-45

5.5.3. Scoruri de predicție………………………………………………………pag 45-46

5.5.4. Transfer learning…………………………………………………………pag 46-56

5.5.4.1. Etichetarea imaginilor intr-o Datastore……………………………pag 47-48

5.5.4.2. Pregătirea datelor pentru training. Split data pentru testare……….pag 48-50

5.5.4.3. Modificarea layer-elor rețelei………………………………………pag 50-52

5.5.4.4. Setarea optiunilor de training………………………………………pag 52-53

5.5.4.5. Training-ul rețelei………………………………………………….pag 54-56

5.5.4.6. Crearea unei retele prin modificarea AlexNet……………………..pag 56-57

5.5.4.7. Setarea opțiunilor de algoritm de training…………………………pag 56-57

5.5.4.8. Realizarea training-ului……………………………………………pag 56-57

5.5.4.9. Utilizarea unei retele instruite pentru a clasifica imaginile testate…pag 56-57

5.5.5. Evaluarea retelei dupa training…….……………………………………………….pag 57-58

5.5.6. Imbunătățirea performanței rețelei………………………………………..pag 57-58

Capitolul 6. CONCLUZII SI PROPUNERI………………………………………..pag 58-61

Capitolul 7. REFERINȚE. BIBLIOGRAFIE………………………………………pag 61-62

INTRODUCEREA LUCRĂRII

Inteligența artificială a atins maximul. Fluxurile de știri spun că companiile și-au înlocuit angajații cu IBM Watson, iar algoritmii “bat” medicii la diagnostice. Noile startup-uri A.I. pretind în fiecare zi că au rezolvat toate problemele noastre personale și de afaceri prin machine learning. Obiectele obișnuite, cum ar fi storcatoarele și routerele Wi-Fi, se reclamă brusc ca fiind "alimentate de AI".A devenit evident ca o mare parte din A.I. hubbub este generat de reporteri care nu au instruit niciodată o rețea neuronală și de startup-uri care se proclamă “unicorni”, în speranța de a fi achiziționate, în ciuda faptului că nu rezolvă nici o problemă reală. Nu e de mirare că există atât de multe concepții greșite despre ceea ce poate A.I. și ceeace nu poate face. Rețelele neuronale au fost inventate în anii '60, dar creșterile recente ale big data și ale puterii computaționale le-au făcut efectiv utile. O nouă disciplină numită "deep learning" a apărut și a aplicat arhitecturi complexe de rețele neuronale pentru a modela modelele în date mai precis decât oricând. Rezultatele sunt incontestabil incredibile. Computerele pot acum să recunoască obiectele din imagini și video și să transcrie discursul în text mai bine decât oamenii pot. Google a înlocuit arhitectura Google Translate cu rețele neuronale, iar acum traducerea automată se apropie, de asemenea, de performanțele umane.

Prin aceasta lucrare voi motiva utilizarea deep learning și voi implementa și evalua blocul de bază al modelelor de deep learning, pentru a obține o perspectivă asupra modului și a motivului pentru care lucrează. De asemenea voi relua cazul pentru un cadru de învățare predictiv și voi propune, implementa și evalua metodele propuse. Teza se încheie cu o discuție asupra rezultatelor, a problemelor întâlnite și propune soluții posibile și cercetări viitoare

Inventatorii au visat mult timp să creeze mașini care să gândească. Vechile mituri grecești vorbesc despre obiecte inteligente, cum ar fi statuile animate ale ființelor umane și mesele care sosesc pline de mâncare și băutură atunci când sunt chemate. Când calculatoarele programabile au fost intuite, oamenii se întrebau dacă ar putea deveni inteligente și asta cu peste o sută de ani înainte de a fi construite (Lovelace, 1842). Astăzi, inteligența artificială (AI) este un domeniu provocator cu multe aplicații practice și teme de cercetare active. Ne uităm la software inteligent care să automatizeze munca de rutină, să înțeleagă vorbirea sau imaginile, să dea diagnostice în medicină și să susțină cercetarea științifică in general. Din primele zile ale apariției inteligenței artificiale, domeniul a abordat rapid și a condus la rezolvarea problemelor de natură intelectuală care sunt dificile pentru ființele umane, dar relativ simple pentru computere – probleme care pot fi descrise printr-o listă de reguli matematice formale. Adevărata provocare a inteligenței artificiale s-a dovedit a fi rezolvarea sarcinilor ușor de îndeplinit de oameni, dar dificil pentru ca oamenii să descrie problemele pe care le rezolvă intuitiv, care se simt automat, cum ar fi recunoașterea cuvintelor vorbite sau a fețelor din imagini. Aceast domeniu permite calculatoarelor să învețe din experiență și să înțeleagă lumea în termenii unei ierarhii de concepte, fiecare concept definit în termenii relației sale cu concepte mai simple. Prin colectarea cunoștințelor din experiență, această abordare evită necesitatea ca operatorii umani să specifice în mod formal toate cunoștințele pe care le are calculatorul. Ierarhia conceptelor permite computerului să învețe concepte complicate, construindu-le din cele mai simple. Dacă desenați un grafic care arată modul în care aceste concepte sunt construite unul peste celălalt, graficul este adânc, cu multe straturi. Din acest motiv, numim această abordare a învățării profunde – DEEP LEARNING a inteligentei atitificiale( AI ).

Creierul sau ca sa fim mai specifici, neocortexul, este cea mai puternică mașină de învățare pe care o cunoaștem până acum. În timp ce computerele depășesc în mod clar oamenii la efectuarea de sarcini computaționale brute, niciun computer nu poate învăța să vorbească o limbă, să facă o salată sau să navigheze pe mare. Unul ar putea, după un efort considerabil, “să creeze” o salată, dar rezultatul in a reuși să învețe o limbă ar fi unul oribil. Cea mai remarcabilă abilitate a neocortexului este capacitatea sa de a gestiona un număr mare de sarcini diferite: senzorizarea, motricitatea și cunoașterea la nivel superior, cum ar fi planificarea, execuția, adaptarea socială etc.

Dacă acest comportament extrem de divers și complex este rezultatul a miliarde de ani de evoluție supra codificată fără structură moștenită, atunci ar fi aproape imposibil să inversăm “ingineria” și nu ar trebui să mai cautam principii fundamentale, ci mai degrabă să acceptăm frumusețea complicată a “Connectom-ului” nostru. Dar, dimpotrivă, neocortexul:

Are capacitatea de invățare – limbajul, motricitatea, nu sunt abilitati cu care se nasc oamenii, ci sunt invatate pe parcursul existenței

Este versatil – intr-o asemenea măsură încât o zona neocorticală poate prelua(temporar sau definitiv) funcțiile alteia

Este o structură puternic repetitivă, construită din miliarde de coloane aproape identice

Este stratificat și ordonat ierarhic astfel încât fiecare strat să învețe cat mai multe concepte abstracte

Acest lucru ne determină să credem că neocortexul este construit folosind un algoritm general de invățare și o arhitectură generală comună. Se pare că complexitatea neocortexului este limitată la un modul de învățare unic de o dimensiune mai ușor de gestionat și speranța este că dacă putem înțelege acest modul, îl putem replica și aplica la o scară care va conduce la inteligența artificială adevărată.

Jeff Hawkins a propus afirmația că algoritmul general neocortic este un algoritm de predicție și că învățarea optimizează predicția. Acest lucru este în concordanță cu teoria creierului unificat a lui Karl Friston din 2003 care afirmă că creierul încearcă să reducă la minimum energia liberă sau eroarea de predicție și este, în general, în linie cu o bază largă din literatura despre codificarea predictivă care afirmă că conexiunile de sus în jos urmăresc să prezică și sa le amplifice pe cele care corespund predicțiilor. În imediata apropiere a acestei paradigme de predare directă este observarea coerenței temporale. Coerența temporală este observarea faptului că intrarea senzorială care se schimbă rapid este o combinație extrem de neliniară de schimbare lentă a obiectelor și a caracteristicilor de nivel înalt. Au fost propuse mai multe metode de extragere a acestor caracteristici de nivel înalt care se schimbă lent în timp. În aceeași linie de raționament, s-a propus să se măsoare performanța unui model prin invarianța sa in transformările temporale. În timp ce au fost propuse mai multe modele, se pare că ideea simplă de bază, conform căreia eroarea de predicție conduce învățarea nu a fost suficient testată. Scopul final este de a propune, implementa și evalua un algoritm de învățare predictivă.

Hinton, intr-o lucrare de a sa a dezvoltat în mod esențial domeniul de deep learning, arătând că învățarea unor modele ierarhice de date profunde și stratificate a fost posibilă folosind un principiu simplu și că aceste arhitecturi profunde au avut performanțe superioare modelelor de invatare bazate pe computere de ultima generatie. Hinton a arătat că, în loc să pregăteasca un model de optimizarea profunda a performanțelor într-o sarcină supravegheată, de exemplu recunoașterea cifrelor scrise de mână, ar trebui să pregatim straturile unui model profund individual într-o sarcină nesupravegheată si asta, pentru a reprezenta datele de intrare într-un mod "bun". Stratul cu cel mai mic nivel ar învăța să reprezinte imagini ale cifrelor scrise de mână și stratul de mai sus ar învăța să reprezinte reprezentarea stratului de mai jos. După ce s-au suprapus mai multe straturi ca acesta, modelul combinat ar putea fi instruit în mod definitiv cu privire la sarcina supravegheată folosind aceste noi reprezentări de nivel mai înalt ale datelor care conduc la performanțe superioare. Definirea a ceea ce cuprinde o reprezentare "bună" a datelor și modul în care este învățată este într-o mare măsură subiectul cercetării în deep learning. Paradigma deep learning a învățării nesupravegheate a modelelor ierarhizate cu straturi de date nestructurate este similară arhitecturii descrise anterior și funcționării neocortexului, ceea ce face o alegere bună a cadrului teoretic și computațional pentru implementarea și evaluarea algoritmului de învățare predictivă.

CAPITOLUL 1. REȚELE NEURONALE ARTIFICIALE

“Inteligența artificială si machine learning vor fi motoarele pentru progresul umanității, iar datele vor fi combustibilul.”

Michael Dell

Definire concept

Pentru a putea defini procesul de tip

Deep Learning,trebuie sa ințelegem structura

pe care acest model automatizat funcționează.

Aceasta structură poarta numele de

Rețea Neuronală Artificială (ANN).

O rețeaua neuronală (artificială) este o rețea de

elemente simple numite neuroni, care primesc

intrare(input), își schimbă starea internă

(prin activare) în funcție de acea intrare și produc ceva în funcție de intrare și de activare. Rețeaua consta in conectarea ieșirii anumitor neuroni la intrarea altor neuroni, formând un grafic direcționat, ponderat. Atât ponderile, cât și funcțiile care calculează activarea pot fi modificate printr-un proces numit învățare care este guvernat de o regulă de învățare.

Rețelele neuronale artificiale (ANN) sau sistemele conexioniste sunt sisteme de calcul inspirate de rețelele neuronale biologice care constituie creierul animalelor. Aceste sisteme învață (îmbunătățesc treptat performanța) prin analizarea exemplelor, în general fără programare specifică a activităților. De exemplu, în recunoașterea imaginilor, acestea ar putea învăța să identifice imaginile care conțin pisici analizând exemple de imagini care au fost marcate manual ca "pisică" sau "fără pisică" și utilizând rezultatele pentru a identifica pisicile din alte imagini. Ele fac acest lucru fără nici o cunoaștere apriori despre pisici, de exemplu că: au blană, cozi, mustăți și fețe asemănătoare pisicilor. În schimb, ele își dezvoltă propriul set de caracteristici relevante din materialul de studiu pe care îl prelucrează.

Un ANN se bazează pe o colecție de unități sau noduri conectate numite neuroni artificiali (analogi cu neuronii biologici din creierul animal). Fiecare conexiune (analogă cu o sinapsă) între neuronii artificiali poate transmite un semnal de la unul la altul. Neuronul artificial care primește semnalul îl poate procesa și apoi semnalează neuronii artificiali conectați la acesta.

În implementările comune ANN, semnalul la o conexiune între neuronii artificiali este un număr real, iar rezultatul fiecărui neuron artificial este calculat printr-o funcție neliniară a sumei intrărilor sale. Neuronii artificiali și conexiunile au în mod obișnuit o ponderare care se ajustează ca învățare/perfecționare. Ponderarea crește sau scade puterea semnalului la o conexiune. Neuronii artificiali pot avea un prag astfel încât numai dacă semnalul agregat traversează acest prag este trimis semnalul. De obicei, neuronii artificiali sunt organizați în straturi. Diferitele straturi pot efectua diferite tipuri de transformări pe intrările lor. Semnalele se deplasează de la primul (intrarea) la ultimul strat (ieșire), eventual după traversarea straturilor de mai multe ori.

Scopul inițial al abordării ANN a fost de a rezolva problemele în același mod în care ar fi dezvoltat creierul uman. De-a lungul timpului, atenția s-a concentrat pe adaptarea abilităților mentale specifice, ceea ce a dus la abateri de la biologie. ANN-urile au fost folosite pe o varietate de sarcini, inclusiv computer vision, recunoașterea vorbirii, traducerea automată, filtrarea rețelelor sociale, playing board, jocurile video și diagnoza medicala.

Concluzionând, calculatoarele digitale moderne depășesc nivelul uman în domeniul calculului numeric și manipulării simbolurilor aferente.

Cu toate acestea, oamenii pot rezolva fără efort probleme complexe perceptuale….cum ar fi de exemplu, recunoașterea unui om dintr-o mulțime dintr-o simplă privire a chipului său cu o viteză atât de mare încât depășește cu mult performanța similară a calculatoarelor celor mai rapide ale lumii.

Scurt istoric al evolutiei conceptului.

Warren McCulloch și Walter Pitts (1943) au creat un model computațional pentru rețelele neuronale bazate pe matematică și algoritmi numiți “logică de prag”. Acest model a deschis calea pentru cercetarea în domeniul rețelelor neuronale pentru a se împărți în două abordări. O abordare este axată pe procesele biologice din creier, în timp ce cealaltă s-a axat pe aplicarea rețelelor neuronale asupra inteligenței artificiale. Această activitate a dus la lucrul la rețele neuronale și la legătura lor cu automatele finite (finite-state machine sau finite-state automaton).

Învățarea Hebbian. La sfârșitul anilor 1940, D.O. Hebb a creat o ipoteză de învățare bazată pe mecanismul plasticității neuronale, care a devenit cunoscut sub numele de învățare Hebbian. Învățarea Hebbian este cunoscuta si ca “învățarea nemonitorizata”. Acestea au evoluat în modele de potențare pe termen lung. Cercetătorii au început să aplice aceste idei modelelor computationale în 1948 cu mașinile de tip B ale lui Turing.

Farley și Clark (1954) au folosit mai întâi mașini computerizate, numite apoi "calculatoare", pentru a simula o rețea Hebbian. Alte mașini computerizate de rețele neuronale au fost create de Rochester, Holland, Habit și Duda (1956).

Rosenblatt (1958) a creat Perceptronul, un algoritm pentru recunoașterea modelului. Prin analiza matematică, Rosenblatt descrie circuitele nu în perceptronul de bază, cum ar fi circuitul exclusiv sau circuitul care nu putea fi procesat de rețelele neuronale la vremea respectivă.

În 1959, un model biologic propus de laureații Nobel, Hubel și Wiesel, s-a bazat pe descoperirea a două tipuri de celule în cortexul vizual primar: celule simple și celule complexe.

Primele rețele funcționale cu mai multe straturi au fost publicate de Ivakhnenko și Lapa în 1965, devenind Metoda Grupuluide de Manipulare a Datelor (Group Method of Data Handling)

Cercetarea în domeniul rețelelor neuronale a stagnat după cercetarea de învățare a mașinilor computerizate realizată de către Minsky și Papert (1969). Ei au descoperit două probleme cheie ale mașinilor computerizate care procesau rețele neuronale. Prima a fost că perceptronii de bază nu erau capabili să proceseze circuitul exclusiv. A doua a fost că computerele nu aveau suficientă putere de procesare pentru a gestiona eficient munca necesară rețelelor neuronale mari. Cercetarea în rețelele neuronale a încetinit până când computerele au obținut o putere de procesare mult mai mare).

O mare parte din inteligența artificială s-a axat pe modele de nivel înalt (simbolice) care sunt procesate prin utilizarea algoritmilor, caracterizată, de exemplu, de sisteme expert cu cunoștințe încorporate în regulile “if-then”, până la sfârșitul anilor 1980, cercetarea s-a extins la niveluri scăzute simbolic), caracterizată prin cunoașterea întruchipată în parametrii unui model cognitiv.

Backpropagation. Un declanșator cheie pentru interesul reînnoit în rețelele neuronale și în învățare a fost algoritmul de backpropagare al lui Werbos (1975), care a rezolvat în mod eficient problema exclusivă și, în general, a accelerat formarea rețelelor cu mai multe straturi. Backpropagation a distribuit termenul de eroare înapoi prin straturi, modificând ponderarile de la fiecare nod.

La mijlocul anilor 1980, procesarea paralelă distribuită a devenit populară sub numele de conexionism (o abordare a inteligenței artificiale a cunoașterii, în care mai multe conexiuni între noduri, echivalente celulelor creierului, formează o rețea interactivă masivă în care se desfășoară simultan mai multe procese. Anumite procese din această rețea, care funcționează în paralel, sunt grupate împreună în ierarhii care generează rezultate precum gândirea sau acțiunea. De aici teoria că comportamentul și gândul ar trebui în cele din urmă să fie explicate prin prisma conexiunilor fizice dintre neuroni. Rumelhart și McClelland (1986) au descris folosirea conexionismului pentru a simula procesele neuronale.

Cum funcționeaza.

Micrographia electronică a unui Neuron.

ANN pot fi asimilate, păstrând proporțiile, unui computer asemănător creierului.

O rețea neuronală artificială (ANN) este un procesor distribuit masiv paralel, care are o tendință naturală de a stoca cunoștințele experimentale și de a le pune la dispoziție pentru utilizare. Înseamnă că:

“Cunostintele” sunt dobândite de rețea printr-un proces de învățare (instruire);

Forța interconexiunilor dintre neuroni este pusă în aplicare prin intermediul sinaptice folosite pentru a stoca cunoștințele;

Creierul uman nu este încă bine înțeles și, într-adevăr, comportamentul său este unul foarte complex;

Există aproximativ 10 miliarde de neuroni în cortexul uman și 60 de trilioane de sinapse de conexiuni;

Creierul este un calculator neliniar și paralel extrem de complex;

Procesul de învățare este o procedură de adaptare a ponderilor cu un algoritm de învățare pentru a capta cunoștințele. Mai mult, din punct de vedere matematic, scopul procesului de învățare este de a mapa o relație dată între intrările și ieșirea (ieșirile) rețelei.

Comparații computer vs. neuron.

Dacă facem o comparație empirică ale principalelor caracteristici ale computerului (modelului) Von Neumann versus sistemul neuronal biologic vom obseva că:

Reprezentări matematice.

In reprezentare matematica, dacă comparăm un neuron biologic cu unul dezvoltat artificial, vom avea următoarele exprimări:

Neuronul biologic

x1

xn

z=w0+ w1x1+… wnxn

f(x1,…, xn)=F(w0 +w1 x1 +…+wn xn )

unde:

f – este funcția care trebuie calculată

x1… xn – sunt intrările

φ – este functia de activare

z – este suma ponderilor

Neuronul artificial

Functiile clasice de activare:

Rețelele neuronale artificiale:

învață ajustând ponderile astfel încât să poată clasifica corect datele de antrenament/formare și prin urmare, după faza de testare, să clasifice date necunoscute.

are nevoie de mult timp pentru antrenament.

are o toleranță ridicată la date incomplete

Procesul de invatare(learning) constă în estimarea parametrilor neuronilor (stabilirea ponderilor) astfel încât întreaga rețea să poată efectua o sarcină specifică. Exista 2 tipuri de invațare:

Învățarea supravegheată care încorporează un “profesor” extern, astfel încât fiecare unitate de ieșire să fie informată cu privire la care ar trebui să fie răspunsul dorit la semnalele de intrare.

Învățarea nesupravegheata nu folosește profesori externi și se bazează numai pe informații locale. Este deasemenea menționată ca auto-organizare, în sensul că ea auto-organizează datele prezentate în rețea și le detectează proprietățile colective rezultate.

Neuronul Prag( Threshold Neuron) – PERCEPTRON.

Perceptronul este un model foarte simplu: intrarea este înmulțită cu o pondere și apoi toate rezultatele sunt adunate. Dacă rezultatul este mai mare decât o valoare predefinită, atunci rezultatul este 1, altfel este 0. Ponderile acestea trebuie adaptate pentru fiecare set de date în parte. Există un algoritm prin care se pot calcula.

Însă acestui model simplu are o problemă majoră: nu funcționeaza decât pentru date linear separabile. De exemplu: în plan, dacă toate punctele care au clasa pozitivă se pot separa cu o dreaptă de punctele cu clasa negativă. Aceasta este o limitare mare, ceea ce a dus la abandonarea pentru o vreme a abordării AI prin intermediul rețelelor neuronale.

Ieșirea unui threshold neuron este binară, în timp ce intrarea poate fi binară sau analogica.

Dacă intrările sunt binare, un threshold neuron implementează o funcție booleană.

Alfabetul boolean {1, -1} este folosit de obicei în teoria rețelelor neuronale în loc de {0, 1}.

Corespondența cu alfabetul clasic boolean {0, 1} se stabilește după cum urmează:

Pragurile funcțiilor booleene: Interpretarea geometrică.

"OR" (Disjuncția) este un exemplu al pragului (separabil liniar) funcției booleene: "-1s" sunt separate de "1s" printr-o linie

“XOR” este un exemplu al funcției booleene non-prag (nu este separabilă liniar): este imposibilă separarea "1s" de "-1s" printr-o singura linie

Threshold Neuron: Learning

O proprietate principală a unui neuron și a unei rețele neuronale este capacitatea lor de a învăța din mediul său și de a-și îmbunătăți performanțele prin învățare.

Un neuron (o rețea neurală) învață despre mediul său printr-un proces iterativ de ajustări aplicat ponderilor sale sinaptice.

În mod ideal, o rețea (un singur neuron) devine mai informată despre mediul său după fiecare iterație a procesului de învățare.

Fie T o ieșire dorită a unui neuron (a unei rețele) pentru un anumit vector de intrare și

Y este o ieșire reală a unui neuron.

Dacă T = Y, nu este nimic de învățat.

Dacă T ≠ Y, atunci un neuron trebuie să învețe, pentru a se asigura că după ajustarea punderilor, ieșirea efectivă va coincide cu o ieșire dorită

Error-Correction Learning

Daca T ≠Y, atunci este eroarea.

Scopul învățării este de a regla ponderile în așa fel încât pentru o nouă ieșire reală să avem următoarele:

Aceasta înseamnă că ieșirea efectivă actualizată trebuie să coincidă cu rezultatul dorit.

Scopul învățării este de a regla ponderile astfel încât pentru o nouă ieșire reală să avem următoarele:

unde α este o rată de învățare (ar trebui să fie egală cu 1 pentru threshold neuron, atunci când o funcție de învățat este de tip Boolean).

Reprezentarea celei mai simple retele neuronale(ANN)este urmatoarea:

Clasificarea Retelelor Neuronale Artificiale

Algoritmii cei mai cunoscuți.

Back Propagation.

Back Propagation învață prin procesarea iterativă a unui set de date de antrenament (eșantioane).

Pentru fiecare eșantion, ponderile sunt modificate pentru a minimiza eroarea dintre clasificarea rețelei și clasificarea curenta/actuala.

Etapele algoritmului de Back Pro:

Inițializarea ponderilor( weights ) si a predeterminarilor( biases ). Ponderile din rețea sunt inițializate la numere aleatorii din intervalul [-1,1]. Fiecare unitate are o predeterminare( BIAS ) asociată cu aceasta. De asemenea, prederminările( BIAS ) sunt inițializate la numere aleatorii din intervalul [-1,1].

Se introduce esantionul de training.

Se difuzează inputurile înainte; se calculează intrarea și ieșirea netă a fiecărei unități în straturile ascunse( hidden layers ) și de ieșire( output ).

Se “reântoarce”( back propagate ) eroarea.

Se actualizează ponderile și predeterminările( BIAS ) pentru a reflecta erorile receptate.

Condițiile de incheiere.

Formula asimilata algorimului de Back Pro este urmatoarea:

Exemplu de aplicarea a algoritmului de Back Pro:

Input = 3,

Hidden Neuron = 2

Output =1

Initializăm ponderi: numere aleatoare de la -1 la 1

Intrarea si ponderea inițială:

Predeterminare( Bias ) adaugată la Hidden

+ Noduri Output

Inițializare Bias

Valori aleatoare de la -1.0 la 1.0

Bias( aleatoare )

Aplicații practice in care se utilizeaza Retelele Neuronale Artificiale.

Spectrul domeniilor in care-si gasesc aplicabilitate ANN este unul foarte larg si in continua expansiune, expresia “ Sky’s the limit” exprimând cu prisosință posibilitațile multiple in care acestea pot sa contribuie la eficientizarea proceselor, atat din punct de vedere al minimizării costurilor, al resurselor alocate, cat mai ales a gradului mare de acuratete a rezultatelor obținute prin comparație cu metodele clasice specifice fiecarui domeniu.

Aplicații. Clasificări.

Aplicații. Modelare.

CAPITOLUL 2. DEEP LEARNING

Definire concept

Deep Learning este o paradigmă de învățare automată, care se concentrează pe învățarea modelelor ierarhice profunde de date (deep hierarchical models). Deep learning presupune că, pentru a învăța reprezentările de nivel înalt ale datelor, este necesară o ierarhie a reprezentărilor intermediare. Progresele recente în algoritmii de învățare pentru arhitecturile profunde au făcut ca învățarea profundă a sistemelor de învățare fezabile și profunde să depășească sau să obțină performanțe de ultimă generație în numeroase sarcini de învățare automată.

Deep learning (cunoscut și ca “deep structured learning” or “hierarchical learning”) face parte dintr-o familie mai largă de metode de învățare automata bazată pe reprezentări de date de învățare, spre deosebire de metoda care utilizeaza algoritmi specifici pentru fiecare task. Procesul de “learning” poate fi: monitorizat(supervised), semimonitorizat sau nemonitorizat.

Modelele de tip deep learning sunt strâns legate de procesele de informare și de comunicare derulate într-un sistem nervos biologic, cum ar fi codificarea neuronală care încearcă să definească o relație între diferiți stimuli și răspunsurile neuronale asociate acestora în creier.

Arhitecturile de tip deep learning, cum ar fi: “deep neural networks”, “deep belief networks” si “recurrent neural networks”, au fost aplicate în domenii precum: computer vision, speech recognition, prelucrarea limbajului natural, audio recognition, filtrarea in rețele sociale, traducerea automată, bioinformatica și designul medicamentelor, unde au obținut rezultate comparabile și în unele cazuri superioare experților umani.

Deep learning grupează o clasă de algoritmi de învățare automată care:

utilizează mai multe straturi(layers) de unități de prelucrare automate neliniare dispuse in cascadă având ca finalitate extragerea și transformarea atributelor urmărite.

fiecare layer succesiv utilizează ieșirea din stratul anterior ca pe propria intrare

“învață” mai multe niveluri de reprezentări care corespund diferitelor nivele de abstractizare; nivelele formează o ierarhie a conceptelor

Majoritatea modelelor moderne de învățare profundă se bazează pe o rețea neurală artificială, deși ele pot include și formule propoziționale sau variabile latente, organizate stratificat în modele profund generatoare, cum ar fi nodurile din rețelele Deep Belief Networks și Deep Boltzmann Machines.

Interpretări

Rețelele profunde( deep ) neuronale, în general, sunt interpretate în termenii teoremei de aproximare universală sau a inferenței probabilistice.Teorema de aproximare universală se referă la capacitatea rețelelor neuronale de alimentare cu un singur strat ascuns de dimensiune finită pentru a aproxima funcțiile continue. În 1989, prima dovadă a fost publicată de Cybenko pentru funcțiile de activare sigmoidală și a fost generalizată pentru arhitecturi multi-layer feed-forward în 1991 de către Hornik.

Interpretarea probabilistică derivă din domeniul învățării mecanice. Ea prezintă inferențe, precum și conceptele de optimizare ale instruirii și testării, legate de montaj și respectiv de generalizare. Mai exact, interpretarea probabilistică consideră neliniaritatea de activare drept o funcție de distribuție cumulativă. Interpretarea probabilistică a dus la introducerea abandonului ca regulator în rețelele neuronale. Interpretarea probabilistică a fost introdusă de cercetători, inclusiv Hopfield, Widrow și Narendra, și a fost popularizată în sondaje precum cel a lui Bishop.

Istoric si evoluție

Termenul Deep Learning a fost introdus în comunitatea de machine learning de către Rina Dechter în 1986 iar în Rețelele Neuronale Artificiale de Igor Aizenberg și colegii săi in 2000, în contextul neuronilor cu praguri booleene, prin intermediul rețelelor neuronale pentru intărirea învățarii. În 2006, o lucrare a lui Geoff Hinton, a lui Osindero și a lui Teh a arătat cum o rețea neuronală cu mai multe straturi ar putea fi pre-pregătită în mod eficient într-un singur strat, tratând fiecare strat pe rând ca o mașină Boltzmann nesupravegheată.

Primul algoritm general de învățare pentru perceptronii multi-layer supervizați, profunzi, a fost publicat de Alexey Ivakhnenko și Lapa în 1965. O lucrare din 1971 a descris o rețea profundă cu 8 straturi, antrenată de metoda grupului de algoritmi de prelucrare a datelor.

Alte arhitecturi de învățare profundă, în special acelea construite pentru computer vision, au început cu Neocognitron introdus de Kunihiko Fukushima în 1980. În 1989, Yann LeCun și colaboratorii săi a aplicat algoritmul standard de backpropagation, care a fost modul invers al diferențierii automate din 1970, într-o rețea neuronală profundă, în scopul recunoașterii codurilor poștale scrise pe e-mail. În timp ce algoritmul a funcționat, pregătirea a necesitat 3 zile.

Până în 1991, astfel de sisteme au fost utilizate pentru recunoașterea cifrelor izolate 2-D scrise de mână, în timp ce recunoașterea obiectelor 3D a fost făcută prin potrivirea imaginilor 2-D cu un model de obiect 3-D realizat manual. Weng și colaboratorii a sugerat că un creier uman nu folosește un model monolit de obiecte 3-D și în 1992 au publicat Cresceptron, o metodă de realizare a recunoașterii obiectelor 3D în modele aglomerate. Cresceptron este o cascadă de straturi asemănătoare cu Neocognitron. Dar, în timp ce Neocognitron cere un programator uman să combine funcțiile, Cresceptron a învățat un număr deschis de funcții în fiecare strat fără supraveghere, unde fiecare caracteristică este reprezentată de un nucleu in spirala. Cresceptron a segmentat fiecare obiect învățat dintr-un model aglomerat prin analiză retrospectivă prin rețea. Ponderea maximă, adesea adoptată de rețele neuronale profunde (de exemplu, testele ImageNet), a fost folosită pentru prima dată în Cresceptron pentru a reduce rezoluția poziției cu un factor de (2×2) la 1 prin cascadă pentru o mai bună generalizare.

În 1994, André de Carvalho, împreună cu Mike Fairhurst și David Bisset, au publicat rezultatele experimentale ale unei rețele neuronale booleene cu mai multe straturi, cunoscută și ca o rețea neurală fără ponderare, compusă dintr-un modul de rețea neuronală de auto-organizare cu trei straturi ( SOFT) urmată de un modul de rețea neuronală (GSN) cu mai multe straturi, care au fost instruite în mod independent. Fiecare strat din modulul de extracție a caracteristicilor extrage caracteristici cu complexitate tot mai mare în ceea ce privește stratul anterior.

În 1995, Brendan Frey a demonstrat că a fost posibilă pregatirea (in peste două zile) a unei rețele care conține șase straturi complet conectate și câteva sute de unități ascunse folosind algoritmul de wake-sleep, co-dezvoltat împreună cu Peter Dayan și Hinton. Mulți factori contribuie la viteza scăzută, inclusiv la problema de gradient care a fost analizată în 1991 de Sepp Hochreiter.

Modele mai simple care utilizează caracteristici cu obiective setate manual, cum ar fi filtrele Gabor și mașinile vectoriale de suport (SVM), au fost o alegere populară în anii 1990 și 2000, din cauza costurilor computaționale mari necesare ale ANN-urilor și a lipsei de înțelegere a modului în care creierul își utilizeaza rețelele biologice.

Atât shallow learning, cât și deep learning (de exemplu, rețelele recurente) ale ANN-urilor au fost explorate mai mulți ani. Aceste metode nu au depășit niciodată modelul neuniform al modelului Gaussian mixat / Modelul Markov ascuns (GMM-HMM) bazat pe modele generatoare de discurs instructiv discriminativ. Au fost analizate dificultăți cheie, inclusiv diminuarea gradientului și structura de corelare temporală slabă în modelele predictive neuronale. Dificultăți suplimentare au fost lipsa datelor de pregatire și a puterii de calcul limitate.

Majoritatea cercetătorilor de recunoaștere a vorbirii (speech recognition) s-au îndepărtat de retelele neurale pentru a urmări modelarea generativă. O excepție a fost la SRI International la sfârșitul anilor 1990. Finanțată de ANS și DARPA ale guvernului SUA, SRI a studiat rețele neuronale profunde în recunoașterea vorbirii și vorbitorilor. Echipa lui Heck care a studiat “recunoașterea vorbitorilor” (speaker recognition) a inregistrat primul succes semnificativ cu rețelele neuronale profunde în procesarea discursului din 1998l la Institutul Național de Standarde și Tehnologie. În timp ce SRI a experimentat succesul cu rețele neuronale profunde în recunoașterea vorbitorilor, au avut succes în a demonstra succesul similar si în recunoașterea vorbirii. La un deceniu mai târziu, Hinton și Deng au colaborat între ei și apoi cu colegii din cadrul grupurilor de la Universitatea din Toronto, Microsoft, Google și IBM, apărând o renaștere a rețelelor neuronale profunde în recunoașterea vorbirii.

Multe aspecte ale recunoașterii vorbirii au fost preluate de o metodă profundă de învățare numită Long Short-Term Memory(LSTM), o rețea neuronală recurentă publicată de Hochreiter și Schmidhuber în 1997. LSTM RNNs evită problema gradientului de dispariție și poate învăța sarcini de "Very Deep Learning" care necesită memorarea evenimentelor care au avut loc cu mii de pași discreți de timp inainte, ceea ce este important pentru vorbire. În 2003, LSTM a început să devină competitivă cu recunoașterea tradițională a vorbirii cu privire la anumite sarcini. Mai târziu a fost combinată cu clasificarea temporală conexionistă (CTC) într-o multime de RNN-uri LSTM. În 2015, recunoașterea vocală a Google a înregistrat un salt spectaculos de 49% prin LSTM instruit cu CTC, pe care le-au pus la dispoziție prin Google Voice Search.

La începutul anilor 2000, CNN-urile au prelucrat aproximativ 10% până la 20% din toate cecurile scrise în SUA.

În 2006, Hinton și Salakhutdinov au arătat cum o rețea neuronală cu mai multe straturi poate fi pre-pregătită în mod eficient intr-un singur strat, tratând fiecare strat pe rând ca o mașină Boltzmann nesupravegheată restricționată, apoi ajustând-o cu ajutorul unui algoritm de tip backpropagation “supravegheat”.

Deep Learning face parte din sistemele de ultimă generatie in diverse discipline, în special computer vision și recunoașterea automată a vorbirii (ASR). Rezultatele cu privire la seturile de evaluare utilizate în mod obișnuit, cum ar fi TIMIT (ASR) și MNIST (clasificarea imaginilor), precum și o serie de sarcini de recunoaștere a vorbirii cu vocabular extins s-au îmbunătățit constant. Rețelele neuronale convoluționate (CNN) au fost înlocuite pentru ASR de către CTC pentru LSTM dar au mai mult succes în computer vision.

Impactul Deep Learning în industrie a început la începutul anilor 2000, când CNN-urile au prelucrat deja aproximativ 10% până la 20% din totalul cecurilor scrise în SUA. Aplicațiile industriale de Deep Learning la recunoașterea pe scară largă a vorbirii au început în jurul anului 2010.

La sfârșitul lui 2009, Li Deng l-a invitat pe Hinton să colaboreze cu el și colegii săi pentru a aplica Deep Learning in Voice Recognition. Ei au co-organizat Workshop-ul NIPS din 2009 pe tema utilizării Deep Learning in Voice Recognition. Workshop-ul a fost motivat de limitările modelelor profunde de generare a vorbirii și de posibilitatea ca, având în vedere hardware-ul mai performant disponibil și seturile de date pe scară largă, rețelele neuronale profunde (DNN) să devină practice. S-a crezut că DNN-urile de pre-pregatire care utilizează modele generatoare de Deep Belief Nets (DBN) ar depăși principalele dificultăți ale rețelelor neuronale. Cu toate acestea, au descoperit că înlocuirea pregătirii prealabile cu cantități mari de date de pregatire pentru o backpropagare directă atunci când se utilizează DNN-uri cu straturi de ieșire mari, dependente de context au produs rate de eroare dramatic mai scăzute decât modelul de amestec gaussian de ultimă generație (GMM) / Hidden Markov Model (HMM) și, de asemenea, decât sistemele mai avansate bazate pe modele generative. Natura erorilor de recunoaștere produse de cele două tipuri de sisteme a fost diferită în mod caracteristic, oferind perspective tehnice în ceea ce privește integrarea învățării profunde în sistemul de decodificare a discursului de înaltă performanță. Analiza din perioada 2009-2010, contrastează cu GMM (și cu alte modele de vorbire generativă) față de modelele DNN, a stimulat investițiile industriale incipiente în învățarea profundă pentru recunoașterea vorbirii, ducând în cele din urmă la utilizarea omniprezentă și dominantă în această industrie. Această analiză a fost efectuată cu performanțe comparabile (mai puțin de 1,5% în rata de eroare) între DNN-urile discriminatorii și modelele generative.

În 2010, cercetătorii au extins învățarea profundă de la TIMIT la recunoașterea vocabulară vocală mare, prin adoptarea unor straturi mari de ieșire ale DNN bazate pe stările HMM dependente de context, construite pe ramificații decizionale.

Avansul în evoluția hardware a permis o creștere mare a interesului. În 2009, Nvidia a fost implicată în ceea ce se numea "big bang" de Deep Learning ", deoarece rețelele neuronale de Deep Learning au fost instruite cu unități de procesare grafică Nvidia (GPU). În acel an, Google Brain a folosit GPU-urile Nvidia pentru a crea DNN-uri capabile. În același timp, acolo, Ng a stabilit că GPU-urile ar putea crește viteza sistemelor de Deep Learning de aproximativ 100 de ori. În special, unitățile de procesare grafică sunt potrivite pentru matricea / vectorul matematic implicat în machine learning. Unitățile de procesare grafică accelerează algoritmii de instruire cu ordine de mărime, reducând orele de funcționare de la săptămâni la zile. Optimizarea hardware-ului și a algoritmului poate fi utilizată pentru o prelucrare eficientă.

În 2012, o echipă condusă de Dahl a câștigat "Merck Molecular Activity Challenge" folosind rețele neuronale specializate multifuncționale pentru a prezice ținta biomoleculară a unui medicament. În 2014, grupul Hochreiter a folosit Deep Learning pentru a detecta efectele toxice ale substanțelor chimice asupra mediului în nutrienți, produse de uz casnic și medicamente și a câștigat "Tox21 Data Challenge" din partea NIH, FDA și NCATS.

Impresiile adiționale semnificative în recunoașterea imaginilor sau a obiectelor au fost resimțite din 2011 până în 2012. Deși CNN-urile instruite prin backpropagation au fost pregatite într-o perioada de zeci de ani, iar implementările GPU ale NN-urilor doar in cațiva ani, inclusiv CNN-urile, implementările rapide ale CNN-urilor, a lui Cireșan și a colegilor săi au fost necesare pentru a progresa în computer vision. În 2011, această abordare a atins pentru prima dată performanța supraumană într-un concurs de recunoaștere a modelului vizual. De asemenea, în 2011, a câștigat concursul de scris de mână in limba chineză ICDAR, iar în mai 2012 a câștigat concursul de segmentare a imaginilor ISBI. Până în 2011, CNN-urile nu au jucat un rol major în cadrul conferințelor privind computer vision, dar în iunie 2012, o lucrare a lui Cireșan la conferința majora CVPR a arătat cum CNN-urile de maximă densitate pe GPU pot îmbunătăți dramatic multe înregistrări vizuale de referință. În octombrie 2012, un sistem similar inițiat de Krizhevsky și Hinton a câștigat competiția de la ImageNet cu o marjă semnificativă peste metodele de învățare mecanică superficială. În noiembrie 2012, sistemul Cireșan a câștigat, de asemenea, concursul ICPR privind analiza imaginilor medicale mari pentru detectarea cancerului și, în anul următor, și MICCAI Grand Challenge pe același subiect. În 2013 și 2014, rata de eroare a sarcinii ImageNet utilizând Deep Learning a fost redusă în continuare, ca urmare a unei tendințe similare în recunoașterea pe scară largă a vorbirii. Proiectul Wolfram Image Identification a publicat aceste îmbunătățiri.

Clasificarea imaginilor a fost apoi extinsă la sarcina mai dificilă de a genera descrieri (subtitrări) pentru imagini, adesea ca o combinație între CNN și LSTM.

Motivații pentru Deep Learning

Motivații biologice

O motivație esențială pentru Deep Learning este că creierul pare să opereze într-o modalitate "profundă", mai specific, neocortexul are un număr de atribute care vorbesc în favoarea investigării învățării profunde.

Una dintre cele mai importante motivații neocortice este că neo-cortexul este stratificat și organizat ierarhic. În mod specific, el are aproximativ 6 straturi, straturile inferioare fiind proiectate spre straturi superioare și straturile superioare, înapoi spre straturile inferioare. Natura organizarii ierarhice vine de la observarea că, în general, straturile superioare reprezintă concepte din ce in ce mai abstracte și sunt din ce în ce mai invariabile pentru transformări. Exemplul arhetipic este calea vizuală în care s-a constatat că V1, luat ca intrare din celulele senzoriale, a reacționat cel mai puternic la intrări simple modelate foarte bine de filtrul Gabor. Deoarece informațiile sunt fluctuate de la V1 la zonele superioare V2 și V4 și IT la care neuronii devin receptivi la caracteristici din ce în ce mai abstracte și observă invarianțe crescute spre punctul de observare, expunerea la lumină etc.

Deep learning consideră că această structură profundă ierarhică folosită de neocortex este răspunsul la o mare parte a puterii sale de compilare și încearcă să deblocheze aceste puteri prin examinarea efectelor structurilor stratificate și ierarhice. Trebuie remarcat faptul că psihologii cognitivi au examinat de mult timp ideea unui model creier computațional stratificat ierarhic. Domeniul Deep Learning învață mult din aceste idei și poate fi privit ca încercând să implementeze unele dintre aceste idei.

Puterea computațională

O importantă motivație teoretică pentru studierea deep learning este că, în unele cazuri, un calcul care poate fi obținut în mod exponential mai eficient cu straturile k decat cu straturile k-1. În acest caz se referă în mod eficace la numărul de elemente de calcul necesare pentru efectuarea calculului. În rețelele neuronale, un element de calcul ar fi un neuron, iar într-un circuit logic ar fi o poartă AND, OR, XOR, etc. Straturile se referă la cel mai mare număr de pași computaționali pentru a obține ieșirea de la intrare. Într-o rețea computațională cu multiplicarea, scăderea, adunarea și operatorii de păcat care exprimă f (x) = x * sin (a * x + b) ar necesita ca cel mai lung lanț să fie de 4 pași.

Funcționalitatea computațională sau caracterul compact contează în machine learning, deoarece parametrii elementelor computaționale sunt, de obicei, ceea ce este învățat în timpul antrenamentului, iar dimensiunea setului de formare este, de obicei, fixată. Astfel, elementele computaționale suplimentare reprezintă mai mulți parametri pe exemple de instruire, rezultând performanțe mai slabe. Mai mult, atunci când se adaugă parametri adiționali, există întotdeauna un risc de suprapunere, ceea ce duce la o generalizare slabă.

O dovadă matematică formală a eficienței computaționale a arhitecturilor profunde k-1 comparativ cu arhitecturile k profunde există în unele cazuri de arhitectură de rețea, totuși rămâne intuiția că acest lucru se aplică tipurilor de rețele și funcții utilizate în mod obișnuit în învățarea profundă.

Un exemplu care ilustrează fenomenul încearcă să constituie un sinusoid din ordinul al treilea, f (x) = sin (sin (sin (x))) într-o arhitectură a rețelei neuronale cu neuroni care aplică sinusoidul ca nelinearitate a lor.

Într-un model cu un strat de intrare x, un singur strat ascuns, h1 și un strat de ieșire y obținem următoarele:

Unde N este numărul de unități din stratul ascuns, a și b sunt parametrii multiplicativi și aditivi, suprascripturile(1) si (2) indică stratul la care sunt asociați parametrii și L este funcția de pierdere(loss) pe care încercăm să o minimizăm. Se poate observa că modelul cu un singur strat ascuns nu ar fi capabil să realizeze perfect sinusoidul ordinii a treia și că precizia sa ar crește cu N, lățimea stratului ascuns.

Comparat cu o rețea cu două straturi ascunse, al doilea strat ascuns având M unități:

Este evident că rețeaua cu două straturi ascunse ar fi sinusoidul de ordin III perfect cu N = M = 1, a1(1) = a11(2)= a1(3)=1, b1(1)= b1(2)= b1(3)= 0, adică doar 1 unitate în ambele straturi ascunse și doar 6 parametri (trei dintre aceștia fiind zero).

Metode

Modele incipiente.

În cele ce urmează, voi prezenta cele mai importante trei modele incipiente de deep learning, descrise în detaliu în forma lor cea mai simplă. Aceste modele primitive sau blocuri sunt la baza multor metode de deep learning și înțelegerea formei lor de bază va permite înțelegerea rapida a modelelor mai complexe bazate pe aceste blocuri.

Deep Belief Networks

Deep Belief Networks (DBN) constau dintr-un număr de straturi de Restricted Boltzmann Machines (RBMs) care sunt “instruite” într-o manieră intensiva. Un RBM este un model grafic generat nedirecționat.

Restricted Boltzmann Machine

Stratul inferior x, este definit ca strat vizibil, iar stratul superior h este stratul ascuns. Unitățile de straturi vizibile și ascunse x și h sunt variabile binare stocastice. Ponderile dintre stratul vizibil și stratul ascuns sunt nedirecționate și sunt notate W. În plus, fiecare neuron are o predeterminare(bias). Modelul definește distribuția probabilităților.

Autocodificatori stratificati( Stacked Autoencoders )

Autocodificatorii grupati sunt, după cum sugerează și numele, autocodoarele stivuite unul peste celălalt și antrenate într-o manieră intensiva a stratului determinant. Un autoencoder sau un auto-asociator este un model grafic discriminativ care încearcă să-și reconstruiască semnalele de intrare.

Autocodificator

Există o mulțime de arhitecturi autocodificator propuse: cu / fără ponderi legate, cu diferite funcții de activare, cu variabile deterministe / stocastice etc. Autocodificatoarele iau o intrare vectorială x, o codifică într-un strat ascuns h și o decodifică într-o reconstrucție z.

Rețelele Neuronale Convoluționale( Convolutional Neural Nets )

Conceptual, rețelele neuronale convoluționale (CNN) sunt rețele neuronale de tip feedforward, backpropagate, cu o arhitectură specială inspirată din sistemul vizual. Lucrările timpurii ale lui Hubel și Wiesel asupra cortexului vizual al pisicilor și maimuțelor au arătat că cortexul vizual este compus din celule cu specializare înalta față de modelele dintr-o zonă localizată, numite zonele lor receptive. Aceste așa-numite celule simple sunt prevăzute în așa fel incât să acopere întreaga suprafață vizuală, iar celulele de nivel superior primesc date din aceste celule simple, având astfel domenii mai receptive și care prezintă o invarianță mai mare la interpretare. Pentru a imita aceste proprietăți, Yan Lecun a prezentat Rețeaua Neuronală Convolutionala, care deține în continuare performanța de ultimă oră pe numeroasele sarcini de Machine Vision și care contribuie la ultimele cercetări in domeniu.

CNN-urile lucrează la datele bidimensionale, așa-numitele hărți, direct, spre deosebire de rețelele neuronale normale care le concatenează în vectori. CNN-urile constau în straturi alternante de straturi de convoluție și straturi de subeșantionare / punere în comun. Straturile de convoluție compun hărți de caracteristici prin restrângerea nucleelor la caracteristicile harților din straturile de sub ele. Straturile de submăsurare simplifică pur și simplu hartile caracteristicilor printr-un factor constant.

Retea Neuronala Convolutionala

Codarea scăzută( Sparsity )

Codarea scăzută este paradigma că datele ar trebui sa fie reprezentate de un mic subset de funcții de bază disponibile in orice moment și se bazează pe observația ca creierul pare sa reprezinte informații cu un numar mic de neuroni la un moment dat. Codarea redusă a fost inițial investigată în contextul codificării eficiente și a sensibilizării comprimate și s-a arătat că a condus la filtre de “tip Gabor”. Ele nu sunt direct legate de arhitecturile profunde, dar proprietățile lor interesante de codificare au dus la utilizarea lor în algoritmi de deep learning în diferite moduri.

Utilizarea cea mai directă a codării scazute poate fi văzută ca formulând o nouă bază pentru un set de date care este compus dintr-un vector caracteristic și un set de funcții de bază, fortând în același timp vectorul caracteristic să fie restrâns.

Deep Learning – aplicatii in securitatea datelor

Problema majoră a programelor destinate sa elimine malware-ul constă in identificarea acestuia, fiind deosebit de dificilă elaborarea unui program destinat sa aleagă cu exactitate elementele care pot să amenințe integritatea computerului utilizat.

Programele tradiționale destinate securității, necesitau predicția tuturor posibilitaților de atac, si programarea corespunzatoare a acțiunilor de limitare/ eliminare a pericolului. Ceea ce poate face Deep Learning, este să invețe din informațiile primite, să construiască modele din ceea ce primește si să determine statistic nivelul amenințărilor provenite din activitatea computerului.

Precum un calculator care joacă șah, și care este capabil să compileze si să analizeze toate posibilitățile de mutare a pieselor de pe tablă, Deep Learning devine capabil să determine in timp real toate implicațiile pe care le poate avea fiecare pas, învățând in acelasi timp din ceea ce intâlnește, pentru a reduce disconfortul utilizatorului cât mai mult posibil.
Acest mod de lucru poate deveni foarte important pentru dezvoltarea unei aplicații cu referințe la securitate, făcând mult mai dificilă misiunea malware-urilor, fiind din ce in ce mai greu pentru un cod-problema sa „păcălească” programul. Problema este ca in acest moment, Deep Learning necesită circa 10 MB de memorie pe fiecare dispozitiv cu care se accesează rețeaua si care sa conțină aplicația. In marea majoritate a timpului, programul nu se implică, insă in momentul in care sesizează un tip nou de fișier, sau un fișier despre care poate presupune că ar putea sa devină o amenințare la adresa sistemului de operare al dispozitivului, intervine direct, indepărtându-l sau  transferându-l in zona de carantină, până la elucidarea situației.
Sigur că acesta este doar punctul de plecare al unei lungi calatorii in spațiul securității în mediul virtual, însă punctul de plecare este  bine ales, complet si permisiv, Deep Learning având avantajul rezolvării unei probleme spinoase  cu ajutorul unei tehnologii avansate.

Concluzii

Deep learning reprezintă o categorie de algoritmi de învățare automată care se remarcă prin faptul că într-o primă etapă învață cum să se prelucreze datele de intrare și ulterior și funcția dorită. Până acum, pentru recunoașterea de obiecte în imagini, cercetătorii trebuiau să găsească tot felul de trăsături specifice obiectelor, să le extragă din imagini și apoi să aplice un algoritm de clasificare cum ar fi SVM sau Random Forest pentru a determina ce conține fiecare imagine. Pentru unele obiecte s-au găsit trăsături bune (recunoașterea fețelor oamenilor funcționează destul de bine), pentru altele nu chiar (un tocător de hârtie este greu de descris și recunoscut chiar și de către oameni). În contrast, algoritmii de deep learning nu necesită extragerea de trăsături despre categorii în prealabil, deoarece ele învață să facă aceasta în mod automat.

Partea de "deep" din nume provine din faptul că în loc de a avea un singur nivel care primește datele de intrare și ne dă rezultatul dorit, avem o serie de nivele care procesează datele primite de la nivele anterioare, extrăgând trăsături de nivel tot mai înalt. Ultimul nivel este cel care se ocupă de obținerea rezultatului, după ce datele au fost deja transformate și comprimate.

Capitolul 3. UTILIZAREA MATLAB DEEP LEARNING TOOLBOX

Tipuri de retele utilizate

Pentru a descoperi capacitățile de Deep Learning, în MATLAB se utilizeaza rețele neuronale convoluționale (ConvNets) pentru clasificare și regresie.

Deep Learning utilizează rețele neuronale pentru a învăța reprezentări utile ale funcțiilor direct din datele pentru clasificare și regresie. Există astfel posibilitatea:

a utiliza rețele precompilate

a crea si pregăti(train) rețele noi

Cerințe hardware: Exista posibilitatea de a precompila / instrui(training) o rețea neuronală convoluționară fie pe un procesor, o GPU, fie pe mai multe GPU-uri și / sau în paralel. Instruirea pe mai multe GPU în paralel necesită instalarea Parallel Computing Toolbox ™. Utilizarea unui GPU necesită un GPU NVIDIA® compatibil CUDA® cu o capacitate de calcul de 3.0 sau mai mare. Trebuie specificat mediul de execuție utilizând argumentul pereche nume-valoare "ExecutionEnvironment" în apelul la funcția trainingOptions.

Rețele precompilate

Dacă se optează pentru utilizarea rețelelor precompilate(pretrained) se pot avea in vedere următoarele variante care sunt adaptate nevoilor specifice:

Caffe Network – Pachet de asistență software pentru importul modelelor Caffe precompilate

Este un pachet de asistență software ce oferă funcții pentru importul de modele precompilate (pretrained) precum și layere de rețele neuronale convoluționale (CNNs) de la Caffe (http://caffe.berkeleyvision.org/). Modelele preâncărcate sunt importate ca un obiect SeriesNetwork (https://www.mathworks.com/help/nnet/ref/seriesnetwork-class.html). Layerele sunt importate ca o matrice de straturi (https://www.mathworks.com/help/nnet/ref/layer-class.html).

Deschizând fișierul caffeimporter. mlpkginstall din sistemul propriu de operare sau din cadrul MATLAB se va iniția procesul de instalare pentru lansarea pe care o avem.

Acest fișier mlpkginstall este funcțional pentru variantele Matlab R2017 si R2018.

Example de utilizare (importCaffeNetwork):

% Specify files to import 
protofile = 'digitsnet. prototxt'; 
datafile = 'digits_iter_10000.caffemodel';

% Import network 
net = importCaffeNetwork (protofile, datafile)

Usage Example (importCaffeLayers): 
% Specify file to import 
protofile = 'digitsnet. prototxt';

% Import network layers 
layers = importCaffeLayers ('digitsnet. prototxt')

Rețele nou create

Dacă se optează pentru crearea unor rețele noi trebuie să avem in vedere două obiective:

Sintaxă

options = trainingOptions(solverName) – returnează opțiunile de instruire pentru optimizatorul specificat de solverName. Pentru a instrui(train) o rețea, se utilizeaza opțiunile de instruire ca argument de intrare pentru funcția trainNetwork.

options = trainingOptions(solverName, Name,Value) – returnează opțiunile de instruire cu opțiuni suplimentare specificate de unul sau mai multe argumente pereche de tip nume-valoare.

Dacă spre exemplu dorim sa creăm un set de opțiuni pentru formarea unei rețele utilizând coborârea stocastică a gradientului cu un impuls. Reducem rata de învățare (learning rate) cu un factor de 0,2 la fiecare 5 etape. Setăm numărul maxim de perioade pentru antrenament la 20 și utilizăm un mini-lot cu 64 de observații la fiecare iterație. De asemenea activăm o reprezentare grafica pentru vizualizarea progresului instruirii.

options = trainingOptions ('sgdm',…

'LearnRateSchedule','piecewise',…

'LearnRateDropFactor',0.2,…

'LearnRateDropPeriod',5,…

'MaxEpochs',20,…

'MiniBatchSize',64,…

'Plots','training-progress')

options =

TrainingOptionsSGDM with properties:

Momentum: 0.9000

InitialLearnRate: 0.0100

LearnRateScheduleSettings: [1×1 struct]

L2Regularization: 1.0000e-04

GradientThresholdMethod: 'l2norm'

GradientThreshold: Inf

MaxEpochs: 20

MiniBatchSize: 64

Verbose: 1

VerboseFrequency: 50

ValidationData: []

ValidationFrequency: 50

ValidationPatience: 5

Shuffle: 'once'

CheckpointPath: ''

ExecutionEnvironment: 'auto'

WorkerLoad: []

OutputFcn: []

Plots: 'training-progress'

SequenceLength: 'longest'

SequencePaddingValue: 0

Monitorizarea progreselor înregistrate în procesul de Deep Learning.

Atunci când pregătim rețele pentru Deep Learning, este adesea utilă monitorizarea progresului pregătirii(training). Prin setarea unor valori diferite în timpul pregătirii, putem afla cum progresează pregătirea. De exemplu, putem stabili dacă și cât de repede se îmbunătățește precizia rețelei și dacă rețeaua începe să suprasolicite datele de pregatire.

Atunci când specificăm "training-progress" ca valori in “Plots” în trainingOptions și începem pregătirea în rețea, trainNetwork creează o schița și afișează valori de training la fiecare iterație. Fiecare iterație este o estimare a gradientului și o actualizare a parametrilor rețelei. Dacă specificăm datele de validare în instrucțiunile de pregătire, atunci figura arată valori de validare de fiecare dată când trainNetwork validează rețeaua. Cifra ilustrează următoarele:

Precizia instruirii (training accuracy) – Precizia de clasificare pe fiecare mini-lot individual.

Precizie de pregătire atenuată (Smoothed training accuracy) – Precizie de antrenament atenuată, obținută prin aplicarea unui algoritm de netezire a acurateței pregătirii. Este mai puțin "zgomotos" decât precizia neatenuată, ceea ce face mai ușoară observarea tendințelor.

Acuratețea validării – Precizia de clasificare pe întregul set de validare (specificată prin trainingOptions).

Training loss, smoothed training loss, and validation loss. Dacă layerul final al rețelei este un classificationLayer, atunci funcția de loss este pierderea de entropie încrucișată.

Pentru rețelele de regresie, figura descrie eroarea medie pătrată a rădăcinii (RMSE) în loc de precizie.

Schița marchează fiecare etapa de training. O etapa de training este o trecere completă prin întregul set de date.

Pe parcursul trainingului, putem opri procesul și putem reveni la starea curentă a rețelei. De exemplu, este indicat să oprim trainingul atunci când precizia rețelei ajunge la un platou și este clar că acuratețea nu se mai îmbunătățește. După ce facem clic pe butonul de oprire, poate dura ceva timp până când trainingul va fi finalizat. Odată ce trainingul este finalizat, trainNetwork returnează rețeaua de instruire.

Capitolul 4. IMAGE RECOGNITION. IMAGE CLASSIFICATION

“In 2012, Google a realizat un sistem care, din 10 milioane de imagini alese din clipuri de pe YouTube, a învățat singur să recunoască fețe de pisici și alte 22.000 de categorii de obiecte.”

4.1. Abstract. Definire concept.

Creierul nostru face ca viziunea să pară ușoară. Nu facem nici un efort pentru a deosebi intre un leu și un jaguar, să citim un semn sau să recunoaștem chipul unui om. Dar acestea sunt de fapt probleme dificil de rezolvat cu un computer: ele par simple pentru noi, deoarece creierul nostru este incredibil de bun la înțelegerea imaginilor.

În ultimii ani, domeniul machine learning a făcut progrese uriașe în abordarea acestor probleme dificile. S-a constatat că un tip de model numit rețea neuronală profundă convoluțională poate obține performanțe rezonabile în ceea ce privește sarcinile de recunoaștere vizuală dificilă – si chiar potrivirea sau depășirea performanței umane în anumite domenii.

Au fost facute progrese constante in computer vision prin validarea activității sale impotriva modalității clasice, ImageNet – un punct de referință academic pentru computer vision. Modelele succesive continuă să arate îmbunătățiri, de fiecare dată obținându-se un nou rezultat de ultimă generație: QuocNet, AlexNet, Inception (UtilizareNetNet), BN-Inception-v2. Google a publicat lucrări care descriu toate aceste modele, dar rezultatele sunt încă greu de reprodus. S-a trecut la pasul următor, eliberând codul pentru recunoașterea imaginii pe cel mai nou model, Inception-v3.

Inception-v3 este instruit pentru ImageNet Large Visual Recognition Challenge utilizând datele din 2012. Aceasta este o sarcină standard în computer vision, unde modelele încearcând să clasifice imagini întregi în 1000 de clase, cum ar fi ca exemplu: "Zebra", "Dalmatian" și "Mașina de spălat vase “. Avem spre exemplu rezultatele de la AlexNet clasificând unele imagini:

Pentru a compara modelele, analizăm cât de des modelul nu reușește să prezică răspunsul corect ca fiind una din primele cinci presupuneri – numită "rata de eroare de top-5". AlexNet a obținut o rată de eroare de top de 5,3% în setul de date de validare pentru anul 2012; Inception (procuredNet) a atins 6,67%; BN-Inception-v2 a atins 4,9%; Inception-v3 atinge 3,46%.

4.2. Regula de decizie și clasificatorul

Este posibilă formularea (și formalizarea!) regulii de decizie, prin care putem clasifica sau recunoaște obiectele bazându-ne pe caracteristicile selectate?

Putem să ne propunem regula prin care putem decide cu certitudine că este un tigru sau un iepure?

Odată ce ne cunoaștem regula de decizie, nu este dificil să dezvoltăm un clasificator, care va efectua clasificarea / recunoașterea utilizând caracteristicile selectate și regula de decizie.

Cu toate acestea, dacă regula de decizie nu poate fi formulată și formalizată, ar trebui să folosim un clasificator, care poate dezvolta regula din procesul de învățare.

În majoritatea problemelor de recunoaștere / clasificare, formalizarea regulii de decizie este foarte complicată sau imposibilă.

O rețea neurală este un instrument care poate acumula cunoștințe din procesul de învățare.

După procesul de învățare, o rețea neurală este capabilă să aproximeze o funcție care ar trebui să fie regula noastră de decizie

4.3. Interpretarea matematică a clasificării în luarea deciziilor

1. Cuantificarea spațiului “tipar” în “p” clase de decizie

Modelul matematic al cuantificării “Invățând prin exemple” (learning by examples)

Rețelele profunde neuronale convoluționale au condus la o serie de descoperiri pentru clasificarea imaginilor. Rețelele profunde integrează în mod natural caracteristicile de nivel inferior / mediu / ridicat și clasificatorii într-un mod multistrat de la un capăt la celălalt, iar "nivelele" caracteristicilor pot fi îmbogățite prin numărul de straturi (adâncime) suprapuse. Dovezi recente arată că adâncimea rețelei este de o importanță crucială, iar rezultatele principale din setul de date ImageNet provocate, exploatează toate modelele "foarte profunde" cu adâncimea de șaisprezece până la treizeci straturi. Multe alte sarcini de recunoaștere vizuală netrivială au beneficiat foarte mult de modele foarte profunde.

Mergând catre semnificația profunzimii, apare o întrebare: Învățarea(training-ul) unei rețele “mai bune” este la fel de ușoară ca și o suprapunere a mai multor straturi? Un obstacol în calea răspunsului la această întrebare a fost problema notorie a estompării / explodării, care îngreunează convergența de la început. Această problemă, totuși, a fost abordată în mare parte de straturile normalizate de inițializare și de normalizare intermediară, care permit rețelelor cu zeci de straturi să înceapă convergente pentru coborârea gradientului stocastic (SGD) cu backpropagation.

Atunci când rețelele mai profunde sunt gata sa înceapă a converge, a fost expusă o problemă de degradare: cu creșterea adâncimii rețelei, precizia devine saturată (ceea ce ar putea fi surprinzător) și apoi se degradează rapid. În mod neașteptat, o astfel de degradare nu este cauzată de suprapunerea și adăugarea mai multor straturi la un model corespunzător, conducând la o eroare de antrenament mai mare. Degradarea (acurateței instruirii) indică faptul că nu toate sistemele sunt la fel de ușor de optimizat. Să considerăm o arhitectură mai simpla și omoloaga ei de tip profund care adaugă mai multe straturi pe ea. Există o soluție prin construcție la modelul mai profund: straturile adăugate sunt maparea identității, iar celelalte straturi sunt copiate de la modelul de învățare mai simplu. Existența acestei soluții construite indică faptul că un model mai profund nu ar trebui să producă o eroare de antrenament mai mare decât omoloaga sa mai simplă.

Dar experimentele arată că solverii actuali nu sunt în măsură să găsească soluții care sunt comparabil bune sau mai bune decât soluția construită (sau nu pot face acest lucru în timp util).

Capitolul 5. ALEXNET

Dupa cum am precizat in capitolele anterioare, o rețea neuronală convoluțională (CNN sau ConvNet) este un tip special de rețea neuronală cu mai multe straturi, concepute pentru a recunoaște modelele vizuale direct din imagini pixel cu preprocesare minimă. Proiectul ImageNet este o bază de date vizuale mare, proiectată pentru utilizarea în cercetarea software referitoare la recunoașterea obiectului vizual (visual object recognition). Proiectul ImageNet desfășoară un concurs anual de software: ImageNet Large Scale Visual Recognition Challenge (ILSVRC), unde programele software concurează pentru a clasifica și detecta corect obiectele și scenele.

5.1. Definire concept. Caracteristici generale.

AlexNet este numele unei rețele neuronale convoluționale, inițial scrisă cu CUDA pentru a rula cu suport GPU. A concurat în cadrul ImageNet Large Scale Visual Recognition Clallenge în 2012. Rețeaua a atins o eroare de top 5, de 15,3%, cu 10,8 puncte procentuale înaintea urmatorului clasat. AlexNet a fost proiectat de grupul SuperVision, compus din Alex Krizhevsky, Geoffrey Hinton și Ilya Sutskever.

AlexNet a constiyuit o aplicare cu succes a Rețelelor Neuronale Convolutionale(CNN) pe un set de date atat de mare. Are o schema (layout) relativ simplă (în comparație cu arhitecturile moderne) care cuprinde:

5 straturi convolutionale

3 straturi conectate complet

Straturi unificate(max-pooling)

Straturi excluse(dropout)

5.2. Setul de date accesat

Baza de Date: ImageNet

15 milioane de imagini marcate de înaltă rezoluție

22000 de categorii

ILSVRC folosește un subset de ImageNet:

~ 1000 imagini pe categorie

1000 categorii

1.2 milioane de imagini de antrenament; 50000 de imagini de validare; 150000 imagini de testare

AlexNet:

imaginile au fost eșantionate și decupate la 256 × 256 pixeli

scăderea activității medii peste setul de antrenament pentru fiecare pixel

5.3. Funcția de activare

În mod tradițional, saturarea neliniarităților:

Neuronii saturați facilitează scăderea gradienților

Funcția exponențială este mare consumatoare de resurse computaționale

Trend lent ascendent

Nonlinearitate nesaturată

Nu se saturează (în regiunea “+”)

Foarte eficient în computație

Trend acceletat ascendant

Rata de eroare ReLUs vs. tanh:

5.4. Mod de implementare/aplicare.

Sintaxa

In mod uzual in Matlab funcția Alexnet se inițializează astfel:

net = alexnet

Descriere

net = alexnet returnează un model AlexNet preîncărcat. Acest model este instruit pe un subset al bazei de date ImageNet, care este utilizat în ImageNet Large-Scale Visual Recognition Challenge (ILSVRC). Modelul este instruit pe mai mult de un milion de imagini și poate clasifica imaginile în 1000 de categorii distincte de obiecte. De exemplu: tastatură, mouse, creion și multe animale. Ca rezultat, modelul “a învățat” reprezentări detaliate de caracteristici pentru o gamă largă de imagini.

Pachet suport

Această funcție necesită model Neural Network Toolbox ™ pentru pachetul de suport AlexNet Network. Dacă acest pachet de asistență nu este instalat, funcția alexnet oferă posibilitatea de descărcare(free) si integrare in pachetul Matlab.

Vizualizarea structurii rețelei

Analizând structura modelului AlexNet, observăm că primul strat necesită o imagine RGB de 227 × 227, iar ultimul strat clasifică 1000 de obiecte diferite.

nnet.Layers

Exemplu de utilizare Alexnet

Prin intermediul acestei exemplificari voi arata cum se utilizeaza o rețea neuronală precompilată pentru a clasifica conținutul imagininilor care alcatuiesc setul de date analizat. În această interacțiune, voi importa aceste fișiere imagine în MATLAB și le vom vedea/clasifica.

Baza de date de analizat.

Baza de imagini aleasă pentru acest studiu de caz contine 960 fisiere de tip .jpg grupate in 12 foldere:

Inainte de a trece la următoarea etapă trebuie sa ne asigurăm ca fiecare fisier .jpg are aceeași dimensiune, 227 x 227. Aceasta operatiune este executata de comanda:

B = imresize(A,[numrows numcols])

Crearea Datastore

Pentru a putea accesa baza de date in Matlab este necesara utilizarea funcțiunii “datastore”, care este o variabilă Matlab ce acționează ca o referință la sursa de date implicată, ca de exemplu un folder de fișiere imagine (cazul ales de mine). Când se crează o datastore, Matlab analizează fișierele și stochează câteva informații de bază despre date, cum ar fi numele de fișiere și tipul de formate, dar nu importă datele. În schimb, putem utiliza datastore pentru a importa datele mai târziu atunci când avem nevoie, fie sub forma de fișiere individuale, fie ca întreg setul de date. CNN-urile din Matlab funcționează fără probleme cu datele de stocare ale imaginilor.

Putem obține ca AlexNet să facă previziuni pe o întreagă colecție de imagini prin furnizarea datastore în locul fișierelor individuale. Este foarte important că nu trebuie să ne importăm fișierele, ceea ce este mai convenabil și înseamnă că nu trebuie să ne facem griji cu privire la gestionarea memoriei. Matlab va citi imaginile așa cum are nevoie, astfel încât să nu ajungem la 1000 de imagini în spațiul de lucru Matlab.

În cele ce urmează voi crea un datastore și îl voi folosi pentru a vedea predicția AlexNet pentru fiecare imagine din colecție.

Implicit, imageDatastore caută fișiere de imagini din dosarul dat. Utilizăm opțiunea "Include subfolders" pentru a căuta imagini în toate subfolderele folderului supus analizei.

Introduc in Matlab datele, definind rețeaua precompilată utilizată “alexnet” precum si inițializarea datastore pe care o voi denumi “flwrds”

Scoruri de predicție

Funcția de clasificare returnează clasa prezisă a imaginii de intrare, dar există o modalitate de a ști cât de "încrezătoare" este rețeaua referitor la acea clasificare? Ar putea fi important să iau în considerare această “încredere” atunci când decid ce să fac cu ieșirea. Pentru a clasifica o intrare într-una din clasele n, o rețea neurală are un strat de ieșire de n neuroni, câte unul pentru fiecare clasă. Transmiterea intrării prin rețea duce la calcularea unei valori numerice pentru fiecare dintre acești neuroni. Aceste valori numerice reprezintă predicția rețelei a probabilității intrărilor aparținând fiecărei clase.

Putem utiliza o datastore în locul unei imagini individuale în funcțiile CNN, cum ar fi clasificarea. Rezultatul va fi o serie de clase prezise, câte una pentru fiecare imagine din datastore.

Transfer learning

Este relative simplu să începe să utilizez o rețea precompilată cum este AlexNet. Dar nu am nicio flexibilitate în modul în care operează rețeaua și probabil că rețeaua nu va rezolva problema exactă pe care încerc să o rezolv. Se poate construi și pregăti o rețea, pornind doar de la arhitectura rețelei și stabilirea unor ponderi aleatorii. Dar obținerea unor rezultate rezonabile necesită mult efort: (1) cunoștințe și experiență cu arhitectura rețelelor, (2) o cantitate imensă de date de instruire(training) și (3) o mulțime de timp pe calculator. Transfer learning este o soluție eficientă pentru multe probleme. Training-ul necesită unele date și timp pentru compilare, dar este mult mai puțin decât trainingul de la zero, iar rezultatul este o rețea potrivită pentru problema mea specifică.

Etape necesare:

Etichetarea imaginilor intr-o Datastore

Etichetele necesare pentru training pot fi stocate in proprietatea Labels a datastore. Implicit, proprietatea Labels nu este populată. Se poate face ca datastore să determine automat etichetele din numele folderului specificând opțiunea "LabelSource".

Pregătirea datelor de training. Split data pentru testare.

Pe parcursul training-ului ponderile rețelei sunt ajustabile, astfel încât rețeaua să învețe să asocieze intrările date cu ieșirile. Dar chiar dacă rețeaua poate clasifica corect toate datele de antrenament, a învățat ceva într-adevăr? Utilizarea reală a unei rețele constă in a fi aplicabilă imaginilor noi pe care nu le-a mai văzut până atunci. Este o bună practică să ne rezervăm câteva dintre datele noastre de antrenament pentru testare. Acest set de test rezervat nu este utilizat pentru a instrui rețeaua, ci doar pentru a evalua performanța acesteia. În continuare, voi utiliza funcția splitEachLabel pentru a împărți imaginile din folderul Flowers în două stocuri separate de date, una pentru training și una pentru testare.

Modalitățile in care se face split-ul pot fi:

Procentual din fiecare set de date (in exemplu 60%) dar ordonate:

Procentual din fiecare set de date (in exemplu 80%) dar random:

Dupa un pas numeric (in exemplu primele 50 imagini pentru training):

Modificarea layer-elor rețelei.

Analizând arhitectura rețelei precompilate AlexNet obsevăm ca marea majoritate a layerelor constituente (15 din 25) sunt de tip convoluțional, consolidat si ReLU (rectified linear unit). Acestea iau imaginea originală ca si intrare si extrag diferite caracteristici care mai apoi sunt utilizate la clasificare. De asemenea trebuie precizat ca cel de al 23-lea layer este unul de tip “fully connected” cu 1000 neuroni. Acesta ia caracteristicile extrase in layerele anterioare si le mapează in 1000 clase de ieșire. Apoi, urmatorul layer, “softmax layer” transformă valoarea brută pentru cele 1000 de clase în scoruri normalizate, astfel încât, aproximativ, fiecare valoare poate fi interpretată ca predicția rețelei de probabilitatea ca imaginea să aparțină acelei clase. Ultimul layer, “output classification” ia aceste probabilități si returnează clasa cea mai probabilă ca și ieșire a rețelei.

Când se efectuează transfer learning, de obicei se schimbă doar aceste ultime câteva layere pentru a se potrivi cu problema specific situației. In acest fel rețeaua dezvoltată, are același comportament de extragere a caracteristicilor ca si rețeaua precompilată inițială, dar nu a fost inca antrenată pentru a mapa aceste caracteristici la clasele de imagini. Când facem training cu date noi, rețeaua va învăța că atât maparea, cât și rafinarea extragerii viitoare va fi puțin mai specifică pentru aplicația noastră.

După cum am precizat mai devreme, o rețea de feed-forward este reprezentată în MATLAB ca o serie de straturi. Acest lucru facilitează indexarea în straturile unei rețele și modificarea acestora. Pentru a modifica o rețea preexistentă, se creaza un nou layer, apoi se indexeaza în matricea de layer care reprezintă rețeaua și suprascrie layerul ales cu layerul nou creat. Ca și în cazul oricărei alocări indexate în MATLAB, se pot combina acești pași într-o singură linie.

Funcția fullyConnectedLayer creează un nou strat complet conectat, cu un număr dat de neuroni. In acest sens voi crea un nou layer complet conectat numit fclayer cu 12 neuroni (pentru cele 12 tipuri de flori).

Înlocuiesc ultimul strat complet conectat (cel de-al 23-lea strat) al rețelei reprezentat de straturile de matrice cu stratul nou pe care tocmai l-am creat, fclayer.

Utilizez funcția classificationLayer pentru a crea un nou layer de ieșire pentru o rețea de clasificare a imaginilor. In acest sens se pot crea layere noi și suprascrie un layer existent cu layerul nou într-o singură comandă: layers(25) = classificationLayer

Setarea opțiunilor de training

Opțiunile pe care le utilizez pentru a seta pentru algoritmul de training aparțin funcției trainingOptions. Aceasta creează o opțiune variabilă care conține opțiunile implicite pentru algoritmul de antrenament, "stochastic gradient descent with momentum"(sgdm).

Se poate specifica orice număr de setări ca perechi opționale nume-valoare în funcția trainingOptions. In acest sens creez o variabilă numită opts cu opțiunile de algoritm de training implicit, cu excepția opțiunii InitialLearnRate, care trebuie setată la 0,001.

Training-ul rețelei

Pentru a realiza “transfer learning”, este nevoie de 3 elemente:

o matrice de layere care reprezinta rețeaua

o datastore pentru imaginile de training pe care doresc sa le utilizez cu proprietatea Labels care stochează etichetele corecte pentru acele imagini de training

o variabilă care să rețină setările algoritmului de antrenament

Având aceste 3 elemente, folosesc functia trainNetwork, și setez calculatorul să ruleze. Când procesele se finalizează am o noua rețea antrenată, ca ieșire sub forma unei matrici de layere, la fel ca rețeaua inițială dar cu ponderi revizuite. In mod implicit voi avea un text afisat care arata progresul “training-ului”.

Acuratețea este procentul imaginilor pe care reteaua le clasifică corect. Se poate observa creșterea acesteia pe parcursul derulării procesului. De altfel acuratetea nu masoară cât de “încrezatoare” este rețeaua referitor la fiecare predicție.

Indicatorul de “Loss” este o măsură a cât de departe de predicția corectă a fost rețeaua pe parcursul derulării procesului. Acesta ar trebui sa descrească tinzând catre 0, ca si procedură.

Se poate observă platoul de precizie la valoare lui maxima, in timp ce indicatorul de loss continua sa descreasca. Asta este bine, insemnând ca rețeaua se comportă din ce in ce mai bine ca diferențiere între categorii, chiar dacă predicțiile finale pot sa nu se schimbe.

Se poate avea o înregistrare a indicatorilor de acuratețe si loss in timpul sesiunii de training, solicitând o a doua ieșire din funcția trainNetwork. Pentru aceasta se utilizează comanda [newnet,info].

La fiecare iterație, un subset de imagini de antrenament, cunoscut sub numele de mini-batch, este utilizat pentru a actualiza ponderile. Fiecare iterație utilizează un mini-batch diferit. Odată ce intreg setul de training a fost folosit, este considerata ca o epoch.

Numărul maxim de epochs (MaxEpochs) și dimensiunea mini-batch-urilor (MiniBatchSize) sunt parametrii pe care îi puteți seta în opțiunile de algoritm de antrenament. Rețineți că loss și accuracy raportate în timpul training-ului se referă la utilizarea mini-batch în iterarea curentă. Implicit, imaginile sunt amestecate o dată înainte de a fi împărțite în mini-batchs. Putem controla acest comportament cu opțiunea Shuffle.

Crearea unei Retele prin modificarea AlexNet

Comenzile implicate implica modificarea layer-elor 23 si 25:

net=alexnet;

layers = net.Layers;

layers(23) = fullyConnectedLayer(numClasses);

layers(25) = classificationLayer

Setarea opțiunilor de algoritm de training

options = trainingOptions(‘sgdm’,’InitialLearnRate’, 0.001);

Realizarea training-ului

[flowernet,info] = trainNetwork(trainImgs, layers, options);

Utilizarea unei rețele instruite pentru a clasifica imaginile testate

testpreds = classify(flowernet,testImgs);

Evaluarea rețelei după training

Variabila flowernet conține rețeaua obținută prin efectuarea transfer learning pe AlexNet cu datele despre speciile de flori. Informația variabilă este o structură care conține informații despre training. Cât de bună este această rețea? În următoarele două interacțiuni, voi evalua flowernet.

Variabila info este o structură care conține informații despre training. Câmpurile TrainingLoss și TrainingAccuracy de instruire conțin o înregistrare a performanței rețelei privind datele de training la fiecare repetare.

plot (info, TrainingLoss)

Utilizez funcția classify pentru a obtine clasificările predicțiilor flowernet, pentru imaginile din datastore testImgs. Este de retinut ca functia classify va rula 24 imagini prin rețeaua flowernet.

flwrPreds=classify(flowernet, testImgs)

Putem determina câte dintre imaginile de testare a clasificat corect rețeaua prin compararea clasificării prevăzute cu clasificarea cunoscută. Clasificările cunoscute sunt stocate în proprietatea Labels a datastore. Se păstrează clasificările cunoscute ale imaginilor de testare într-o variabilă numită flwrActual prin extragerea proprietății Labels din setul de date testImgs.

flwrActual=testImgs.Labels;

Imbunătățirea performanței rețelei

După ce am dezvoltat rețeaua si am evaluat performanțele, se stabilește dacă rezultatele sunt satisfăcătoare sau nu. Dacă nu sunt atinse toate obiectivele impuse, avem posibilitatea să modificăm oricare dintre input-urile funcției de rețea:

In general, insă, opțiunile de modificare a algoritmului constituie calea cea mai eficientă de îmbunătățire a performanțelor rețelei. Dintre aceste opțiuni, learning rate si momentum sunt doi parametri cheie care influențează cum updateaza algoritmul de training ponderile. După cum știm, obiectivul training-ului il constituie minimizarea funcției de loss care este măsura a cât de rău performează rețeaua pe datele de training.

Înălțimea graficului ne arată valoarea funcției de loss, în timp ce axa nord-sud ne arată o valoare a ponderii iar axa est-vest ne arată o alta valoare a ponderii. Binențeles ca rețelele complexe au mii de ponderări, nu doar două, dar se aplica același principiu. Algoritmul de gradient funcționează prin căutarea înălțimii terenului în câteva locuri în jurul poziției noastre curente și prin utilizarea acestuia pentru a înțelege gradientul sau direcția în care terenul încetinește cel mai abrupt.

Apoi pur și simplu facem un pas în această direcție, ceace ne aduce un nou set de valori de ponderare. Întrebarea însă e cât de mare trebuie făcut pasul? Mărimea acelui pas este learning rate. Dacă este prea mica va fi necesar sa facem un număr mai mare de pași pentru a ajunge la bază și asta cere timp suplimentar. Dacă este prea mare s-ar putea sa ratăm locul, sărind peste. Dacă ponderile noastre au urcat mult și rețeaua dă rezultate teribile sau chiar nu funcționează deloc, primul lucru pe care ar trebui să-l facem este sa împărțim rata de învățare cu 10 și sa încercăm din nou. Gradientul de coborâre cu impulsuri încearcă să oprească salturile, fără a trebui să facă pași foarte mici. La următorul pas însă nu trebuie schimbate complet direcțiile in direcția noului gradient, dar ne intoarcem în această direcție, asemănătoare cu cea pe care am face-o dacă am fi o masă care călătorește în direcția originală, dar acum este trasă în noua direcție de o forță. Următorul pas este, așadar, într-o direcție care este o medie ponderată a direcției anterioare și a noii direcții. Această ponderare este stabilită de opțiunea momentului.

Capitolul 6. CONCLUZII SI PROPUNERI

Ce este dincolo de deep learning?

Cum putem depăși limitele deep learning și putem continua spre inteligența artificială în general?

Există câteva abordări în acest sens:

Chollet implică utilizarea "modelului de recunoaștere super-uman ca învățare profundă pentru a spori căutarea explicită și sistemele formale", pornind de la domeniul dovezilor matematice. Proverele teoretice automate (ATP) utilizează în mod obișnuit căutarea forțată brută și explozii combinatoriale rapide în practică. În proiectul DeepMath, Chollet și colegii săi au folosit deep learning pentru a asista procesul de căutare a dovezilor, simulând intuițiile matematicienilor cu privire la ce reguli ar putea fi relevante.

O altă abordare este de a dezvolta modele mai explicabile. În recunoașterea scrierii de mână, rețelele neuronale trebuie în prezent instruite pe zeci de mii de mii de exemple pentru a efectua o clasificare decentă. În loc să se uite doar la pixeli, cu toate acestea, Launchbury din DARPA explică faptul că in modelele generative pot fi învățate trăsăturile din spatele oricărui caracter dat și să se utilizeze aceste informații de construcție fizică pentru a alege între numere similare, cum ar fi 9 sau 4.

Yann LeCun, inventator al rețelelor neuronale convoluționale (CNN) și director al cercetării AI de la Facebook, propune "energy-based models" ca o metodă de depășire a limitelor în deep learning. De obicei, o rețea neuronală este instruită pentru a produce o singură ieșire, cum ar fi o etichetă de imagine sau o traducere a frazelor. Modelele bazate pe energie ale modelului LeCun oferă în schimb un set întreg de rezultate posibile, cum ar fi numeroasele moduri în care o propoziție poate fi tradusă, împreună cu scorurile pentru fiecare configurație.

Geoffrey Hinton, numit pe scară largă "father of deep learning", dorește să înlocuiască neuronii în rețelele neuronale cu "capsule" care el crede că reflectă mai exact structura cortică din mintea umană. “Evoluția trebuie sa fi găsit o modalitate eficientă de a adapta caracteristici care sunt datate mai devreme într-o cale senzoriala, astfel incât acestea sunt mai utile la caracteristici care sunt datate multe etape mai tarziu”, explică Hinton.

Poate că toate aceste abordări pentru a depăși limitele deep learning au valoare de adevăr. Poate că nu. Doar timpul și investițiile continue în cercetarea A.I. ne vor spune.

Pe de altă parte, se poate afirma ca “cercul s-a închis” și s-a revenit de unde s-a "început": ultimele rezultate nu mai folosesc antrenarea prealabilă nesupervizată, ci doar algoritmul de backpropagation. Îmbunătățirile se aduc mai mult în domeniul funcțiilor de activare (care se referă la cum se trec datele de la un strat la altul), unde acum sunt de foarte mare actualitate "Rectified Linear Units", precum și în cel al tehnicilor de regularizare (care ajută la generalizare și previn memorarea intrărilor) precum maxout și dropout și la alternarea straturilor convoluționale și a celor de max-pooling.

Și pentru a sumariza tabloul complet care sa cuprinda de unde s-a pornit, unde ne aflăm în prezent și care sunt provocările viitorului pentru Inteligenta Artificiala voi face apel la prezentarea “What the Brain Tells Up About the Future of Silicon” susținută in cadrul Berkeley Symposium of Energy Efficient Electronic System de către un vizionar al domeniului, Jeff Hawkins:

Concluziile care se impun după trecerea printr-un domeniu atât de vast si provocator – care poate fi numit fără drept de tăgadă unul dintre pilonii de dezvoltare ai stiinței si tehnologiei – sunt ca modelul impus de legea lui Moore tinde sa fie depășit, trebuie dezvoltate si ale tipuri de arhitecturi, deoarece cea a lui von Neumann si-a epuizat posibilitățile de aplicabilitate, trebuie insistat pe dezvoltarea intensivă a aplicațiilor de machine learning și nu in ultimul rând, chiar cel mai important din puncul meu de vedere, este imperios necesară o aplecare mai riguroasă pe găsirea de noi metode atât hard cât si soft de creștere a eficienței energetice.

Capitolul 7. REFERINȚE. BIBLIOGRAFIE

Artificial Neural Networks for process control – Puneet Kr Singh.

What’s Machine Learning – Hillary Green-Lerman.

An Introduction to Neural Networks – Vincent Cheung / Kevin Cannons / Dr. W. Kinsner.

Prediction as a candidate for learning deep hierarchical models of data – Rasmus Berg Palm.

Learning Deep Architectures for AI – Yoshua Bengio.

Notes on convolutional neural networks. Technical report, 2006 – Jake Bouvrie.

Rectified linear units improve restricted Boltzmann machines – Nair, V. / Hinton, G. E.

A learning algorithm for Boltzmann machines – Ackley, D. H. / Hinton, G. E. / Sejnowski, T. J.

Learning stochastic recurrent networks – Bayer, J. / Osendorfer, C.

Vlsi implementations of threshold logic-a comprehensive survey – Beiu, V. / Quintana, J. M. / Avedillo, M. J.

Scheduled sampling for sequence prediction with recurrent neural networks – Bengio, S. / Vinyals, O. / Jaitly, N. / Shazeer, N.

Artificial Neural Networks and their Application to Sequence Recognition – Bengio, Y.

Acceleration of backpropagation learning using optimised learning rate and momentum – X. H. Yu / G. A. Chen / S. X. Cheng.

Deep Learning – Goodfelow, I / Bengio, Y / Courville, A.

Deep Residual Learning for Image Recognition – Kaiming He / Xiangyu Zhang / Shaoqing Ren / Jian Sun

Convolutional neural networks at constrained time cost. – K. He / J. Sun.

Efficient backpropagation – Y. LeCun / L. Bottou / G. B. Orr / K.-R. Muller.

MATLAB User’s Guide – The Mathworks Inc.

Fundamente de Matlab – Florin Iacob

Similar Posts