Ohjelmointi

Parhaat koneoppimisen ja syvällisen oppimisen kirjastot

Jos aloitat uuden koneoppimisen tai syvällisen oppimisen projektin, saatat olla hämmentynyt siitä, mikä kehys valita. Kuten keskustelemme, molemmille projekteille on useita hyviä vaihtoehtoja.

Koneoppimisen ja syvällisen oppimisen välillä on ero. Pohjimmiltaan koneoppimisen viitekehys kattaa erilaisia ​​oppimismenetelmiä luokitusta, regressiota, klustereita, poikkeavuuksien havaitsemista ja tietojen valmistelua varten, ja se voi sisältää tai ei välttämättä hermoverkkomenetelmiä.

Syvä oppiminen tai syvä hermoverkkokehys kattaa useita hermoverkkotopologioita, joissa on paljon piilotettuja kerroksia. Keras, MXNet, PyTorch ja TensorFlow ovat syvällisiä oppimisen puitteita. Scikit-learn ja Spark MLlib ovat koneoppimisen puitteita. (Napsauta mitä tahansa edellisistä linkeistä lukeaksesi itsenäisen arvosteluni tuotteesta.)

Yleensä syvät hermoverkkolaskelmat kulkevat paljon nopeammin GPU: lla (erityisesti Nvidia CUDA: n yleiskäyttöisellä GPU: lla), TPU: lla tai FPGA: lla kuin suorittimella. Yksinkertaiset koneoppimismenetelmät eivät yleensä hyödy näytönohjaimesta.

Kun sinä voi kouluttaa syviä hermoverkkoja yhdellä tai useammalla suorittimella, harjoittelu on yleensä hidasta, ja hitaasti en puhu sekunneista tai minuuteista. Mitä enemmän hermosoluja ja kerroksia on koulutettava, ja mitä enemmän tietoa on saatavilla koulutukseen, sitä kauemmin se kestää. Kun Google Brain -tiimi koulutti kielikäännösmallinsa Google Kääntäjän uudelle versiolle vuonna 2016, he juoksivat harjoittelunsa viikon ajan kerrallaan useilla näytönohjaimilla. Ilman näytönohjaimia kukin mallikoulutuskokeilu olisi kestänyt kuukausia.

Siitä lähtien Intel Math Kernel Library (MKL) on mahdollistanut kouluttamisen jonkin verran hermoverkot suorittimissa kohtuullisen ajan kuluessa. Samaan aikaan GPU: t, TPU: t ja FPGA: t ovat nousseet vielä nopeammin.

Kaikkien samalla GPU: lla suoritettavien syväoppimispakettien harjoitusnopeus on lähes identtinen. Tämä johtuu siitä, että harjoittelun sisäiset silmukat viettävät suurimman osan ajastaan ​​Nvidia CuDNN -paketissa.

Harjoittelunopeuden lisäksi jokaisella syvällisesti oppivalla kirjastolla on omat etunsa ja haittansa, ja sama pätee Scikit-learniin ja Spark MLlibiin. Sukelletaan sisään.

Keras

Keras on korkean tason käyttöliittymän määrittely ja toteutus hermoverkkomallien rakentamiseen, joka toimittaa tukea kolmelle taustapohjan syvälle oppimisen kehykselle: TensorFlow, CNTK ja Theano. Amazon työskentelee parhaillaan MXNet-taustakuvan kehittämisessä Kerasille. On myös mahdollista käyttää PlaidML: ää (itsenäinen projekti) Kerasin taustana hyödyntämään PlaidML: n OpenCL-tukea kaikille GPU: ille.

TensorFlow on Kerasin oletustekniikka, ja sitä suositellaan monille käyttötapauksille, joihin liittyy GPU-kiihdytys Nvidia-laitteistossa CUDA: n ja cuDNN: n kautta, sekä TPU-kiihdytykseen Google Cloudissa. TensorFlow sisältää myös sisäisen tf.keras luokka, erillinen ulkoisesta Keras-asennuksesta.

Kerasilla on korkean tason ympäristö, joka tekee kerroksen lisäämisestä hermoverkkoon yhtä helppoa kuin yksi koodirivi peräkkäisessä mallissaan, ja vaatii vain yhden toimintokutsu mallin kokoamiseen ja kouluttamiseen. Keras antaa sinun työskennellä alemmalla tasolla, jos haluat, sen mallilla tai toiminnallisella sovellusliittymällä.

Keras antaa sinun pudota alaspäin vielä kauemmas, Python-koodaustasolle, alaluokalla keras. malli, mutta mieluummin toiminnallinen sovellusliittymä, kun mahdollista. Kerasilla on myös scikit-oppia API, jotta voit käyttää Scikit-learn-ruudukkohakua hyperparametrien optimointiin Keras-malleissa.

