TL;DR Deep Learning Tuning Playbook

TL;DR Deep Learning Tuning Playbook

Egor

На днях появился Deep Learning Tuning Playbook. Это гайд, как выстроить итеративный процесс тюнинга вашей модели. Он достаточно объемный, поэтому я сделал TL;DR.

Гайд предполагает, что:

  • Задача - supervised learning;
  • У вас адекватно сформулирована задача (вы не считаете площадь лесного массива классификацией на 100к классов);
  • Данные достаточно чистые, чтобы был смысл что-то обучать;
  • У вас выбраны метрики, которые коррелируют с метриками на проде;
  • Вы можете обучать и тестировать модели, при изменении гиперпараметров.


Бейзлайн

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

В него входят:

Выбор архитектуры модели

Начните с модели (семейства моделей), которая точно работает. В идеале найти статью, в которой успешно решается ваша (близкая к вашей) задача, и взять модель оттуда.

Выбор оптимизатора

Начните с самого популярного оптимизатора для вашего типа задачи. Помните, что важны все параметры, а не только learning rate. Чем более попсовый оптимизатор, тем сложнее его тюнить. Ребята рекомендуют начать с SGD, Adam или NAdam.

Выбор батчсайза

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


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

  1. Определение цели на раунд экспериментов;
  2. Определение набора экспериментов;
  3. Изучение результатов, чтобы углубить понимание проблемы;
  4. Принятие/отвержение новой конфигурации.

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

Определение цели на раунд экспериментов

Для каждого раунда должна быть определена понятная и достаточно узкая цель, чтобы можно было перебрать параметры. Например,

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

Определение набора экспериментов

Определите scientific, nuisance и fixed гиперпараметры:

  • Scientific - эффект которых на качество модели мы хотим узнать (например, тип оптимизатора, наличие дропаута, тип препроцесинга и др.);
  • Nuisance - тот, который нужно затюнить, чтобы честно сравнить scientific параметр (например, learning rate может отличаться для разных оптимизаторов, чтобы модель сошлась за определенное число шагов);
  • Fixed - часть nuisance параметров, которые меньше всего влияют на наш scientific. Если бы у нас было бесконечное число ресурсов, то все fixed параметры были бы nuisance.

Для каждого scientific параметра определите область поиска из nuisance. Ребята советуют использовать quasi-random search для подбора параметров.

Изучение результатов

Перед тем, как определить лучший из scientific гиперпараметров проверьте:

  1. Достаточно ли широка область поиска для каждого nuisance параметра;
  2. Проверино достаточное число значений nuisance параметров;
  3. Есть ли проблемы со сходимостью.

Если есть положительные ответы, нужно подправить область поиска и повторить.

Принятие/отвержение новой конфигурации

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

Report Page