Programovanie

Najlepšie knižnice strojového učenia a hlbokého učenia

Ak začínate nový projekt strojového učenia alebo hlbokého učenia, môžete byť zmätení, aký rámec zvoliť. Ako si ešte povieme, pre oba druhy projektov existuje niekoľko dobrých možností.

Existuje rozdiel medzi rámcom strojového učenia a rámcom hlbokého učenia. Rámec strojového učenia v zásade pokrýva celý rad metód výučby pre klasifikáciu, regresiu, zhlukovanie, zisťovanie anomálií a prípravu údajov a môže alebo nemusí zahŕňať metódy neurónových sietí.

Rámec hlbokého učenia alebo hlbokej neurónovej siete pokrýva rôzne topológie neurónových sietí s mnohými skrytými vrstvami. Keras, MXNet, PyTorch a TensorFlow sú rámce hlbokého učenia. Scikit-learn a Spark MLlib sú rámce strojového učenia. (Kliknutím na ktorýkoľvek z predchádzajúcich odkazov si prečítate moju samostatnú recenziu produktu.)

Výpočty hlbokých neurónových sietí všeobecne prebiehajú oveľa rýchlejšie na GPU (konkrétne na univerzálnom GPU Nvidia CUDA), TPU alebo FPGA, a nie na CPU. Všeobecne platí, že jednoduchšie metódy strojového učenia GPU neprospievajú.

Zatiaľ čo vy môcť trénujte hlboké neurónové siete na jednom alebo viacerých procesoroch, tréning býva pomalý a pomalým nehovorím o sekundách ani minútach. Čím viac neurónov a vrstiev je potrebné trénovať, a čím viac údajov je k dispozícii na trénovanie, tým dlhšie to trvá. Keď tím Google Brain v roku 2016 trénoval svoje modely jazykových prekladov pre novú verziu Prekladača Google, organizovali svoje tréningy týždeň po sebe, na viacerých GPU. Bez GPU by každý modelový tréningový experiment trval mesiace.

Odvtedy umožnila trénovať Intel Math Kernel Library (MKL) niektoré neurónové siete na CPU v primeranom čase. Medzitým sa GPU, TPU a FPGA ešte zrýchlili.

Rýchlosť tréningu všetkých balíkov hlbokého učenia bežiacich na rovnakých GPU je takmer rovnaká. Je to preto, že tréningové vnútorné slučky trávia väčšinu času v balíku Nvidia CuDNN.

Okrem rýchlosti tréningu má každá z knižníc hlbokého učenia svoju vlastnú klady a zápory, to isté platí pre Scikit-learn a Spark MLlib. Poďme sa ponoriť.

Keras

Keras je prvotriedna špecifikácia a implementácia pre vytváranie modelov neurónových sietí, ktorá sa dodáva s podporou troch back-endových rámcov hlbokého učenia: TensorFlow, CNTK a Theano. Amazon v súčasnosti pracuje na vývoji back-endu MXNet pre Keras. Je tiež možné použiť PlaidML (nezávislý projekt) ako backend pre Keras, aby ste mohli využiť podporu OpenCL pre všetky GPU od PlaidML.

TensorFlow je predvolený back-end pre Keras a ten, ktorý sa odporúča pre mnoho prípadov použitia zahŕňajúcich akceleráciu GPU na hardvéri Nvidia cez CUDA a cuDNN, ako aj pre akceleráciu TPU v Google Cloud. TensorFlow obsahuje aj interný tf.keras triedy, oddelene od externej inštalácie Keras.

Keras má prostredie na vysokej úrovni, vďaka ktorému je pridanie vrstvy do neurónovej siete také ľahké ako jeden riadok kódu v jej sekvenčnom modeli a na zostavenie a školenie modelu je potrebné iba jedno volanie funkcie. Program Keras vám umožní pracovať na nižšej úrovni, ak chcete, s jeho Modelom alebo funkčným API.

Keras vám umožňuje rozbaliť sa ešte ďalej, na úroveň kódovania Pythonu, pomocou podtriedy keras.Model, ale uprednostňuje funkčné API, pokiaľ je to možné. Keras má tiež a scikit-učiť sa API, takže môžete použiť vyhľadávanie mriežky Scikit-learn na vykonanie optimalizácie hyperparametra v modeloch Keras.