Kustannus: Ilmainen avoimen lähdekoodin.

Alusta: Linux, MacOS, Windows tai Raspbian; TensorFlow-, Theano- tai CNTK-taustakuva.

Lue arvostelu Kerasista.

MXNet

MXNet on kehittynyt ja parantunut melko vähän sen jälkeen, kun siirryttiin Apache Software Foundation -säätiön alkuun vuoden 2017 alussa. Vaikka Kerasilla on työskennelty MXNet-taustalla, erilainen korkean tason käyttöliittymä on tullut paljon tärkeämmäksi: Gluon. Ennen Gluonin liittämistä voit joko kirjoittaa yksinkertaisen pakollisen koodin tai nopean symbolisen koodin MXNetiin, mutta et molempia kerralla. Gluonin avulla voit yhdistää molempien maailmojen parhaat puolet tavalla, joka kilpailee sekä Kerasin että PyTorchin kanssa.

Gluonille haettuja etuja ovat:

  • Yksinkertainen, helposti ymmärrettävä koodi: Gluon tarjoaa täyden sarjan plug-and-play-hermoverkon rakennuspalikoita, mukaan lukien ennalta määritetyt kerrokset, optimoijat ja alustajat.
  • Joustava, välttämätön rakenne: Gluon ei vaadi hermoverkkomallin tarkkaa määrittelyä, vaan tuo koulutusharjoituksen algoritmin ja mallin lähemmäs toisiaan tarjotakseen joustavuutta kehitysprosessissa.
  • Dynaamiset kaaviot: Gluonin avulla kehittäjät voivat määritellä dynaamiset hermoverkkomallit, mikä tarkoittaa, että ne voidaan rakentaa lennossa, kaikilla rakenteilla ja käyttämällä mitä tahansa Pythonin natiivia ohjausvirtaa.
  • Korkea suorituskyky: Gluon tarjoaa kaikki edellä mainitut edut vaikuttamatta harjoittelunopeuteen, jonka taustalla oleva moottori tarjoaa.

Nämä neljä etua yhdessä huomattavasti laajennetun malliesimerkkien kanssa tuovat Gluon / MXNetin karkeaan pariteettiin Keras / TensorFlow- ja PyTorch-laitteiden kanssa kehityksen ja harjoittelunopeuden helpottamiseksi. Näet koodiesimerkit kullekin näistä Gluon-pääsivulta ja toistuvat Gluon-sovellusliittymän yleiskatsaussivulta.

Gluon-sovellusliittymä sisältää toiminnot hermoverkkokerroksille, toistuville hermoverkoille, menetystoiminnot, tietojoukkomenetelmät ja näkötietojoukot, mallintarhan ja joukon osallistuvia kokeellisia hermoverkkomenetelmiä. Voit vapaasti yhdistää Gluonin esimerkiksi MXNet- ja NumPy-moduuleihin moduuli, autogradja ndarraysekä Python-ohjausvirtojen kanssa.

Gluonilla on hyvä valikoima kerroksia rakennemalleja varten, mukaan lukien peruskerrokset (tiheä, putoava jne.), Konvoluutiokerrokset, poolikerrokset ja aktivointikerrokset. Jokainen näistä on yhden linjan puhelu. Näitä voidaan käyttää muun muassa verkkokonttien sisällä, kuten gluon.nn.Sequential ().

Kustannus: Ilmainen avoimen lähdekoodin.

Alusta: Linux, MacOS, Windows, Docker, Raspbian ja Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ ja Clojure (kokeellinen). MXNet sisältyy AWS Deep Learning AMI -ohjelmaan.

Lue arvostelu MXNetistä.

PyTorch

PyTorch perustuu vanhaan Torchiin ja uuteen Caffe2-kehykseen. Kuten nimestä saatat arvata, PyTorch käyttää Pythonia komentosarjakielenä ja käyttää kehittynyttä Torch C / CUDA -työpöytää. Caffe2: n tuotanto-ominaisuudet sisällytetään PyTorch-projektiin.

PyTorchia laskutetaan nimellä "Tensorit ja dynaamiset neuroverkot Pythonissa vahvalla GPU-kiihdytyksellä". Mitä tuo tarkoittaa?

Tensorit ovat matemaattinen rakenne, jota käytetään voimakkaasti fysiikassa ja tekniikassa. Toisen tason tensori on erityinen matriisi; ottamalla vektorin sisäinen tulo tensorilla saadaan toinen vektori uudella suuruudella ja uudella suunnalla. TensorFlow on saanut nimensä siitä, miten tensorit (synapsipainot) virtaavat verkkomallinsa ympäri. NumPy käyttää myös tensoreita, mutta kutsuu niitä ndarray.

