Validation Data
Валидационные данные — это отложенная выборка, которую оценивают в ходе разработки, чтобы настраивать гиперпараметры, выбирать контрольные точки и выявлять переобучение до финального тестирования.
Валидационные данные — это часть размеченных данных, отложенная от обучения и многократно оцениваемая в процессе разработки для сравнения моделей, настройки гиперпараметров, выбора чекпойнтов и выявления переобучения. Модель не обновляет на этих данных свои веса, поэтому оценка на валидации показывает, насколько хорошо усвоенное на обучающих данных переносится на незнакомые изображения. Валидационная выборка и выборка для разработки (dev) — синонимы. Каждое решение, принятое на основе оценок валидации, немного сильнее подгоняет модель под конкретное разбиение, поэтому для итоговой непредвзятой оценки отдельно оставляют тестовую выборку.
Разделение на обучающую, валидационную и тестовую выборки#
Размеченный датасет обычно делят на три части:
- Обучающая выборка: Примеры, на которых оптимизатор подбирает веса; обычно она составляет от 70 до 80 процентов данных.
- Валидационная выборка: На ней оценивают модель после запусков обучения или эпох, чтобы принимать решения о таких параметрах, как скорость обучения, размер модели, интенсивность аугментации и момент остановки обучения.
- Тестовая выборка: Ее оценивают один раз после фиксации всех решений, чтобы сообщить ожидаемую производительность в реальных условиях.
Для датасетов с тысячами изображений распространены разбиения 70/15/15 или 80/10/10. Для надежных оценок очень большим датасетам требуется меньшая доля данных: в ImageNet-1k для валидации отложено 50 000 изображений, а для обучения используется 1 281 167 изображений. Поскольку метки тестовой выборки не опубликованы, точность на ImageNet обычно оценивают на этой валидационной выборке, которая в таком случае служит тестовой.
Полезная валидационная выборка соответствует данным, с которыми модель столкнётся при развёртывании, и не пересекается с обучающей выборкой. Случайное разделение на уровне изображений приводит к утечке информации, когда несколько изображений сняты в одном видео, с одним пациентом или в одном месте: модель может распознать сцену вместо объекта. Разделение по группам, например по пациенту или сеансу записи, предотвращает такую утечку данных.
Настройка гиперпараметров и выбор модели#
Веса обучаются с помощью градиентного спуска, а гиперпараметры выбирают так: обучают несколько кандидатов и оставляют модель с наилучшей оценкой на валидации. Для этого нельзя использовать оценки на обучающей выборке, потому что более крупные модели и модели с более долгим обучением почти всегда лучше подгоняются под обучающие данные. Приведенный ниже скрипт scikit-learn подбирает глубину дерева решений на встроенном датасете цифр:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Split 1,797 digit images 60/20/20 into training, validation, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=0, stratify=y)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=0, stratify=y_rest)
# Fit one model per candidate tree depth and score each on the validation set
val_scores = {}
for depth in (2, 4, 8, 16):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
val_scores[depth] = model.score(X_val, y_val)
print(f"depth {depth}: train {model.score(X_train, y_train):.3f}, validation {val_scores[depth]:.3f}")
# Refit the winner and score the test set exactly once
best = max(val_scores, key=val_scores.get)
final = DecisionTreeClassifier(max_depth=best, random_state=0).fit(X_train, y_train)
print(f"Chosen depth {best}: test accuracy {final.score(X_test, y_test):.3f}")Точность на обучающей выборке продолжает расти с увеличением глубины и достигает 1.000 при глубине 16, тогда как точность на валидационной выборке достигает максимума 0.836 при глубине 8, а при глубине 16 падает до 0.825, поскольку дерево начинает запоминать примеры. Валидация позволяет выбрать глубину 8; на нетронутой тестовой выборке такая модель получает оценку 0.853.
Ранняя остановка и выбор чекпойнта#
В циклах обучения глубоких нейронных сетей валидационную выборку обычно оценивают после каждой эпохи. Функция потерь на обучении продолжает снижаться по мере того, как сеть все точнее подстраивается под обучающие данные, но функция потерь или точность на валидации в какой-то момент перестает улучшаться, а затем ухудшается. Ранняя остановка прекращает обучение, если оценка на валидации не улучшается заданное число эпох — этот параметр называется терпением, — и сохраняет веса, полученные в лучшую эпоху.
При обучении YOLO26 Ultralytics по умолчанию выполняет этот цикл: после каждой эпохи оценивает разбиение val из YAML-файла датасета, сохраняет эпоху с наивысшим показателем качества на валидации (mAP50-95 для детекции) как best.pt и останавливает обучение после patience эпох без улучшений; по умолчанию это 100 эпох.
from ultralytics import YOLO
# Загружаем предварительно обученный детектор YOLO26 nano
model = YOLO("yolo26n.pt")
# Проверяй модель на разбиении val после каждой эпохи и останавливай обучение, если улучшений нет 10 эпох
results = model.train(data="coco8.yaml", epochs=50, patience=10)Кросс-валидация для небольших датасетов#
Когда данных мало, одно отложенное разбиение приводит к потере примеров и неточным оценкам. K-блочная кросс-валидация делит данные на K блоков и обучает K моделей, каждый раз откладывая для валидации другой блок, а затем усредняет K оценок; таким образом, каждый пример используется и для обучения, и для валидации. Часто используют пять или десять блоков, а стратифицированные варианты и варианты с группировкой сохраняют сбалансированное распределение классов или объединяют связанные изображения в одном блоке. Тестовая выборка остается отдельной от всех блоков.
Валидационные данные и связанные термины#
- Тестовые данные: Оцениваются один раз в конце. Если снова использовать их для принятия решений, они превратятся во вторую валидационную выборку, а оценка перестанет быть непредвзятой.
- Обучающие данные: Единственное разбиение, на котором оптимизатор обучает веса.
- Кросс-валидация: Процедура, при которой разные примеры по очереди используются как валидационные данные, что позволяет получить K оценок валидации на одном датасете.
- Валидация в клинической и нормативной документации: В медицине и регулируемых отраслях валидация модели часто означает оценку готовой модели на независимых внешних данных; в терминологии машинного обучения это соответствует тестовой выборке.










