- View
U ovoj lekciji ćemo upoznati neuronske mreže, posebnu grupu algoritama mašinskog učenja. Njima dugujemo mnoge zanimljive proboje u svetu veštačke inteligencije.
Sa časova biologije ti je poznato da je ćelija osnovna jedinica građe i funkcije svih živih bića. Iz ugla veštačke inteligencije i učenja, najzanimljivije su nam ćelije mozga. One se zovu neuroni. Neuroni se sastoje iz tela u kojem je jezgro i dužih i kraćih nastavaka, koji se zovu aksoni i dendriti. Nastavci neuronima omogućavaju da se povežu sa drugim neuronima. Te tačke povezivanja neurona se nazivaju sinapsama. One omogućavaju da se signali, tj. električni impulsi koji generiše jedan neuron, prenesu do drugog neurona. Zanimljivo je da jedan neuron može biti povezan sa milionima drugih neurona. To znači da on prima i obrađuje signale koji stižu od mnoštva drugih neurona i na osnovu svojih internih mehanizama fino proračunava signal koji dalje šalje drugim neuronima. Uobičajeno je da se ovo stanje naziva stanje aktivacije neurona. Ono traje tek delić sekunde, ali omogućava da se izvrše suptilne kalkulacije i generiše signal koji se prenosi kroz ceo nervni sistem.

