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

Определите проблему и соберите набор данных:

  • Каковы ваши входные данные?
  • Что вы пытаетесь предсказать?
  • Что это за проблема — Под наблюдением? Без присмотра? Самостоятельный контроль? Обучение с подкреплением?

Помните о гипотезах, которые вы делаете на этом этапе:

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

Выберите показатель успеха:

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

  • Для задач сбалансированной классификации, где все классы равновероятны, точность и ROC-AUC являются общими показателями.
  • Для задач с несбалансированным классом можно использовать Precision-Recall.

Помимо оптимизации метрик, вы можете выбрать удовлетворительную метрику, что означает, что метрика должна соответствовать ожиданиям, установленным вашим бизнесом. Например, время работы модели должно быть менее 100 мс.

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

Определите протокол оценки:

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

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

Не забудьте следовать этому протоколу в своем наборе данных: Training Set - Validation Set - Test Set. Очень важно выбрать проверочные и тестовые наборы из того же распределения, что и обучающий набор, и они должны быть взяты из данных случайным образом.

Проанализируйте и подготовьте свои данные:

Как только вы узнаете what you are training on, what you are optimizing for и how to evaluate your approach, вы почти готовы приступить к обучению моделей. Однако, прежде всего, для лучшего понимания ваших данных вы должны обобщить свои данные и визуализировать их, используя стандартные инструменты matplotlib, ggplot или seaborn. После этого вы должны отформатировать свои данные таким образом, чтобы их можно было передать в модель машинного обучения. Для глубокой нейронной сети необходимо выполнить несколько важных шагов:

  • Во-первых, ваши данные должны быть отформатированы как тензоры.
  • Значения, принимаемые этими тензорами, обычно должны быть масштабированы до малых значений, например в диапазоне [0, 1].
  • Если разные функции принимают значения в разных диапазонах (разнородные данные), данные следует нормализовать.
  • Вы также можете заняться разработкой функций, особенно для проблем с небольшими данными.

Разработайте модель, которая работает лучше, чем базовая:

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

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

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

Масштабирование: разработайте модель, которая соответствует:

Как только вы получили модель, обладающую статистической мощностью, возникает вопрос: достаточно ли мощна ваша модель? Достаточно ли слоев и параметров для правильного моделирования проблемы? Помните, что универсальное противоречие в машинном обучении возникает между оптимизацией и обобщением; идеальная модель — это та, которая стоит прямо на границе между недообучением и переоснащением; недостаточная и избыточная мощность. Чтобы понять, где проходит эта граница, сначала надо ее пересечь. Чтобы выяснить, насколько большая модель вам понадобится, вы должны разработать модель, которая подходит. Это довольно легко:

  • Добавьте слои.
  • Сделайте ваши слои больше.
  • Тренируйтесь для большего количества эпох.

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

Регулируйте свою модель и настройте свои гиперпараметры:

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

  • Если разница между ошибкой человеческого уровня (показатель ошибки Байеса) и ошибкой обучения больше, чем разница между ошибкой обучения и ошибкой валидации, основное внимание следует уделить методам уменьшения погрешности (оптимизации), таким как обучение более крупной нейронной сети. сеть, обучение лучшим алгоритмам оптимизации, проба другой архитектуры или более длительная работа с обучающим набором.
  • Если разница между ошибкой обучения и ошибкой валидации больше, чем разница между ошибкой человеческого уровня и ошибкой обучения, основное внимание следует уделить методам уменьшения дисперсии (обобщению), таким как регуляризация (L1/L2/выпадение), увеличение данных. , настройка гиперпараметров (количество единиц на слой, скорость обучения оптимизатора), итерация по разработке признаков или увеличение обучающей выборки.

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

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

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

  1. Определите проблему и данные, на которых вы будете тренироваться; собирать эти данные или аннотировать их метками, если это необходимо.
  2. Выберите, как вы будете измерять успех в решении вашей проблемы. Какие показатели вы будете отслеживать в своих данных проверки?
  3. Определите свой протокол оценки: задержка проверки? К-кратная проверка? Какую часть данных следует использовать для проверки?
  4. Проанализируйте, а затем подготовьте данные перед подачей в модель машинного обучения.
  5. Разработайте первую модель, которая работает лучше, чем базовая: модель, обладающая «статистической мощностью».
  6. Разработайте модель, которая подходит.
  7. Упорядочите свою модель и настройте ее гиперпараметры в зависимости от производительности данных проверки.

Спасибо за чтение!

Источники:

Книга Франсуа Шолле «Глубокое обучение с помощью Python»
Курс Deeplearning.ai «Структурирование проектов машинного обучения», автор Эндрю Нг

Первоначально опубликовано на gist.github.com.