Programavimas

Geriausios mašininio mokymosi ir gilaus mokymosi bibliotekos

Jei pradedate naują mašininio mokymosi ar giluminio mokymosi projektą, galite būti supainioti, kurią sistemą pasirinkti. Kai aptarsime, yra keli geri abiejų rūšių projektų variantai.

Yra skirtumas tarp mašininio mokymosi ir giluminio mokymosi. Iš esmės mašininio mokymosi sistema apima įvairius klasifikavimo, regresijos, grupavimo, anomalijų aptikimo ir duomenų paruošimo mokymosi metodus ir gali apimti neuroninių tinklų metodus.

Giliai mokantis arba giluminio neuroninio tinklo pagrindas apima įvairias neuroninio tinklo topologijas su daugybe paslėptų sluoksnių. „Keras“, „MXNet“, „PyTorch“ ir „TensorFlow“ yra gilios mokymosi sistemos. „Scikit-learn“ ir „Spark MLlib“ yra mašininio mokymosi pagrindai. (Jei norite perskaityti atskirą produkto apžvalgą, spustelėkite bet kurią iš ankstesnių nuorodų.)

Apskritai, giliųjų neuroninių tinklų skaičiavimai veikia daug greičiau GPU (konkrečiai - „Nvidia CUDA“ bendrosios paskirties GPU), TPU ar FPGA, o ne CPU. Paprastai paprastesni mašininio mokymosi metodai neturi naudos iš GPU.

Nors tu gali treniruokite gilius neuroninius tinklus vienu ar keliais procesoriais, treniruotės būna lėtos, o lėtai aš nekalbu apie sekundes ar minutes. Kuo daugiau neuronų ir sluoksnių, kuriuos reikia treniruoti, ir kuo daugiau duomenų yra mokymui, tuo ilgiau tai trunka. Kai 2016 m. „Google Brain“ komanda mokė kalbos vertimo modelius naujajai „Google Translate“ versijai, jie treniruotes vykdė po savaitę po kelis GPU. Be GPU kiekvienas modelio treniruotės eksperimentas būtų užtrukęs kelis mėnesius.

Nuo tada „Intel Math Kernel Library“ (MKL) leido mokytis kai kurie centrinių procesorių neuroniniai tinklai per pagrįstą laiką. Tuo tarpu GPU, TPU ir FPGA dar labiau pagreitėjo.

Visų giluminio mokymosi paketų, veikiančių tuo pačiu GPU, mokymo greitis yra beveik identiškas. Taip yra todėl, kad treniruočių vidinės kilpos didžiąją laiko dalį praleidžia „Nvidia CuDNN“ pakete.

Be mokymo greičio, kiekviena iš giliai besimokančių bibliotekų turi savo privalumų ir trūkumų rinkinį, ir tas pats pasakytina apie „Scikit-learn“ ir „Spark MLlib“. Pasinerkime.

Keras

„Keras“ yra aukšto lygio „front-end“ specifikacija ir įgyvendinimas kuriant neuroninių tinklų modelius, kurie palaiko tris galinio giluminio mokymosi sistemas: „TensorFlow“, CNTK ir „Theano“. „Amazon“ šiuo metu dirba kurdama „Keras“ „MXNet“ vidinę dalį. Taip pat galima naudoti „PlaidML“ (nepriklausomą projektą) kaip „Keras“ užpakalinę dalį, kad būtų galima pasinaudoti „PlaidML“ „OpenCL“ palaikymo galimybėmis visiems GPU.

„TensorFlow“ yra numatytasis „Keras“ vidinis ekranas, kuris rekomenduojamas daugeliui naudojimo atvejų, susijusių su GPU pagreitinimu „Nvidia“ aparatinėje įrangoje per CUDA ir „cuDNN“, taip pat TPU pagreičiui „Google Cloud“. „TensorFlow“ taip pat yra vidinis tf.keras klasės, atskirai nuo išorinės „Keras“ instaliacijos.

