Валидация (validation) в машинном обучении — это предварительная оценка качества модели на отдельной части данных, обычно до финальной проверки на test set. На практике вы обучаете модель на train set, смотрите, как она ведет себя на validation set, и по этому сигналу замечаете переобучение (overfitting) и выбираете настройки модели.
Английский термин: validation. Также встречается: «валидация модели», «проверка на валидационной выборке», «валидация на validation set». В этой статье термин рассматривается только в ML-смысле по состоянию на 2026-08-14; это не data validation и не schema validation.
Если нужна короткая практическая формула, она такая: validation помогает принимать решения во время разработки модели, а test set нужен для финальной независимой оценки.
Простыми словами
Грубо говоря, валидация похожа на генеральную репетицию перед экзаменом. Вы еще не показываете итоговый результат внешнему проверяющему, но уже смотрите, где модель ошибается, и решаете, стоит ли менять параметры, архитектуру или способ обучения.
Здесь важно не путать процесс с данными. Validation — это сама проверка качества, а валидационная выборка — конкретный набор примеров, на котором эта проверка выполняется.
Как это работает
По официальному глоссарию Google, validation set — это подмножество данных для начальной оценки уже обученной модели. В стандартной схеме данные делят на train/validation/test, и каждый пример должен принадлежать только одному подмножеству.
Базовая схема
Все данные
|
+-- Train set ------> обучение параметров модели
|
+-- Validation set -> расчет val_loss / метрик -> выбор настроек
|
+-- Test set -------> финальная независимая проверка
Последовательность обычно такая:
- Вы делите данные на обучающую, валидационную и тестовую части.
- Модель учится только на train set.
- После очередного шага или эпохи вы считаете качество на validation set.
- Если обучение на train улучшается, а качество на validation перестает улучшаться или ухудшается, это сигнал возможного overfitting.
- После выбора гиперпараметров и подхода вы один раз проверяете модель на отдельном test set.
Google отдельно фиксирует и термин validation loss: это значение функции потерь модели на validation set на конкретной итерации обучения. В фреймворках вы обычно видите его как val_loss или как часть отчета по эпохам.
Если одного разбиения недостаточно, scikit-learn рекомендует использовать cross-validation для более устойчивой оценки. В k-fold cross-validation модель обучается на k-1 фолдах и валидируется на оставшемся, после чего процедура повторяется по кругу. При этом отдельный test set все равно лучше сохранить для финальной проверки.
Практический вывод: одиночная валидация удобна для быстрой разработки, но если данных мало или оценка сильно «скачет», более надежным вариантом будет cross-validation с отложенным test set.
Где применяется
- В TensorFlow/Keras при обучении по эпохам. В
tf.keras.Sequentialможно передатьvalidation_splitилиvalidation_data, чтобы считать loss и метрики на валидации в конце каждой эпохи. - В Keras при быстрой проверке на NumPy-массивах. Официальный FAQ уточняет, что
validation_splitработает только для NumPy-массивов, а validation-часть берется как последние X% данных доshuffle. - В scikit-learn для подбора гиперпараметров. Валидация используется, чтобы сравнивать варианты модели, но для более устойчивой оценки библиотека рекомендует cross-validation.
- В ручных циклах обучения PyTorch. Официальный учебный материал показывает отдельный validation/test loop, с помощью которого вы проверяете, улучшается ли модель по мере обучения.
Практический пример
Ниже — минимальный сценарий для Keras, когда вы хотите следить за качеством по эпохам без отдельного заранее подготовленного validation-набора.
history = model.fit(
x_train,
y_train,
epochs=10,
validation_split=0.2,
shuffle=True
)
Что здесь важно по официальной документации TensorFlow и Keras:
validation_split=0.2резервирует 20% обучающих данных под валидацию.- На этой части модель не обучается; на ней только считают loss и метрики.
- Расчет происходит в конце каждой эпохи.
- В пределах одного
fit()используется один и тот же validation set для всех эпох. - Validation-часть берется как последние X% образцов до перемешивания.
- По FAQ Keras такой способ работает только с NumPy-массивами.
Если у вас уже есть отдельная валидационная выборка, обычно понятнее передать ее явно:
history = model.fit(
x_train,
y_train,
epochs=10,
validation_data=(x_val, y_val)
)
В TensorFlow указано, что если переданы и validation_data, и validation_split, приоритет у validation_data. Практически это полезно, когда вы хотите полностью контролировать состав validation-набора, а не брать «хвост» обучающих массивов.
Чем отличается от…
| Термин | Что это | Для чего нужен | Главное отличие от validation |
|---|---|---|---|
| Валидационная выборка | Набор данных | На нем считают качество во время разработки | Validation — процесс проверки, а validation set — данные для этой проверки |
| Test set | Отдельный отложенный набор данных | Финальная независимая оценка | Validation используют до финального выбора модели; test set — после |
| Cross-validation | Повторяемая схема валидации по нескольким фолдам | Более устойчивая оценка и выбор модели | Обычная validation часто опирается на один сплит, а cross-validation — на серию сплитов |
Ограничения и заблуждения
- Заблуждение: «Если validation хорошая, значит модель уже доказала качество». Нет. Официальная логика Google и scikit-learn различает предварительную проверку на validation и финальную оценку на test set.
- Заблуждение: «Validation и test — это почти одно и то же». Нет. Если вы много раз подстраиваете модель под результаты validation, она может быть хорошо подогнана именно под этот этап разработки. Поэтому отдельный test set держат в стороне.
- Ограничение одиночного сплита. Одна валидационная выборка может давать нестабильную оценку. Для более устойчивого результата scikit-learn рекомендует cross-validation.
- Заблуждение: «В Keras validation_split случайно выбирает данные каждый раз заново». По FAQ Keras это не так: validation берется как последние X% данных до
shuffle, не перемешивается и остается одной и той же в пределах текущегоfit(). - Ограничение Keras.
validation_splitприменяется только к NumPy-массивам. Если вы работаете через другие типы входных данных, нужно сверяться с официальной документацией TensorFlow и явно использовать подходящий способ передачи validation-данных. - Редакционное ограничение статьи. Здесь не разбираются другие значения слова validation вне ML: проверка схем, входных данных или бизнес-правил.
Связанные термины и исследования
Чтобы не смешивать близкие понятия, полезно отдельно посмотреть на валидационную выборку как объект данных и на алгоритм как общий механизм, по которому модель обучается и оценивается.
Если вам важна не только численная метрика на validation set, но и свойства модели в более широком смысле, полезны соседние термины Bias (смещение) в ИИ и Галлюцинации ИИ. Валидация качества не отменяет отдельной проверки таких рисков.
Из академических источников часто цитируют работу Ron Kohavi о сравнении cross-validation и bootstrap для оценки точности и выбора моделей. Для практикующего читателя ее ценность в том, что она помогает понять, почему единичный validation split не всегда дает устойчивую картину.
Источники
- Machine Learning Glossary | Google for Developers
- tf.keras.Sequential | TensorFlow v2.16.1
- Keras FAQ
- 3.1. Cross-validation: evaluating estimator performance — scikit-learn 1.9.0 documentation
- Optimizing Model Parameters — PyTorch Tutorials 2.13.0+cu130 documentation
- A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection.
Вопросы и ответы
Validation и validation set — это одно и то же?
Нет. Validation — это процесс проверки качества модели, а validation set — набор данных, на котором эта проверка выполняется.
Зачем нужен test set, если уже есть validation?
Потому что validation используют во время разработки и выбора настроек. Для финальной независимой оценки модель лучше проверять на отдельном test set, который не участвовал в этих решениях.
Когда лучше брать cross-validation вместо одного validation split?
Когда данных мало или оценка на одном разбиении выглядит нестабильной. Официальная документация scikit-learn рекомендует cross-validation как более устойчивый способ оценки.
Что выбрать в Keras: validation_split или validation_data?
Если у вас уже есть отдельный validation-набор, обычно удобнее и прозрачнее передать validation_data. Если задать и validation_data, и validation_split, TensorFlow использует validation_data.
Почему validation_split в Keras иногда дает неожиданный результат?
Потому что Keras берет validation как последние X% данных до перемешивания, не перемешивает сам validation-набор и использует его одинаковым для всех эпох внутри текущего fit(). Если данные в массивах упорядочены, это нужно учитывать заранее.