TensorFlow, PyTorch i demokratizacija AI-ja
Backprop olovkom je bio pravi posao dok ga stroj nije preuzeo — i onda je AI odjednom postao 'pip install' daleko.
Godina je 2015. Da rezimiramo o čemu je riječ: neuronska mreža je, u osnovi, hrpa slojeva brojeva — zovemo ih „težine” — koji se postupno prilagođavaju gledajući hrpu primjera, dok mreža ne počne sama prepoznavati obrazac koji joj nitko nije eksplicitno programirao. AlexNet je prije tri godine pomeo ImageNet takmičenje — natjecanje u kojem se programi natječu tko bolje prepozna što je na fotografiji, mačka, auto, tost, bilo što — kao da je riječ o školskom natjecanju u kojem su svi ostali donijeli kredu, a on donio laser. Svijet je skužio: neuronske mreže rade. Ne malo, ne simpatično, nego bolje od svega što je bilo prije. I onda su svi — fakulteti, startupi, korporacije s previše love i previše straha da ih neko pojede — odlučili da i oni hoće to. Neuronsku mrežu. Svoju.
Problem je taj mali detalj koji se u prezentacijama nikad ne spominje: da bi mreža nešto naučila, netko mora izračunati gradijent. Gradijent je, pojednostavljeno, broj koji govori koliko i u kojem smjeru treba promijeniti svaku pojedinu težinu da mreža napravi malo manju grešku — zamisli ga kao kompas koji ti na svakom koraku šapće „malo lijevo, malo jače” dok tražiš dno doline u magli. Taj kompas se ne dobiva metaforički, ne otprilike — treba ga stvarno izračunati, olovkom po papiru ili barem glavom punom parcijalnih derivacija, propagirajući grešku unatrag kroz svaki sloj, svaku matricu, svaku težinu. To se zove backpropagation i zvuči kao nešto što se svladava na jednom satu. U praksi je to matematika koja je lomila doktorande, i to ne metaforički — stvarno su ljudi odustajali od teme jer im se kod nikad ne bi poklopio s onim što je papir tvrdio da bi trebao raditi.
Rezultat: znanje o dubokom učenju živi zaključano u desetak laboratorija na planeti. Google Brain, Facebook AI Research, par sveučilišta koja su imala sreće dobiti pravog profesora u pravo vrijeme. Svi ostali gledaju izvana kao dijete pred izlogom slastičarne — vide kolač, ne mogu do njega, a čak kad bi mogli, ne bi znali koji je recept.
Pa krenimo od sitnice. Jedne softverske biblioteke koja izlazi iz Googlea u studenom 2015. — a biblioteka je, ako ovaj izraz ništa ne govori, samo gotov paket koda koji netko drugi napiše i podijeli, pa ga ti samo pozovš umjesto da sve pišeš iznova od nule. Zove se TensorFlow, ime joj dolazi od tenzora — riječi koja zvuči kao da je izašla iz Star Treka, a znači samo »matrica s više dimenzija«, ništa apokaliptično. Ta jedna biblioteka, taj jedan potez jedne firme koja odluči otvoriti nešto što je dotad čuvala — to je kamenčić. Godinu i pol kasnije pridružit će mu se drugi kamenčić, iz drugog kampusa, iz Facebooka. I onda kamenčići postaju odron, odron postaje sve što student u Splitu ili Lagosu ili Manili treba da napiše tri linije koda i pokrene mrežu koja bi mu prije godinu dana tražila doktorat i pristup laboratoriju s pravim isusom matematike unutra.
Ovo se već dogodilo nekoliko puta prije u ovoj knjizi. Hopper je rekla da će računalo pisati kod samo, umjesto ljudi, i svi su joj se smijali — dok se BASIC nije pojavio na svakom školskom stolu. VisiCalc je pretvorio proračunsku tablicu iz vještine za računovođe u alat za svakoga s Apple II-em. Svaki put kad se moć spusti s vrha na ulicu, polje ne naraste malo — naraste za red veličine. Ovo je opet taj trenutak. I baš kao i prošlih puta, u trenutku kad se to događa, nitko u sobi ne zna da gleda povijesni trenutak. Gledaju samo dosadan tehnički alat koji im rješava jedan konkretan problem: kako, jebemu, izračunati taj gradijent bez da doktoriram.
Godina je, recimo, 2014. Netko iz susjedstva ti kaže da radi na neuronskim mrežama i ti pomisliš — ajme, znanstvena fantastika, robot koji uči. E, sad ćeš vidjeti kako je taj isti čovjek zapravo proveo dan: sjedio je i računao derivacije. Rukom. Na papiru, ili u najboljem slučaju u glavi, dok je piljio u formulu za lančano pravilo (chain rule — isto ono što si možda mrzio u srednjoj školi, samo umnoženo za dvjesto slojeva).
Backpropagation, taj slavni algoritam koji mreži govori koliko je koji parametar pogriješio i u kojem smjeru da se popravi, u teoriji je elegantan. U praksi, 2014., to znači da moraš sam izvesti gradijent svoje mreže — matematički zapis koji kaže kako se greška širi natrag kroz slojeve — i onda ga ručno pretvoriti u kod. Pogriješiš znak minus negdje na sredini izvoda i cijela mreža tjedan dana uči u pogrešnom smjeru, a ti sjediš i čudiš se zašto ti model uporno misli da je mačka — pas. Bol nije metafora. Bol je bukvalna, sitna, dosadna algebra koja te može koštati mjeseca rada.
Alati koji su postojali — Theano, iz laboratorija na Sveučilištu u Montrealu, i Caffe, iz Berkeleya — nisu bili nikakva sramota. Theano je čak izmislio ono što će poslije postati standard: da sam računa gradijente umjesto tebe, znači onu bolnu ručnu algebru s lančanim pravilom o kojoj je bilo riječi maloprije (stručno se to zove simbolička diferencijacija, ako želiš puno ime). Ali oba alata bila su napisana za ljude koji već imaju doktorat iz onoga što pokušavaš raditi. Caffe je od tebe tražio da pišeš konfiguracijske datoteke u formatu koji je ličio na inženjerski nacrt sovjetske fabrike — precizno, kruto, i ako nešto ne valja, sretno s porukom greške koja ne govori ništa korisno. Nisu bili loši alati. Bili su alati za ceh, ne za ulicu.
A onda dolazimo do prave poante te 2014. i 2015. godine: tko je uopće imao pristup da se time bavi? Ne — tko je imao volju, volje je bilo posvuda, internet je već bio pun ljudi koji su gledali rezultate AlexNeta (mreže koja je 2012. razbila dotadašnje rekorde u prepoznavanju slika i pokrenula cijelu ovu priču) i pomišljali „i ja bih to”. Pitanje je tko je imao pristup. A pristup je značio: doktorat na jednom od pet-šest sveučilišta koja se time bave, ili posao u jednom od tri-četiri laboratorija koji imaju i GPU-ove — grafičke kartice, iste vrste čipova koji ti crtaju sliku u igricama, a ispada da su fantastične i za množenje ogromnih tablica brojeva, što je duboko učenje u suštini — i ljude koji znaju izvesti gradijent bez greške. Znanje o dubokom učenju 2014. nije bilo tajno u smislu da ga je netko čuvao pod ključem — bilo je tajno u smislu da je bilo zaključano u glavama možda tisuću ljudi na cijeloj planeti, i da se do te glave dolazilo preko godina školovanja koje si mogao platiti samo ako si već bio u sustavu.
Ako smo se u prvoj knjizi ove kronike (poglavlje 17) našalili da je programiranje u počecima bilo kao pisanje u assembleru — svaki bit ručno, svaki registar imenom, ništa se ne pretpostavlja, sve se plaća bolom — onda je duboko učenje 2014. bilo upravo to. Nije nedostajalo ideja. Nedostajao je viši jezik. Netko je trebao izmisliti ono što je nekad davno C učinio assembleru: sloj koji uzima svu tu algebru i kaže ti — ti samo reci što želiš, ja ću izračunati kako.

