Programiranje

Najboljše knjižnice strojnega učenja in globokega učenja

Če začenjate nov projekt strojnega učenja ali poglobljenega učenja, boste morda zmedeni, kateri okvir izbrati. Kot bomo razpravljali, obstaja več dobrih možnosti za obe vrsti projektov.

Obstaja razlika med okvirom strojnega učenja in okvirom globokega učenja. V bistvu okvir strojnega učenja zajema različne metode učenja za razvrščanje, regresijo, združevanje v skupine, odkrivanje nepravilnosti in pripravo podatkov in lahko vključuje ali ne metode nevronske mreže.

Okvir globokega učenja ali globokega nevronskega omrežja zajema različne topologije nevronskih mrež s številnimi skritimi plastmi. Keras, MXNet, PyTorch in TensorFlow so okviri za globoko učenje. Scikit-learn in Spark MLlib sta ogrodja strojnega učenja. (Kliknite katero koli prejšnjo povezavo, če želite prebrati moj samostojni pregled izdelka.)

Na splošno se izračuni globokih nevronskih omrežij veliko hitreje izvajajo na grafičnem procesorju (natančneje na splošnem GPU Nvidia CUDA), TPU ali FPGA in ne na CPU. Na splošno enostavnejše metode strojnega učenja nimajo koristi od grafičnega procesorja.

Medtem ko ti lahko trenirajte globoke nevronske mreže na enem ali več CPU-jih, vadba je ponavadi počasna in počasi ne govorim o sekundah ali minutah. Več nevronov in slojev, ki jih je treba usposobiti, in več podatkov je na voljo za trening, dlje traja. Ko je ekipa Google Brain leta 2016 usposobila svoje jezikovne prevajalske modele za novo različico Google Prevajalnika, je svoje treninge izvajala po en teden na več grafičnih procesorjih. Brez grafičnih procesorjev bi vsak eksperiment z modelom trajal mesece.

Od takrat Intel Math Kernel Library (MKL) omogoča usposabljanje nekaj nevronskih omrežij na CPE v razumnem času. Medtem so grafični procesorji, TPU-ji in FPGA-ji postali še hitrejši.

Hitrost treninga vseh globokih učnih paketov, ki se izvajajo na istih grafičnih procesorjih, je skoraj enaka. To je zato, ker vadbene notranje zanke večino svojega časa preživijo v paketu Nvidia CuDNN.

Vsaka knjižnica poglobljenega učenja ima poleg hitrosti treninga tudi svoje prednosti in slabosti, enako pa velja za Scikit-learn in Spark MLlib. Potopimo se.

Keras

Keras je prednja specifikacija in izvedba na visoki ravni za gradnjo modelov nevronskih mrež, ki je podprta s tremi zalednimi okviri za globoko učenje: TensorFlow, CNTK in Theano. Amazon trenutno dela na razvoju zalednega okolja MXNet za Keras. Možno je tudi uporabiti PlaidML (neodvisni projekt) kot zaledje Kerasa, da izkoristi podporo za OpenCL podjetja PlaidML za vse grafične procesorje.

TensorFlow je privzeti back-end za Keras in priporočljiv za številne primere uporabe, ki vključujejo pospeševanje GPU na strojni opremi Nvidia prek CUDA in cuDNN, pa tudi za pospeševanje TPU v Google Cloud. TensorFlow vsebuje tudi interno tf.keras razred, ločeno od zunanje namestitve Keras.

Keras ima okolje na visoki ravni, ki olajša dodajanje plasti v nevronsko mrežo tako enostavno kot ena vrstica kode v njenem zaporednem modelu in zahteva samo en klic funkcije za sestavljanje in usposabljanje modela. Keras vam omogoča, da s svojim modelom ali funkcionalnim API-jem delate na nižji ravni, če želite.

Keras vam omogoča, da se s podrazvrstitvijo spustite še dlje, do ravni kodiranja Python keras.Model, vendar ima raje funkcionalni API, kadar je to mogoče. Keras ima tudi scikit-learn API, tako da lahko z iskanjem po mreži Scikit-learn izvedete optimizacijo hiperparametrov v modelih Keras.

