Programování

Nejlepší knihovny pro strojové učení a hluboké učení

Pokud zahajujete nový projekt strojového učení nebo hlubokého učení, můžete být zmateni, jaký rámec zvolit. Jak budeme diskutovat, pro oba druhy projektů existuje několik dobrých možností.

Existuje rozdíl mezi rámcem strojového učení a rámcem hlubokého učení. Rámec strojového učení v podstatě pokrývá celou řadu metod učení pro klasifikaci, regresi, shlukování, detekci anomálií a přípravu dat a může nebo nemusí zahrnovat metody neuronových sítí.

Rámec hlubokého učení nebo hluboké neurální sítě pokrývá různé topologie neuronových sítí s mnoha skrytými vrstvami. Keras, MXNet, PyTorch a TensorFlow jsou rámce hlubokého učení. Scikit-learn a Spark MLlib jsou rámce strojového učení. (Kliknutím na některý z předchozích odkazů si přečtete moji samostatnou recenzi produktu.)

Obecně platí, že výpočty hlubokých neuronových sítí běží mnohem rychleji na GPU (konkrétně GPU Nvidia CUDA pro všeobecné účely), TPU nebo FPGA, spíše než na CPU. Obecně platí, že jednodušší metody strojového učení nemají z GPU prospěch.

Zatímco ty umět trénujte hluboké neuronové sítě na jednom nebo více CPU, trénink má tendenci být pomalý a pomalým nemluvím o sekundách ani minutách. Čím více neuronů a vrstev je třeba trénovat a čím více dat je k dispozici pro trénink, tím déle to trvá. Když tým Google Brain v roce 2016 proškolil své modely jazykových překladů pro novou verzi Překladače Google, probíhal jejich trénink po dobu jednoho týdne na několika GPU. Bez GPU by každý model tréninkového experimentu trval měsíce.

Od té doby umožňuje Intel Math Kernel Library (MKL) trénovat nějaký neuronové sítě na CPU v rozumném čase. Mezitím se GPU, TPU a FPGA ještě zrychlily.

Rychlost tréninku všech balíčků hlubokého učení běžících na stejných GPU je téměř identická. Je to proto, že tréninkové vnitřní smyčky tráví většinu času v balíčku Nvidia CuDNN.

Kromě rychlosti tréninku má každá z knihoven hlubokého učení vlastní sadu kladů a záporů, a totéž platí pro Scikit-learn a Spark MLlib. Pojďme se ponořit.

Keras

Keras je prvotřídní specifikace a implementace pro vytváření modelů neuronových sítí, která je dodávána s podporou tří back-endových rámců hlubokého učení: TensorFlow, CNTK a Theano. Amazon v současné době pracuje na vývoji back-endu MXNet pro Keras. Je také možné použít PlaidML (nezávislý projekt) jako back-end pro Keras, aby využil výhody OpenCL podpory PlaidML pro všechny GPU.

TensorFlow je výchozí back-end pro Keras a ten, který se doporučuje pro mnoho případů použití zahrnujících akceleraci GPU na hardwaru Nvidia přes CUDA a cuDNN, stejně jako pro akceleraci TPU v Google Cloud. TensorFlow obsahuje také interní tf.keras třídy, odděleně od externí instalace Keras.

Keras má prostředí na vysoké úrovni, díky kterému je přidání vrstvy do neuronové sítě stejně snadné jako jeden řádek kódu v jejím sekvenčním modelu, a pro kompilaci a školení modelu vyžaduje každý pouze jedno volání funkce. Keras vám umožní pracovat na nižší úrovni, pokud chcete, s jeho Modelem nebo funkčním API.

Keras vám umožňuje rozbalit se ještě dále, na úroveň kódování Pythonu, pomocí podtřídy keras. model, ale pokud je to možné, upřednostňuje funkční API. Keras má také scikit-učit se API, takže můžete použít vyhledávání mřížky Scikit-learn k provedení optimalizace hyperparametru v modelech Keras.

Náklady: Zdarma otevřený zdroj.

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

Přečtěte si moji recenzi na Keras.

MXNet

MXNet se od svého přechodu pod zastřešující platformu Apache Software Foundation počátkem roku 2017 hodně vyvinul a vylepšil. I když se na Kerasu s back-endem MXNet pracovalo, mnohem důležitější je jiné rozhraní na vysoké úrovni: Gluon. Před začleněním Gluonu jste mohli do MXNet napsat jednoduchý imperativní kód nebo rychlý symbolický kód, ale ne oba najednou. S Gluon můžete kombinovat to nejlepší z obou světů způsobem, který konkuruje Keras i PyTorch.

Výhody požadované pro Gluon zahrnují:

  • Jednoduchý a snadno srozumitelný kód: Gluon nabízí celou sadu stavebních bloků neuronových sítí typu plug-and-play, včetně předdefinovaných vrstev, optimalizátorů a inicializátorů.
  • Flexibilní, imperativní struktura: Gluon nevyžaduje pevné definování modelu neuronové sítě, ale spíše přibližuje tréninkový algoritmus a model, aby poskytl flexibilitu v procesu vývoje.
  • Dynamické grafy: Gluon umožňuje vývojářům definovat modely neuronových sítí, které jsou dynamické, což znamená, že je lze vytvářet za běhu, s jakoukoli strukturou a s využitím jakéhokoli toku nativního řízení Pythonu.
  • Vysoký výkon: Gluon poskytuje všechny výše uvedené výhody, aniž by to ovlivnilo rychlost tréninku, kterou poskytuje základní motor.

