Slojevi i propagacija unazad
Veštačka inteligencija od nule
Lekcija 5 · Slojevi i propagacija unazad
Dosad smo imali pravu kroz oblak tačaka. To je pošten model za cenu stana, ali je i sve što ume — jednu jedinu pravu liniju. Svet retko staje u pravu liniju.
Ova lekcija pokazuje kako se od tog skromnog komada dolazi do mreže koja prepoznaje lica i piše tekst. Iznenađenje je da se ne uvodi nikakva nova ideja. Uzima se isti neuron, umnožava, ređa u slojeve i doda mu se jedan gotovo smešno jednostavan pregib.
Uz to dolazi i jedan tehnički problem koji je oblast držao u mestu decenijama, i njegovo rešenje — propagacija unazad — bez kog ničega od ovoga ne bi bilo.
I. Zašto prava nije dovoljna
Uzmimo mali zadatak. Uređaj ima dva senzora, svaki pokazuje nulu ili jedinicu, i treba javiti kvar kada se senzori ne slažu — kad jedan gori a drugi ne. Ako oba ćute ili oba gore, sve je u redu.
Nacrtaj te četiri situacije kao četiri tačke u ravni. Dve koje traže uzbunu naći će se u suprotnim uglovima kvadrata, a dve mirne u druga dva ugla — takođe suprotna. Sada pokušaj da povučeš jednu pravu koja odvaja jedan par od drugog.
Ne može. Nije stvar u tome što nisi dovoljno pokušao — dokazivo je nemoguće. A ovo je otprilike najjednostavniji zadatak koji se može zamisliti.
Upravo je taj primer krajem šezdesetih zaustavio istraživanje neuronskih mreža na skoro dve decenije, kao što je pomenuto u drugoj lekciji. Zaključak je tada bio da model ovog tipa ne može dalje od prave.
Zaključak je bio tačan — za jedan takav model. Ono što je promašeno jeste šta se dešava kada se više njih naslaže jedan na drugi.
II. Neuron i pregib
Jedan neuron je gotovo doslovno model iz treće lekcije. Uzme ulaze, svaki pomnoži svojom težinom, sve to sabere i doda pomeraj. Ista jednačina, samo sa više ulaza.
izlaz = a₁×ulaz₁ + a₂×ulaz₂ + … + b
Sada dolazi prva pomisao: naslažimo ih. Neka izlazi jednog reda neurona budu ulazi sledećeg.
I tu se dešava razočaranje. Ako se linearna funkcija ubaci u linearnu funkciju, ispada opet linearna funkcija. Prava kroz pravu daje pravu. Mreža od stotinu slojeva ovakvih neurona ima tačno istu moć kao jedan jedini neuron — samo troši sto puta više.
Rešenje je da se posle sabiranja izlaz malo prelomi. Na izlaz svakog neurona stavi se aktivaciona funkcija, i najkorišćenija od svih je toliko jednostavna da izgleda kao šala:
ako je rezultat negativan, pusti nulu
ako je pozitivan, pusti ga nepromenjenog
To je sve. Zove se ReLU i to je jedan pregib na grafiku — prava koja do nule leži vodoravno pa se pod uglom podigne. Ranije se koristila glatka sigmoidna funkcija u obliku razvučenog slova S, ali se ispostavilo da grubi pregib radi bolje i računa se neuporedivo brže.
Sa tim pregibom slaganje odjednom ima smisla. Od dovoljno prelomljenih pravih može se sastaviti bilo kakva kriva — isto kao što se od kratkih ravnih dasaka može sagraditi zaobljen krov. Prelom je ono što mreži daje svu moć koju ima, i on je ceo sadržaj razlike između „duboko učenje radi" i „duboko učenje ne radi".
III. Sloj, dubina i broj ručica
Sloj je grupa neurona koji svi gledaju isti ulaz, ali svaki sa svojim težinama, pa zato svaki primećuje nešto drugo. Dubina je broj takvih slojeva jedan za drugim.
Da bi se osetio red veličine: mreža koja prepoznaje rukom pisane cifre iz slike od 28 puta 28 tačaka ima 784 ulaza. Ako iza njih stoji sloj od 128 neurona, pa izlazni sloj od 10 — po jedan za svaku cifru — ukupno ima oko sto hiljada parametara. Za današnje pojmove je to sitnica, a već je daleko izvan onoga što bi čovek mogao da podesi ručno.
Poznat je i matematički rezultat da mreža sa jednim dovoljno širokim slojem može da približi bilo koju funkciju. Zvuči kao kraj priče, ali nije, i vredi znati zašto: ta teorema kaže samo da dobre vrednosti parametara postoje. Ne kaže da ćemo ih naći, ni koliko bi neurona trebalo — a odgovor ume da bude neizvodljivo mnogo.
Zato se u praksi ne ide u širinu nego u dubinu. Više slojeva rešava iste zadatke sa daleko manje neurona, jer svaki sloj gradi na onome što je prethodni već sredio. Tim redosledom se bavi sledeća lekcija.
IV. Kako se uči mreža
Postupak je onaj iz treće lekcije i ništa se u njemu nije promenilo: izračunaj grešku, vidi u kom smeru svaki parametar treba pomeriti, pomeri ga malo, ponovi.
Problem je u drugom koraku. Kod prave je bilo lako videti kako promena nagiba utiče na grešku — nagib direktno dodiruje izlaz. U mreži, težina u prvom sloju utiče na izlaz tek pošto njen uticaj prođe kroz sve slojeve iznad. Kako uopšte znati koliko je ona kriva za konačan promašaj?
Očigledno rešenje je da se svaka težina pomeri za dlaku i vidi šta se desilo sa greškom. Za sto hiljada parametara to znači sto hiljada punih prolaza kroz mrežu, i to za jedan jedini korak treninga. Ovim putem se ne stiže nikuda.
Lanac odgovornosti
Rešenje je da se ne pita unapred nego unazad.
Na izlazu se zna tačno koliko je model promašio. Poslednji sloj tada može da izračuna dve stvari: koliko su za taj promašaj krive njegove težine, i koliko je kriv ulaz koji je dobio od sloja ispod. To drugo je poruka koja se prosleđuje niže — krivica predata dalje. Sloj ispod je prima kao svoju grešku i radi isti račun. I tako do dna.
Kad krivica stigne do prvog sloja, svaki parametar u mreži zna koliko doprinosi grešci. Postupak se zove propagacija unazad i predstavlja doslednu primenu pravila o izvodu složene funkcije — pravila koje kaže kako se uticaji nižu duž lanca.
Presudno je koliko to košta. Jedan prolaz napred da se izračuna izlaz, jedan unazad da se raspodeli krivica — dva prolaza, i to je sve, bez obzira na to da li mreža ima sto hiljada ili sto milijardi parametara. Naivni pristup je tražio jedan prolaz po parametru. Ta razlika je jedini razlog zašto duboko učenje uopšte postoji.
Ideja je bila poznata još sedamdesetih, ali je tek sredinom osamdesetih pokazano da radi na mrežama i da vodi negde. Trebalo je zatim čekati podatke i grafičke kartice, kao što je opisano u drugoj lekciji.
V. Gde se stvar kvari
Tri kvara se javljaju toliko redovno da ih vredi znati unapred.
Krivica koja se izgubi putem
Dok putuje unazad, poruka o krivici se na svakom sloju množi nekim brojem. Ako su ti brojevi manji od jedinice, posle dvadeset slojeva od poruke ostane prah. Prvi slojevi tada praktično ne uče — dobijaju signal koji je nula.
To je decenijama ograničavalo mreže na svega nekoliko slojeva. Prelaz na ReLU je pomogao, a pravi lek su bile preskočne veze — dodatni prolazi koji krivici dopuštaju da preskoči nekoliko slojeva i stigne dole neoštećena. Tek posle njih su mreže sa stotinama slojeva postale moguće. Ista ideja se nalazi i u transformerima, o kojima govori sedma lekcija.
Neuroni koji su svi isti
Deluje uredno da se svi parametri na početku postave na nulu. To je, međutim, koban potez: svi neuroni u sloju tada rade isti račun, dobijaju istu krivicu i pomeraju se identično. Ostaju blizanci zauvek, a ceo sloj se ponaša kao jedan neuron.
Zato se počinje od slučajnih vrednosti. Ne bilo kakvih — postoje pravila kojim rasponom ih birati da signal kroz mrežu ne izbledi niti eksplodira. Loš početak ume da upropasti trening koji bi inače prošao.
Pamćenje umesto učenja
Sa sto hiljada parametara i deset hiljada primera, mreža ima dovoljno mesta da naprosto zapamti sve što je videla. Sve iz četvrte lekcije ovde važi pojačano.
Uz rano zaustavljanje, najkorišćeniji lek je začuđujuće grub: tokom treninga se u svakom koraku nasumično isključi deo neurona. Mreža tako ne sme da se osloni na nijedan pojedinačni put kroz sebe i mora naučiti nešto robusnije. Postupak se zove dropout i radi bolje nego što ima pravo.
Šta iz ovoga treba poneti
Neuronska mreža je mnogo pravih sa pregibom, poređanih u slojeve. Pregib je ono što joj daje moć — bez njega bi cela mreža, koliko god duboka, bila jedna jedina prava.
Propagacija unazad je raspodela krivice od izlaza ka ulazu. Ne uvodi novu vrstu učenja — služi samo tome da gradijentni spust iz treće lekcije postane izvodljiv na milijardama parametara umesto na dva.
Ostalo je pitanje šta unutrašnji slojevi zapravo rade. Ispostavlja se da grade sopstveni jezik za opisivanje ulaza, i da je taj jezik zanimljiviji od svega dosad. O tome je sledeća lekcija.
Vežba · opciono
Prvi deo se radi olovkom i papirom i rešava zadatak sa dva senzora s početka lekcije. Evo gotove mreže sa dva neurona u sredini:
h₁ = ReLU(x₁ + x₂)
h₂ = ReLU(x₁ + x₂ − 1)
izlaz = h₁ − 2×h₂
Provuci kroz nju sva četiri slučaja: (0,0), (1,0), (0,1) i (1,1). Računaj redom, kao mašina. Dobićeš nulu, jedinicu, jedinicu i nulu — tačno ono što nijedna prava nije mogla.
Zatim uradi isto bez ReLU, dakle sa čistim sabiranjem. Rezultat će za (1,1) ispasti pogrešan. Time si sopstvenom rukom pokazao da sav posao radi pregib.
Drugi deo je za one koji rade kod. Istreniraj mrežu sa jednim skrivenim slojem na rukom pisanim ciframa i uporedi je sa modelom bez skrivenog sloja.
Onda izbaci aktivacione funkcije i istreniraj ponovo. Mreža će pasti tačno na nivo onog jednostavnog modela, ma koliko slojeva imala. To je najkorisniji eksperiment u celoj lekciji.
SLEDEĆA LEKCIJA
6. Reprezentacije: od piksela do značenja
Šta slojevi grade u sebi, i kako značenje reči postaje mesto u prostoru.
Tekst je pisan uz pomoć jezičkog modela Claude Opus 5 kompanije Anthropic. Sadržaj, struktura i konačna redakcija su autorski.
Comments
Post a Comment