Náklady: Zadarmo otvorený zdroj.

Plošina: Linux, MacOS, Windows alebo Raspbian; Back-end TensorFlow, Theano alebo CNTK.

Prečítajte si moju recenziu na Keras.

MXNet

MXNet sa od svojho prechodu pod dáždnik Apache Software Foundation začiatkom roku 2017 dosť vyvinul a vylepšil. Aj keď sa na Kerase s back-endom MXNet už pracovalo, oveľa dôležitejšie je odlišné rozhranie na vysokej úrovni: Gluon. Pred začlenením Gluonu ste mohli do MXNet napísať buď jednoduchý imperatívny kód, alebo rýchly symbolický kód, ale nie obidva naraz. S Gluonom môžete kombinovať to najlepšie z oboch svetov spôsobom, ktorý konkuruje produktom Keras aj PyTorch.

Výhody požadované pre Gluon zahŕňajú:

  • Jednoduchý a ľahko pochopiteľný kód: Gluon ponúka celú sadu stavebných blokov neurónových sietí typu plug-and-play, vrátane preddefinovaných vrstiev, optimalizátorov a inicializátorov.
  • Flexibilná a nevyhnutná štruktúra: Gluon nevyžaduje, aby bol model neurónovej siete presne definovaný, ale skôr zbližuje cvičný algoritmus a model, aby poskytol flexibilitu v procese vývoja.
  • Dynamické grafy: Gluon umožňuje vývojárom definovať modely neurónových sietí, ktoré sú dynamické, čo znamená, že ich je možné zostavovať za behu, s ľubovoľnou štruktúrou a s využitím ľubovoľného toku natívneho riadenia v Pythone.
  • Vysoký výkon: Gluon poskytuje všetky vyššie uvedené výhody bez ovplyvnenia tréningovej rýchlosti, ktorú poskytuje základný motor.

Tieto štyri výhody spolu s výrazne rozšírenou zbierkou modelových príkladov privádzajú Gluon / MXNet k hrubej parite s Keras / TensorFlow a PyTorch pre ľahký vývoj a rýchlosť tréningu. Príklady kódov pre každý z nich môžete vidieť na hlavnej stránke Gluon a opakovať ich na stránke prehľadu pre Gluon API.

Rozhranie Gluon API obsahuje funkcie pre vrstvy neurónových sietí, rekurentné neurónové siete, stratové funkcie, metódy súborov údajov a súbory údajov o vízii, modelovú zoologickú záhradu a súbor prispievajúcich metód neurónových sietí. Gluon môžete ľubovoľne kombinovať napríklad so štandardnými modulmi MXNet a NumPy modul, autograda ndarray, ako aj s riadiacimi tokmi Pythonu.

Gluon má dobrý výber vrstiev pre vytváranie modelov, vrátane základných vrstiev (Dense, Dropout atď.), Konvolučných vrstiev, združovacích vrstiev a aktivačných vrstiev. Každé z nich je volanie prostredníctvom jednej linky. Môžu byť použité okrem iného aj vo vnútri sieťových kontajnerov ako napr gluon.nn. Sekvenčné ().

Náklady: Zadarmo otvorený zdroj.

Plošina: Linux, MacOS, Windows, Docker, Raspbian a Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ a Clojure (experimentálne). MXNet je súčasťou AWS Deep Learning AMI.

Prečítajte si moju recenziu na MXNet.

PyTorch

PyTorch nadväzuje na starú pochodeň a nový rámec Caffe2. Ako asi tušíte z názvu, PyTorch používa ako svoj skriptovací jazyk Python a používa vyvinutý back-end Torch C / CUDA. Výrobné vlastnosti Caffe2 sú začlenené do projektu PyTorch.

PyTorch je označovaný ako „Tenzory a dynamické neurónové siete v Pythone so silnou akceleráciou GPU.“ Čo to znamená?

Tenzory sú matematický konštrukt, ktorý sa vo veľkej miere používa vo fyzike a strojárstve. Tenzor úrovne dva je špeciálny druh matice; braním vnútorného produktu vektora s tenzorom sa získa ďalší vektor s novou veľkosťou a novým smerom. Názov TensorFlow je odvodený od spôsobu, akým okolo jeho sieťového modelu prúdia tenzory (s hmotnosťou synapsie). NumPy tiež používa tenzory, ale nazýva ich ndarray.

