Как эффективно разделять данные для обучения нейросетей?

DeepLearning.AI 324 тыс. 12 мин 2 мин 25.08.2017
Главное

Искусство итераций: Оптимизация наборов данных для глубокого обучения 0:00

Разработка нейронных сетей — это высокоитеративный процесс, требующий постоянной настройки гиперпараметров: количества слоёв, скрытых нейронов, функций активации и скорости обучения. По мнению экспертов DeepLearning.AI, на начальных этапах работы с приложением практически невозможно с первой попытки угадать оптимальные конфигурации, поэтому успех проекта напрямую зависит от того, насколько эффективно разработчик может проходить цикл «идея — эксперимент — анализ результатов». Интуиция, наработанная в одной области (например, NLP), часто не переносится на другие (например, компьютерное зрение), так как оптимальный выбор зависит от объёма данных, входных признаков и конфигурации вычислительных мощностей.

🛠 Как правильно разделить данные 3:45

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

  1. Обучающий набор (Training set): используется для непосредственного обучения алгоритмов.
  2. Разработческий набор (Dev set / Validation set): используется для оценки производительности различных моделей и итеративного выбора лучшей конфигурации.
  3. Тестовый набор (Test set): предназначен для получения несмещенной оценки того, как финальная модель работает на «невиданных» данных.

В эпоху «малых данных» общепринятой практикой считалось разделение в пропорциях 70/30 или 60/20/20. Однако в эпоху Big Data, когда количество примеров достигает миллионов, такие пропорции стали неактуальны. Сегодня для оценки достаточно гораздо меньшего процента данных, что позволяет отдавать под обучение практически весь доступный объём:

📉 Проблема несовпадающих распределений 8:09

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

Основное правило, которому рекомендует следовать автор, гласит: разработческий (Dev) и тестовый (Test) наборы данных всегда должны принадлежать к одному и тому же распределению. Это критически важно, так как вы будете постоянно оптимизировать модель под Dev-набор, и важно, чтобы эти улучшения транслировались в реальные результаты. Обучающий набор при этом может быть «грязным» или собранным из других источников (например, парсинга веб-страниц) — главное, чтобы алгоритм получал достаточно данных для обучения.

⚠️ Можно ли обойтись без тестового набора? 10:09

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

Однако существует риск: если использовать Dev-набор для итераций, а затем называть его «тестовым», происходит «подгонка» (overfitting) модели под него, и результаты перестают быть репрезентативными. Многие команды по привычке называют свой Dev-набор «тестовым» (train/test split), что является терминологической ошибкой, но допустимо, если команда осознает риски переобучения и не требует строгого соблюдения чистоты эксперимента.

💬 Цитаты

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

Автор курса 1:03

«Интуиция из одной области применения часто не переносится на другие области применения.»

Автор курса 2:49
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Гиперпараметры
Настройки конфигурации нейронной сети (количество слоев, скорость обучения и др.), задаваемые до начала обучения.
Dev set
Разработческий набор данных, используемый для оценки и сравнения моделей в процессе итераций.
Overfitting
Состояние, при котором модель слишком сильно подстраивается под конкретный набор данных, теряя способность к обобщению.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект DeepLearning.AI machine learning hyperparameter tuning training set dev set