„Keras“ turi aukšto lygio aplinką, leidžiančią pridėti sluoksnį į neuroninį tinklą taip pat lengva, kaip vieną eilutės kodą savo Nuosekliame modelyje, o norint sudaryti ir apmokyti modelį, reikia tik vieno funkcijos iškvietimo. „Keras“ leidžia jums dirbti žemesniu lygiu, jei norite, naudodamas savo modelį arba funkcinę API.

„Keras“ leidžia dar labiau nukristi iki „Python“ kodavimo lygio, priskiriant poklasį keras.Modelis, bet, kai įmanoma, teikia pirmenybę funkcinei API. Keras taip pat turi a scikit-mokytis API, kad galėtumėte naudoti „Scikit-learn“ tinklelio paiešką, kad atliktumėte hiperparametrų optimizavimą „Keras“ modeliuose.

Kaina: Nemokamas atvirasis šaltinis.

Platforma: „Linux“, „MacOS“, „Windows“ arba „Raspbian“; „TensorFlow“, „Theano“ arba CNTK vidinė dalis.

Perskaitykite mano apžvalgą apie Kerasą.

„MXNet“

„MXNet“ nemažai tobulėjo ir patobulėjo po to, kai 2017 m. Pradžioje persikėlė po „Apache Software Foundation“ skėčiu. Nors buvo dirbama su „Keras“ su „MXNet“ vidine dalimi, kita svarbi sąsaja tapo daug svarbesnė: „Gluon“. Prieš įtraukdami „Gluon“, „MXNet“ galite parašyti lengvą imperatyvųjį kodą arba greitą simbolinį kodą, bet ne abu iš karto. Naudodami „Gluon“ galite sujungti geriausius abu pasaulius tokiu būdu, kuris konkuruoja tiek su „Keras“, tiek su „PyTorch“.

Tarp „Gluon“ reikalaujamų pranašumų yra šie:

  • Paprastas, lengvai suprantamas kodas: „Gluon“ siūlo visą „plug-and-play“ neuroninio tinklo blokų rinkinį, įskaitant iš anksto nustatytus sluoksnius, optimizatorius ir inicializatorius.
  • Lanksti, imperatyvi struktūra: Gluonas nereikalauja griežtai apibrėžti neuroninio tinklo modelio, jis labiau suartina mokymo algoritmą ir modelį, kad būtų užtikrintas lankstumas kūrimo procese.
  • Dinaminiai grafikai: „Gluon“ leidžia kūrėjams apibrėžti dinaminius neuroninių tinklų modelius, vadinasi, juos galima sukurti betarpiškai, su bet kokia struktūra ir naudojant bet kurį „Python“ gimtąjį valdymo srautą.
  • Didelis našumas: „Gluon“ suteikia visas aukščiau išvardytas privilegijas, nepaveikdamas pagrindinio variklio suteikiamo treniruočių greičio.

Šie keturi privalumai, kartu su labai išplėsta pavyzdžių pavyzdžių kolekcija, suteikia „Gluon / MXNet“ apytikslę paritetą su „Keras / TensorFlow“ ir „PyTorch“, kad būtų lengviau tobulėti ir treniruotis. Kiekvieno iš jų kodų pavyzdžius galite pamatyti pagrindiniame „Gluon“ puslapyje ir pakartoti „Gluon“ API apžvalgos puslapyje.

„Gluon“ API apima neuroninių tinklo sluoksnių, pasikartojančių neuroninių tinklų, praradimo funkcijų, duomenų rinkinių metodų ir regėjimo duomenų rinkinių funkcionalumą, zoologijos sodo modelį ir prisidedančių eksperimentinių neuroninių tinklų metodų rinkinį. Galite laisvai derinti „Gluon“ su, pavyzdžiui, standartiniais „MXNet“ ir „NumPy“ moduliais modulis, autogradasir ndarray, taip pat su „Python“ valdymo srautais.