Neuron koji susrećemo u veštačkoj inteligenciji je matematička apstrakcija neurona mozga. Njega opisujemo funkcijom više promenljivih \(f(x_1,x_2,...,x_n)\) gde svaka od promenljivih \(x_1, x_2, ..., x_n\) odgovara po jednom signalu koji stiže do neurona. Kako nisu svi signali podjednako važni za aktivnosti neurona, pridružuju im se težine \(w_1, w_2, ..., w_n\) koje treba da ukažu na njihov značaj. Veće vrednosti ovih brojeva ukazuju da je signal važniji, a manje vrednosti da je signal manje važan. Tako ukupna stimulacija neurona odgovara težinskoj sumi \(w_1x_1 + w_2x_2 +...+ w_nx_n\).. Da bi moglo da se utiče na dodatna ponašanja neurona, ovoj sumi se dodaje i jedan slobodan član b, tako da ukupna stimulacija neurona zapravo iznosi \(w_1x_1 + w_2x_2 +...+ w_nx_n + b\). Ona se dalje prosleđuje takozvanoj aktivacionoj funkciji φ, koja ima zadatak da izračuna izlaz neurona. U zavisnosti od izbora aktivacione funkcije zavisiće i vrednosti izlaza koje se dobijaju. Ako sada sve sistematično zapišemo, dobijamo da je za primljene signale \(x_1, x_2, ..., x_n\) izlaz neurona \(y = φ(w_1x_1 + w_2x_2 +...+ w_nx_n + b\). Postupak koji smo opisali možeš da ispratiš i na donjoj ilustraciji.

Matematička apstrakcija neurona
Približimo dodatno smisao parametra b. Prirodni neuron karakteriše takozvani prag aktivacije - ukoliko je ukupan signal koji neuron primi veći od vrednosti praga aktivacije, on se aktivira, obrađuje signal i prosleđuje rezultat obrade dalje drugim neuronima. Sličnu ulogu u matematičkom modelu neurona ima i parametar b. Ukoliko je ukupni signal veći od praga aktivacije b, tj. ako je \(w_1x_1 + w_2x_2 +...+ w_nx_n>b\), neuron će se aktivirati. Stoga nam parametar b ostavlja mogućnost da utičemo na dodatna ponašanja neurona. Izraz \(w_1x_1 + w_2x_2 +...+ w_nx_n>b\) se može zapisati i kao \(w_1x_1 + w_2x_2 +...+ w_nx_n-b>0\), pa je u tom smislu parametar b i sastavni deo sume.
Kada neurone povežemo među sobom, dobijamo neuronsku mrežu (eng. neural network). Neuronska mreža se po pravilu sastoji od slojeva (eng. layer), posebno udruženih grupa neurona.

Slojevi neuronske mreže
Ulazni sloj (eng. input layer) je sloj koji se nalazi na ulazu neuronske mreže. Ulazne signale \(x1, x2, ..., xn\) ovog sloja povezujemo sa vrednostima atributa koje imamo u skupu podataka i tako prilazimo praktičnoj primeni neuronskih mreža. Na primer, ako raspolažemo skupom podataka u kojem se nalaze tri atributa, temperatura, vlažnost vazduha i atmosferski pritisak, ulazni sloj će imati tri neurona: prvi će odgovarati prvom atributu, temperaturi, drugi će odgovarati drugom atributu, vlažnosti vazduha, a treći neuron trećem atributu, tj. atmosferskom pritisku. Za jednu konkretnu instancu skupa podataka sa vrednostima temperature, vlažnosti vazduha i atmosferskog pritiska koji iznose, redom, 19 ℃ 77% i 1011,2 mb imaćemo vrednosti signala \(x1 = 19, x2 = 77\) i x3 = 1011,2. U duhu prethodne priče, prvi neuron ulaznog sloja prima i obrađuje samo signal \(x_1\) i to tako što ga propušta bez bilo kakve modifikacije (to je moguće za izbor aktivacione funkcije \(φ(x)= x\) i vrednost \(w_1 = 1\) i \(b = 0\)). Slično važi i za preostala dva neurona i njihove signale \(x_2\) i \(x_3\). To bi značilo da nam ulazni sloj omogućava da podaci uđu u mrežu.
Izlazni sloj (eng. output layer) je sloj koji se nalazi na izlazu neuronske mreže. Kao što naslućuješ, on nam omogućava da očitamo rezultate koje je neuronska mreža izračunala za nas. U zavisnosti od zadatka koji se rešava, zavisiće i broj neurona koji se nalazi u ovom sloju.
U zadacima regresije, pošto očekujemo jednu brojčanu vrednost kao rezultat (količinu padavina ili nešto slično), dovoljan nam je jedan neuron. Njegov izlaz treba da odgovara predikciji koju očekujemo. Za zadatak klasifikacije razmotrimo posebno binarnu klasifikaciju i višeklasnu klasifikaciju. Kako kod binarne klasifikacije očekujemo dve vrednosti, 0 ili 1, možda će ti prva pomisao biti da su nam potrebna dva neurona. Ipak ako bolje razmisliš, primetićeš da je dovoljan čak i jedan neuron: ako njegov izlaz pređe neki prag, neku unapred definisanu vrednost, to možemo voditi kao rezultat 1, ili, u suprotnom, kao rezultat 0. U slučaju višeklasne klasifikacije možemo da imamo više klasa pa je praktično da za svaku klasu uvedemo po jedan neuron.
Složićeš se da u zadatku višeklasne klasifikacije očekujemo da svi izlazi neurona izlaznog sloja budu 0, osim jednog koji ima vrednost 1 - tako ćemo tačno znati o kojoj je klasi reč.
Slojeve neuronske mreže koji se nalaze između ulaznog i izlaznog sloja nazivamo skrivenim slojevima (eng. hidden layers). Uobičajeno je da se neuronske mreže koje imaju više od jednog skrivenog sloja nazivaju dubokim neuronskim mrežama (eng. deep neural networks). Odatle dolazi i ime duboko učenje (eng. deep learning) za oblast mašinskog učenja koja ih izučava i ime plitko učenje (eng. shallow learning) za klasičnije forme učenja.
Razmotrimo sada šta smo zapravo dobili uvođenjem neurona i neuronskih mreža. Pretpostavimo da imamo tri atributa \(x_1, x_2\) i \(x3\). Linearnu zavisnost između atributa i ciljne promenljive smo matematički opisivali jednačinom \(y = β_0 + β_1x_1 + β_2x_2 + β_3x_3\). Ukoliko umesto parametara β zapišemo w a umesto β0 zapišemo b i prebacimo ga na kraj, dobijamo zapravo težinsku sumu \(w_1x_1 + w_2x_2 + w_3x_3 + b\) koju izračunava jedan neuron za signale koje prima. To znači da, kada ne bi bilo aktivacione funkcije φ i neuron bi modelovao linearnu zavisnost između atributa (signala) i izlaza. Ovo možemo grafički prikazati i mrežom koja se sastoji samo od ulaznog sloja sa tri neurona i izlaznog sloja sa jednim neuronom, kao na donjoj slici.

Ako aktivaciona funkcija ne bi postojala, da li bi iz ugla modelovanja zavisnosti nešto promenilo dodavanje novog skrivenog sloja? Neka to bude sloj žute boje na sledećoj slici.

Sada svaki neuron skrivenog sloja izračunava neku linearnu kombinaciju atributa, a neuron izlaznog sloja neku linearnu kombinaciju vrednosti skrivenog sloja. To bi značilo da naš neuron izlaznog sloja opet izračunava neku linearnu kombinaciju atributa i da se nismo mnogo pomerili od predstavljanja nekih složenijih zavisnosti između atributa i izlaza. Dodatno ne bismo se pomerili čak ni dodavanjem 100 skrivenih slojeva - uvek bismo modelovali linearnu zavisnost.
Zato uključivanje aktivacione funkcije u izračunavanja neurona značajno menja skup mogućnosti koje imamo. Ukoliko iskoristimo neku nelinearnu aktivacionu funkciju, moći ćemo da modelujemo i neke nelinearne zavisnosti između atributa i ciljne promenljive. Tako postojanje nelinearne aktivacione funkcije u skrivenom sloju iz prethodnog primera omogućava da neuron izlaznog sloja sada izračunava neku nelinearnu kombinaciju atributa. U ovom svetlu, dodavanje novih slojeva ima mnogo više smisla. Kombinujući nelinearnosti većeg broja slojeva možemo da modelujemo kompleksne zavisnosti između atributa i izlaza.
Da bi se sve kockice uklopile, ostaje još da prodiskutujemo koje su to nelinearne aktivacione funkcije koje su popularne u mašinskom učenju. To su sigmoidna funkcija koju smo upoznali u priči o logističkoj regresiji, hiperbolički tenges, ispravljena linearna jedinica (eng. rectified linear unit, ReLU) i nakošena ispravljena linearna jedinica (eng. leaky rectified linear unit, leaky ReLU). Formule po kojima se ove funkcije izračunavaju i njihovi grafici prikazani su na donjoj slici. Kao što možeš da primetiš, ove funkcije zaista nisu linearne - njihovi grafici nisu prave.

Najčešći izbori aktivacionih funkcija
Da bismo upotpunili priču o kombinovanju različitih aktivacionih funkcija, posmatrajmo funkcije \(f(x)= 2x\) i \(g(x)= 1 − x\). Možemo da primetimo da su obe funkcije linearne funkcije jedne promenljive. Njihovim kombinovanjem, kompozicijom funkcija, dobijamo funkciju \(g(f(x))= 1 − 2x\), koja je takođe linearna funkcija jedne promenljive. Grafike sve tri funkcije možemo da vidimo i na donjoj slici.

Posmatrajmo sada funkcije \(f(x)= ReLU(2x)\) i \(g(x)= ReLU(1 − x)\), koje se od prethodnih funkcija razliku po tome što u njima figuriše aktivaciona funkcija ispravljena linearna jedinica. Zato su obe funkcije nelinearne. Njihovim kombinovanjem, tj. njihovom kompozicijom, dobijamo funkciju \(g(f(x))= ReLU(1 − ReLU(2x))\), koja je takođe nelinearna i koja ima novi ”oblik”: omogućava nam da izrazimo nešto drugačiju zavisnost između ulazne promenljive i izlaza.

Izbor odgovarajuće aktivacione funkcije zavisi od prirode zadatka i nekih svojstava koje neuronska mreža treba da ima u toku obučavanja. Kako se to radi, objasnićemo u sledećoj lekciji.

