В этом разделе подробно описан процесс обучения.
Оптимизация входного конвейера
Резюме: Причины и способы вмешательства в конвейеры, связанные с вводом, во многом зависят от задачи. Используйте профилировщик и ищите распространенные проблемы.
Используйте соответствующий профилировщик, например один из следующих, для диагностики конвейеров, связанных с вводом:
- Перфетто для JAX
- Профилировщик TensorFlow для TensorFlow.
В конечном счете, конкретные причины и меры вмешательства во многом зависят от задачи. Более широкие инженерные соображения (например, минимизация занимаемого места на диске) могут ухудшить производительность входного конвейера.
Ниже приведены распространенные причины конвейеров, связанных с вводом:
- Данные не размещаются совместно с процессом обучения, что приводит к задержке ввода-вывода. Например, чтение обучающих данных по сети может вызвать задержку ввода-вывода.
- Дорогая предварительная обработка данных в режиме онлайн. Рассмотрите возможность предварительной обработки в автономном режиме и сохранения результатов.
- Непреднамеренные барьеры синхронизации, мешающие предварительной выборке конвейера данных. Например, при синхронизации метрик между устройством и хостом в CommonLoopUtils .
Мы предлагаем следующие меры для конвейеров, связанных с вводом:
- Инструментальный входной конвейер для предварительной выборки примеров (например, tf.data.Dataset.prefetch ).
- Удалите неиспользуемые функции и метаданные из каждого из них как можно раньше.
- Увеличьте репликацию количества заданий, генерирующих примеры для входного конвейера, например, с помощью сервиса tf.data .
Оценка производительности модели
Сводка: Запускайте оценку в пакетах большего размера, чем при обучении. Выполняйте оценки через регулярные интервалы времени, а не через регулярные промежутки времени.
Настройки оценки
Для оценки производительности ваших моделей вы можете использовать следующие настройки:
- Онлайн-оценка : сбор показателей, когда модель выполняет прогнозы в производственной среде. Онлайн-оценка обычно обеспечивает наиболее реалистичную оценку качества модели, поскольку она соответствует тому, как модель будет использоваться.
- Офлайн-оценка . Собирайте метрики, когда модель запускается в автономном режиме обучения, проверки или тестовых наборов, репрезентативных для производственной среды. В зависимости от проблемы автономная оценка может быть довольно сложной и дорогостоящей в вычислительном отношении.
- Периодические оценки . Во время обучения модели собирайте показатели, которые могут быть прокси для автономной оценки, и/или на подмножестве данных, используемых в автономной оценке. Периодические оценки являются наиболее практичным и экономичным выбором, но они не могут полностью отражать производственную среду. Стремитесь использовать удобный прокси-сервер для автономной оценки, не жертвуя при этом надежностью сигнала, полученного во время обучения.
Настройка периодических оценок
Мы рекомендуем проводить периодические оценки во время обучения по следующим причинам:
- Отслеживать прогресс обучения в режиме реального времени .
- Чтобы облегчить выбор контрольной точки ретроспективной модели.
- Изучить кривые обучения в конце обучения .
Самая простая конфигурация — выполнять обучение и периодические оценки в одном и том же вычислительном экземпляре, периодически чередуя обучение и оценку. В этом случае размер пакета, используемого для проведения оценок, должен быть по крайней мере таким же, как размер пакета, используемого для обучения. Это связано с тем, что вам не нужно поддерживать активацию модели во время оценки, что снижает вычислительные требования для каждого примера.
Выполняйте периодические оценки через регулярные интервалы времени, а не через определенные промежутки времени. Оценка на основе временных интервалов может затруднить интерпретацию кривых обучения, особенно когда обучение может страдать из-за вытеснения заданий обучения, проблем с задержкой в сети и т. д.
Периодичность показателей проверки и тестирования (при использовании перетасованного обучающего набора, проверочного набора, разделения тестового набора) может указывать на такие ошибки реализации, как:
- Тестовые данные перекрываются с обучающими данными.
- Данные обучения не перемешиваются должным образом.
Оценка через регулярные интервалы времени может облегчить обнаружение этих проблем.
Частичные партии могут возникать, когда оценочные наборы не делятся на размер партии. Убедитесь, что дополненные примеры правильно взвешены (как в случае средневзвешенного значения по примерам, вычисляющего средние потери по партии), чтобы предотвратить смещение функции потерь под их влиянием. Часто этим дополненным примерам можно присвоить нулевой вес.
Сохраняйте достаточно информации для каждой оценки для поддержки автономного анализа. В идеале сохраните прогнозы на выборке отдельных примеров, поскольку они могут оказаться неоценимыми для отладки. Создание артефактов, таких как SavedModels, упрощает проверку модели после завершения заданий оценки.
Выбор образца для периодической оценки
Задание периодической оценки может выполняться недостаточно быстро, чтобы вычислить метрики для всего набора автономных оценок за разумный промежуток времени. Эта проблема часто требует выборки данных для периодической оценки. При построении выборочного набора данных учитывайте проблемы с размером выборки и особые проблемы, связанные с несбалансированными наборами данных.
Размер выборки
Убедитесь, что производительность, рассчитанная на выборочном наборе данных, используемом периодическим заданием, соответствует производительности всего автономного набора оценок; то есть убедитесь, что между выборочным набором данных и полным набором данных нет перекоса.
Набор данных, который вы используете для периодической оценки, должен быть одним из следующих:
- Достаточно маленький, чтобы легко генерировать прогнозы модели по всей ее полноте.
- Достаточно большой, чтобы выполнить оба следующих действия:
- Точно измерить улучшения модели; то есть измерения не должны быть перегружены шумом меток.
- Последовательно проводите несколько таких оценок в ходе испытаний и при этом получайте точные оценки. То есть достаточно большим, чтобы избежать адаптивного «подгонки» к проверочному набору с течением времени таким образом, чтобы это не обобщалось на отложенный тестовый набор. Однако это соображение редко имеет практическое значение.
Несбалансированные наборы данных
Для несбалансированных наборов данных производительность редких классов меньшинств часто бывает зашумленной. Для наборов данных с небольшим количеством примеров меньшинства регистрируйте количество правильно предсказанных примеров, чтобы получить более полное представление о повышении точности. Например, улучшение чувствительности на 0,05 звучит захватывающе, но было ли это улучшение только результатом того, что еще один пример оказался верным?
Сохранение контрольных точек и ретроспективный выбор лучшей контрольной точки.
Краткое описание: Запустите тренировку на фиксированное количество шагов и ретроспективно выберите лучшую контрольную точку из прогона.
Большинство фреймворков глубокого обучения поддерживают контрольные точки модели. То есть текущее состояние модели периодически сохраняется на диск. Контрольные точки позволяют обучающему заданию быть устойчивым к вычислению прерываний экземпляра. Лучшая контрольная точка часто не является последней контрольной точкой, особенно когда производительность набора проверки не продолжает расти с течением времени, а скорее колеблется вокруг определенного значения.
Настройте конвейер для отслеживания N лучших контрольных точек, просмотренных во время обучения. В конце обучения выбор модели просто означает выбор лучшей контрольной точки. Мы называем этот подход ретроспективным выбором оптимальной контрольной точки . Поддержка предполагаемой ранней остановки обычно не требуется, поскольку вы заранее определяете пробный бюджет и сохраняете N лучших контрольных точек, замеченных на данный момент.
Настройка отслеживания экспериментов
Резюме: При отслеживании различных экспериментов отслеживайте ряд важных моментов, таких как лучшая производительность контрольной точки в исследовании и краткое описание исследования.
Мы рекомендуем отслеживать результаты эксперимента в электронной таблице. Наши таблицы часто содержат следующие столбцы:
- Название исследования
- Ссылка туда, где хранится конфиг для исследования.
- Примечания или краткое описание исследования.
- Количество проведенных испытаний
- Производительность на проверочном наборе лучшей контрольной точки в исследовании.
- Конкретные команды воспроизведения или примечания о том, какие неотправленные изменения необходимы для запуска обучения.
Найдите удобную систему отслеживания, которая фиксирует хотя бы перечисленную выше информацию. Неотслеживаемых экспериментов могло бы и не быть.
Подробности реализации пакетной нормализации
Резюме: В настоящее время вы часто можете заменить пакетную нормализацию на LayerNorm, но в тех случаях, когда вы не можете выполнить эту замену, при изменении размера пакета или количества хостов возникают сложные детали.
Пакетная нормализация нормализует активации, используя их среднее значение и дисперсию по сравнению с текущей партией. Однако при настройке нескольких устройств эта статистика различается на каждом устройстве, если она не синхронизирована явно. Отдельные отчеты (в основном на ImageNet) показывают, что вычисление этой нормализующей статистики с использованием всего ~64 примеров на практике работает лучше. (См. описание нормализации призрачных пакетов в разделе «Обучайтесь дольше, обобщайте лучше: устранение пробела в обобщении при обучении нейронных сетей большими партиями» .) Разделение общего размера пакета и количества примеров, используемых для расчета статистики норм пакета, особенно полезно для размера пакета. сравнения.
Реализации нормализации призрачных пакетов не всегда правильно обрабатывают случай, когда размер пакета для каждого устройства превышает размер виртуального пакета. В этом случае вам потребуется выполнить подвыборку партии на каждом устройстве, чтобы получить необходимое количество статистических примеров нормы партии.
Экспоненциальные скользящие средние (EMA), используемые при пакетной нормализации в тестовом режиме, представляют собой просто линейную комбинацию обучающей статистики. Поэтому вам нужно только синхронизировать эти EMA перед сохранением их в контрольных точках. Однако некоторые распространенные реализации пакетной нормализации не синхронизируют эти EMA и сохраняют только EMA с первого устройства.
Рекомендации по многохостовым конвейерам
Резюме: обучение на нескольких хостах позволяет очень легко вносить ошибки при ведении журналов, оценках, генераторах случайных чисел, контрольных точках и сегментировании данных!
Для многохостовых конвейеров выполните следующие действия:
- Убедитесь, что конвейер ведет журналирование и проверяет контрольные точки только на одном хосте.
- Синхронизируйте статистику пакетной нормализации между хостами перед оценкой или установкой контрольных точек.
- Разделяйте файлы данных между хостами, поскольку это обычно повышает производительность.
Критично: убедитесь, что у вас есть начальные числа RNG, одинаковые на всех хостах (для инициализации модели), а также начальные числа, которые различаются на разных хостах (для перетасовки/предварительной обработки данных). Поэтому обязательно пометьте их соответствующим образом.