Эта статья изначально была написана Камилом Качмареком и Патриком Мизюлой и размещена в блоге Нептуна.

Где создается и обсуждается передовое глубокое обучение?

Одно из первых мест занимает ICLR - ведущая конференция по глубокому обучению, которая прошла 27–30 апреля 2020 года. Как полностью виртуальное мероприятие с более чем 5600 участниками и почти 700 докладами / постерами, его можно назвать большим успехом. Вы можете найти исчерпывающую информацию о конференции здесь, здесь или здесь.

Виртуальные общественные встречи были одной из достопримечательностей ICLR 2020. Мы решили провести нашу собственную программу под названием Инструменты и практики с открытым исходным кодом в современных исследованиях DL. Мы выбрали эту тему, потому что соответствующие инструменты - неизбежная часть исследования глубокого обучения. Достижения в этой области привели к распространению экосистем больших фреймворков (TensorFlow, PyTorch, MXNet), а также небольших целевых инструментов, которые служат конкретным потребностям.

Целью нашего социального мероприятия было встретиться с создателями и пользователями инструментов с открытым исходным кодом и поделиться опытом и впечатлениями с сообществом глубокого обучения. Всего мы собрали более 100 человек, включая специалистов по сопровождению инструментов, которым мы дали короткие промежутки времени для презентации их работ. Мы были удивлены и взволнованы широким разнообразием и креативностью представленных инструментов и библиотек.

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

Инструменты и библиотеки

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

В каждом разделе очень кратко рассказывается о нескольких вещах:

  1. Какую проблему решает инструмент / библиотека?
  2. Как запустить или создать минималистичный пример?
  3. Количество внешних ресурсов, чтобы глубже погрузиться в библиотеку / инструмент.
  4. Профиль авторов, если вы хотите с ними связаться.

Наслаждайся чтением!

AmpliGraph

Модели встраивания графов знаний

Язык: Python

Автор: Лука Костабелло

Твиттер | LinkedIn | GitHub | "Веб-сайт"

Описание

Графы знаний - это универсальный язык для представления сложных систем.

Будь то социальная сеть, набор данных биоинформатики или данные о розничных покупках, моделирование знаний в виде графика позволяет организациям фиксировать закономерности, которые в противном случае были бы упущены.

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

AmpliGraph - это лицензированный для Apache 2 набор моделей нейронного машинного обучения, известный как встраивание графов знаний. Такие модели кодируют узлы и ребра графа в векторах низкой размерности и комбинируют их для предсказания недостающих фактов. Встраивание графов знаний имеет приложения для завершения графов знаний, обнаружения знаний и кластеризации на основе ссылок, и это лишь некоторые из них.

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

Для начала вот минимальный фрагмент кода для обучения модели с использованием набора данных эталонного графика и прогнозирования недостающих ссылок:

from ampligraph.datasets import load_fb15k_237
from ampligraph.latent_features import TransE
# Load the Freebase benchmark dataset FB15K-237
X = load_fb15k_237()
# Initialise a model. Note embeddings will have 20 dimensions only
model = TransE(batches_count=100, epochs=20, k=20, verbose=True)
# Train a model for 20 epochs
model.fit(X['train'])

# Calibrate the output probabilities
model.calibrate(X['valid'], positive_base_rate=0.5)
# Let's see if the model can predict a missing triple.
# We will use the following held-out triple from the dataset test set:
# <St. Louis Rams(/m/06x76) /sports/sports_team/sport American football (/m/0jm_)>
X['test'][42]
# Predict the probability that St. Louis Rams are indeed an American 
# football team. Turns out this has 84% of chances to be true!
model.predict_proba(X['test'][42])
# output is
# array([0.8404526], dtype=float32)

Модели машинного обучения AmpliGraph генерируют вложения графов знаний, векторные представления концепций в метрическом пространстве.

Затем он объединяет вложения с функциями оценки для конкретной модели для прогнозирования невидимых и новых ссылок.

Изначально AmpliGraph был разработан в Accenture Labs Dublin, где он используется в различных промышленных проектах.