GPU-kiihtyvyys on annettu useimmille moderneille syvän hermoverkon kehyksille. A dynaaminen hermoverkko on sellainen, joka voi vaihtaa iteraatiosta iteraatioon, esimerkiksi antaa PyTorch-mallin lisätä ja poistaa piilotettuja kerroksia harjoittelun aikana sen tarkkuuden ja yleisyyden parantamiseksi. PyTorch luo kaavion lennossa kussakin iterointivaiheessa. Sitä vastoin TensorFlow luo oletusarvoisesti yhden datavuokaavion, optimoi kaavakoodin suorituskyvyn kannalta ja kouluttaa sitten mallia.

Vaikka innokas suoritustila on melko uusi vaihtoehto TensorFlow'ssa, se on ainoa tapa, jolla PyTorch toimii: API-puhelut suoritetaan kutsun yhteydessä sen sijaan, että ne lisätään myöhemmin suoritettavaan kaavioon. Se saattaa tuntua siltä, ​​että se olisi vähemmän laskennallisesti tehokasta, mutta PyTorch on suunniteltu toimimaan tällä tavalla, eikä se ole kevyt harjoittelun tai ennustusnopeuden suhteen.

PyTorch integroi kiihdytyskirjastot, kuten Intel MKL ja Nvidia cuDNN ja NCCL (Nvidia Collective Communications Library) nopeuden maksimoimiseksi. Sen ydinprosessori- ja grafiikkasuoritintensori- ja hermoverkkopäätteet - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) ja THCUNN (Torch CUDA Neural Network) - kirjoitetaan itsenäisinä kirjastoina, joissa on C99-sovellusliittymä. Samalla PyTorch ei ole Python, joka sitoutuu monoliittiseen C ++ -kehykseen - tarkoituksena on, että se integroituu syvälle Pythoniin ja sallii muiden Python-kirjastojen käytön.

Kustannus: Ilmainen avoimen lähdekoodin.

Alusta: Linux, MacOS, Windows; Suorittimet ja Nvidia-suorittimet.

Lue arvostelu PyTorchista.

Scikit-oppia

Scikit-learn Python -kehyksessä on laaja valikoima vankkoja koneoppimisalgoritmeja, mutta ei syvällistä oppimista. Jos olet Python-fani, Scikit-learn voi olla paras vaihtoehto sinulle tavallisten koneoppimiskirjastojen joukossa.

Scikit-learn on vankka ja todistettu koneoppimiskirjasto Pythonille, jossa on laaja valikoima vakiintuneita algoritmeja ja integroitua grafiikkaa. Se on suhteellisen helppo asentaa, oppia ja käyttää, ja sillä on hyviä esimerkkejä ja oppaita.

Toisaalta Scikit-learn ei kata syvällistä oppimista tai vahvistamista, puuttuu graafiset mallit ja sekvenssiennuste, eikä sitä voida oikeastaan ​​käyttää muilla kielillä kuin Python. Se ei tue PyPyä, Pythonin juuri-in-time-kääntäjää tai GPU: ita. Siitä huolimatta sillä ei ole oikeastaan ​​nopeusongelmia lukuun ottamatta sen pientä hyökkäystä hermoverkkoihin. Se käyttää Cythonia (Python-C-kääntäjä) toiminnoille, joiden on oltava nopeita, kuten sisäisiin silmukoihin.

Scikit-Learnilla on hyvä valikoima algoritmeja luokitteluun, regressioon, klusterointiin, ulottuvuuden pienentämiseen, mallin valintaan ja esikäsittelyyn. Sillä on hyvä dokumentaatio ja esimerkkejä kaikista näistä, mutta sillä ei ole minkäänlaista ohjattua työnkulkua näiden tehtävien suorittamiseen.

Scikit-learn ansaitsee huippumerkit kehityksen helpottamiseksi, lähinnä siksi, että kaikki algoritmit toimivat dokumentoidusti, API: t ovat johdonmukaisia ​​ja hyvin suunniteltuja, ja tietorakenteiden välillä on vähän "impedanssin ristiriitoja". On ilo työskennellä sellaisen kirjaston kanssa, jonka ominaisuudet on perusteellisesti täydennetty ja virheet on poistettu perusteellisesti.

Toisaalta kirjasto ei kata syvää tai vahvistavaa oppimista, mikä jättää pois nykyiset kovat mutta tärkeät ongelmat, kuten tarkan kuvaluokituksen ja luotettavan reaaliaikaisen kielen jäsentämisen ja kääntämisen. Jos olet kiinnostunut syvällisestä oppimisesta, kannattaa etsiä muualta.