TensorFlow: Google otvara (2015)
Prvi domino pao je u studenom 2015. Google, firma koja svoje tajne čuva kao zmaj zlato — algoritam za pretragu poslovna je tajna vrjednija od pojedinih država — odjednom objavljuje da besplatno daje svima TensorFlow, interni alat kojim je trenirao sve od Google Fotki do prevoditelja. Ljudi su prvo pomislili da je greška u priopćenju za javnost. Nije bila. I tu kreće domino-efekt koji ćemo pratiti kroz cijelo ovo poglavlje: jedna odluka jedne firme, i cijelo se polje pomakne.
Zašto bi Google učinio tako nešto? Isti razlog zbog kojeg je nekoliko godina prije pustio Kubernetes u svijet (pogl. 8, ako te zanima) — jer standard koji je tvoj vrjedniji je od tajne koju čuvaš u ladici. Ako svi doktorandi na planetu uče duboko učenje pišući kod u TensorFlowu, tko onda ima najveći bazen talenata za regrutiranje? Tko određuje kako se AI uopće piše sljedećih deset godina? Ekosustav nije dobročinstvo. Ekosustav je strategija, samo lijepo umotana u riječ „open source”, da svi budemo sretni.
A što je TensorFlow zapravo rješavao? Prisjeti se prošle sekcije — backpropagation olovkom, gradijenti računati ručno kao neka srednjovjekovna kazna. TensorFlow je taj posao skinuo s čovjeka i predao ga stroju, kroz nešto što se zove automatska diferencijacija. Zvuči kao raketna znanost, a suštinski je jednostavno: ti napišeš samo smjer unaprijed — ovi ulazi idu kroz ove slojeve i tako se računa izlaz — a TensorFlow sam, iza scene, izračuna kako promjena svakog broja u mreži utječe na pogrešku na kraju. Ti si napisao pitanje, on je sam smislio kako doći do odgovora unatrag.
Ovo je taj trenutak koji smo najavili — „viši jezik” dubokog učenja je stigao. Kao što je Fortran ljude oslobodio pisanja u asembleru (pogl. 17, prva knjiga, ako se sjećaš te priče), TensorFlow je istraživače oslobodio pisanja matematike rukom. Odjednom, netko tko razumije koncept mreže — a ne nužno i svaku parcijalnu derivaciju u njoj — mogao je nešto istrenirati. Vrata su se odškrinula. Ne širom, još ne, ali odškrinula.
Jer rani TensorFlow, da budemo pošteni, nije bio nikakva ugodna šetnja parkom. Radio je na principu koji se zove graf mode, ili statički graf — prvo moraš izgraditi cijeli plan računanja, kao arhitektonski nacrt cijele zgrade, i tek kad je nacrt gotov, pokreneš izgradnju i vidiš je li stao krov. Nema improvizacije, nema »pusti da vidim što se događa nakon ove linije koda«. Ako želiš ispisati vrijednost neke varijable da provjeriš je li sve u redu, moraš pokrenuti cijelu sesiju, cijeli graf, samo da bi vidio jedan broj. Debugiranje je bilo kao slanje pisma i čekanje odgovora poštom — umjesto razgovora uživo.
Istraživači su TensorFlow prihvatili jer je bio jedina ozbiljna alternativa akademskim krhotinama poput Theana i Caffea — dvaju ranijih alata za duboko učenje koji su radili, ali su bili sirovi i nezgrapni, kao prvi mobiteli s antenom koja ti stoji u oku — i jer je iza njega stajao Google, dakle novac, dakle podrška, dakle budućnost. Ali gunđanje je krenulo odmah. Svatko tko je pokušao nešto brzo isprobati, testirati ideju usred noći, promijeniti jednu liniju i vidjeti rezultat za pola minute, osjetio je koliko ga taj pristup „nacrt prije gradnje” guši u spontanosti. A istraživači, kao i svi dobri programeri, spontanost vole više od bilo čega. Netko je to morao primijetiti. I netko hoće — samo godinu dana kasnije, u drugoj firmi malo niže u istoj kalifornijskoj dolini, koja je imala isto toliko razloga da svoj alat pokloni svijetu.