Ресурсы и ссылки

GitHub | "Документация"

Automunge

Платформа предварительной обработки табличных данных

Язык: Python

Автор: Николас Тиг

Твиттер | LinkedIn | GitHub | "Веб-сайт"

Описание

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

Другими словами, проще говоря:

  • automunge(.) подготавливает табличные данные для машинного обучения.
  • postmunge(.) последовательно и очень эффективно подготавливает дополнительные данные.

Automunge теперь доступен для установки pip:

pip install Automunge

После установки запустите ноутбук для инициализации:

from Automunge import Automunger
am = Automunger.AutoMunge()

Где выполняется автоматическая обработка составов поездов с параметрами по умолчанию:

train, trainID, labels, \
validation1, validationID1, validationlabels1, \
validation2, validationID2, validationlabels2, \
test, testID, testlabels, \
labelsencoding_dict, finalcolumns_train, finalcolumns_test, \
featureimportance, postprocess_dict \
= am.automunge(df_train)

А для последующей согласованной обработки тестовых данных, используя словарь postprocess_dict, заполненный соответствующим automunge(.) вызовом, запустите:

test, testID, testlabels, \
labelsencoding_dict, postreports_dict \
= am.postmunge(postprocess_dict, df_test)

Пользовательская спецификация преобразований или типов заполнения может выполняться в вызове automunge(.) с помощью параметров assigncat и assigninfill. Например, для набора поездов с заголовками столбцов «столбец1» и «столбец2» можно назначить минимальное и максимальное масштабирование («mnmx») с заполнением ML для столбца 1 и одним горячим кодированием («текст») с заполнением режима для столбец2. Любые столбцы, не указанные явно, будут автоматизированы.

train, trainID, labels, \
validation1, validationID1, validationlabels1, \
validation2, validationID2, validationlabels2, \
test, testID, testlabels, \
labelsencoding_dict, finalcolumns_train, finalcolumns_test, \
featureimportance, postprocess_dict \
= am.automunge(df_train, \
            assigncat = {'mnmx':['column1'], 'text':['column2']}, \
            assigninfill = {'MLinfill':['column1'], 'modeinfill':['column2']})

Ресурсы и ссылки

Сайт » | «GitHub | Краткое изложение

DynaML

Машинное обучение в Scala

Язык: Scala

Автор: Мандар Чандоркар

Твиттер | LinkedIn | GitHub

Описание

DynaML - это набор инструментов на основе Scala для исследований и приложений машинного обучения. Его цель - предоставить пользователю сквозную среду, которая может помочь в:

  1. Разработка / прототипирование моделей.
  2. Работа с большими и сложными конвейерами данных.
  3. Визуализация данных и результатов.
  4. Повторное использование кода в виде скриптов, блокнотов.

DynaML использует сильные стороны языка и экосистемы Scala для создания среды, которая может обеспечить производительность и гибкость. Он основан на отличных проектах, таких как оболочка Scala Ammonite, Tensorflow-Scala и библиотека численных вычислений Breeze.

Ключевым компонентом DynaML является REPL / оболочка с подсветкой синтаксиса и расширенной историей автозаполнения / команд.

Скопируйте и вставьте фрагменты кода в сеанс терминала, чтобы запускать их на лету.

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

Трехмерные диаграммы визуализируются с помощью Java API jzy3d.

Модуль конвейеры данных позволяет удобно создавать конвейеры обработки данных в виде составных и модульных модулей. Создавайте функции и обертывайте их с помощью конструктора DataPipe, а составляйте функциональные блоки с помощью оператора >.

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

Также доступна экспериментальная функция интеграции записных книжек Jupyter: каталог notebooks в репозитории содержит несколько примеров, в которых используется ядро ​​DynaML-Scala Jupyter.

Записная книжка линейной регрессии демонстрирует использование низкоуровневого Tensorflow API для вычисления коэффициентов модели линейной регрессии.

Руководство пользователя содержит обширную поддержку и документацию для изучения и максимально эффективного использования среды DynaML.