Tyto čtyři výhody spolu s výrazně rozšířenou kolekcí modelových příkladů přinášejí Gluon / MXNet k hrubé paritě s Keras / TensorFlow a PyTorch pro snadný vývoj a rychlost tréninku. Na každé stránce Gluon můžete vidět příklady kódu a opakovat je na stránce s přehledem Gluon API.

Gluon API obsahuje funkce pro vrstvy neuronových sítí, rekurentní neuronové sítě, funkce ztráty, metody datových sad a datové sady vidění, modelovou zoo a sadu metod experimentální neuronové sítě. Gluon můžete libovolně kombinovat například se standardními moduly MXNet a NumPy modul, autograd, a ndarray, stejně jako u řídicích toků Pythonu.

Gluon má dobrý výběr vrstev pro vytváření modelů, včetně základních vrstev (Dense, Dropout atd.), Konvolučních vrstev, sdružování vrstev a aktivačních vrstev. Každý z nich je volání na jednu linku. Ty lze použít mimo jiné uvnitř síťových kontejnerů, jako jsou gluon.nn. Sekvenční ().

Náklady: Zdarma otevřený zdroj.

Plošina: Linux, MacOS, Windows, Docker, Raspbian a Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ a Clojure (experimentální). MXNet je součástí AWS Deep Learning AMI.

Přečtěte si moji recenzi MXNet.

PyTorch

PyTorch staví na staré Torch a nové architektuře Caffe2. Jak můžete z názvu uhodnout, PyTorch používá Python jako svůj skriptovací jazyk a používá vyvinutý back-end Torch C / CUDA. Produkční funkce Caffe2 jsou začleněny do projektu PyTorch.

PyTorch je označován jako „Tenzory a dynamické neurální sítě v Pythonu se silnou akcelerací GPU.“ Co to znamená?

Tenzory jsou matematický konstrukt, který se hojně používá ve fyzice a strojírenství. Tenzor druhé pozice je speciální druh matice; přičemž vnitřní produkt vektoru s tenzorem získá další vektor s novou velikostí a novým směrem. TensorFlow odvozuje svůj název od způsobu, jakým kolem jeho síťového modelu proudí tenzory (váhy synapse). NumPy také používá tenzory, ale nazývá je ndarray.

Akcelerace GPU je samozřejmostí pro většinu moderních rámců hlubokých neuronových sítí. A dynamický neurální síť je ta, která se může změnit z iterace na iteraci, například umožňuje modelu PyTorch přidávat a odebírat skryté vrstvy během tréninku, aby se zlepšila jeho přesnost a obecnost. PyTorch znovu vytvoří graf za běhu v každém iteračním kroku. Naproti tomu TensorFlow ve výchozím nastavení vytvoří jeden graf toku dat, optimalizuje kód grafu pro výkon a poté model trénuje.

Zatímco dychtivý režim spuštění je v TensorFlow poměrně novou volbou, je to jediný způsob, jak PyTorch běží: volání API po vyvolání spustí, místo aby bylo přidáno do grafu, který se má spustit později. Mohlo by se to zdát, že by to bylo výpočetně méně efektivní, ale PyTorch byl navržen tak, aby fungoval tímto způsobem, a pokud jde o rychlost tréninku nebo predikce, není to žádný zlom.

PyTorch integruje akcelerační knihovny, jako jsou Intel MKL a Nvidia cuDNN a NCCL (Nvidia Collective Communications Library), aby maximalizoval rychlost. Jeho základní CPU a GPU Tenzor a back-endy neurální sítě - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) a THCUNN (Torch CUDA Neural Network) - jsou psány jako nezávislé knihovny s C99 API. PyTorch zároveň není vazbou Pythonu na monolitický rámec C ++ - záměrem je, aby byla hluboce integrována s Pythonem a umožnila použití dalších knihoven Pythonu.

Náklady: Zdarma otevřený zdroj.

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

Přečtěte si moji recenzi na PyTorch.

Scikit-učit se

Rámec Scikit-learn Python má široký výběr robustních algoritmů strojového učení, ale žádné hluboké učení. Pokud jste fanouškem Pythonu, může být pro vás Scikit-learn tou nejlepší volbou mezi knihovnami prostého strojového učení.

Scikit-learn je robustní a osvědčená knihovna strojového učení pro Python se širokou škálou dobře zavedených algoritmů a integrované grafiky. Je poměrně snadné jej nainstalovat, naučit se a používat a má dobré příklady a návody.

