Несмотря на то, что Julia все еще относительно молодой и перспективный язык, иногда он просто поражает своей не по годам зрелой экосистемой. Особенно это проявляется в области машинного обучения. И, хотя другие языки, например Python, могут похвастаться большим количеством проработанных пакетов для этой области, соответствующие им аналоги в Julia определенно заслуживают нашего внимания. Во-первых, эти пакеты написаны на быстром высокоуровневом языке, а во-вторых, они представляют собой великолепные компоненты ПО, простые в применении, независимо от того, из какого языка они используются. 

Многие из этих пакетов задействуют преимущества выразительного синтаксиса Julia, а также доступные в его базе функции для выполнения схожих задач с разными типами при помощи полиморфной диспетчеризации. Поэтому переключаться между пакетами становится проще простого, чего обычно не встретишь в других языках программирования. А еще поражает тот факт, что многие пакеты МО в Julia не так уж велики, поскольку зачастую нет необходимости писать лишний код для обработки статистики. 

Flux

Во главе нашего списка располагается основной пакет для машинного обучения в Julia — Flux.jl.

В данном языке он обычно используется как уровень абстракции для создания нейронных сетей. Flux.jl входит в число моих любимых пакетов, и он был одним из первых, с которыми я познакомился, начиная работу с Julia. Его огромным преимуществом является невероятно маленький размер. Он обеспечивает легковесные абстракции поверх и без того фантастической вычислительной базы кодаAD и GPU. Кстати, я ведь еще вам не сказал, что у Flux нереальная поддержка CUDA! Параллельное вычисление — это всегда большой плюс, но благодаря дополнительной невероятной работе, проделанной с JuliaGPU, сочетание видеокарты Nvidia и Flux стало ничем иным, как воплощенной мечтой инженера по машинному обучению. 

Легковесность Flux позволяет прекрасно использовать его на серверах, так как он не займет много места, и его запросто можно поместить в крошечные виртуальные среды при помощи Pkg. Подводя итоги этого раздела, отметим также, что Flux портативен. Он на 100% написан на Julia, что является несомненным дополнительным бонусом, поскольку вам не придется использовать чужой синтаксис или пакеты вроде CSyntax для работы с ним. 

Merlin.jl

Представляю вашему вниманию Merlin — еще один фреймворк для глубокого обучения, предназначенный для создания нейронных сетей. Merlin.jl является пакетом, который многие разработчики могли упустить из виду. А зря, поскольку это просто необыкновенный инструмент, который помог мне сэкономить так много времени в самых разных ситуациях. Подобно Flux, Merlin относительно легкий и написан на чистом Julia. При выполнении многих операций он опережает Flux, но это совсем не означает, что он всегда будет быстрее. 

Как и в случае с Flux, Merlin имеет встроенную GPU поддержку с CUDA. Но это не всё. Модели Merlin обычно отличаются от моделей Flux способностью к более быстрому развертыванию. Я не утверждаю, что процесс развертывания Flux сопряжен с большими трудностями, но тем не менее это нелегко. Поэтому, если вы планируете развернуть API, использующее нейронную сеть, при помощи Genie и Julia, я бы посоветовал выбрать Merlin. Помимо всех выше перечисленных превосходных достоинств, он также включает маленькую дистрибутивную библиотеку. 

KNet.jl

Знакомьтесь, Knet, еще один подобный фреймворк, но с небольшой особенностью. Он был создан в университете Коч (Стамбул). Вследствие чего, данный пакет, похоже, намного лучше поддерживается, чем большинство его аналогов в нашем списке, по обыкновению настраиваемых горсткой энтузиастов. Также в отличие от Flux и Merlin, пакет Knet немного тяжелее. Кроме этого, он написан не чисто на Julia, но и на других языках, таких как C и MATLAB, выполняющихся под кодом Julia. 

Однако следует отметить, что только очень малая часть Knet, а именно 1,8%, написана на C и MATLAB. Остается добавить, что из всего нашего списка Knet лучше подойдет новичкам, поскольку очень прост в использовании. 