PyTorch: Facebook uzvraća (2016-17)
Google je pustio TensorFlow u svijet 2015. i mislio da je time riješio problem. Nije. Riješio je problem pristupa — svatko sad ima alat — ali nije riješio problem osjećaja da ti taj alat stalno nešto skriva. Definiraš plan puta, predaš ga na šalter, čekaš da netko drugi krene voziti. Ako nešto ne valja na pola puta, dobiješ poruku o grešci koja govori o grafu, ne o liniji koda koju si upravo napisao. Za istraživača koji hoće brzo isprobati ideju u petak popodne — nezgodno.
Facebook je 2017. odlučio da to ne mora biti tako i pustio PyTorch u svijet. Ideja je sitna, skoro uvredljivo sitna: neka se graf gradi u trenutku kad se kod izvršava, red po red, kao svaki normalan Python skript. Zove se define-by-run, i cijela poanta je da kod radi onako kako ga pišeš i čitaš. Napišeš petlju — petlja se izvrši odmah. Staviš ispis unutar funkcije — ispis se pojavi odmah, ne poslije, ne kroz posebnu sesiju, ne kroz graf kojim upravlja netko drugi. Debug alat koji svaki programer već ima u prstima — običan print — radi na modelu za duboko učenje isto kao na zbrajanju dva broja. Nema magije, nema posebnog rituala.
I pobijedila je brzo. Od 2018. istraživački radovi s velikih AI konferencija počinju masovno navoditi PyTorch kao alat kojim su rezultati dobiveni, a krivulja ide gore iz mjeseca u mjesec. Ne zato što je PyTorch bio brži na papiru — u sirovoj brzini izvršavanja razlike su bile male, i uskoro gotovo nikakve. Pobijedio je zato što je istraživač mogao postaviti ideju u kod u petnaest minuta, pokrenuti je, vidjeti gdje puca, popraviti liniju, pokrenuti opet. Ista petlja koju svaki programer radi cijeli dan, samo ovaj put s tenzorima i gradijentima umjesto s varijablama i petljama.
Ovo se već jednom dogodilo u ovoj kronici, i vjerojatno ćeš prepoznati obrazac čak i ako se ne sjećaš detalja. jQuery je pobijedio čistu JavaScript sintaksu iz istog razloga — manje ceremonije, više posla obavljenog. Rails je pobijedio teže Java frameworke iz istog razloga. Uzorak je dosadno predvidljiv: kad dva alata rade isti posao, ne pobjeđuje onaj koji je teoretski moćniji, nego onaj u kojem se manje osjeti borba sa strojem. Znanstvenik koji hoće provjeriti hipotezu do večeri ne bira alat kojim se firma hvali na konferenciji. Bira alat koji mu se manje ispriječi na putu od ideje do rezultata.
Bitno je reći da rat oko frameworkova, izvana gledano, zvuči kao svađa dviju potpuno različitih filozofija — kao da je jedna strana u pravu, a druga u krivu, kao neki vjerski raskol. Nije. Matematika ispod je identična. Isti gradijenti, isti lanac pravila derivacije, ista ideja da stroj sam izračuna kako promijeniti milijun brojeva da mreža bude malo pametnija. TensorFlow i PyTorch su dva dijalekta istog jezika, ne dva jezika. Razlika je samo u tome kada se graf izračuna gradi i tko ga vidi — unaprijed ili u hodu, skriven ili otvoren. Zamisli to kao recept: TensorFlow te tjera da najprije napišeš cijeli recept od početka do kraja, pa ga onda tek pokreneš i vidiš što je ispalo, dok te PyTorch pušta da kuhaš korak po korak, mijenjaš sastojke u hodu i odmah vidiš rezultat. Cijeli rat na Twitteru i konferencijama, cijeli flame-ratovi po forumima, vodili su se oko trenutka izvršavanja jedne petlje.
Google to nije ignorirao. Do 2019. TensorFlow dobiva verziju 2, s takozvanim eager executionom kao zadanim načinom rada — dakle, s onim istim „kuhaj korak po korak” pristupom koji je PyTorch imao od početka. Bez uvijanja, to je prihvaćanje da je konkurencija bila u pravu. Ali dotad su istraživački laboratoriji, doktorski studenti i pola akademskog AI svijeta već prešli granicu. Kad jednom naučiš pisati kod koji radi kako misliš, teško se vraćaš na alat koji te tjera da razmišljaš kako on hoće.

