EarlyStopping — это техника регуляризации, используемая для предотвращения переобучения модели в процессе обучения нейронных сетей. Она позволяет автоматически остановить обучение, когда модель перестает улучшаться по определённой метрике на проверочном наборе данных, что экономит ресурсы и повышает обобщающую способность модели. В TensorFlow.js функционал EarlyStopping реализован через обратные вызовы (callbacks).
При создании экземпляра tf.callbacks.earlyStopping()
можно задавать несколько ключевых параметров, которые определяют логику
остановки обучения:
monitor: метрика, за которой следует следить.
Например, 'val_loss' для потерь на проверочном наборе или
'val_accuracy' для точности. По умолчанию используется
'val_loss'.
minDelta: минимальное изменение метрики,
считающееся улучшением. Если улучшение меньше указанного значения, оно
не учитывается. Значение по умолчанию — 0.
patience: количество эпох, в течение которых
метрика может оставаться без улучшений до остановки обучения. Например,
patience: 5 означает, что обучение продолжится ещё 5 эпох
после последнего улучшения.
verbose: уровень вывода сообщений.
0 — без вывода, 1 — вывод информации о каждом
шаге остановки.
mode: режим отслеживания метрики. Возможные значения:
'auto': автоматически определяется минимизация или
максимизация метрики.'min': ожидается уменьшение метрики (например,
потери).'max': ожидается увеличение метрики (например,
точности).baseline: базовое значение метрики. Если модель достигла или превысила это значение, обучение может быть остановлено.
restoreBestWeights: если true, веса
модели восстанавливаются в момент наилучшего значения метрики.
Пример создания callback:
const earlyStopping = tf.callbacks.earlyStopping({
monitor: 'val_loss',
patience: 10,
minDelta: 0.001,
mode: 'min',
verbose: 1,
restoreBestWeights: true
});
Callback передается в метод model.fit() или
model.fitDataset() через параметр callbacks.
Это позволяет контролировать процесс обучения без необходимости вручную
отслеживать метрики каждой эпохи.
Пример использования:
const history = await model.fit(xTrain, yTrain, {
epochs: 100,
batchSize: 32,
validationSplit: 0.2,
callbacks: [earlyStopping]
});
В этом примере обучение модели может завершиться досрочно, если
val_loss не улучшится в течение 10 последовательных
эпох.
'val_loss' для регрессии и 'val_accuracy' для
задач классификации. Выбор метрики должен соответствовать основной цели
модели.2–5) подходит, тогда как для больших
наборов данных лучше задавать большее (10–20) для учета
шумных изменений метрики.metrics при компиляции модели.history после каждой эпохи и могут быть визуализированы
сторонними библиотеками.const earlyStopping = tf.callbacks.earlyStopping({
monitor: 'val_accuracy',
patience: 5,
mode: 'max',
restoreBestWeights: true,
verbose: 1
});
const history = await model.fit(xTrain, yTrain, {
epochs: 50,
batchSize: 64,
validationSplit: 0.2,
callbacks: [earlyStopping]
});
console.log('Обучение завершено досрочно, лучшая точность на валидации:', Math.max(...history.history.val_accuracy));
В данном примере обучение может завершиться раньше 50 эпох, если точность на проверочном наборе данных не улучшится в течение 5 последовательных эпох. При этом модель сохраняет веса, соответствующие наилучшей точности.
EarlyStopping является эффективным инструментом для управления процессом обучения, экономии вычислительных ресурсов и повышения обобщающей способности модели, особенно при работе с небольшими и средними наборами данных.