„Gluon“ turi gerą sluoksnių, skirtų kurti modelius, pasirinkimą, įskaitant pagrindinius sluoksnius (tankius, iškritusius ir kt.), Konvoliucinius, sujungimo ir aktyvinimo sluoksnius. Kiekvienas iš jų yra vienos linijos skambutis. Jie, be kitų vietų, gali būti naudojami tinklo talpyklose, tokiose kaip gluon.nn.Sequential ().

Kaina: Nemokamas atvirasis šaltinis.

Platforma: „Linux“, „MacOS“, „Windows“, „Docker“, „Raspbian“ ir Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ ir Clojure (eksperimentinis). „MXNet“ yra įtrauktas į „AWS Deep Learning AMI“.

Perskaitykite mano apžvalgą apie „MXNet“.

„PyTorch“

„PyTorch“ remiasi senuoju „Torch“ ir nauju „Caffe2“ pagrindu. Kaip jūs galite atspėti iš pavadinimo, „PyTorch“ naudoja „Python“ kaip scenarijaus kalbą ir naudoja išplėtotą „Torch C / CUDA“ vidinę dalį. „Caffe2“ gamybos ypatybės integruojamos į „PyTorch“ projektą.

„PyTorch“ yra atsiskaitoma kaip „Tensoriai ir dinaminiai neuroniniai tinklai„ Python “su stipriu GPU pagreičiu“. Ką tai reiškia?

Tensoriai yra matematinis darinys, kuris yra labai naudojamas fizikoje ir inžinerijoje. Antrojo rango tenzorius yra ypatinga matricos rūšis; paėmus vidinį vektoriaus sandaugą su tenzu, gaunamas kitas vektorius su nauju dydžiu ir kryptimi. „TensorFlow“ vardą gauna iš to, kaip tenoriai (sinapsės svorio) teka aplink savo tinklo modelį. „NumPy“ taip pat naudoja tensorius, tačiau juos vadina ndarray.

GPU pagreitis yra duotas daugumai šiuolaikinių giliųjų neuroninių tinklų sistemų. A dinamiškas neuroninis tinklas gali pakeisti iteraciją į iteraciją, pavyzdžiui, leisti „PyTorch“ modeliui treniruotės metu pridėti ir pašalinti paslėptus sluoksnius, siekiant pagerinti jo tikslumą ir bendrumą. Kiekviename iteracijos etape „PyTorch“ atkuria grafiką. Priešingai, „TensorFlow“ pagal numatytuosius nustatymus sukuria vieną duomenų srauto diagramą, optimizuoja diagramos kodą, kad veiktų, ir tada treniruoja modelį.

Nors nekantrus vykdymo režimas yra gana nauja „TensorFlow“ parinktis, tai yra vienintelis „PyTorch“ paleidimo būdas: API iškvietimai vykdomi, kai yra iškviečiami, o ne pridedami prie vėliau paleistinos diagramos. Atrodytų, kad tai būtų mažiau efektyvu skaičiavimams, tačiau „PyTorch“ buvo sukurtas taip veikti, ir tai nėra jokia kliūtis kalbant apie treniruotes ar prognozavimo greitį.

„PyTorch“ integruoja greitėjimo bibliotekas, tokias kaip „Intel MKL“ ir „Nvidia cuDNN“ bei „NCCL“ („Nvidia Collective Communications Library“), kad maksimaliai padidintų greitį. Jo pagrindiniai procesoriaus ir grafinio procesoriaus tenzoriaus bei neuroninio tinklo galiniai elementai - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) ir THCUNN (Torch CUDA Neural Network) - rašomi kaip nepriklausomos bibliotekos su C99 API. Tuo pačiu metu „PyTorch“ nėra „Python“ įrišimas į monolitinę C ++ sistemą - ketinama ją giliai integruoti su „Python“ ir leisti naudoti kitas „Python“ bibliotekas.