Вот несколько интересных приложений, которые подчеркивают сильные стороны DynaML:

Ресурсы и ссылки

GitHub | "Гид пользователя"

Гидра

Диспетчер конфигурации и параметров

Язык: Python

Автор: Омри Ядан

Твиттер | GitHub

Описание

Разработанная Facebook AI, Hydra - среда Python, упрощающая разработку исследовательских приложений, - предоставляет возможность составлять и переопределять конфигурации через файлы конфигурации и командную строку. Он также обеспечивает поддержку развертки параметров, удаленное и параллельное выполнение через плагины, автоматическое управление рабочим каталогом и динамическое завершение вкладок.

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

Базовый пример:

В этом примере используется конфигурация базы данных, но вы можете легко заменить ее моделями, наборами данных или чем угодно еще.

config.yaml:

db:
  driver: mysql
  user: omry
  pass: secret

my_app.py:

import hydra
from omegaconf import DictConfig
@hydra.main(config_path="config.yaml")
def my_app(cfg : DictConfig) -> None:
  print(cfg.pretty())
if __name__ == "__main__":
  my_app()

Вы можете переопределить что угодно в конфигурации из командной строки:

$ python my_app.py db.user=root db.pass=1234
db:
  driver: mysql
  user: root
  pass: 1234

Пример композиции:

Вы можете переключаться между двумя разными конфигурациями базы данных:

Создайте эту структуру каталогов:

├── db
│ ├── mysql.yaml
│ └── postgresql.yaml
├── config.yaml
└── my_app.py

config.yaml:

defaults:
  - db: mysql
# some other config options in your config file.
website:
  domain: example.com

defaults - это специальная директива, указывающая Hydra использовать db / mysql.yaml при составлении объекта конфигурации.
Теперь вы можете выбрать, какую конфигурацию базы данных использовать, из значений и переопределить значения из командной строки:

$ python my_app.py db=postgresql db.timeout=20
db:
  driver: postgresql
  pass: drowssap
  timeout: 20
  user: postgre_user
website:
	domain: example.com

Ознакомьтесь с учебником, чтобы узнать больше.

Кроме того, скоро появятся некоторые интересные новые функции:

  • Строго типизированные конфигурации (структурированные конфигурации)
  • Оптимизация гиперпараметров с помощью плагинов Axe и Nevergrad
  • Запуск AWS через плагин запуска Ray
  • Локальное параллельное выполнение через плагин joblib

И более.

Ресурсы и ссылки

Сайт | GitHub | Учебник | Запись в блоге | Твиттер

Ларк

Бинаризованные нейронные сети

Язык: Python

Автор: Лукас Гейгер

Твиттер | LinkedIn | GitHub

Описание

Larq - это экосистема пакетов Python с открытым исходным кодом для создания, обучения и развертывания бинаризованных нейронных сетей (BNN). BNN - это модели глубокого обучения, в которых активации и веса кодируются не с использованием 32, 16 или 8 бит, а с использованием только 1 бит. Это может значительно ускорить время вывода и снизить потребление энергии, что делает BNN идеальным решением для мобильных и периферийных устройств.

Экосистема Larq с открытым исходным кодом состоит из трех основных компонентов:

  1. Larq - мощная, но простая в использовании библиотека для построения и обучения нейронных сетей с экстремальным квантованием. Он предлагает последовательные и простые API, расширяемые и полностью совместимые с более крупной экосистемой TensorFlow Keras. Это позволяет постепенно внедрять вашу текущую кодовую базу и обеспечивает быструю итерацию при разработке моделей. Хотя Larq в первую очередь ориентирован на BNN, его также можно использовать для обучения сетей с произвольными точными весами и активациями.
  2. Larq Zoo предоставляет эталонные реализации BNN, которые доступны вместе с предварительно обученными весами. Его цель - поощрять воспроизводимые исследования, позволяя исследователям опираться на самую последнюю литературу BNN, не тратя бесконечное количество времени на воспроизведение существующих статей.
  3. Larq Compute Engine - это библиотека вывода для развертывания BNN. Он построен на основе TensorFlow Lite и включает конвертер на основе MLIR для преобразования моделей Larq в файлы FlatBuffer, совместимые со средой выполнения TF Lite. В настоящее время он поддерживает мобильные платформы на базе ARM64, такие как телефоны Android и Raspberry Pi, и обеспечивает современную производительность в скорости вывода на устройстве за счет использования оптимизированных вручную ядер двоичной свертки и оптимизации на уровне сети для моделей BNN.

