Эта статья изначально была написана Видуши Мил и размещена в блоге Neptune.

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

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

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

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

  • Найдите и визуализируйте эти эксперименты,
  • Организуйте эксперименты/электронную таблицу так, чтобы все члены команды могли ее понять.
  • Сделайте данные общедоступными.

Это не новая проблема, специалисты по машинному обучению уже давно нуждаются в инструментах для отслеживания и управления экспериментами в одном месте. Есть несколько продуктов, которые решают эту проблему уникальными способами:

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

Он хранит, извлекает и анализирует огромные объемы данных. Внутри есть удобные инструменты для совместной работы, а также отслеживание блокнота Jupyter. По моему опыту, Neptune — самый легкий инструмент управления экспериментами.

Если вы хотите следовать этой статье, сначала создайте бесплатную учетную запись Neptune.

СВЯЗАННЫЕ СТАТЬИ

Отслеживание экспериментов по глубокому обучению с помощью Neptune

Функции отслеживания и совместной работы записных книжек Neptune Jupyter упрощают использование и масштабирование ваших проектов. На самом деле, самое лучшее в Neptune — это то, насколько легко сотрудничать с вашей командой.

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

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

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

Функции записи Neptune позволяют вашей команде просматривать статистику и обрабатывать данные прямо с платформы. Вам не нужно запускать операции Matplotlib вручную, вы можете автоматически просматривать статистику проекта, относящуюся к вашему проекту.

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

Плюсы и минусы ноутбуков Jupyter

Блокноты Jupyter — отличные инструменты, но есть некоторые проблемы, которые немного раздражают при работе с ними. Neptune решает эти проблемы, превращая ноутбуки Jupyter в удобный инструмент.

Разработчики любят проводить эксперименты в блокнотах Jupyter, потому что это проверенный метод демонстрации работы, и они упрощают размещение серверных частей. Это делает их отличными для безопасности и общения в сообществе разработчиков.

Итак, каковы проблемы? Во-первых, вы не можете сотрудничать с несколькими людьми при работе с блокнотом Jupyter. Совместная работа в реальном времени не поддерживается ноутбуками Jupyter, что может быть большой проблемой.

К счастью, Neptune позволяет нескольким разработчикам совместно работать над блокнотами Jupyter в интерактивном режиме. Обмен ссылками позволяет просматривать и загружать блокноты, созданные вашими товарищами по команде. Neptune позволяет обмениваться представлениями экспериментов, блокнотов и проектов, предоставляя URL-адрес определенного представления.

Другая проблема с блокнотами Jupyter — неэффективное построение графиков. Теоретически вы можете копировать и вставлять графики из Jupyter напрямую во внешние редакторы, такие как Powerpoint.

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

Части эксперимента по машинному обучению

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

В словаре говорится, что эксперименты по машинному обучению — это процедуры для проверки гипотезы. Например, лучше ли модель 1, чем модель 2? Оказывают ли гиперпараметры XYZ негативное влияние на ответ ABC?

В своих экспериментах вы имеете дело с переменными, испытаниями и пробными компонентами.

Переменные — это контролируемые факторы, которые могут изменяться и записывать отклики (например, архитектура модели или гиперпараметры).

ЧИТАЙТЕ ТАКЖЕ

Испытания — это просто обучающие итерации на определенном наборе переменных.

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

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

Существует два компонента отслеживания потока машинного обучения: эксперименты и запуски.

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

Прогоны, с другой стороны, соответствуют одному выполнению кода модели. Каждый запуск записывает источник, версию, время начала и окончания, параметры, метрики, теги и артефакты. Источник — это имя записной книжки, которая запустила выполнение, или имя проекта и точка входа для выполнения.

Это не все. Другие важные термины включают в себя:

  • Версия: версия записной книжки при запуске из записной книжки или хэш фиксации Git при запуске из проекта машинного обучения.
  • Время начала и окончания: время начала и окончания прогона.
  • Параметры: параметры модели сохраняются в виде пар ключ-значение. И ключи, и значения являются строками.
  • Метрики: метрики оценки модели, сохраненные в виде пар ключ-значение. Значение является числовым. Каждую метрику можно обновлять в ходе выполнения (например, чтобы отслеживать, как сходится функция потерь вашей модели), а поток машинного обучения записывает и позволяет визуализировать историю метрики.
  • Теги. Запустите метаданные, сохраненные в виде пар ключ-значение. Вы можете обновлять теги во время и после завершения запуска. И ключи, и значения являются строками.
  • Артефакты: выходные файлы в любом формате. Например, вы можете записывать изображения, модели (например, замаринованную модель scikit-learn) и файлы данных (например, файл Parquet) в качестве артефакта.

Учебное пособие: отслеживание экспериментов по глубокому обучению в Jupyter Notebooks с помощью Neptune

Во-первых, давайте создадим эксперимент в Нептуне. Neptune помогает вам управлять экспериментом или отслеживать метаданные эксперимента (такие как версии кода, версии данных, гиперпараметры, среды и метрики).

neptune.create_experiment(
    name = 'experiment-example',
    params={'learning_rate':0.1}
)

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

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

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

Вы можете зарегистрировать простую метрику, такую ​​как точность, с помощью Neptune:

neptune.log_metric('classification_accuracy', 0.99)

Вы также можете регистрировать более сложные метрики, такие как матрица путаницы:

neptune.log_metric('diagnostics', 'confusion_matrix.png')

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

Более продвинутые модели DL переживут сотни эпох. Вручную отслеживать точность, потери пакетов и другие показатели после каждой эпохи невозможно.

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

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

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

Но сначала вы должны создать обратный вызов NeptuneLogger:

from tensorflow.keras.callbacks import Callback
class NeptuneLogger(Callback):
   def on_batch_end(self, batch, logs={}):
       for log_name, log_value in logs.items():
           neptune.log_metric(f'batch_{log_name}', log_value)
   def on_epoch_end(self, epoch, logs={}):
       for log_name, log_value in logs.items():
           neptune.log_metric(f'epoch_{log_name}', log_value)

Затем создайте эксперимент, дайте ему имя и запишите некоторые гиперпараметры.

Здесь мы сделали размер эпохи 7 и размер партии 40.

EPOCH_NR = 7
BATCH_SIZE = 40
neptune.create_experiment(name='keras-metrics',
                         params={'epoch_nr': EPOCH_NR,
                                 'batch_size': BATCH_SIZE},
                         tags=['advanced'],
                         )

Наконец, передайте регистратор Neptune в качестве обратного вызова Keras:

history = model.fit(x=x_train,
                   y=y_train,
                   epochs=EPOCH_NR,
                   batch_size=BATCH_SIZE,
                   validation_data=(x_test, y_test),
                   callbacks=[NeptuneLogger()])

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

Что дальше?

Блокноты Jupyter — отличные инструменты для машинного обучения, но лучший способ работать с ними — использовать такую ​​платформу, как Neptune.

Функции и доступность делают Neptune наименее проблемной платформой на рынке.

Если вы хотите узнать больше об этом и об управлении экспериментами в Neptune, ознакомьтесь со следующими ресурсами:

Это от меня. Спасибо за чтение!

Эта статья изначально была написана Видуши Мил и размещена в Блоге Нептуна. Там вы можете найти более подробные статьи для специалистов по машинному обучению.