Programmering

De beste biblioteker for maskinlæring og dyp læring

Hvis du starter et nytt maskinlærings- eller dyplæringsprosjekt, kan du være forvirret over hvilket rammeverk du skal velge. Som vi skal diskutere, er det flere gode alternativer for begge typer prosjekter.

Det er en forskjell mellom en maskinlæringsramme og en dyp læringsramme. I hovedsak dekker et maskinlæringsrammeverk en rekke læringsmetoder for klassifisering, regresjon, klynging, avviksdeteksjon og dataklargjøring, og kan eller ikke inkluderer nevrale nettverksmetoder.

En dyp læring eller dyp nevralt nettverk rammeverk dekker en rekke nevrale nettverkstopologier med mange skjulte lag. Keras, MXNet, PyTorch og TensorFlow er dype læringsrammer. Scikit-learning og Spark MLlib er maskinlæringsrammer. (Klikk på en av de forrige lenkene for å lese min frittstående anmeldelse av produktet.)

Generelt kjører dype nevrale nettverksberegninger mye raskere på en GPU (spesielt en Nvidia CUDA generell GPU), TPU eller FPGA, i stedet for på en CPU. Generelt sett har ikke enklere maskinlæringsmetoder fordeler av en GPU.

Mens du kan trene dype nevrale nettverk på en eller flere CPUer, treningen har en tendens til å være treg, og sakte snakker jeg ikke om sekunder eller minutter. Jo flere nevroner og lag som trengs, og jo mer data som er tilgjengelig for trening, jo lenger tid tar det. Da Google Brain-teamet trente sine språkoversettelsesmodeller for den nye versjonen av Google Translate i 2016, kjørte de treningsøktene sine i en uke av gangen, på flere GPUer. Uten GPUer hadde hvert modellopplæringseksperiment tatt måneder.

Siden den gang har Intel Math Kernel Library (MKL) gjort det mulig å trene noen nevrale nettverk på CPUer på en rimelig tid. I mellomtiden har GPUer, TPUer og FPGAer blitt enda raskere.

Treningshastigheten til alle de dype læringspakkene som kjører på de samme GPUene, er nesten identisk. Det er fordi de indre treningsløkkene bruker mesteparten av tiden sin i Nvidia CuDNN-pakken.

Bortsett fra treningshastighet, har hvert av de dype læringsbibliotekene sitt eget sett med fordeler og ulemper, og det samme gjelder Scikit-learning og Spark MLlib. La oss dykke inn.

Keras

Keras er en høyt nivå, front-end spesifikasjon og implementering for å bygge nevrale nettverksmodeller som leveres med støtte for tre backend-dype læringsrammer: TensorFlow, CNTK og Theano. Amazon jobber for tiden med å utvikle en MXNet-back-end for Keras. Det er også mulig å bruke PlaidML (et uavhengig prosjekt) som en back-end for Keras for å dra nytte av PlaidMLs OpenCL-støtte for alle GPUer.

TensorFlow er standard back-end for Keras, og den som anbefales for mange brukstilfeller som involverer GPU-akselerasjon på Nvidia-maskinvare via CUDA og cuDNN, samt for TPU-akselerasjon i Google Cloud. TensorFlow inneholder også en intern tf.keras klasse, atskilt fra en ekstern Keras-installasjon.

Keras har et miljø på høyt nivå som gjør det enkelt å legge til et lag i et nevralt nettverk som en kodelinje i sin sekvensielle modell, og krever bare en funksjonsanrop hver for å kompilere og trene en modell. Keras lar deg jobbe på et lavere nivå hvis du vil, med sin modell eller funksjonelle API.

Keras lar deg falle ned enda lenger, til Python-kodingsnivå, ved å underklasse keras. modell, men foretrekker funksjonell API når det er mulig. Keras har også en scikit-lær API, slik at du kan bruke Scikit-lær rutenett-søk til å utføre hyperparameteroptimalisering i Keras-modeller.

Koste: Gratis åpen kildekode.

Plattform: Linux, MacOS, Windows eller Raspbian; TensorFlow, Theano eller CNTK back-end.

Les min anmeldelse av Keras.

MXNet

MXNet har utviklet seg og forbedret seg ganske mye siden de flyttet under Apache Software Foundation-paraplyen tidlig i 2017. Mens det har vært arbeidet med Keras med en MXNet-back-end, har et annet høyt nivågrensesnitt blitt mye viktigere: Gluon. Før innlemmelsen av Gluon, kan du enten skrive enkel tvingende kode eller rask symbolsk kode i MXNet, men ikke begge på en gang. Med Gluon kan du kombinere det beste fra begge verdener, på en måte som konkurrerer med både Keras og PyTorch.