Kaina: Nemokamas atvirasis šaltinis.

Platforma: „Linux“, „MacOS“, „Windows“; Procesoriai ir „Nvidia“ GPU.

Perskaitykite mano apžvalgą apie „PyTorch“.

Scikit-mokykis

„Scikit-learn Python“ sistemoje yra platus patikimų mašininio mokymosi algoritmų pasirinkimas, tačiau nėra gilaus mokymosi. Jei esate „Python“ gerbėjas, „Scikit-learn“ gali būti geriausias pasirinkimas tarp paprastų mašininio mokymosi bibliotekų.

„Scikit-learn“ yra tvirta ir gerai įrodyta „Python“ mašininio mokymosi biblioteka, turinti platų nusistovėjusių algoritmų ir integruotos grafikos asortimentą. Tai palyginti lengva įdiegti, išmokti ir naudoti, be to, jame yra gerų pavyzdžių ir pamokymų.

Iš kitos pusės, „Scikit-learn“ neapima gilaus mokymosi ar mokymosi sustiprinimo, trūksta grafinių modelių ir sekos numatymo, ir jo tikrai negalima naudoti iš kitų kalbų, išskyrus „Python“. Jis nepalaiko „PyPy“, „Python just-in-time“ kompiliatoriaus ar GPU. Beje, išskyrus tik nedidelį įsibrovimą į neuroninius tinklus, jis greičio problemų tikrai neturi. Jis naudoja „Cython“ („Python to C“ kompiliatorius) funkcijoms, kurios turi būti greitos, pvz., Vidinėms kilpoms.

„Scikit-learn“ turi gerą algoritmų pasirinkimą klasifikavimui, regresijai, grupavimui, matmenų mažinimui, modelio pasirinkimui ir išankstiniam apdorojimui. Ji turi gerą dokumentaciją ir visų šių pavyzdžių, tačiau trūksta bet kokio vadovaujamo darbo eigos šiems uždaviniams atlikti.

„Scikit-learn“ uždirba geriausius įvertinimus, kad būtų lengviau kurti, daugiausia dėl to, kad visi algoritmai veikia kaip dokumentuoti, API yra nuoseklios ir gerai suprojektuotos, o tarp duomenų struktūrų yra nedaug „impedansų neatitikimų“. Malonu dirbti su biblioteka, kurios funkcijos buvo kruopščiai papildytos, o klaidos buvo kruopščiai išvalytos.

Kita vertus, biblioteka neapima gilaus mokymosi ar mokymosi sustiprinimo, o tai palieka dabartines sunkias, bet svarbias problemas, tokias kaip tikslus vaizdų klasifikavimas ir patikimas realaus laiko kalbų analizavimas ir vertimas. Aišku, jei jus domina gilus mokymasis, turėtumėte ieškoti kitur.

Nepaisant to, yra daug problemų - pradedant prognozavimo funkcijos, susiejančios skirtingus stebėjimus, sukūrimu, stebėjimų klasifikavimu ir nepažymėto duomenų rinkinio struktūros mokymusi, kurios yra tinkamos paprastam senam mašininiam mokymuisi nereikalaujant dešimčių neuronų sluoksnių, ir toms sritims. „Scikit-learn“ iš tiesų yra labai geras.

Kaina: Nemokamas atvirasis šaltinis.

Platforma: Reikalingi „Python“, „NumPy“, „SciPy“ ir „Matplotlib“. Leidimai galimi „MacOS“, „Linux“ ir „Windows“.

Perskaitykite mano apžvalgą apie „Scikit-learn“.

„Spark MLlib“

