Najbolje knjižnice strojnog učenja i dubokog učenja

Ako započinjete novi projekt strojnog učenja ili dubokog učenja, možda ćete biti zbunjeni oko toga koji okvir odabrati. Kao što ćemo razgovarati, postoji nekoliko dobrih opcija za obje vrste projekata.

Postoji razlika između okvira za strojno učenje i okvira za duboko učenje. U osnovi, okvir strojnog učenja pokriva razne metode učenja za klasifikaciju, regresiju, klasteriranje, otkrivanje anomalija i pripremu podataka, a može i ne mora uključivati ​​metode neuronske mreže.

Okvir dubokog učenja ili duboke neuronske mreže pokriva razne topologije neuronskih mreža s mnogo skrivenih slojeva. Keras, MXNet, PyTorch i TensorFlow okviri su za duboko učenje. Scikit-learn i Spark MLlib okviri su za strojno učenje. (Kliknite bilo koju od prethodnih poveznica da biste pročitali moju samostalnu recenziju proizvoda.)

Općenito, duboka izračunavanja neuronske mreže rade se puno brže na GPU-u (točnije Nvidia CUDA općenitoj GPU-i), TPU-u ili FPGA-i, umjesto na CPU-u. Općenito, jednostavnije metode strojnog učenja nemaju koristi od GPU-a.

Iako duboke neuronske mreže možete trenirati na jednom ili više CPU-a, trening obično ide sporo, a polako ne govorim o sekundama ili minutama. Što više neurona i slojeva treba trenirati i što je više podataka dostupno za trening, to je potrebno više vremena. Kada je Googleov tim za mozak 2016. osposobljavao svoje jezične modele za prijevod za novu verziju Google Prevoditelja, vodili su svoje treninge po tjedan dana, na više GPU-a. Bez GPU-a, svaki bi eksperiment s modelima trajao mjesecima.

Od tada je Intel Math Kernel Library (MKL) omogućio osposobljavanje nekih neuronskih mreža na CPU-ima u razumnom roku. U međuvremenu su GPU-ovi, TPU-ovi i FPGA-i postali još brži.

Brzina treninga svih paketa dubinskog učenja koji rade na istim GPU-ima gotovo je identična. To je zato što unutarnje petlje za trening većinu svog vremena provode u paketu Nvidia CuDNN.

Osim brzine treninga, svaka knjižnica dubokog učenja ima i svoj niz prednosti i nedostataka, a isto vrijedi i za Scikit-learn i Spark MLlib. Uronimo.

Keras

Keras je prednja specifikacija i implementacija na visokoj razini za izgradnju modela neuronske mreže koja se isporučuje s podrškom za tri pozadinska okvira za duboko učenje: TensorFlow, CNTK i Theano. Amazon trenutno radi na razvoju MXNet pozadine za Keras. Također je moguće koristiti PlaidML (neovisni projekt) kao pozadinu za Keras kako bi iskoristio PlaidML-ovu OpenCL podršku za sve GPU-ove.

TensorFlow je zadani back-end za Keras i preporučuje se za mnoge slučajeve upotrebe koji uključuju ubrzanje GPU-a na Nvidijinom hardveru putem CUDA i cuDNN-a, kao i za TPU ubrzanje u Google Cloudu. TensorFlow također sadrži internu tf.kerasklasu, odvojenu od vanjske Keras instalacije.

Keras ima okruženje na visokoj razini koje olakšava dodavanje sloja u neuronsku mrežu kao i jedan redak koda u njegovom sekvencijalnom modelu, a za sastavljanje i obuku modela potreban je samo jedan poziv funkcije. Keras vam omogućuje rad na nižoj razini ako želite, sa svojim modelom ili funkcionalnim API-jem.

Keras vam omogućuje da se spustite još dalje, na razinu kodiranja Python, potklasiranjem keras.Model, ali preferira funkcionalni API kad je to moguće. Keras također ima scikit-learnAPI, tako da možete koristiti Scikit-learn mrežno pretraživanje za obavljanje optimizacije hiperparametara u Keras modelima. 

