Što je duboko učenje? Algoritmi koji oponašaju ljudski mozak

Definisano duboko učenje

Dubinsko učenje oblik je strojnog učenja koji uzorke podataka modelira kao složene, višeslojne mreže. Budući da je duboko učenje najopćenitiji način modeliranja problema, on ima potencijal riješiti teške probleme - poput računalnog vida i obrade prirodnog jezika - koji nadmašuju i konvencionalno programiranje i druge tehnike strojnog učenja.

Dubinsko učenje ne samo da može dati korisne rezultate tamo gdje druge metode zakažu, već također može stvoriti preciznije modele od ostalih metoda i može smanjiti vrijeme potrebno za izgradnju korisnog modela. Međutim, za obuku modela dubokog učenja potrebna je velika računalna snaga. Još jedan nedostatak dubokog učenja je poteškoća u tumačenju modela dubokog učenja. 

Definicija dubokog učenja je da model koji se obučava ima više skrivenih slojeva između ulaza i rezultata. U većini rasprava duboko učenje znači korištenje dubokih neuronskih mreža. Postoji, međutim, nekoliko algoritama koji implementiraju duboko učenje koristeći druge vrste skrivenih slojeva osim neuronskih mreža.

Dubinsko učenje nasuprot strojnom učenju

Spomenuo sam da je duboko učenje oblik strojnog učenja. Ne-duboko strojno učenje nazvat ću klasičnim strojnim učenjem , kako bi se prilagodilo uobičajenoj uporabi.

Općenito, klasični algoritmi strojnog učenja rade mnogo brže od algoritama dubokog učenja; jedan ili više CPU-a često će biti dovoljni za osposobljavanje klasičnog modela. Modeli dubokog učenja često trebaju hardverske akceleratore kao što su GPU-ovi, TPU-ovi ili FPGA-i za obuku, a također i za široku primjenu. Bez njih bi modeli trenirali mjesecima.

Za mnoge probleme neki će klasični algoritmi strojnog učenja stvoriti model "dovoljno dobar". Za ostale probleme klasični algoritmi strojnog učenja u prošlosti nisu radili strašno dobro.

Aplikacije za duboko učenje

Mnogo je primjera problema za koje je trenutno potrebno duboko učenje kako bi se stvorili najbolji modeli. Obrada prirodnog jezika (NLP) dobra je.

U jesen 2016., kvaliteta rezultata Google Prevoditelja za englesko-francuski, englesko-kineski i englesko-japanski jezični par naglo se dramatično poboljšala, od stvaranja riječi salate do izrade rečenica bliskih kvaliteti profesionalnog prijevoda čovjeka. Ono što se dogodilo iza kulisa jest da su timovi Google Brain i Google Translate preradili Google Translate iz upotrebe njegovih starih algoritama za statističko strojno prevođenje na bazi fraza (jedna vrsta klasičnog strojnog učenja) u upotrebu duboke neuronske mreže osposobljene za ugrađivanje riječi pomoću Googleovog okvira TensorFlow .

To nije bio lak projekt. Mnogim istraživačima na doktorskoj razini bili su potrebni mjeseci rada na modelima i tisuće GPU-tjedana za obuku modela. To je također potaknulo Google na stvaranje nove vrste čipa, jedinice za obradu tenzora (TPU), za pokretanje neuronskih mreža u opsegu za Google Translate.

Uz problem prevođenja jezika kojim se bavi Google Translate, glavni NLP zadaci uključuju automatsko sažimanje, rješavanje koferencija, analizu diskursa, morfološku segmentaciju, prepoznavanje imenovanih entiteta, stvaranje prirodnog jezika, razumijevanje prirodnog jezika, označavanje dijela govora, sentiment analiza i prepoznavanje govora.

Još jedan dobar primjer primjene dubokog učenja je klasifikacija slika. Budući da živi organizmi obrađuju slike svojim vizualnim korteksom, mnogi su istraživači uzeli arhitekturu vizualnog korteksa sisavaca kao model neuronskih mreža dizajniranih za prepoznavanje slike. Biološka istraživanja sežu u 1950-te.

Proboj na polju neuralne mreže za vid bio je LeNet-5 Yanna LeCuna iz 1998. godine, sedmorazinska konvolucijska neuronska mreža (CNN) za prepoznavanje rukom napisanih znamenki digitaliziranih na slikama od 32x32 piksela. Da bi se analizirale slike veće rezolucije, mrežu LeNet-5 trebalo bi proširiti na više neurona i više slojeva.

Današnji najbolji modeli klasifikacije dubokih slika mogu identificirati raznolike kataloge objekata u HD rezoluciji u boji. Uz čiste duboke neuronske mreže (DNN), ponekad ljudi koriste i hibridne modele vida, koji kombiniraju duboko učenje s klasičnim algoritmima strojnog učenja koji izvršavaju određene podzadatke.

Ostali problemi s vidom, osim osnovne klasifikacije slike, koji su riješeni dubokim učenjem, uključuju klasifikaciju slika s lokalizacijom, otkrivanje objekata, segmentaciju objekata, prijenos stila slike, koloriranje slike, rekonstrukcija slike, super-rezolucija slike i sinteza slike.

