Най-добрите библиотеки за машинно обучение и дълбоко обучение

Ако стартирате нов проект за машинно обучение или задълбочено обучение, може да се объркате коя рамка да изберете. Както ще обсъдим, има няколко добри възможности за двата вида проекти.

Има разлика между рамката за машинно обучение и рамката за дълбоко обучение. По същество рамката за машинно обучение обхваща различни методи за обучение за класификация, регресия, групиране, откриване на аномалии и подготовка на данни и може да включва или да не включва методи на невронна мрежа.

Дълбокото обучение или дълбоката невронна мрежа обхваща различни топологии на невронната мрежа с много скрити слоеве. Keras, MXNet, PyTorch и TensorFlow са рамки за дълбоко обучение. Scikit-learn и Spark MLlib са рамки за машинно обучение. (Щракнете върху някоя от предишните връзки, за да прочетете моя самостоятелен преглед на продукта.)

Като цяло дълбоките изчисления на невронни мрежи работят много по-бързо на графичен процесор (по-специално графичен процесор на Nvidia CUDA с общо предназначение), TPU или FPGA, а не на процесор. По принцип по-опростените методи за машинно обучение не се възползват от GPU.

Въпреки че можете да тренирате дълбоки невронни мрежи на един или повече процесори, обучението обикновено е бавно и бавно не говоря за секунди или минути. Колкото повече неврони и слоеве трябва да бъдат обучени и колкото повече данни са на разположение за обучение, толкова повече време отнема. Когато екипът на Google Brain обучи своите модели за езиков превод за новата версия на Google Translate през 2016 г., те провеждаха своите учебни сесии в продължение на една седмица, на множество графични процесори. Без графични процесори всеки експеримент за обучение на модели би отнел месеци.

Оттогава Intel Math Kernel Library (MKL) дава възможност да се обучават някои невронни мрежи на процесори за разумен период от време. Междувременно графичните процесори, TPU и FPGA стават още по-бързи.

Скоростта на обучение на всички пакети за дълбоко обучение, работещи на едни и същи графични процесори, е почти идентична. Това е така, защото тренировъчните вътрешни бримки прекарват по-голямата част от времето си в пакета Nvidia CuDNN.

Освен скоростта на обучение, всяка от библиотеките с дълбоко обучение има свои собствени плюсове и минуси и същото важи за Scikit-learn и Spark MLlib. Да се ​​потопим.

Керас

Keras е спецификация и внедряване на високо ниво от преден край за изграждане на модели на невронни мрежи, които се доставят с поддръжка на три основни рамки за дълбоко обучение: TensorFlow, CNTK и Theano. В момента Amazon работи по разработването на MXNet back-end за Keras. Възможно е също да използвате PlaidML (независим проект) като back-end за Keras, за да се възползва от поддръжката на OpenCL на PlaidML за всички графични процесори.

TensorFlow е стандартният back-end за Keras и този, препоръчан за много случаи на използване, включващи ускорение на GPU на хардуера на Nvidia чрез CUDA и cuDNN, както и за ускоряване на TPU в Google Cloud. TensorFlow също съдържа вътрешен tf.kerasклас, отделен от външната инсталация на Keras.

Keras има среда на високо ниво, която прави добавянето на слой към невронна мрежа толкова лесно, колкото един ред код в нейния последователен модел, и изисква само по едно извикване на функция за компилиране и обучение на модел. Keras ви позволява да работите на по-ниско ниво, ако искате, със своя модел или функционален API.

Keras ви позволява да падате дори по-далеч, до нивото на кодиране на Python, чрез подкласиране keras.Model, но предпочита функционалния API, когато е възможно. Keras също има scikit-learnAPI, така че можете да използвате Scikit-learn мрежата за търсене, за да извършите оптимизация на хиперпараметри в модели на Keras. 

Цена: Безплатен отворен код. 

Платформа: Linux, MacOS, Windows или Raspbian; TensorFlow, Theano или CNTK back-end. 

Прочетете ревюто ми за Keras. 

MXNet

MXNet се е развил и подобрил доста, откакто се е преместил под чадъра на Apache Software Foundation в началото на 2017 г. Въпреки че е работил по Keras с MXNet back-end, различен интерфейс на високо ниво е станал много по-важен: Gluon. Преди включването на Gluon можете да пишете лесен императивен код или бърз символен код в MXNet, но не и двете наведнъж. С Gluon можете да комбинирате най-доброто от двата свята, по начин, който се конкурира както с Keras, така и с PyTorch.