Cijena: Besplatni otvoreni kod. 

Platforma: Linux, MacOS, Windows ili Raspbian; TensorFlow, Theano ili CNTK pozadina. 

Pročitajte moju kritiku o Kerasu. 

MXNet

MXNet se prilično razvio i poboljšao otkako se kretao pod kišobranom Apache Software Foundation početkom 2017. Iako je na Kerasu radio posao s pozadinom MXNet-a, različito sučelje na visokoj razini postalo je mnogo važnije: Gluon. Prije ugradnje Gluona, u MXNet ste mogli pisati jednostavni imperativni kod ili brzi simbolički kôd, ali ne oboje odjednom. S Gluonom možete kombinirati najbolje iz oba svijeta, na način koji se natječe i s Kerasom i s PyTorchom.

Prednosti za koje se traži Gluon uključuju:

  • Jednostavan, lako razumljiv kôd: Gluon nudi čitav niz plug-and-play neuronskih mreža, uključujući unaprijed definirane slojeve, optimizatore i inicijalizatore.
  • Fleksibilna, imperativna struktura: Gluon ne zahtijeva strogo definiranje modela neuronske mreže, već približava algoritam i model treninga kako bi pružio fleksibilnost u razvojnom procesu.
  • Dinamični grafovi: Gluon omogućuje programerima da definiraju dinamičke modele neuronskih mreža, što znači da ih se može graditi u hodu, s bilo kojom strukturom i koristeći bilo koji Pythonov izvorni kontrolni tok.
  • Visoke performanse: Gluon pruža sve gore navedene prednosti bez utjecaja na brzinu treninga koju pruža osnovni motor.

Ove četiri prednosti, zajedno s znatno proširenom kolekcijom primjera modela, dovode Gluon / MXNet do grubog pariteta s Keras / TensorFlow i PyTorch radi lakšeg razvoja i brzine treninga. Primjere koda za svaki od njih možete vidjeti na glavnoj stranici Gluon i ponoviti na stranici pregleda za Gluon API.

Gluon API uključuje funkcionalnost za slojeve neuronske mreže, periodične neuronske mreže, funkcije gubitaka, metode skupova podataka i skupove podataka vida, zoološki vrt modela i skup eksperimentalnih metoda neuronske mreže. Možete slobodno kombinirati gluonska sa standardnim MXNet i NumPy modula, na primjer module,autograd i ndarray, kao i Python kontrolna struktura.

Gluon ima dobar izbor slojeva za izgradnju modela, uključujući osnovne slojeve (gusti, ispadni, itd.), Konvolucijske slojeve, slojeve za spajanje i slojeve za aktiviranje. Svaki od njih je jednosmjerni poziv. Oni se mogu koristiti, između ostalog, unutar mrežnih spremnika kao što su gluon.nn.Sequential().

Cijena: Besplatni otvoreni kod. 

Platforma: Linux, MacOS, Windows, Docker, Raspbian i Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ i Clojure (eksperimentalno). MXNet je uključen u AWS Deep Learning AMI.

Pročitajte moju recenziju MXNeta. 

PyTorch

PyTorch se nadovezuje na staru Torch i novi okvir Caffe2. Kao što možete pretpostaviti iz imena, PyTorch koristi Python kao svoj skriptni jezik i koristi razvijenu pozadinsku pozadinu Torch C / CUDA. Proizvodne značajke Caffe2 ugrađene su u projekt PyTorch.

PyTorch se naplaćuje kao „Tenzori i dinamičke neuronske mreže u Pythonu s jakim GPU ubrzanjem.“ Što to znači?

Tenzori su matematička konstrukcija koja se intenzivno koristi u fizici i inženjerstvu. Tenzor ranga dva posebna je vrsta matrice; uzimajući unutarnji umnožak vektora s tenzorom dobivamo drugi vektor s novom veličinom i novim smjerom. TensorFlow svoje ime uzima prema načinu na koji tenzori (utega sinapse) kruže oko svog mrežnog modela. NumPy također koristi tenzore, ali ih naziva an ndarray.