Klasifikacija slika može se proširiti na video klasifikaciju izdvajanjem pojedinačnih okvira iz videozapisa i klasifikacijom svakog kadra. Otkriveni objekti u video isječcima mogu se pratiti od kadra do kadra.

Prema Goodfellowu, Bengiu i Courvilleu, pišući 2016., duboko učenje uspješno se koristi za predviđanje interakcije molekula kako bi se farmaceutskim tvrtkama pomoglo u dizajniranju novih lijekova, traženju subatomskih čestica i automatskom raščlanjivanju slika mikroskopa korištenih za izgradnju trodimenzionalna karta ljudskog mozga.

Dubinsko učenje neuronskih mreža

Ideje za "umjetne" neuronske mreže sežu u četrdesete godine prošlog stoljeća. Bitni je koncept da mreža umjetnih neurona izgrađenih od međusobno povezanih prekidača praga može naučiti prepoznavati uzorke na isti način kao što to čine životinjski mozak i živčani sustav (uključujući mrežnicu).

Povratno razmnožavanje

Učenje u dubokim neuronskim mrežama događa se jačanjem veze između dva neurona kada su oba aktivna istovremeno tijekom treninga. U suvremenom softveru neuronske mreže to je najčešće pitanje povećanja vrijednosti težine za veze između neurona koristeći pravilo koje se naziva povratno širenje pogreške , povratno udruživanje ili BP.

Neuroni

Kako se modeliraju neuroni? Svaki od njih ima funkciju širenja koja transformira izlaze povezanih neurona, često s ponderiranim zbrojem. Izlaz funkcije širenja prelazi u funkciju aktivacije koja se aktivira kada njezin ulaz premaši graničnu vrijednost.

Aktivacijske funkcije

U 1940-ima i 1950-ima umjetni neuroni koristili su funkciju stupnjevne aktivacije i nazivali su se perceptroni . Moderne neuronske mreže mogu reći da koriste perceptrone, ali zapravo imaju glatke funkcije aktivacije, poput logističke ili sigmoidne funkcije, hiperboličke tangente i ispravljene linearne jedinice (ReLU). ReLU je obično najbolji izbor za brzu konvergenciju, iako ima problem s neuronima koji "umiru" tijekom treninga ako je stopa učenja postavljena previsoko.

Izlaz funkcije aktiviranja može prijeći na izlaznu funkciju za dodatno oblikovanje. Međutim, često je izlazna funkcija funkcija identiteta, što znači da se izlaz funkcije aktivacije prenosi na nizvodno povezane neurone.

Topologije neuronskih mreža

Sad kad znamo za neurone, moramo naučiti o uobičajenim topologijama neuronske mreže. U feed-forward mreži neuroni su organizirani u različite slojeve: jedan ulazni sloj, bilo koji broj skrivenih slojeva obrade i jedan izlazni sloj, a izlazi iz svakog sloja idu samo na sljedeći sloj.

U mreži za prosljeđivanje s prečacima, neke veze mogu preskočiti jedan ili više srednjih slojeva. U ponavljajućim neuronskim mrežama neuroni mogu utjecati na sebe, bilo izravno, bilo neizravno kroz sljedeći sloj.

Trening

Nadzirano učenje neuronske mreže izvodi se kao i svako drugo strojno učenje. Mrežu predstavljate s grupama podataka treninga, uspoređujete mrežni izlaz sa željenim izlazom, generirate vektor pogreške i primjenjujete ispravke na mreži na temelju vektora pogreške. Skupovi podataka o treningu koji se pokreću zajedno prije primjene korekcija nazivaju se epohama.

Za one koji su zainteresirani za detalje, povratno širenje koristi gradijent funkcije pogreške (ili cijene) s obzirom na težine i pristranosti modela kako bi otkrilo ispravan smjer kako bi pogrešku svelo na minimum. Dvije stvari kontroliraju primjenu korekcija: algoritam optimizacije i varijabla brzine učenja, koja obično mora biti mala kako bi se zajamčila konvergencija i izbjeglo uzrokovanje mrtvih ReLU neurona.

Optimizatori

Optimizatori za neuronske mreže obično koriste neki oblik algoritma gradijentnog spuštanja za vođenje povratnog širenja, često s mehanizmom koji pomaže izbjeći zaglavljivanje u lokalnim minimumima, poput optimizacije slučajno odabranih mini serija (Stohastični gradijentni spust) i primjene korekcija impulsa na gradijent . Neki algoritmi za optimizaciju također prilagođavaju stope učenja parametara modela gledajući povijest gradijenta (AdaGrad, RMSProp i Adam).

Kao i kod cijelog strojnog učenja, morate provjeriti predviđanja neuronske mreže prema zasebnom skupu podataka za provjeru valjanosti. Bez toga riskirate stvaranje neuronskih mreža koje samo pamte svoje ulaze, umjesto da nauče biti generalizirani prediktori.

Pravi DNN

Duboka neuronska mreža za stvarni problem može imati više od 10 skrivenih slojeva. Njegova topologija može biti jednostavna ili prilično složena.