Fordelene som er påstått for Gluon inkluderer:

  • Enkel, lettfattelig kode: Gluon tilbyr et komplett sett med plug-and-play nevrale nettverksbyggesteiner, inkludert forhåndsdefinerte lag, optimaliserere og initialiserere.
  • Fleksibel, imperativ struktur: Gluon krever ikke at nevrale nettverksmodell skal være strengt definert, men bringer heller treningsalgoritmen og modellen nærmere hverandre for å gi fleksibilitet i utviklingsprosessen.
  • Dynamiske grafer: Gluon gjør det mulig for utviklere å definere nevrale nettverksmodeller som er dynamiske, noe som betyr at de kan bygges på farten, med hvilken som helst struktur, og bruke hvilken som helst av Pythons opprinnelige kontrollflyt.
  • Høy ytelse: Gluon gir alle fordelene ovenfor uten å påvirke treningshastigheten som den underliggende motoren gir.

Disse fire fordelene, sammen med en vidt utvidet samling av modelleksempler, bringer Gluon / MXNet til grov paritet med Keras / TensorFlow og PyTorch for enkel utvikling og treningshastighet. Du kan se kodeeksempler for hver av disse på hovedsiden Gluon og gjentas på oversiktssiden for Gluon API.

Gluon API inkluderer funksjonalitet for nevrale nettverkslag, tilbakevendende nevrale nettverk, tapfunksjoner, datasettmetoder og visjonsdatasett, en modell zoo og et sett med bidratt eksperimentelle nevrale nettverksmetoder. Du kan for eksempel kombinere Gluon med standard MXNet- og NumPy-moduler modul, autograd, og ndarray, så vel som med Python-kontrollflyter.

Gluon har et godt utvalg av lag for å bygge modeller, inkludert grunnleggende lag (Dense, Dropout, etc.), konvolusjonslag, poolinglag og aktiveringslag. Hver av disse er en samtalelinje. Disse kan blant annet brukes inne i nettverkscontainere som gluon.nn.Sequential ().

Koste: Gratis åpen kildekode.

Plattform: Linux, MacOS, Windows, Docker, Raspbian og Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ og Clojure (eksperimentell). MXNet er inkludert i AWS Deep Learning AMI.

Les min anmeldelse av MXNet.

PyTorch

PyTorch bygger på den gamle fakkelen og det nye Caffe2-rammeverket. Som du kanskje gjetter fra navnet, bruker PyTorch Python som skriptspråk, og den bruker en utviklet Torch C / CUDA back-end. Produksjonsfunksjonene til Caffe2 blir integrert i PyTorch-prosjektet.

PyTorch blir fakturert som "Tensorer og dynamiske nevrale nettverk i Python med sterk GPU-akselerasjon." Hva betyr det?

Tensorer er en matematisk konstruksjon som brukes tungt i fysikk og ingeniørfag. En tensor av rang to er en spesiell type matrise; å ta det indre produktet av en vektor med tensoren gir en annen vektor med en ny størrelse og en ny retning. TensorFlow tar navnet sitt fra måten tensorer (av synapsvekter) strømmer rundt nettverksmodellen. NumPy bruker også tensorer, men kaller dem en ndarray.

GPU-akselerasjon er gitt for de fleste moderne dype nevrale nettverksrammer. EN dynamisk nevrale nettverk er et som kan endre seg fra iterasjon til iterasjon, for eksempel å la en PyTorch-modell legge til og fjerne skjulte lag under trening for å forbedre nøyaktigheten og allmenheten. PyTorch gjenskaper grafen i farten ved hvert iterasjonstrinn. I motsetning til dette oppretter TensorFlow som standard en enkelt dataflytgraf, optimaliserer grafkoden for ytelse og trener deretter modellen.

Mens ivrig kjøringsmodus er et ganske nytt alternativ i TensorFlow, er det den eneste måten PyTorch kjører: API-anrop utføres når de påkalles, i stedet for å bli lagt til en graf som skal kjøres senere. Det kan virke som om det ville være mindre beregningseffektivt, men PyTorch ble designet for å fungere på den måten, og det er ikke slurv når det gjelder trening eller spådomshastighet.

PyTorch integrerer akselerasjonsbiblioteker som Intel MKL og Nvidia cuDNN og NCCL (Nvidia Collective Communications Library) for å maksimere hastigheten. Kjerne-CPU og GPU Tensor og nevrale nettverk bakenden - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) og THCUNN (Torch CUDA Neural Network) - er skrevet som uavhengige biblioteker med en C99 API. Samtidig er ikke PyTorch en Python-binding i et monolitisk C ++ - rammeverk - hensikten er at den skal være dypt integrert med Python og tillate bruk av andre Python-biblioteker.

Koste: Gratis åpen kildekode.

Plattform: Linux, MacOS, Windows; CPUer og Nvidia GPUer.

Les min anmeldelse av PyTorch.

Scikit-lær

Scikit-lær Python-rammeverket har et bredt utvalg av robuste maskinlæringsalgoritmer, men ingen dyp læring. Hvis du er en Python-fan, kan Scikit-learning være det beste alternativet for deg blant de vanlige maskinlæringsbibliotekene.

Scikit-learning er et robust og velprøvd maskinlæringsbibliotek for Python med et bredt utvalg av veletablerte algoritmer og integrert grafikk. Det er relativt enkelt å installere, lære og bruke, og det har gode eksempler og opplæringsprogrammer.