GPU ubrzanje dato je za većinu modernih okvira dubokih neuronskih mreža. Dinamička neuronska mreža je onaj koji može mijenjati iz iteracije do iteracije, na primjer, dopuštajući PyTorch modela za dodavanje i uklanjanje skrivenih slojeva tijekom treninga radi poboljšanja točnosti i općenitosti. PyTorch rekreira grafikon u hodu u svakom koraku ponavljanja. Suprotno tome, TensorFlow prema zadanim postavkama stvara jedan grafikon protoka podataka, optimizira kôd grafikona za izvedbu, a zatim trenira model.

Iako je željni način izvršavanja prilično nova opcija u TensorFlowu, to je jedini način na koji se PyTorch izvodi: API pozivi se izvršavaju kad se pozovu, umjesto da se dodaju na grafikon koji će se kasnije pokretati. To bi se moglo činiti kao da bi bilo računski manje učinkovito, ali PyTorch je dizajniran da radi na taj način i nije nimalo zapetljan što se tiče treninga ili brzine predviđanja.

PyTorch integrira knjižnice ubrzanja kao što su Intel MKL i Nvidia cuDNN i NCCL (Nvidia Collective Communications Library) kako bi povećali brzinu. Njezine osnovne jezgre CPU-a i GPU-a, kao i pozadinske pozadine neuronske mreže - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) i THCUNN (Torch CUDA Neural Network) - napisane su kao neovisne knjižnice s API-jem C99. Istodobno, PyTorch nije Python koji se veže u monolitni C ++ okvir - namjera mu je da bude duboko integriran s Pythonom i omogući upotrebu drugih Python knjižnica.

Cijena: Besplatni otvoreni kod. 

Platforma: Linux, MacOS, Windows; CPU i Nvidia GPU. 

Pročitajte moju recenziju PyTorcha. 

Scikit-nauči

Okvir Scikit-learn Python ima širok izbor robusnih algoritama strojnog učenja, ali nema dubokog učenja. Ako ste ljubitelj Pythona, Scikit-learn može vam biti najbolja opcija među običnim knjižnicama strojnog učenja.

Scikit-learn robusna je i dobro dokazana knjižnica strojnog učenja za Python s širokim asortimanom dobro uspostavljenih algoritama i integrirane grafike. Relativno ga je jednostavno instalirati, naučiti i koristiti, a ima dobre primjere i upute.

S druge strane, Scikit-learn ne obuhvaća duboko učenje niti učenje pojačanja, nedostaju mu grafički modeli i predviđanje redoslijeda te se zapravo ne može koristiti iz drugih jezika osim s Pythona. Ne podržava PyPy, Python-ov pravovremeni kompajler ili GPU-ove. To je reklo, osim zbog malog upada u neuronske mreže, zapravo nema problema s brzinom. Koristi Cython (kompajler Python u C) za funkcije koje trebaju biti brze, poput unutarnjih petlji.

Scikit-learn ima dobar izbor algoritama za klasifikaciju, regresiju, klasteriranje, smanjenje dimenzionalnosti, odabir modela i predobradu. Ima dobru dokumentaciju i primjere za sve to, ali nedostaje bilo kakav vođeni tijek rada za izvršavanje ovih zadataka.

Scikit-learn donosi najbolje ocjene za jednostavnost razvoja, ponajviše zato što svi algoritmi rade kako je dokumentirano, API-ji su dosljedni i dobro dizajnirani, a malo je „neusklađenosti impedancije“ između struktura podataka. Zadovoljstvo mi je surađivati ​​s knjižnicom čije su značajke temeljito dotjerane i čije su programske pogreške temeljito uklonjene.

S druge strane, knjižnica ne obuhvaća duboko učenje niti učenje pojačavanja, što izostavlja trenutne teške, ali važne probleme, kao što su točna klasifikacija slika i pouzdano raščlanjivanje i prijevod jezika u stvarnom vremenu. Jasno je da, ako vas zanima duboko učenje, trebali biste potražiti drugdje.