Akcelerácia GPU je samozrejmosťou pre väčšinu moderných rámcov hlbokých neurónových sietí. A dynamický neurónová sieť je taká, ktorá sa môže meniť z iterácie na iteráciu, napríklad umožňuje modelu PyTorch pridávať a odstraňovať skryté vrstvy počas tréningu, aby sa zlepšila jeho presnosť a všeobecnosť. Program PyTorch za každých okolností opakuje graf za chodu. Naproti tomu TensorFlow predvolene vytvára jeden graf toku údajov, optimalizuje kód grafu na výkon a potom model trénuje.

Zatiaľ čo režim nedočkavého spustenia je v TensorFlow pomerne novou možnosťou, je to jediný spôsob spustenia PyTorch: volania API namiesto spustenia do grafu, ktorý sa má spustiť, spustia pri vyvolaní. Mohlo by sa zdať, že by to bolo výpočtovo menej efektívne, ale program PyTorch bol navrhnutý tak, aby fungoval takýmto spôsobom, a pokiaľ ide o rýchlosť tréningu alebo predikcie, nie je to nič nehovoriace.

PyTorch integruje akceleračné knižnice ako Intel MKL a Nvidia cuDNN a NCCL (Nvidia Collective Communications Library), aby maximalizoval rýchlosť. Jeho základné tenzory CPU a GPU a back-endy neurónovej siete - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) a THCUNN (Torch CUDA Neural Network) - sú napísané ako nezávislé knižnice s API C99. PyTorch zároveň nie je väzbou Pythonu na monolitický rámec C ++ - jeho zámerom je hlboká integrácia s Pythonom a umožnenie použitia ďalších knižníc Pythonu.

Náklady: Zadarmo otvorený zdroj.

Plošina: Linux, MacOS, Windows; CPU a GPU Nvidia.

Prečítajte si moju recenziu na PyTorch.

Scikit-uč sa

Rámec Scikit-learn Python má široký výber robustných algoritmov strojového učenia, ale žiadne hlboké učenie. Ak ste fanúšikom Pythonu, Scikit-learn môže byť pre vás najlepšou voľbou medzi knižnicami jednoduchého strojového učenia.

Scikit-learn je robustná a osvedčená knižnica strojového učenia pre Python so širokým sortimentom osvedčených algoritmov a integrovanej grafiky. Inštaluje sa, učí sa a používa sa pomerne ľahko a obsahuje dobré príklady a návody.

Na druhej strane, program Scikit-learn nezahŕňa hlboké učenie alebo učenie posilňovania, chýbajú mu grafické modely a predikcia sekvencií, a v skutočnosti ho nemožno použiť z iných jazykov ako Python. Nepodporuje PyPy, kompilátor Python just-in-time ani GPU. To znamená, že až na malý zásah do neurónových sietí nemá skutočné problémy s rýchlosťou. Používa Cython (kompilátor Python to C) pre funkcie, ktoré musia byť rýchle, napríklad vnútorné slučky.

Scikit-learn má dobrý výber algoritmov pre klasifikáciu, regresiu, klastrovanie, redukciu dimenzionality, výber modelu a predspracovanie. Má dobrú dokumentáciu a príklady pre všetky tieto prípady, ale chýba mu akýkoľvek druh riadeného pracovného toku na splnenie týchto úloh.

Scikit-learn získava najlepšie známky za ľahký vývoj, hlavne preto, že všetky algoritmy fungujú tak, ako sú zdokumentované, API sú konzistentné a dobre navrhnuté a medzi dátovými štruktúrami je len málo „nesúladov impedancie“. Je potešením pracovať s knižnicou, ktorej funkcie boli dôkladne prepracované a ktorej chyby boli dôkladne vyprázdnené.

Na druhej strane knižnica nezahŕňa hlboké učenie alebo posilňovacie učenie, ktoré vynecháva súčasné ťažké, ale dôležité problémy, ako je presná klasifikácia obrázkov a spoľahlivá analýza a preklad jazyka v reálnom čase. Je zrejmé, že ak sa zaujímate o hlboké vzdelávanie, mali by ste sa pozrieť inde.