Предимствата, за които се претендира за Gluon, включват:

  • Прост, лесен за разбиране код: Gluon предлага пълен набор от plug-and-play невронни изграждащи блокове, включително предварително дефинирани слоеве, оптимизатори и инициализатори.
  • Гъвкава, императивна структура: Gluon не изисква моделът на невронната мрежа да бъде строго дефиниран, а по-скоро сближава обучителния алгоритъм и модел, за да осигури гъвкавост в процеса на разработване.
  • Динамични графики: Gluon позволява на разработчиците да дефинират динамични модели на невронни мрежи, което означава, че те могат да бъдат изградени в движение, с всякаква структура и използвайки който и да е от собствения поток за управление на Python.
  • Висока производителност: Gluon осигурява всички горепосочени предимства, без да влияе на скоростта на обучение, която осигурява основният двигател.

Тези четири предимства, заедно с значително разширената колекция от примери за модели, довеждат Gluon / MXNet до груб паритет с Keras / TensorFlow и PyTorch за лекота на развитие и скорост на обучение. Можете да видите примери за кодове за всеки от тях на главната страница на Gluon и повторени на страницата за преглед за API на Gluon.

API на Gluon включва функционалност за слоеве на невронни мрежи, повтарящи се невронни мрежи, функции на загуби, методи на набори от данни и набори от данни за зрението, модел зоологическа градина и набор от експериментални методи на невронна мрежа. Можете свободно да комбинирате Gluon със стандартни MXNet и NumPy модули, например module,autograd и ndarray, както и с Python контрол потоци.

Gluon има добър избор от слоеве за изграждане на модели, включително основни слоеве (плътни, отпадащи и др.), Конволюционни слоеве, обединяващи слоеве и активиращи слоеве. Всеки от тях е еднолинен разговор. Те могат да се използват, наред с други места, вътре в мрежови контейнери като gluon.nn.Sequential().

Цена: Безплатен отворен код. 

Платформа: Linux, MacOS, Windows, Docker, Raspbian и Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ и Clojure (експериментално). MXNet е включен в AMI за дълбоко обучение AWS.

Прочетете моя преглед на MXNet. 

PyTorch

PyTorch надгражда старата Torch и новата рамка Caffe2. Както се досещате от името, PyTorch използва Python като свой скриптов език и използва еволюирал Torch C / CUDA back-end. Производствените характеристики на Caffe2 са включени в проекта PyTorch.

PyTorch се таксува като „Тензори и динамични невронни мрежи в Python със силно ускорение на GPU“. Какво означава това?

Тензорите са математическа конструкция, която се използва интензивно във физиката и инженерството. Тензор на ранг две е специален вид матрица; вземането на вътрешното произведение на вектор с тензор дава друг вектор с нова величина и нова посока. TensorFlow носи името си от начина, по който тензорите (с тегла на синапсите) се движат около нейния мрежов модел. NumPy също използва тензори, но ги нарича ndarray.

GPU ускорението е даденост за повечето съвременни рамки на дълбока невронна мрежа. А динамичен невронни мрежи е тази, която може да се промени от итерация към итерация, например позволява модел PyTorch за добавяне и премахване скрити слоеве по време на обучение, за да се подобри нейната точност и всеобщност. PyTorch пресъздава графиката в движение при всяка стъпка на итерация. За разлика от тях, TensorFlow по подразбиране създава единична графика на потока от данни, оптимизира кода на графиката за производителност и след това обучава модела.

Въпреки че режимът на изпълнено изпълнение е доста нова опция в TensorFlow, това е единственият начин, по който се изпълнява PyTorch: API извикванията се изпълняват при извикване, вместо да се добавят към графика, която да се изпълнява по-късно. Това може да изглежда, че би било по-малко изчислително ефективно, но PyTorch е проектиран да работи по този начин и не е объркан, когато става въпрос за скорост на обучение или прогнозиране.

PyTorch интегрира ускорителни библиотеки като Intel MKL и Nvidia cuDNN и NCCL (Nvidia Collective Communications Library), за да увеличи скоростта. Основните CPU и GPU Tensor и невронни мрежи - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) и THCUNN (Torch CUDA Neural Network) - са написани като независими библиотеки с API C99. В същото време PyTorch не е свързване на Python в монолитна C ++ рамка - намерението е тя да бъде дълбоко интегрирана с Python и да позволи използването на други библиотеки на Python.

Цена: Безплатен отворен код. 

Платформа: Linux, MacOS, Windows; CPU и Nvidia GPU. 

Прочетете моя преглед на PyTorch. 

Scikit-learn

Рамката Scikit-learn Python има богат избор от стабилни алгоритми за машинно обучение, но няма задълбочено обучение. Ако сте фен на Python, Scikit-learn може да е най-добрият вариант за вас сред обикновените библиотеки за машинно обучение.

Scikit-learn е стабилна и добре доказана библиотека за машинно обучение за Python с богат асортимент от утвърдени алгоритми и интегрирана графика. Той е сравнително лесен за инсталиране, научаване и използване и има добри примери и уроци.

