Koji programski jezik treba da odaberete za projekat mašinskog obučavanja ili dubokog obučavanja? Ovo su vam najbolje opcije
Autor: Ian Pointer
VI (veštačka inteligencija) otvara čitav svet mogućnosti za programere aplikacija. Korišćenjem mašinskog obučavanja ili dubokog obučavanja mogli biste da proizvedete mnogo bolje korisničke profile, personalizaciju i preporuke ili da uključite pametnije pretraživanje, govorni interfejs ili inteligentnu pomoć ili da poboljšate aplikaciju na neki drugi način. Možete čak i da pravite aplikacije koje vide, čuju i reaguju na situacije koje uopšte niste predvideli.
Koji programski jezik treba da naučite da biste zaronili u dubine VI? Naravno, želite jezik sa mnogo dobrih biblioteka za mašinsko obučavanje i duboko obučavanje. Jezik bi takođe trebalo da ima dobre radne performanse, podršku dobrih alata, veliku zajednicu programera i zdrav ekosistem paketa za podršku. To je dugačak spisak zahteva, ali još uvek postoji puno dobrih opcija.
Ovo je moj izbor šest najboljih programskih jezika za razvoj VI, sa dva posebno odlična. Neki od ovih jezika su u usponu, dok se drugi gube. Ima i nekih za koje treba da znate jedino ako vas zanimaju istorijske arhitekture i aplikacije dubinskog obučavanja. Da vidimo kako će se svi pokazati.
Python
Python je još uvek na prvom mestu. Šta bi drugo moglo da bude, zaista? Mada postoje sulude stvari oko Pythona, ako radite nešto sa VI, gotovo sigurno ćete u nekom trenutku koristiti Python. A neke neravnine su se malo izgladile.
Kako krećemo u 2020. godinu, pitanje Python 2.x ili Python 3.x postaje suvišno jer gotovo svaka velika biblioteka podržava Python 3.x i obustavlja podršku za Python 2.x što pre može. Drugim rečima, konačno možete ozbiljno iskoristiti sve nove jezičke karakteristike.
I dok su još uvek prisutne noćne more za pakovanje Pythona – gde je svako različito rešenje razbijeno na nešto drugačiji način – još uvek u 95% slučajeva možete da koristite Anacondu, i da ne brinete previše. Ipak, bilo bi lepo kada bi svet Pythona jednom zauvek rešio ovo dugogodišnje pitanje.
Osim toga, za matematičke i statističke biblioteke koje su dostupne u Pythonu u drugim jezicima nema ravnih. NumPy je postao toliko sveprisutan da je gotovo standardan API za tenzorske operacije, a Pandas donosi moćne i fleksibilne R-ove okvire podataka u Python. Za obradu prirodnog jezika (NLP) na raspolaganju imate drevni NLTK i blistavo brz SpaCy. Za mašinsko obučavanje postoji žestoko testirani Scikit-learn. A kad je u pitanju duboko obučavanje, sve trenutne biblioteke (TensorFlow, PyTorch, Chainer, Apache MXNet, Theano, itd.) zapravo su najpre bile Python projekti.
Ako čitate vrhunska istraživanja dubokog obučavanja o arXiv-u, tada ćete videti da većina studija koje nude izvorni kôd daju taj kôd u Python-u. Tu su i ostali delovi ekosistema Python. Mada je IPython postao Jupyter Notebook, a manje usmeren na Python, i dalje ćete videti da većina korisnika Jupyter Notebook-a, kao i većina notebook računara koji se dele na mreži, koriste Python. Što se tiče primene modela, pojava mikroservisnih arhitektura i tehnologija poput Seldon Core-a znači da je sada vrlo lako implementirati Python modele u proizvodnju.
To se ne može poreći. Python je jezik koji prednjači u VI istraživanju, jezik u kojem ćete naći najviše okvira za mašinsko obučavanje i duboko obučavanje i jezik koji znaju skoro svi u VI svetu. Iz tih razloga, Python je prvi među programskim jezicima za VI, uprkos činjenici da vaš autor bar jednom dnevno psuje probleme sa belinama.
C ++
C ++ verovatno neće biti vaš prvi izbor kada razvijate VI aplikaciju, ali kada iz sistema morate da iscedite i poslednji delić performansi – scenario koji postaje sve češći kada duboko obučavanje stigne do ivice, a svoje modele morate da izvršavate na sistemima ograničenih resursa – vreme je da se opet vratite u zastrašujući svet pokazatelja.
Srećom, moderni C ++ može biti prijatan za pisanje (iskreno!). Možete da birate pristup. Možete da zaronite na dno steka, koristeći biblioteke poput Nvidijine CUDA i pišete svoj kôd koji se izvršava direktno na vašem grafičkom procesoru, ili možete da koristite TensorFlow ili PyTorch da biste pristupili fleksibilnim API-jima visokog nivoa. I PyTorch i TensorFlow omogućavaju vam da učitate modele generisane u Python-u (ili PyTorch-ovom TorchScript podskupu Python-a) i da ih pokrenete u izvršnom okruženju C ++, što vas približava osnovama za proizvodnju uz očuvanje fleksibilnosti u razvoju.
Ukratko, C ++ postaje kritični deo skupa alata jer se VI aplikacije šire po svim uređajima, od najmanjeg ugrađenog sistema do ogromnih klastera. VI na ivici znači da više nije dovoljno biti samo precizan; morate biti dobri i brzi.
Java i drugi JVM jezici
Porodica JVM jezika (Java, Scala, Kotlin, Clojure, itd.) još uvek je odličan izbor za razvoj VI aplikacija. Imate bogatstvo biblioteka dostupnih za sve delove cevovoda, bilo da se radi o obradi prirodnog jezika (CoreNLP), tenzorskim operacijama (ND4J) ili potpunom skupu dubokog obučavanja (DL4J) ubrzanog u grafičkom procesoru. Pored toga, lako dobijate velike platforme podataka kao što su Apache Spark i Apache Hadoop.
Java je jezik razumljiv u većini preduzeća, a sa novim jezičkim konstrukcijama dostupnim u Javi 8 i novijim verzijama, pisanje Java koda nije više ono mrsko iskustvo koje mnogi od nas pamte. Pisanje VI aplikacije u Javi može biti pomalo dosadno, ali posao može da se obavi – i možete da koristite svu vašu postojeću Java infrastrukturu za razvoj, uvođenje i praćenje.
JavaScript
Malo je verovatno da ćete naučiti JavaScript samo zato da biste pisali VI aplikacije, ali Google-ov TensorFlow.js stalno se poboljšava i nudi intrigantan način razmeštanja Keras i TensorFlow modela u vaš pretraživač ili preko Node.js koristeći WebGL za izračune ubrzane grafičkim procesorom. Međutim, nešto što stvarno nismo videli još od pokretanja TensorFlow.js, je veliki priliv JavaScript programera koji hrle u VI prostor. Mislim da to može biti zbog okolnog JavaScript ekosistema koji nema dubinu dostupnih biblioteka u poređenju sa jezicima kao što je Python. Dalje, na serverskoj strani, nema baš velike prednosti za implementaciju modela sa Node.js, za razliku od nekih Python opcija, tako da ćemo u bliskoj budućnosti možda videti da se VI aplikacije zasnovane na JavaScript-u uglavnom zadržavaju u pregledaču. Ali to i dalje daje obilje zanimljivih prilika za zabavu kao što je Emoji Scavenger Hunt.
Swift
U prošlogodišnjoj verziji ovog članka spomenuo sam da je Swift jezik na koji treba obratiti pažnju. Ove godine se probio u mojih najboljih šest. Šta se desilo? Swift For TensorFlow. Potpuno tipizirano vezivanje najnovijih i najboljih karakteristika TensorFlow-a bez zaostalih viškova, sa magijom koja vam omogućava da uvezete Python biblioteke kao da koristite Python.
Tim za Fastai radi na Swift verziji njihove popularne biblioteke, a obećavaju nam mnogo budućih optimizacija za generisanje i izvršavanje modela, ubacivanjem mnogo pametnih tenzora u LLVM kompajler. Da li je proizvodnja već spremna? Nije sasvim, ali zaista ukazuje na sledeću generaciju razvijanja dubokog obučavanja, tako da bi svakako trebalo da istražite šta se događa sa Swiftom.
Jezik R
R je na dnu naše liste i kreće se naniže. R je jezik koji vole naučnici. Međutim, drugi programeri često smatraju da R pomalo zbunjuje zbog njegovog pristupa skoncentrisanog na okvir podataka. Ako imate namensku grupu programera za R, onda može imati smisla da se koristi integracija sa TensorFlow, Keras ili H2O za istraživanje, prototipove i eksperimentisanje, ali ne bih preporučio R za proizvodnju ili za razvoj od nule, zbog performansi i operativnih problema. Mada možete da pišete R kôd sa dobrim performansama koji se može postaviti na proizvodne servere, gotovo sigurno će biti lakše uzeti taj R prototip i ponovo ga kodirati u jeziku Java ili Python.
Ostale opcije VI programiranja
Naravno, Python, C ++, Java, JavaScript, Swift i R nisu jedini jezici dostupni za VI programiranje. Evo još dva programska jezika koja bi vam mogla biti zanimljiva ili korisna, mada ih ne bih smatrao glavnim prioritetima za učenje.
Lua
Pre nekoliko godina, jezik Lua se visoko kotirao u svetu veštačke inteligencije zbog radnog okvira Torch, jedne od najpopularnijih biblioteka za mašinsko obučavanje kako za potrebe istraživanja, tako i za proizvodnju. Ako zaronite u istoriju modela dubokog obučavanja, često ćete u starim GitHub skladištima naći bogate reference na Torch i obilje izvornog koda u jeziku Lua.
U tu svrhu, možda bi bilo korisno poznavanje rada Torch API-ja, koji se previše ne razlikuje od PyTorch-ovog osnovnog API-ja. Međutim, ako, poput većine nas, zaista nemate potrebu da za svoje aplikacije vršite mnogo istorijskog istraživanja, verovatno ćete uspeti i bez lupanja glave oko malih dovijanja Lua.
Julia
Julia je programski jezik visokih performansi koji je fokusiran na numeričko računanje, što ga čini podesnim za svet VI koji je teško opterećen matematikom. Iako trenutno nije baš toliko popularan kao izborni jezik, omoti poput TensorFlow.jl i Mocha (pod velikim uticajem Caffe-a) pružaju dobru podršku za duboko obučavanje. Ako vam ne smeta relativno mali ekosistem, a želite da iskoristite njegovo fokusiranje na jednostavne i brze izračune visokih performansi, onda verovatno vredi pogledati jezik Julia.
Izvor: InfoWorld