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

Источник: https://www.youtube.com/watch?v=1waHlpKiNyY
Канал: DeepLearning.AI
Опубликовано: 25.08.2017

---

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

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

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

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

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

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

* При миллионе примеров под Dev и Test наборы достаточно выделить по 10 000 штук (по 1% на каждый).
* Если данных ещё больше, доля Dev и Test наборов может снизиться до 0,25% или даже 0,1% от общего массива.

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

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

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

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

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

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