På den andre siden dekker ikke Scikit-learning dyplæring eller forsterkningslæring, mangler grafiske modeller og sekvensforutsigelse, og det kan egentlig ikke brukes fra andre språk enn Python. Den støtter ikke PyPy, Python just-in-time kompilator eller GPUer. Når det er sagt, bortsett fra den mindre inntoget i nevrale nettverk, har det egentlig ikke hastighetsproblemer. Den bruker Cython (Python til C-kompilatoren) for funksjoner som trenger å være raske, for eksempel indre sløyfer.

Scikit-learning har et godt utvalg av algoritmer for klassifisering, regresjon, klynging, dimensjonsreduksjon, modellvalg og forbehandling. Den har god dokumentasjon og eksempler på alle disse, men mangler noen form for veiledet arbeidsflyt for å utføre disse oppgavene.

Scikit-learning tjener toppkarakterer for enkel utvikling, hovedsakelig fordi algoritmene fungerer som dokumentert, API-ene er konsistente og godt utformede, og det er få "impedansmatcher" mellom datastrukturer. Det er en glede å jobbe med et bibliotek hvis funksjoner er grundig utdypet og hvis insekter er grundig spylt ut.

På den annen side dekker ikke biblioteket dyp læring eller forsterkningslæring, noe som utelater de nåværende harde, men viktige problemene, for eksempel nøyaktig bildeklassifisering og pålitelig sanntidssprøking og oversettelse. Det er tydelig at hvis du er interessert i dyp læring, bør du se andre steder.

Likevel er det mange problemer - alt fra å bygge en prediksjonsfunksjon som knytter forskjellige observasjoner, til å klassifisere observasjoner, til å lære strukturen til et umerket datasett - som egner seg til vanlig gammel maskinlæring uten å ha behov for dusinvis av lag med nevroner, og for disse områdene Scikit-læring er veldig bra.

Koste: Gratis åpen kildekode.

Plattform: Krever Python, NumPy, SciPy og Matplotlib. Utgivelser er tilgjengelige for MacOS, Linux og Windows.

Les min anmeldelse av Scikit-learn.

Spark MLlib

Spark MLlib, open source maskinlæringsbiblioteket for Apache Spark, tilbyr vanlige maskinlæringsalgoritmer som klassifisering, regresjon, klynging og samarbeidsfiltrering (men ikke dype nevrale nettverk). Den inkluderer også verktøy for utvinning av funksjoner, transformasjon, dimensjonsreduksjon og valg; verktøy for å konstruere, evaluere og stille inn maskinlæringsrørledninger; og verktøy for lagring og lasting av algoritmer, modeller og rørledninger, for datahåndtering og for å gjøre lineær algebra og statistikk.

Spark MLlib er skrevet i Scala, og bruker den lineære algebrapakken Breeze. Breeze avhenger av netlib-java for optimalisert numerisk behandling, men i åpen kildekode-distribusjon betyr det optimalisert bruk av CPU. Databricks tilbyr tilpassede Spark-klynger som bruker GPUer, noe som potensielt kan gi deg ytterligere 10 ganger hastighetsforbedring for å trene komplekse maskinlæringsmodeller med store data.

Spark MLlib implementerer en lastebil med vanlige algoritmer og modeller for klassifisering og regresjon, til det punktet hvor en nybegynner kan bli forvirret, men en ekspert vil sannsynligvis finne et godt valg av modell for dataene som skal analyseres, til slutt. Til denne mengden av modeller legger Spark 2.x til den viktige funksjonen ved tuning av hyperparameter, også kjent som modellvalg. Hyperparameter-innstilling lar analytikeren sette opp et parameternett, en estimator og en evaluator, og la kryssvalideringsmetoden (tidkrevende, men nøyaktig) eller togvalideringsdelingsmetode (raskere men mindre nøyaktig) finne den beste modellen for data.

Spark MLlib har fulle API-er for Scala og Java, for det meste fulle API-er for Python, og sketchy delvise API-er for R. Du kan få en god følelse av dekningen ved å telle prøvene: 54 Java og 60 Scala maskinlæringseksempler, 52 Python-maskin læringseksempler, og bare fem R-eksempler. Etter min erfaring er Spark MLlib enklest å jobbe med ved bruk av Jupyter-notatbøker, men du kan absolutt kjøre den i en konsoll hvis du temmer de omfattende Spark-statusmeldingene.

Spark MLlib leverer stort sett alt du vil ha i veien for grunnleggende maskinlæring, funksjonsvalg, rørledninger og utholdenhet. Det gjør en ganske god jobb med klassifisering, regresjon, klynging og filtrering. Gitt at det er en del av Spark, har det god tilgang til databaser, strømmer og andre datakilder. På den annen side er Spark MLlib egentlig ikke satt opp for å modellere og trene dype nevrale nettverk på samme måte som TensorFlow, PyTorch, MXNet og Keras.

Koste: Gratis åpen kildekode.

Plattform: Spark kjører på både Windows og Unix-lignende systemer (f.eks. Linux, MacOS), med Java 7 eller nyere, Python 2.6 / 3.4 eller nyere, og R 3.1 eller nyere. For Scala API bruker Spark 2.0.1 Scala 2.11. Gnist krever Hadoop / HDFS.

Les min anmeldelse av Spark MLlib.

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