Stroški: Brezplačna odprta koda.

Platforma: Linux, MacOS, Windows ali Raspbian; TensorFlow, Theano ali CNTK back-end.

Preberite moj pregled Kerasa.

MXNet

MXNet se je precej razvil in izboljšal, odkar se je v začetku leta 2017 preselil pod okrilje Apache Software Foundation. Medtem ko je bilo na Kerasu že opravljeno delo z zaledjem MXNet, je drugačen vmesnik na visoki ravni postal veliko pomembnejši: Gluon. Pred vključitvijo Gluona ste lahko v MXNet napisali preprosto obvezno kodo ali hitro simbolično kodo, vendar ne oboje hkrati. Z Gluonom lahko združite najboljše iz obeh svetov na način, ki tekmuje tako s Kerasom kot s PyTorchom.

Prednosti, za katere se zahteva Gluon, vključujejo:

  • Preprosta, razumljiva koda: Gluon ponuja celoten sklop gradnikov nevronske mreže plug-and-play, vključno z vnaprej določenimi plastmi, optimizatorji in inicializatorji.
  • Prilagodljiva, nujna struktura: Gluon ne zahteva natančno definiranja modela nevronske mreže, temveč algoritem in model vadbe bolj približata, da zagotovita fleksibilnost v razvojnem procesu.
  • Dinamični grafi: Gluon razvijalcem omogoča, da opredelijo dinamične modele nevronskih omrežij, kar pomeni, da jih je mogoče graditi sproti, s katero koli strukturo in z uporabo katerega koli Pythonovega naravnega krmilnega toka.
  • Visoka zmogljivost: Gluon zagotavlja vse zgoraj navedene prednosti, ne da bi to vplivalo na hitrost treninga, ki jo zagotavlja osnovni motor.

Te štiri prednosti, skupaj z močno razširjeno zbirko primerov modelov, pripeljejo Gluon / MXNet do grobe parnosti s Keras / TensorFlow in PyTorch za lažji razvoj in hitrost treninga. Primere kode si lahko ogledate na glavni strani Gluon in ponovite na strani s pregledom API-ja Gluon.

API Gluon vključuje funkcionalnost za plasti nevronske mreže, ponavljajoče se nevronske mreže, funkcije izgub, metode nabora podatkov in nabore podatkov o vidu, modelni živalski vrt in nabor prispevnih eksperimentalnih metod nevronske mreže. Gluon lahko na primer prosto kombinirate s standardnimi moduli MXNet in NumPy modul, avtograd, in ndarray, kot tudi z nadzornimi tokovi Python.

Gluon ima dober izbor plasti za gradnjo modelov, vključno z osnovnimi plastmi (gosto, izpadno itd.), Zvitimi plastmi, združitvenimi plastmi in aktivacijskimi plastmi. Vsak od teh je enosmerni klic. Ti se lahko med drugim uporabljajo tudi znotraj omrežnih vsebnikov, kot so gluon.nn.Sequential ().

Stroški: Brezplačna odprta koda.

Platforma: Linux, MacOS, Windows, Docker, Raspbian in Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ in Clojure (eksperimentalno). MXNet je vključen v AMI za globoko učenje AWS.

Preberite moj pregled MXNet-a.

PyTorch

PyTorch nadgrajuje staro Torch in novo ogrodje Caffe2. Kot lahko ugibate iz imena, PyTorch uporablja Python kot svoj skriptni jezik in uporablja razvit Torc C / CUDA back-end. Proizvodne značilnosti Caffe2 so vključene v projekt PyTorch.

PyTorch se obračunava kot »tenzorji in dinamična nevronska omrežja v Pythonu z močnim pospeševanjem GPU«. Kaj to pomeni?

Tenzorji so matematični konstrukt, ki se močno uporablja v fiziki in inženirstvu. Tenzor ranga dva je posebna vrsta matrike; če vzamemo notranji zmnožek vektorja s tenzorjem, dobimo še en vektor z novo velikostjo in novo smerjo. TensorFlow je ime dobil po načinu, kako tenzorji (uteži sinaps) tečejo okoli njegovega mrežnega modela. NumPy uporablja tudi tenzorje, vendar jih imenuje ndarray.