Što je više slojeva u mreži, to više karakteristika može prepoznati. Nažalost, što je više slojeva u mreži, to će trebati više vremena za izračunavanje, a teže će biti trenirati.

Algoritmi dubokog učenja

Kao što sam već spomenuo, većina dubokog učenja provodi se pomoću dubokih neuronskih mreža. Konvolucijske neuronske mreže (CNN) često se koriste za strojni vid. Ponavljajuće se neuronske mreže (RNN) često koriste za obradu prirodnog jezika i druge sekvence, kao što su mreže dugotrajnog pamćenja (LSTM) i neuronske mreže temeljene na pažnji. Slučajne šume, poznate i kao Slučajne šume odlučivanja, koje nisu neuronske mreže, korisne su za niz problema s klasifikacijom i regresijom.

CNN neuronske mreže

Konvolucijske neuronske mreže obično koriste slojeve konvolucije, udruživanja, ReLU, potpuno povezane i gubitke za simulaciju vizualnog korteksa. Konvolucijski sloj u osnovi uzima integrale mnogih malih preklapajućih područja. Sloj za udruživanje izvodi oblik nelinearnog smanjenja uzorkovanja. ReLU slojevi primjenjuju funkciju nezasićenja aktivacije f(x) = max(0,x). U potpuno povezanom sloju, neuroni imaju veze sa svim aktivacijama u prethodnom sloju. Sloj gubitka izračunava kako mrežni trening kažnjava odstupanje između predviđenih i istinitih oznaka, koristeći Softmax ili funkciju unakrsnog entropijskog gubitka za klasifikaciju, ili euklidsku funkciju gubitka za regresiju.

RNN, LSTM i neuronske mreže temeljene na pažnji

U neuronskim mrežama s povratnim naponom informacije teku od ulaza, kroz skrivene slojeve, do izlaza. To ograničava mrežu na bavljenje jednom državom odjednom.

U rekurentnim neuronskim mrežama informacije kruže kroz petlju, što omogućuje mreži da pamti nedavne prethodne izlaze. To omogućuje analizu sekvenci i vremenskih serija. RNN-ovi imaju dva uobičajena problema: eksplodirajući gradijenti (lako se fiksiraju stezanjem gradijenata) i nestajući gradijenti (ne tako lako popraviti).

U LSTM-ovima mreža može zaboraviti (zabilježiti) prethodne podatke ili ih se sjetiti, u oba slučaja mijenjajući težinu. To učinkovito daje LSTM-u i dugoročnu i kratkoročnu memoriju i rješava problem nestajanja gradijenta. LSTM se mogu nositi sa sekvencama stotina prošlih ulaza.

Moduli pažnje su generalizirana vrata koja primjenjuju težine na vektor ulaza. Hijerarhijski koder neuronske pažnje koristi više slojeva modula pažnje za obradu desetaka tisuća prošlih ulaza.

Slučajne šume

Druga vrsta algoritma dubokog učenja - a ne duboke neuronske mreže - je Slučajna šuma ili Slučajna šuma odlučivanja. Slučajna šuma izgrađena je od mnogih slojeva, ali umjesto neurona izgrađena je od stabala odlučivanja i daje statistički prosjek (način klasifikacije ili sredina za regresiju) predviđanja pojedinih stabala. Randomizirani aspekti Slučajnih šuma su upotreba bootstrap agregacije (zvane vreće ) za pojedina stabla i uzimanje slučajnih podskupova značajki.

Okviri dubokog učenja

Iako biste mogli pisati programe dubokog učenja iz prvih principa, daleko je učinkovitije koristiti okvire dubokog učenja, posebno s obzirom na to da su optimizirani za upotrebu s GPU-ima i drugim akceleratorima. Najistaknutiji okvir je TensorFlow koji je nastao na Googleu. Favorizirani API visoke razine za TensorFlow je Keras, koji se također može koristiti s drugim pozadinskim okvirima.

PyTorch, od Facebooka i drugih, snažna je alternativa TensorFlowu i ima distinkciju da podržava dinamičke neuronske mreže, u kojima se topologija mreže može mijenjati iz epohe u epohu. Fastai je API treće strane visoke razine koji koristi PyTorch kao pozadinu.

MXNet, od Amazona i drugih, još je jedna snažna alternativa TensorFlowu, s tvrdnjom da ima veću skalabilnost. Gluon je preferirani imperativni API visoke razine za MXNet.

Chainer, iz IBM-a, Intel-a i drugih, na neki je način bio inspiracija za PyTorch, s obzirom na to da definira neuronsku mrežu pokretanjem i podržava dinamičke neuronske mreže.

Iako su svi gore navedeni okviri prvenstveno Python, Deeplearning4j (DL4J), podrijetlom iz Skyminda, a sada Apache projekt, prvenstveno su Java i Scala. DL4J je kompatibilan s Apache Sparkom i Hadoopom.

ONNX je izvorno predložen kao otvoreni ekosustav za izmjenjive AI modele. ONNX sada ima vrijeme izvođenja uz format datoteke za razmjenu.