„Spark MLlib“, atviro kodo mašininio mokymosi biblioteka, skirta „Apache Spark“, pateikia įprastus mašininio mokymosi algoritmus, tokius kaip klasifikavimas, regresija, grupavimas ir filtravimas bendradarbiaujant (bet ne gilūs neuroniniai tinklai). Ji taip pat apima įrankius funkcijoms išgauti, transformuoti, mažinti matmenis ir parinkti; įrankiai mašininio mokymosi vamzdynų konstravimui, vertinimui ir derinimui; ir komunalinės paslaugos algoritmų, modelių ir vamzdynų išsaugojimui ir įkėlimui, duomenų tvarkymui, tiesinės algebros ir statistikos atlikimui.

„Spark MLlib“ yra parašytas „Scala“ ir naudoja tiesinį algebros paketą „Breeze“. „Breeze“ priklauso nuo „netlib-java“, norint optimizuoti skaitmeninį apdorojimą, nors atvirojo kodo paskirstyme tai reiškia optimizuotą procesoriaus naudojimą. „Databricks“ siūlo pritaikytus „Spark“ klasterius, kuriuose naudojami GPU, o tai gali padėti dar 10 kartų pagerinti mokant sudėtingus mašininio mokymosi modelius su dideliais duomenimis.

„Spark MLlib“ taiko sunkvežimį bendrų klasifikavimo ir regresijos algoritmų ir modelių, kad naujokas galėtų supainioti, tačiau ekspertas greičiausiai ras tinkamą analizuojamų duomenų modelio pasirinkimą. Prie šios gausybės modelių „Spark 2.x“ prideda svarbų hiperparametrų derinimo, dar vadinamo modelio pasirinkimu, bruožą. Hipparametrų derinimas leidžia analitikui nustatyti parametrų tinklelį, įvertintoją ir vertintoją ir leisti kryžminio patvirtinimo metodui (daug laiko reikalaujančiam, bet tiksliam) arba traukinio patvirtinimo padalijimo metodui (greitesniam, bet mažiau tiksliam) rasti geriausią modelio modelį. duomenis.

„Spark MLlib“ turi visas „Scala“ ir „Java“ API, dažniausiai visas „Python“ API ir eskizines dalines „R“ API. Galite gerai jausti aprėptį suskaičiavę pavyzdžius: 54 „Java“ ir 60 „Scala“ mašininio mokymosi pavyzdžių, 52 „Python“ mašina mokymosi pavyzdžių ir tik penki R pavyzdžiai. Mano patirtis rodo, kad „Spark MLlib“ yra lengviausia naudoti naudojant „Jupyter“ užrašų knygeles, tačiau tikrai galite ją paleisti konsolėje, jei prisijaukinsite daugybinius „Spark“ būsenos pranešimus.

„Spark MLlib“ teikia beveik viską, ko norėtumėte mokydamiesi mašinų, pasirinkdami funkcijas, teikdami vamzdynus ir atkaklumą. Tai daro gana gerą klasifikavimo, regresijos, grupavimo ir filtravimo darbą. Atsižvelgiant į tai, kad jis yra „Spark“ dalis, jis turi puikią prieigą prie duomenų bazių, srautų ir kitų duomenų šaltinių. Kita vertus, „Spark MLlib“ iš tikrųjų nėra sukurtas modeliuoti ir mokyti giliųjų nervų tinklų taip, kaip „TensorFlow“, „PyTorch“, „MXNet“ ir „Keras“.

Kaina: Nemokamas atvirasis šaltinis.

Platforma: „Spark“ veikia tiek „Windows“, tiek „Unix“ tipo sistemose (pvz., „Linux“, „MacOS“) su „Java 7“ ar naujesnėmis versijomis, „Python 2.6 / 3.4“ ar naujesnėmis versijomis ir „R 3.1“ ar naujesnėmis versijomis. „Scala“ API „Spark 2.0.1“ naudoja „Scala 2.11“. Kad kibirkštis būtų reikalinga „Hadoop“ / HDFS.

Perskaitykite mano apžvalgą apie „Spark MLlib“.