Ipak, postoje mnogi problemi - od gradnje funkcije predviđanja koja povezuje različita promatranja, preko klasificiranja promatranja, do učenja strukture neobilježenog skupa podataka - koji su prikladni za obično staro strojno učenje bez potrebe za desecima slojeva neurona, i za ta područja Scikit-learn je zaista jako dobar.

Cijena: Besplatni otvoreni kod. 

Platforma: Zahtijeva Python, NumPy, SciPy i Matplotlib. Izdanja su dostupna za MacOS, Linux i Windows.

Pročitajte moj osvrt na Scikit-learn. 

Iskra MLlib

Spark MLlib, biblioteka strojnog učenja otvorenog koda za Apache Spark, nudi uobičajene algoritme strojnog učenja kao što su klasifikacija, regresija, klasterizacija i zajedničko filtriranje (ali ne i duboke neuronske mreže). Također uključuje alate za izdvajanje, transformaciju, smanjenje dimenzija i odabir značajki; alati za izgradnju, vrednovanje i podešavanje cjevovoda za strojno učenje; i uslužni programi za spremanje i učitavanje algoritama, modela i cjevovoda, za rukovanje podacima i za izvođenje linearne algebre i statistike.

Spark MLlib napisan je na skali i koristi linearni paket algebre Breeze. Povjetarac ovisi o netlib-javi za optimiziranu numeričku obradu, iako u distribuciji otvorenog koda to znači optimiziranu upotrebu CPU-a. Databricks nudi prilagođene Spark klastere koji koriste GPU-ove, što vam potencijalno može donijeti još 10 puta poboljšanje brzine za obuku složenih modela strojnog učenja s velikim podacima.

Spark MLlib implementira hrpu uobičajenih algoritama i modela za klasifikaciju i regresiju, do točke do koje bi se novak mogao zbuniti, ali stručnjak bi na kraju mogao pronaći dobar izbor modela za podatke koji će se analizirati. Ovoj mnoštvi modela Spark 2.x dodaje važnu značajku podešavanja hiperparametara, također poznatu kao odabir modela. Ugađanje hiperparametara omogućuje analitičaru da postavi mrežu parametara, procjenitelj i procjenitelj, a metodu unakrsne provjere valjanosti (dugotrajno, ali točno) ili metodi razdvajanja provjere valjanosti (brže, ali manje precizno) pronalazi najbolji model za podaci.

Spark MLlib ima pune API-je za Scalu i Javu, uglavnom potpune API-je za Python i djelomične djelomične API-je za R. Dobar osjećaj za pokrivenost možete steći prebrojavanjem uzoraka: 54 Java i 60 primjera Scala strojnog učenja, 52 Python stroja primjeri učenja i samo pet primjera R. Prema mom iskustvu, s Sparkom MLlib najlakše je raditi pomoću Jupyterovih prijenosnih računala, ali zasigurno ga možete pokrenuti u konzoli ako pripitomite detaljne poruke statusa Spark.

Spark MLlib nudi gotovo sve što biste željeli na putu osnovnog strojnog učenja, odabira značajki, cjevovoda i upornosti. Prilično dobro radi s klasifikacijom, regresijom, grupiranjem i filtriranjem. S obzirom na to da je dio Sparka, ima izvrstan pristup bazama podataka, streamovima i drugim izvorima podataka. S druge strane, Spark MLlib zapravo nije postavljen za modeliranje i treniranje dubokih neuronskih mreža na isti način kao TensorFlow, PyTorch, MXNet i Keras.

Cijena: Besplatni otvoreni kod.

Platforma: Spark radi na sustavima sličnim Windowsima i Unixu (npr. Linux, MacOS), s Javom 7 ili novijom, Python 2.6 / 3.4 ili novijom i R 3.1 ili novijom. Za Scala API, Spark 2.0.1 koristi Scala 2.11. Spark zahtijeva Hadoop / HDFS.

Pročitajte moj osvrt na Spark MLlib.