"pip install" kao revolucija
Domino broj tri, i ovaj je najveći. TensorFlow i PyTorch su ti dali alat da sagradiš mrežu. Ali dobra mreža za prepoznavanje mačaka na milijun slika treba tjedne treniranja na skupim grafičkim karticama koje nemaš. E, tu je netko shvatio genijalnu, gotovo lijenu stvar: zašto bi svaki student na planetu iznova trenirao mrežu od nule, kad je Google već platio struju i vrijeme da to netko drugi napravi jednom, dobro?
Zove se transfer learning, a duh je stariji od dubokog učenja — čist duh posudbe koji smo upoznali još kod prvih programera (K1). Ne kreneš od nule, uzmeš tuđi rad i dograđuješ ga. Netko je već istrenirao mrežu da prepozna rubove, teksture, oblike, oči, uši — na milijunima slika — i to znanje ostaje isto bez obzira treniraš li ju dalje za mačke, tumore na rendgenu ili filter za tvoje lice na Instagramu. Ti samo skineš taj tuđi „mozak”, zamijeniš mu zadnji sloj i dotreniraš ga na svom, malom setu podataka. Umjesto tjedana, sat vremena. Umjesto farme grafičkih kartica, laptop.
I tu upada riječ koja će zauvijek promijeniti kako se AI distribuira: model zoo. Zamisli zoološki vrt, ali umjesto tigrova i žirafa, kaveze s istreniranim mrežama — ova prepoznaje objekte, ona generira tekst, treća prevodi jezike. Skineš, zakačiš, gotovo. Google je imao svoj zoo, Facebook svoj, a onda se 2016. pojavila mala francuska startup ekipa koja će sav taj zoo pretvoriti u jedno mjesto — Hugging Face. U ovom trenutku poglavlja to je tek klica, sjeme koje će kasnije narasti u nešto ogromno (vratit ćemo se toj priči), ali sjeme je posađeno upravo ovdje: model kao roba koja se skida, ne kao tajna koja se čuva.
I tu se domino počinje micati brzo. Bootcamp generacija — ljudi koji su prije toga upisivali intenzivne tromjesečne tečajeve programiranja, one brzinske kurseve koji te iz konobara ili pravnika pretvore u web developera, s obećanjem posla na kraju — sad ima novu opciju na meniju. Ne treba ti doktorat s MIT-a da uđeš u AI, treba ti internetska veza, tutorial na YouTubeu i strpljenje da skineš pretreniran model. Brojke to potvrđuju brutalno: broj ljudi koji objavljuju radove, projekte i alate vezane za deep learning se u tih par godina penje kao hokejaška palica — ne linearno, nego kao da je netko upalio prekidač. Deset puta više ljudi u polju za pola desetljeća. Pravilo koje smo već vidjeli i prije u ovoj enciklopediji, od Hopper do VisiCalca — svaki put kad se spusti moć, polje naraste za red veličine — i ovdje se opet potvrđuje, samo brže i glasnije nego ikad prije.
Ali (i ovo je taj dio priče gdje se glazba malo utiša) demokratizacija ne dolazi bez cijene. Kad skineš model s Hugging Facea u tri linije koda, ne znaš na čemu je treniran, kakve je predrasude pokupio iz podataka, gdje mu se „mozak” sapliće. Uvezi model, pokreni, radi — divno, sve dok ne shvatiš da si upravo svojim korisnicima servirao tuđe halucinacije i tuđe pristranosti, bez ni trunke razumijevanja što se krije unutra te crne kutije. Ta naivnost, taj slijepi uvoz tuđe crne kutije, čeka nas dublje u knjizi, kad progovorimo o pristranosti algoritama i o modelima koji uvjereno izmišljaju činjenice. Zasad je dovoljno zapamtiti jedno: alat koji je AI učinio dosadnim, alat koji ti štedi tjedne muke jednom naredbom u terminalu — taj je isti alat AI učinio svemoćnim. Dosada, po treći put u ovoj enciklopediji, ispada tajni motor demokratizacije.