Признаться, были у меня сомнения — добавлять Lathe в этот список или нет, из-за некоторого предубеждения относительно него, поскольку 

Я творец.  

Однако было бы глупо не внести его в список, ибо он предлагает так много возможностей. Прежде всего, Lathe сопровождается довольно большой библиотекой статистики, включающей хи-квадрат тесты, байесовскую статистику, t-тесты, f-тесты и даже малоизвестные тесты по критерию знаков. Более того, в него также включена проверка с модулем статистики, в котором есть метрики точности для непрерывных и категориальных прогнозов. И наконец, Lathe.jl включает небольшую скромную библиотеку дистрибутивов. 

Lathe также содержит такое количество инструментов препроцессинга, какое вы вряд ли могли ожидать от незрелого пакета. В качестве хороших примеров можно отметить масштабные преобразователи признаков, разделение тестирования и обучения, а также категориальное кодирование. Кроме всего перечисленного, Lathe содержит краткий, но замечательный модуль для загрузки данных в Julia. Так что, если понадобиться загрузить в него различные изображения или другие аналогичные данные, можете смело использовать эти инструменты. 

В довершение всего у Lathe есть постоянно расширяющаяся библиотека модулей МО и даже поддержка для создания сверточных нейронных сетей. Он содержит конвейерный фреймворк, который сильно упрощает развертывание модели Lathe с сериализацией JLD2. Данный пакет также написан на чистом Julia и имеет довольно основательную документацию (хотя грядет ее значительное обновление в версии 0.1.2, в котором будут пересмотрены строки документации). Можно сказать, что если Flux — это ничто иное, как TensorFlow для Julia, то Lathe — это ее Sklearn. А значит, он весьма содержателен и предоставляет все необходимые инструменты для работы. Более того, благодаря простоте в использовании, Lathe будет легко освоить даже начинающим. 

Ознакомиться с этим пакетом вы можете здесь.

MLBase.jl

MLBase.jl является еще одним модулем Julia, в основе которого лежат принципы, схожие с Sklearn в Python. Он включает инструменты для обобщенной обработки данных, такие как масштабные преобразователи признакови кодировщики, а также оценочную классификацию и проверку. У этого пакета есть еще одна уникальная и полезная возможность — настройка модели.

Настройка модели MLBase позволит вам невероятно быстро оптимизировать гиперпараметры должным образом. Как вы уже, возможно, догадались, MLBase.jl полностью написан на Julia. И это самый легкий пакет в нашем списке, к тому же он прост в использовании, так что может стать еще одной находкой для новичков. 

Вот и состоялось знакомство с одними из лучших модулей машинного обучения, которые есть в распоряжении у каждого разработчика Julia. Учитывая, что некоторые из них предназначены для разных целей, оптимальный план действий будет состоять в подборке необходимых возможностей из каждого пакета. Выбирая модуль для начала работы, можете рассмотреть: 

  • MLBase.jl
  • Lathe.jl
  • Knet.jl

После выбора нужного пакета желательно определиться, для какой цели он вам нужен, так как каждый из модулей обладает своими уникальными возможностями и в зависимости от вашей ситуации может оказаться вам полезен или нет. И хотя экосистема Julia не такая сформировавшаяся, как у гиганта Python, но тем и интересней работать с этим языком. Многие люди внесли неоценимый вклад в его развитие и, что наиболее важно, в науку о данных в целом. И пусть у Julia нет такого немыслимого количества потрясающих модулей, как у других языков, но те пакеты, которыми он обладает, уже хорошо разработаны и только в начале своего пути к совершенствованию. 

Читайте также:


Перевод статьи Emmett Boudreau: Awesome Julia Machine-Learning Packages Everyone Should Try!

Предыдущая статьяАнализ моделей машинного обучения при помощи Imandra
Следующая статьяЧто такое тензор?