carefree-learn - это минимальное решение для автоматического машинного обучения (AutoML) для табличных наборов данных на основе PyTorch. Это 2-е место на Global PyTorch Summer Hackathon 2020. Библиотека с открытым исходным кодом, документирована, и вы можете попробовать ее после установки.



Зачем беззаботно учиться?

Если вы знакомы с машинным обучением, возможно, вы уже слышали о scikit-learn и некоторых других фреймворках automl. Создание беззаботного обучения мотивировало двоякое:

  • Используйте PyTorch в области машинного обучения.
  • Обеспечьте действительно БЕСПЛАТНУЮ работу как для пользователей, так и для разработчиков.

Говоря беззаботно, мы имеем в виду, что и использование, и разработка беззаботного обучения могут быть завершены в одной строке кода:

Вы можете возразить, что другие библиотеки, такие как scikit-learn, также поддерживают построение моделей в одной строке кода. Но подумайте о беспорядочных вещах (таких как чтение данных из файлов, изучение данных, выполнение предварительной обработки данных и т. Д.), Которые нам нужно сделать до, которые мы действительно используем эти библиотеки, и добавление алгоритмов в эти библиотеки. часто намного сложнее, чем писать свои собственные. В процессе беззаботного обучения мы очень постарались облегчить вам эти две процедуры.

Беззаботное использование

Как уже упоминалось, другие библиотеки (например, scikit-learn) часто могут поддерживать только массивы numpy или DataFrame в качестве входных данных и имеют довольно много ограничений (например, не могут содержать nan значений). Однако в беззаботном обучении мы изо всех сил старались помочь вам справиться практически с ЛЮБЫМИ типами табличных наборов данных, какими бы грязными и грязными это так. Это означает, что беззаботное обучение фактически обеспечивает сквозной конвейер для табличных наборов данных, включая АВТОМАТИЧЕСКИ обработку:

  • Обнаружение избыточных столбцов функций, которые могут быть исключены (все ОДИНАКОВЫЕ, все РАЗНЫЕ и т. Д.).
  • Определение типов столбцов характеристик (является ли столбец характеристик строковым / числовым / категориальным столбцом).
  • Кодирование строковых столбцов и категориальных столбцов (Embedding или One Hot Encoding).
  • Предварительная обработка числовых столбцов (Нормализовать, Мин. Макс. И т. Д.).
  • Вменение пропущенных значений.
  • И многое другое…

Таким образом, беззаботное обучение возможно напрямую обрабатывать файлы (file-in, file-out):

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

Беззаботное развитие

Благодаря великолепной модульности, обеспечиваемой PyTorch, carefree-learn смог разработать свой конвейер (ориентированный на табличные наборы данных) удобным для пользователя и разработчикам способом.

Базовый компонент в беззаботном обучении называется pipe, что соответствует одной из тех ветвей, которые принимают все / часть входных данных, применяют некоторые transform, извлекают некоторые функции с помощью extractor, а затем загружают итоговая сеть (head) с этими функциями. Вот пример:

Поскольку большинство моделей глубокого обучения (нейронных сетей), используемых в табличных наборах данных, могут быть представлены с помощью pipe, разработчики могут сосредоточиться на реализации одного из его компонентов (а именно extractor и head), вместо того, чтобы заботиться обо всем конвейере.

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

Почему PyTorch?

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

Начало работы с Ирис

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

Мы предоставили полный исходный код здесь, а также блокнот jupyter здесь.

Осмотрите набор данных Iris

Вот некоторая информация, предоставленная официальным сайтом:

This is perhaps the best known database to be found in the pattern recognition literature.
The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant.
Predicted attribute: class of iris plant.

А вот необработанные данные в виде панд:

Вы можете скачать необработанные данные (iris.data) по этой ссылке.

Основные виды использования

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

Что скрывается под капотом, так это то, что carefree-learn попытается автоматически проанализировать iris.data (с помощью carefree-data), разделить данные на обучающий набор и набор проверки, с помощью которых мы будем обучать полностью подключенную нейронную сеть. (fcnn).

Мы можем дополнительно проверить обработанные данные, если хотим знать, как на самом деле беззаботное обучение анализировало входные данные:

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

Более того, выражение normalized означает, что входные функции будут автоматически нормализованы до mean=0.0 и std=1.0:

После обучения работе с файлами программа carefree-learn может также напрямую прогнозировать и оценивать файлы. Мы автоматически выполним синтаксический анализ и нормализацию данных:

Что дает

Бенчмаркинг

Как мы знаем, нейронные сети обучаются с помощью стохастического градиентного спуска (и его вариантов), что вносит некоторую случайность в конечный результат, даже если мы обучаемся на том же самом. набор данных. В этом случае нам нужно повторить одну и ту же задачу несколько раз, чтобы получить смещение и дисперсию наших нейронных сетей. К счастью, компания carefree-learn представила repeat_with API, с помощью которого можно легко достичь этой цели с помощью всего нескольких строк кода:

Что дает

Мы также можем сравнить характеристики разных моделей:

Что дает

Стоит отметить, что беззаботное обучение поддерживает распределенное обучение, что означает, что когда нам нужно выполнить крупномасштабный бенчмаркинг (например, обучить 100 моделей), мы могли бы ускорить процесс за счет многопроцессорной обработки:

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

Однако для набора данных iris запуск распределенного обучения фактически снизит скорость, потому что набор данных iris содержит только 150 образцов, поэтому относительные накладные расходы, вызванные распределенным обучением, будут слишком большими. Дополнительные сведения см. В разделе ВНИМАНИЕ нашей документации.

Расширенный сравнительный анализ

Но этого недостаточно, потому что мы хотим знать, могут ли другие модели (например, модели scikit-learn) достичь большей производительности, чем модели беззаботного обучения. В этом случае мы можем выполнить расширенный тест с помощью вспомогательного класса Experiment.

Обратите внимание, что мы указали run_command="python run_sklearn.py" для задач scikit-learn, что означает, что Experiment попытается выполнить эту команду в текущем рабочем каталоге для обучения моделей scikit-learn. Хорошая новость в том, что нам не нужно указывать какие-либо аргументы командной строки, потому что Experiment обработает их за нас.

Вот как должен выглядеть run_sklearn.py (исходный код):

Определив run_sklearn.py, мы могли бы запускать эти задачи с помощью одной строчки кода:

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

Как мы и ожидали, беззаботные модели сохраняются в zip-файлы, а модели scikit-learn сохраняются в sk_model.pkl файлах. Поскольку эти модели еще не загружены, мы должны вручную загрузить их в нашу среду:

После чего мы, наконец, можем провести бенчмаркинг на этих моделях:

Что дает

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

AutoML на радужной оболочке глаза

Как упоминалось выше, беззаботное обучение на самом деле представляет собой минимальное решение для автоматического машинного обучения (AutoML) для табличных наборов данных. До сих пор мы еще не упоминали о каких-либо компонентах AutoML, поэтому мы покажем, как выполнять AutoML с набором данных Iris в беззаботном обучении, а также как упаковать результаты AutoML в производственную среду.

Поскольку беззаботное обучение предоставило cflearn.Auto API для нестандартного использования, AutoML в режиме беззаботного обучения может быть реализован двумя строками кода:

Мы можем делать прогнозы напрямую с auto.predict:

И, конечно, можно сравнить с другими моделями:

Что дает

Браво! Наша модель AutoML превосходит модели scikit-learn 🥳

Если результат нас устраивает, мы можем упаковать модели в zip-файл.

которые можно легко использовать в наших производственных средах / машинах:

Пожалуйста, обратитесь к нашей документации для более подробной информации.

Вывод

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

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