Napriek tomu existuje veľa problémov - od vytvorenia predikčnej funkcie spájajúcej rôzne pozorovania, klasifikácie pozorovaní až po naučenie sa štruktúry neoznačeného súboru údajov -, ktoré sa dajú použiť na jednoduché staré strojové učenie bez potreby desiatok vrstiev neurónov a pre tieto oblasti Scikit-learn je skutočne veľmi dobrý.

Náklady: Zadarmo otvorený zdroj.

Plošina: Vyžaduje Python, NumPy, SciPy a Matplotlib. Vydania sú k dispozícii pre MacOS, Linux a Windows.

Prečítajte si moju recenziu na Scikit-learn.

Spark MLlib

Spark MLlib, knižnica strojového učenia otvoreného zdroja pre Apache Spark, poskytuje bežné algoritmy strojového učenia, ako je klasifikácia, regresia, klastrovanie a spoločné filtrovanie (ale nie hlboké neurónové siete). Zahŕňa tiež nástroje na extrakciu, transformáciu, zníženie rozmerov a výber funkcií; nástroje na konštrukciu, hodnotenie a ladenie potrubí strojového učenia; a nástroje na ukladanie a načítanie algoritmov, modelov a potrubí, na spracovanie údajov a na vykonávanie lineárnej algebry a štatistík.

Spark MLlib je napísaný v programe Scala a používa balík lineárnej algebry Breeze. Breeze závisí od netlib-java pre optimalizované číselné spracovanie, aj keď v distribúcii open source to znamená optimalizované využitie CPU. Databricks ponúka prispôsobené klastre Spark, ktoré používajú GPU, čo vám môže potenciálne priniesť ďalšie 10-násobné zvýšenie rýchlosti pre školenie komplexných modelov strojového učenia s veľkými dátami.

Program Spark MLlib implementuje veľké množstvo bežných algoritmov a modelov na klasifikáciu a regresiu až do bodu, keď by nováčik mohol byť zmätený, ale odborník pravdepodobne nájde vhodný výber modelu pre údaje, ktoré sa majú analyzovať. K tejto plejáde modelov pridáva Spark 2.x dôležitú vlastnosť vyladenia hyperparametra, ktorá sa označuje aj ako výber modelu. Ladenie hyperparametrov umožňuje analytikovi nastaviť mriežku parametrov, odhad a hodnotiteľa a nechať metódu krížovej validácie (časovo náročnú, ale presnú) alebo metódu rozdelenia validácie vlaku (rýchlejšiu, ale menej presnú) nájsť najlepší model pre údaje.

Spark MLlib má plné API pre Scala a Java, väčšinou plné API pre Python a povrchné čiastočné API pre R. Počítanie vzoriek môžete získať dobrý pocit z pokrytia: 54 príkladov strojového učenia Java a 60 Scala, 52 stroj Python učebné príklady a iba päť R príkladov. Podľa mojich skúseností je Spark MLlib najjednoduchšie pracovať s notebookmi Jupyter, ale určite ho môžete spustiť v konzole, ak skrotíte podrobné správy o stave Spark.

Spark MLlib dodáva skoro všetko, čo by ste chceli, napríklad základné strojové učenie, výber funkcií, kanály a vytrvalosť. Odvádza dobrú prácu s klasifikáciou, regresiou, klastrovaním a filtrovaním. Vzhľadom na to, že je súčasťou programu Spark, má vynikajúci prístup k databázam, streamom a ďalším zdrojom údajov. Na druhej strane, Spark MLlib nie je skutočne nastavený na modelovanie a trénovanie hlbokých neurónových sietí rovnakým spôsobom ako TensorFlow, PyTorch, MXNet a Keras.

Náklady: Zadarmo otvorený zdroj.

Plošina: Spark beží na systémoch Windows aj Unix (napr. Linux, MacOS) s jazykom Java 7 alebo novším, Python 2.6 / 3.4 alebo novším a R 3.1 alebo novším. Pre API Scala používa Spark 2.0.1 Scala 2.11. Spark vyžaduje Hadoop / HDFS.

Prečítajte si moju recenziu na Spark MLlib.

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