GPU pospeševanje je dano za večino sodobnih sistemov globokih nevronskih mrež. A dinamično nevronska mreža je tista, ki se lahko iz iteracije spremeni v iteracijo, na primer omogoča modelu PyTorch, da med vadbo dodaja in odstranjuje skrite plasti, da izboljša svojo natančnost in splošnost. PyTorch naredi grafiko sproti v vsakem koraku ponovitve. V nasprotju s tem TensorFlow privzeto ustvari en graf pretoka podatkov, optimizira kodo grafa za zmogljivost in nato usposobi model.

Čeprav je način nestrpne izvedbe v TensorFlowu dokaj nova možnost, PyTorch zažene le tako: klici API se izvršijo, ko se pokličejo, namesto da bi bili dodani v graf, ki ga je treba zagnati pozneje. Morda se zdi, da bi bilo računalniško manj učinkovito, vendar je bil PyTorch zasnovan tako, da ne deluje tako hitro kot pri treningu ali napovedovanju.

PyTorch vključuje knjižnice za pospeševanje, kot so Intel MKL in Nvidia cuDNN in NCCL (Nvidia Collective Communications Library), da poveča hitrost. Njeni jedri CPU in GPU Tensor ter zaledja nevronske mreže - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) in THCUNN (Torch CUDA Neural Network) - so napisani kot neodvisne knjižnice s API-jem C99. Hkrati PyTorch ni Python, ki je vezan v monolitni okvir C ++ - njegov namen je globoko integrirati s Pythonom in omogočiti uporabo drugih knjižnic Python.

Stroški: Brezplačna odprta koda.

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

Preberite moj pregled PyTorch.

Scikit-nauči se

Okvir Scikit-learn Python ima širok izbor robustnih algoritmov strojnega učenja, ne pa tudi globokega učenja. Če ste ljubitelj Pythona, je Scikit-learn morda najboljša možnost za vas med navadnimi knjižnicami strojnega učenja.

Scikit-learn je robustna in dobro preizkušena knjižnica strojnega učenja za Python s široko paleto dobro uveljavljenih algoritmov in integrirane grafike. Namestitev, učenje in uporaba je sorazmerno enostavna, vsebuje pa dobre primere in vadnice.

Nasprotno pa Scikit-learn ne zajema poglobljenega učenja ali učenja okrepitev, nima grafičnih modelov in predvidevanja zaporedja in ga v resnici ni mogoče uporabiti iz drugih jezikov, kot je Python. Ne podpira PyPy-ja, Pythonovega pravočasnega prevajalnika ali grafičnih procesorjev. Kljub temu pa razen majhnega vdora v nevronske mreže v resnici nima težav s hitrostjo. Uporablja Cython (prevajalnik Python v C) za funkcije, ki morajo biti hitre, na primer notranje zanke.

Scikit-learn ima dober izbor algoritmov za klasifikacijo, regresijo, združevanje v skupine, zmanjšanje dimenzionalnosti, izbiro modela in predobdelavo. Za vse to ima dobro dokumentacijo in primere, vendar za izvajanje teh nalog nima kakršnega koli vodenega poteka dela.

Scikit-learn zasluži najvišje ocene za lažji razvoj, predvsem zato, ker vsi algoritmi delujejo dokumentirano, API-ji so dosledni in dobro zasnovani ter je malo "neskladnosti impedance" med podatkovnimi strukturami. V veselje mi je delati s knjižnico, katere funkcije so bile temeljito dokončane in katere napake so bile temeljito odpravljene.

Po drugi strani pa knjižnica ne zajema poglobljenega učenja ali učenja okrepitev, zaradi česar so izpuščeni trenutni težki, a pomembni problemi, kot sta natančna klasifikacija slik in zanesljivo razčlenjevanje in prevajanje jezikov v realnem času. Jasno je, da če vas zanima globoko učenje, bi morali iskati drugje.