Мы постоянно создаем еще более совершенные и быстрые модели и расширяем экосистему Larq на новые аппаратные платформы и приложения для глубокого обучения. Например, в настоящее время мы работаем над сквозной интеграцией 8-битного квантования, чтобы вы могли обучать и развертывать смешанные двоичные и 8-битные сети с помощью Larq.

Ресурсы и ссылки

Сайт | GitHub larq / larq | GitHub larq / zoo | GitHub larq / compute-engine | Учебники | Блог | Твиттер

МакКернел

Приблизительное расширение ядра за логарифмически-линейное время

Язык: C / C ++

Автор: Х. де Курто-и-Диас

Твиттер | "Веб-сайт"

Описание

Первая библиотека C ++ с открытым исходным кодом, которая предоставляет как приблизительные значения ядра с помощью случайных функций, так и полноценную среду DL.

McKernel предлагает четыре различных варианта использования:

  1. Автономное освещение с открытым исходным кодом Hadamard. Для использования в: сжатии, шифровании или квантовых вычислениях.
  2. Чрезвычайно быстрые методы ядра. Для использования: везде, где SVM полезен по сравнению с DL. Например, в некоторых приложениях робототехники и машинного обучения в здравоохранении. Другие интересные новые применения включают федеративное обучение и оценку каналов в коммуникациях.
  3. Интеграция методов DL и расширений ядра. Содействовать новым архитектурам DL с лучшими математическими / математическими априориами.
  4. Рамки исследования DL. Для решения нескольких открытых вопросов в ML.

Уравнение, которое управляет всем вычислением, выглядит следующим образом:

Здесь мы впервые используем формализм для объяснения методов DL и ядра (arxiv.org/pdf/1702.08159) с помощью случайных функций. Теоретические основы основаны на четырех гигантах: Гауссе, Винере, Фурье и Кальмане. Строительные блоки были созданы Рахими и Рехтом (NIPS 2007) и Ле и др. (ICML 2013).

Целевой пользователь в виду

Основная аудитория McKernel - исследователи и практики машинного обучения в области робототехники, машинного обучения для здравоохранения, обработки сигналов и связи, которые ищут эффективную и быструю реализацию C ++. В таком сценарии большинство библиотек DL не удовлетворяют эту конкретную потребность, поскольку они в основном полагаются на высокоуровневые реализации на Python. А также люди в более широком сообществе ML и DL, которые пытаются придумать лучшие архитектуры NN, используя методы ядра.

Вот очень простой практический пример, позволяющий быстро запустить библиотеку:

Что дальше?

Сквозное обучение, обучение под самоконтролем, метаобучение, интеграция со стратегиями развития, NAS существенно сокращает пространство поиска,…

Ресурсы и ссылки

GitHub | Полная презентация

SCCH Training Engine

Автоматизация процедур разработки электронного письма

Язык: Python

Автор: Наталья Шепелева

Твиттер | LinkedIn | "Веб-сайт"

Описание

Что это?

Типичная разработка конвейера Deep Learning вполне стандартна: предварительная обработка данных, разработка / реализация задач, обучение и оценка. Тем не менее, его развитие от проекта к проекту требует участия разработчика на каждом этапе процесса разработки. Это приводит к повторению одних и тех же действий, копипасту кода и, в конце концов, приводит к ошибкам.

Целью SCCH Training Engine является унификация и автоматизация процедуры разработки DL для двух самых популярных фреймворков PyTorch и TensorFlow. Единая запись позволяет минимизировать время разработки и обезопасить от ошибок разработки.

Для кого?

Гибкая архитектура SCCH Training Engine имеет 2 уровня взаимодействия с пользователем:

Базовый. На этом уровне пользователю необходимо предоставить свои данные и определить параметры обучения в файле конфигурации. После этого все процессы, включая обработку данных, обучение и проверку, будут выполняться автоматически. В результате будет предоставлена ​​обученная сеть в одной из определенных структур.

Передовой. Благодаря модульной концепции двигателя, пользователь может модифицировать двигатель в соответствии со своими потребностями, используя свои собственные модели, функции потерь и точности. Такая модульность позволяет добавлять дополнительные функции, не затрагивая основной конвейер.

Что это может делать?

Текущие функции:

  • работает на TensorFlow и PyTorch
  • стандартизированный конвейер парсинга данных из разных форматов
  • стандартизированный процесс обучения и проверки
  • поддерживает задачи классификации, сегментации и обнаружения
  • поддерживает перекрестную проверку

Особенности в разработке:

  • гиперпараметрический поиск параметров тренировки
  • загрузка весов и тренировка с заданной контрольной точки
  • Поддержка архитектуры GAN

Как это работает?

Чтобы увидеть SCCH Training Engine в работе, вам нужно сделать 2 шага:

  1. Просто скопируйте репозиторий и установите требования с pip install requirements.txt
  2. Запустите python main.py, чтобы увидеть игрушечный пример MNIST, обработанного и обученного на LeNet-5.

Всю информацию о том, как создать файл конфигурации и как использовать расширенные функции, можно найти на нашей странице GitHub.

Стабильный выпуск с основными функциями: конец мая 2020 г.

Ресурсы и ссылки

GitHub | "Веб-сайт"

Токенизаторы

Токенизаторы текста

Язык: Rust с Python API

Автор: Энтони Мои

Твиттер | LinkedIn | GitHub

Описание

Huggingface / tokenizers обеспечивает доступ к современным токенизаторам с упором на производительность и универсальность. Это упрощает обучение новых токенизаторов и их использование. Независимо от того, являетесь ли вы исследователем НЛП или практикующим НЛП, токенизаторы могут вам помочь.

Ключевая особенность:

  • Чрезвычайно быстро: токенизация не должна быть узким местом в вашем конвейере НЛП, и вам не придется предварительно обрабатывать наборы данных. Благодаря встроенной реализации в Rust токенизация гигабайт текста занимает всего секунды.
  • Смещения / выравнивание: обеспечивает отслеживание выравнивания даже при сложной обработке нормализации. Это позволяет легко извлекать текст для таких задач, как NER или ответы на вопросы.
  • Предварительная обработка: позаботится о любой предварительной обработке, необходимой перед загрузкой вашей языковой модели (усечение, заполнение, добавление специальных токенов и т. д.).
  • Простое обучение. Обучите любой токенизатор на новом корпусе. Например, обучение токенизатора для BERT на новом языке никогда не было таким простым.
  • Многоязычный: привязки для нескольких языков. Прямо сейчас вы можете начать использовать его с Python, Node.js или Rust. Еще не все!

Пример:

И так далее:

  • Однофайловая сериализация и однострочная загрузка любого токенизатора.
  • Поддержка Unigram.

В Hugging Face наша миссия - помочь продвигать и демократизировать НЛП для всех.

Ресурсы и ссылки

GitHub huggingface / трансформеры | GitHub huggingface / токенизаторы | Твиттер

Резюме

Прежде всего:

Спасибо, Энтони, Х. де Курто-и-Диас, Лука, Лукас, Мандар, Наталья, Николас и Омри за ваши усилия, которые вы вложили в этот пост!

Без вас он никогда бы не был создан.

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

Мы настоятельно рекомендуем попробовать их, так как они могут упростить и (потенциально) ускорить ваши исследования - как в академической, так и в промышленной среде.

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

Если вас интересуют доклады, представленные на конференции ICLR 2020, проверьте эти сообщения:

Эта статья изначально была написана Камилом Качмареком и Патриком Мизюлой и размещена в блоге Neptune, где вы можете найти более подробные статьи для практиков машинного обучения.