Posljedice demokratizacije
Evo posljedice, ono što se dogodi kad se posljednja kockica u nizu prevali. Krajem 2017. broj radova objavljenih na arXivu — onom ogromnom online repozitoriju gdje znanstvenici bacaju svoje radove i prije nego što ih ikakav ozbiljni recenzent stigne pogledati, kao neka digitalna oglasna ploča za sve od fizike do umjetne inteligencije — u kategoriji machine learning izgleda kao krivulja koju bi svaki ekonomist nazvao „eksponencijalni rast, jebote”. Nekoliko stotina radova godišnje sredinom desetljeća pretvorilo se u nekoliko desetaka tisuća samo nekoliko godina kasnije. I ne, to nije zato što je čovječanstvo iznenada postalo pametnije. To je zato što je svatko s laptopom i pip install torch mogao proizvesti nešto što je nalik znanosti, objaviti ga prije recenzije i onda skupljati citate dok se recenzenti još muče s prošlogodišnjom hrpom papira. Sustav pregleda znanstvenih radova, dizajniran za brzinu devedesetih, dobio je zadatak da filtrira poplavu. Nije stigao. Ne stiže ni danas.
Drugi domino: industrija. Svaka tvrtka koja je imala Excel tablicu i malo ambicije iznenada je htjela svoj „AI tim”. Ne zato što su znali što bi taj tim uopće radio, nego zato što ga je imala konkurencija, pa su valjda i oni morali imati nešto slično. Banke, osiguravajuće kuće, lanci brze hrane, gradske uprave — svi su odjednom tražili „data scientiste”, ljude koji bi im od podataka izvukli neku pametnu prognozu ili preporuku, a alat koji im je to omogućio bio je upravo onaj isti pip install koji smo već spominjali. Barijera nikad nije bila teorija — matematika iza dubokog učenja ostala je jednako zahtjevna kao i prije. Barijera je bila instalacija, mukotrpno slaganje alata da uopće rade zajedno, i ta barijera je pala.
Kratkoročna posljedica te šizofrenične potražnje stiže nešto kasnije — „prompt engineer” kao zvanje, cijela manija oko ljudi koji „razgovaraju” s modelima za plaću veću od inženjera koji su te modele izgradili. Ali to je priča za drugu knjigu; spominjemo je samo da vidiš kako je domino koji je 2015. godine počeo s automatskom diferencijacijom u TensorFlowu — dosadnim, ali ključnim komadom matematike koji sam računa kako model treba popraviti svoje pogreške, umjesto da to programer petlja ručno na papiru — nekoliko koraka kasnije proizveo posao koji se zove, ozbiljno, „šapćivač strojevima”.
Poanta cijelog ovog poglavlja, ako je nešto trebalo ponijeti kući, jest da revolucije rijetko dolaze u obliku eksplozije. Dolaze u obliku dosade. TensorFlow i PyTorch nisu umjetnu inteligenciju učinili zanimljivijom — učinili su je dosadnom. Rutinskom. Trivijalnom, u onom lijepom smislu riječi gdje trivijalno znači „dostupno svakome, a ne samo svećenicima”. A dosada, koliko god čudno zvučalo, jest najpouzdaniji znak da je nešto konačno postalo demokratizirano. Kad ljudi prestanu strahopoštovati alat i počnu ga jednostavno — koristiti, kao odvijač, kao tablicu, kao git (onaj dosadni programerski alat za čuvanje verzija koda, koji nitko ne slavi, ali bez kojeg danas ne radi nijedan ozbiljan projekt) — tek tada je stvarno stigao svima.