Kljub temu obstaja veliko težav - od gradnje funkcije napovedovanja, ki povezuje različna opazovanja, do razvrščanja opazovanj do učenja strukture neoznačenega nabora podatkov -, ki se lahko navadijo kot staro strojno učenje, ne da bi bilo treba na desetine plasti nevronov, in za ta področja Scikit-learn je res zelo dober.

Stroški: Brezplačna odprta koda.

Platforma: Zahteva Python, NumPy, SciPy in Matplotlib. Izdaje so na voljo za MacOS, Linux in Windows.

Preberite moj pregled Scikit-learn.

Spark MLlib

Spark MLlib, odprtokodna knjižnica strojnega učenja za Apache Spark, ponuja običajne algoritme strojnega učenja, kot so klasifikacija, regresija, združevanje in skupinsko filtriranje (ne pa tudi globokih nevronskih mrež). Vključuje tudi orodja za pridobivanje, preoblikovanje, zmanjševanje dimenzij in izbiro lastnosti; orodja za konstruiranje, vrednotenje in uravnavanje cevovodov za strojno učenje; in pripomočki za shranjevanje in nalaganje algoritmov, modelov in cevovodov, za obdelavo podatkov ter za linearno algebro in statistiko.

Spark MLlib je napisan v Scali in uporablja linearni paket algebre Breeze. Za optimizirano numerično obdelavo je Breeze odvisen od netlib-jave, čeprav v odprtokodni distribuciji to pomeni optimizirano uporabo CPU. Databricks ponuja prilagojene grozde Spark, ki uporabljajo grafične procesorje, kar vam lahko prinese še 10-kratno izboljšanje hitrosti za usposabljanje kompleksnih modelov strojnega učenja z velikimi podatki.

Spark MLlib izvaja množico običajnih algoritmov in modelov za klasifikacijo in regresijo do te mere, da bi se novinec lahko zmedel, vendar bi strokovnjak verjetno našel dobro izbiro modela za podatke, ki jih je treba sčasoma analizirati. Množici modelov Spark 2.x doda pomembno funkcijo uglaševanja hiperparametrov, znano tudi kot izbira modela. Uglaševanje hiperparametrov omogoča analitiku, da nastavi mrežo parametrov, ocenjevalnik in ocenjevalnik, metoda navzkrižne validacije (zamudna, a natančna) ali metoda validacije vlakov (hitrejša, vendar manj natančna) naj najde najboljši model za podatkov.

Spark MLlib ima popolne API-je za Scala in Java, večinoma popolne API-je za Python in delne API-je za R. Za občutek pokritosti lahko dobite s štetjem vzorcev: 54 Java in 60 Scala primerov strojnega učenja, 52 Python machine primeri učenja in le pet primerov R. Po mojih izkušnjah je Spark MLlib najlažje delati z uporabo zvezkov Jupyter, vendar ga zagotovo lahko zaženete v konzoli, če ukrotite podrobna sporočila stanja Spark.

Spark MLlib ponuja skoraj vse, kar bi si želeli na področju osnovnega strojnega učenja, izbire funkcij, cevovodov in vztrajnosti. S klasifikacijo, regresijo, združevanjem in filtriranjem opravi precej dobro delo. Glede na to, da je del Sparka, ima odličen dostop do baz podatkov, tokov in drugih podatkovnih virov. Po drugi strani pa Spark MLlib v resnici ni nastavljen za modeliranje in usposabljanje globokih nevronskih mrež na enak način kot TensorFlow, PyTorch, MXNet in Keras.

Stroški: Brezplačna odprta koda.

Platforma: Spark deluje v sistemih, podobnih sistemu Windows in Unixu (npr. Linux, MacOS), z Javo 7 ali novejšo, Python 2.6 / 3.4 ali novejšo in R 3.1 ali novejšo. Za API Scala Spark 2.0.1 uporablja Scalo 2.11. Spark zahteva Hadoop / HDFS.

Preberite moj pregled Spark MLlib.

$config[zx-auto] not found$config[zx-overlay] not found