Siitä huolimatta on monia ongelmia - aina eri ennusteita yhdistävän ennustefunktion rakentamisesta, havaintojen luokitteluun, leimaamattoman tietojoukon rakenteen oppimiseen - jotka sopivat tavalliseen vanhaan koneoppimiseen tarvitsematta kymmeniä neuronikerroksia, ja näille alueille Scikit-learn on todella hyvä.

Kustannus: Ilmainen avoimen lähdekoodin.

Alusta: Vaatii Pythonin, NumPyn, SciPyn ja Matplotlibin. Julkaisut ovat saatavilla MacOS-, Linux- ja Windows-käyttöjärjestelmille.

Lue Scikit-learn-arvosteluani.

Spark MLlib

Spark MLlib, Apache Sparkin avoimen lähdekoodin koneoppimiskirjasto, tarjoaa yleisiä koneoppimisalgoritmeja, kuten luokittelu, regressio, klusterointi ja yhteistyösuodatus (mutta ei syviä hermoverkkoja). Se sisältää myös työkalut ominaisuuksien poimintaan, muuntamiseen, ulottuvuuden pienentämiseen ja valintaan; työkalut koneoppimisputkien rakentamiseen, arviointiin ja viritykseen; ja apuohjelmat algoritmien, mallien ja putkilinjojen tallentamiseen ja lataamiseen, tietojen käsittelyyn sekä lineaarisen algebran ja tilastojen tekemiseen.

Spark MLlib on kirjoitettu Scalassa, ja siinä käytetään lineaarista algebra-pakettia Breeze. Breeze riippuu netlib-jaavasta optimoidun numeerisen prosessoinnin suhteen, vaikka avoimen lähdekoodin jakelussa se tarkoittaa prosessorin optimoitua käyttöä. Databricks tarjoaa räätälöityjä Spark-klustereita, jotka käyttävät grafiikkasuoritimia, mikä voi mahdollisesti saada sinut vielä 10x nopeuden parannukseen monimutkaisten koneoppimismallien harjoittamiseen isoilla tiedoilla.

Spark MLlib toteuttaa rekkamäärän yleisiä algoritmeja ja malleja luokittelua ja regressiota kohtaan, jossa aloittelija voi sekoittua, mutta asiantuntija todennäköisesti löytää lopulta hyvän mallin analysoitaville tiedoille. Tähän lukuiseen malliin Spark 2.x lisää hyperparametrien virityksen tärkeän ominaisuuden, joka tunnetaan myös nimellä mallin valinta. Hyperparametrien viritys antaa analyytikoille mahdollisuuden asettaa parametriruudukko, estimaattori ja arvioija ja antaa ristivalidointimenetelmän (aikaa vievä, mutta tarkka) tai junan validoinnin jakomenetelmän (nopeampi, mutta vähemmän tarkka) löytää parhaan mallin tiedot.

Spark MLlibillä on täydet sovellusliittymät Scalalle ja Java: lle, enimmäkseen täydelliset API: t Pythonille ja luonnostellut osittaiset sovellusliittymät R: lle. Voit saada kattavuuden tuntuman laskemalla näytteet: 54 Java- ja 60 Scala-koneoppimisen esimerkkiä, 52 Python-kone oppimisesimerkkejä ja vain viisi R-esimerkkiä. Kokemukseni mukaan Spark MLlib on helpoin työskennellä Jupyter-muistikirjojen kanssa, mutta voit varmasti käyttää sitä konsolissa, jos kesytät tarkat Spark-tilaviestit.

Spark MLlib tarjoaa melkein kaiken mitä haluaisit koneen perusopetuksessa, ominaisuuksien valinnassa, putkistoissa ja pysyvyydessä. Se tekee melko hyvää työtä luokittelulla, regressiolla, ryhmittelyllä ja suodatuksella. Koska se on osa Sparkia, sillä on suuri pääsy tietokantoihin, virtoihin ja muihin tietolähteisiin. Toisaalta Spark MLlibiä ei ole todellakaan asetettu mallinnamaan ja kouluttamaan syviä hermoverkkoja samalla tavalla kuin TensorFlow, PyTorch, MXNet ja Keras.

Kustannus: Ilmainen avoimen lähdekoodin.

Alusta: Spark toimii sekä Windows- että Unix-tyyppisissä järjestelmissä (esim. Linux, MacOS), Java 7 tai uudempi, Python 2.6 / 3.4 tai uudempi ja R 3.1 tai uudempi. Scala API: ssa Spark 2.0.1 käyttää Scala 2.11: tä. Spark vaatii Hadoop / HDFS: n.

Lue arvostelu Spark MLlibistä.

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