От друга страна, Scikit-learn не обхваща задълбочено обучение или затвърждаване, липсват графични модели и прогнозиране на последователността и всъщност не може да се използва от други езици освен Python. Той не поддържа PyPy, Python компилатор точно навреме, или графични процесори. Въпреки това, с изключение на малкия му набег в невронни мрежи, той всъщност няма проблеми със скоростта. Той използва Cython (компилаторът на Python в C) за функции, които трябва да бъдат бързи, като вътрешни цикли.

Scikit-learn има добър избор от алгоритми за класификация, регресия, групиране, намаляване на размерността, избор на модел и предварителна обработка. Той има добра документация и примери за всичко това, но липсва какъвто и да е ръководен работен процес за изпълнение на тези задачи.

Scikit-learn печели най-високи оценки за лекота на разработка, най-вече защото всички алгоритми работят както е документирано, API-тата са последователни и добре проектирани и има малко „несъответствия на импеданса“ между структурите на данните. За мен е удоволствие да работя с библиотека, чиито функции са старателно доработени и чиито грешки са напълно изчистени.

От друга страна, библиотеката не обхваща задълбочено обучение или засилване на обучението, което оставя текущите трудни, но важни проблеми, като точна класификация на изображенията и надежден анализ и превод на езици в реално време. Ясно е, че ако се интересувате от задълбочено обучение, трябва да търсите другаде.

Въпреки това има много проблеми - вариращи от изграждане на функция за прогнозиране, свързваща различни наблюдения, до класифициране на наблюдения, до изучаване на структурата на немаркиран набор от данни - които се поддават на обикновено старо машинно обучение, без да са необходими десетки слоеве неврони, и за тези области Scikit-learn наистина е много добър.

Цена: Безплатен отворен код. 

Платформа: Изисква Python, NumPy, SciPy и Matplotlib. Предлагат се версии за MacOS, Linux и Windows.

Прочетете рецензията ми за Scikit-learn. 

Spark MLlib

Spark MLlib, библиотеката за машинно обучение с отворен код за Apache Spark, предоставя често срещани алгоритми за машинно обучение като класификация, регресия, групиране и съвместно филтриране (но не и дълбоки невронни мрежи). Той също така включва инструменти за извличане на характеристики, трансформация, намаляване на размерите и избор; инструменти за конструиране, оценка и настройка на тръбопроводи за машинно обучение; и помощни програми за запазване и зареждане на алгоритми, модели и конвейери, за обработка на данни и за извършване на линейна алгебра и статистика.

Spark MLlib е написан на Scala и използва пакета за линейна алгебра Breeze. Бризът зависи от netlib-java за оптимизирана числена обработка, макар и в разпределението с отворен код, което означава оптимизирано използване на процесора. Databricks предлага персонализирани клъстери Spark, които използват графични процесори, което потенциално може да ви донесе още 10 пъти подобрение на скоростта за обучение на сложни модели за машинно обучение с големи данни.

Spark MLlib прилага камион от често срещани алгоритми и модели за класификация и регресия, до степен, в която начинаещият може да се обърка, но експертът вероятно ще намери добър избор на модел за данните, които в крайна сметка ще бъдат анализирани. Към това множество модели Spark 2.x добавя важната характеристика на настройката на хиперпараметри, известна още като избор на модел. Настройката на хиперпараметрите позволява на анализатора да настрои мрежа от параметри, оценител и оценител и да позволи на метода за кръстосана проверка (отнемащ време, но точен) или метод за разделяне на проверката на влака (по-бърз, но по-малко точен) да намери най-добрия модел за данни.

Spark MLlib има пълни приложни програмни интерфейси (API) за Scala и Java, предимно пълни приложни програмни интерфейси (API) за Python и схематични частични приложни програмни интерфейси за R. Можете да получите добро усещане за покритието, като преброите пробите: 54 Java и 60 примера за машинно обучение на Scala, 52 машини на Python примери за обучение и само пет R примера. Според моя опит с Spark MLlib е най-лесно да работите с помощта на преносими компютри Jupyter, но със сигурност можете да го стартирате в конзола, ако укротите многословните съобщения за състоянието на Spark.

Spark MLlib доставя почти всичко, което искате, в начина на основно машинно обучение, избор на функции, конвейери и постоянство. Той върши доста добра работа с класификация, регресия, групиране и филтриране. Като се има предвид, че е част от Spark, той има чудесен достъп до бази данни, потоци и други източници на данни. От друга страна, Spark MLlib всъщност не е създаден да моделира и обучава дълбоки невронни мрежи по същия начин като TensorFlow, PyTorch, MXNet и Keras.

Цена: Безплатен отворен код.

Платформа: Spark работи както на Windows, така и на Unix-подобни системи (например Linux, MacOS), с Java 7 или по-нова версия, Python 2.6 / 3.4 или по-нова и R 3.1 или по-нова. За API на Scala Spark 2.0.1 използва Scala 2.11. Spark изисква Hadoop / HDFS.

Прочетете ревюто ми за Spark MLlib.