Na druhou stranu Scikit-learn nepokrývá hluboké učení ani učení posílení, postrádají grafické modely a predikci sekvencí a nelze jej opravdu použít z jiných jazyků než Python. Nepodporuje PyPy, kompilátor Python just-in-time ani GPU. To znamená, že až na malý průnik do neuronových sítí nemá problémy s rychlostí. Používá Cython (kompilátor Python to C) pro funkce, které musí být rychlé, jako jsou vnitřní smyčky.

Scikit-learn má dobrý výběr algoritmů pro klasifikaci, regresi, shlukování, redukci rozměrů, výběr modelu a předzpracování. Má dobrou dokumentaci a příklady pro všechny z nich, ale pro provádění těchto úkolů postrádá jakýkoli druh pracovního postupu s průvodcem.

Scikit-learn získává nejlepší známky za snadný vývoj, hlavně proto, že všechny algoritmy fungují tak, jak jsou zdokumentovány, API jsou konzistentní a dobře navržená a mezi datovými strukturami existuje jen málo „nesouladů impedance“. Je potěšením pracovat s knihovnou, jejíž funkce byly důkladně rozpracovány a jejíž chyby byly důkladně vyprázdněny.

Na druhou stranu knihovna nepokrývá hluboké učení ani posilovací učení, které vynechává současné tvrdé, ale důležité problémy, jako je přesná klasifikace obrázků a spolehlivá analýza a překlad jazyka v reálném čase. Je zřejmé, že pokud vás zajímá hluboké učení, měli byste hledat jinde.

Existuje však mnoho problémů - od vytvoření predikční funkce spojující různá pozorování, přes klasifikaci pozorování až po učení struktury neoznačeného datového souboru -, které se hodí k prostému starému strojovému učení bez nutnosti desítek vrstev neuronů a pro tyto oblasti Scikit-learn je opravdu velmi dobrý.

Náklady: Zdarma otevřený zdroj.

Plošina: Vyžaduje Python, NumPy, SciPy a Matplotlib. Vydání jsou k dispozici pro MacOS, Linux a Windows.

Přečtěte si moji recenzi Scikit-learn.

Spark MLlib

Spark MLlib, knihovna open source strojového učení pro Apache Spark, poskytuje běžné algoritmy strojového učení, jako je klasifikace, regrese, shlukování a filtrování spolupráce (ale ne hluboké neurální sítě). Zahrnuje také nástroje pro extrakci, transformaci, zmenšení rozměrů a výběr prvků; nástroje pro konstrukci, hodnocení a ladění potrubí strojového učení; a nástroje pro ukládání a načítání algoritmů, modelů a potrubí, pro zpracování dat a pro provádění lineární algebry a statistik.

Spark MLlib je napsán ve Scale a používá balíček lineární algebry Breeze. Breeze závisí na netlib-java pro optimalizované číselné zpracování, i když v distribuci open source to znamená optimalizované využití CPU. Databricks nabízí přizpůsobené clustery Spark, které používají GPU, což vám může potenciálně přinést další 10násobné zlepšení rychlosti pro trénink složitých modelů strojového učení s velkými daty.

Spark MLlib implementuje náklad běžných algoritmů a modelů pro klasifikaci a regresi do bodu, kdy by se nováček mohl zmást, ale odborník by pravděpodobně našel dobrou volbu modelu pro data, která mají být analyzována. K této plejádě modelů přidává Spark 2.x důležitou vlastnost ladění hyperparametrů, známou také jako výběr modelu. Ladění hyperparametrů umožňuje analytikovi nastavit mřížku parametrů, odhad a hodnotitele a nechat metodu křížové validace (časově náročnou, ale přesnou) nebo metodu rozdělování validace vlaku (rychlejší, ale méně přesnou) najít nejlepší model pro data.

Spark MLlib má plná rozhraní API pro Scala a Java, většinou plná rozhraní API pro Python a povrchní částečná rozhraní API pro R. Počítáním vzorků můžete získat dobrý pocit z pokrytí: 54 příkladů strojového učení Java a 60 Scala, 52 strojů Python učební příklady a pouze pět R. Podle mých zkušeností je Spark MLlib nejjednodušší pracovat s notebooky Jupyter, ale určitě jej můžete spustit v konzole, pokud zkrotíte podrobné zprávy o stavu Spark.

Spark MLlib dodává téměř vše, co byste chtěli, a to způsobem základního strojového učení, výběru funkcí, kanálů a vytrvalosti. Odvádí docela dobrou práci s klasifikací, regresí, shlukováním a filtrováním. Vzhledem k tomu, že je součástí Sparku, má skvělý přístup k databázím, streamům a dalším zdrojům dat. Na druhou stranu není Spark MLlib nastaven na modelování a trénování hlubokých neuronových sítí stejným způsobem jako TensorFlow, PyTorch, MXNet a Keras.

Náklady: Zdarma otevřený zdroj.

Plošina: Spark běží na systémech Windows i Unix (např. Linux, MacOS) s Javou 7 nebo novější, Python 2.6 / 3.4 nebo novější a R 3.1 nebo novější. Pro rozhraní Scala API používá Spark 2.0.1 Scala 2.11. Spark vyžaduje Hadoop / HDFS.

Přečtěte si moji recenzi Spark MLlib.