Планировщик скорости обучения (learning rate scheduler) — это инструмент, позволяющий динамически изменять значение скорости обучения во время процесса тренировки модели. В TensorFlow.js он используется для улучшения сходимости, предотвращения застревания в локальных минимумах и ускорения обучения.
Скорость обучения (learning rate, lr) определяет величину корректировки весов нейронной сети на каждом шаге оптимизации. Слишком высокая скорость обучения может привести к расходимости функции потерь, слишком низкая — к медленной сходимости.
Ключевой принцип: планировщик позволяет задать зависимость learning rate от номера эпохи или шага оптимизации.
TensorFlow.js предоставляет несколько встроенных функций для изменения learning rate:
Exponential decay Плавное экспоненциальное уменьшение скорости обучения:
const initialLearningRate = 0.1;
const decayRate = 0.96;
const decaySteps = 1000;
const lrSchedule = tf.train.exponentialDecay(initialLearningRate, decaySteps, decayRate);
const optimizer = tf.train.sgd(lrSchedule);
initialLearningRate — начальное значение lr.decayRate — коэффициент затухания.decaySteps — количество шагов, после которого lr
уменьшается на коэффициент decayRate.Piecewise constant decay Позволяет изменять скорость обучения дискретными ступенями:
const boundaries = [1000, 2000];
const values = [0.1, 0.01, 0.001];
const lrSchedule = tf.train.piecewiseConstantDecay(boundaries, values);
const optimizer = tf.train.sgd(lrSchedule);
boundaries — точки смены значений lr.values — последовательность значений lr для
интервалов.Polynomial decay Уменьшение lr по полиномиальной функции:
const initialLearningRate = 0.1;
const decaySteps = 1000;
const endLearningRate = 0.01;
const power = 2;
const lrSchedule = tf.train.polynomialDecay(initialLearningRate, decaySteps, endLearningRate, power);
const optimizer = tf.train.sgd(lrSchedule);
power определяет кривизну затухания (линейное
уменьшение при power=1, квадратичное при power=2 и т.д.).TensorFlow.js позволяет создавать собственные функции планирования скорости обучения, используя любой алгоритм вычисления lr на основе шага или эпохи:
function customLrSchedule(epoch) {
if (epoch < 10) {
return 0.1;
} else if (epoch < 20) {
return 0.01;
} else {
return 0.001;
}
}
const optimizer = tf.train.sgd((step) => customLrSchedule(Math.floor(step / 100)));
Преимущества:
fit и
fitDatasetПри обучении моделей через model.fit() или
model.fitDataset() оптимизатор с планировщиком lr работает
автоматически. TensorFlow.js обновляет скорость обучения на каждом шаге
тренировки согласно заданной функции.
await model.fit(trainData, trainLabels, {
epochs: 30,
batchSize: 32,
optimizer: optimizer
});
Если используется пользовательская функция lr, она вызывается на каждом шаге, позволяя адаптивно регулировать обновления весов.
Для анализа поведения lr удобно строить графики:
const lrs = [];
for (let step = 0; step < 3000; step++) {
lrs.push(lrSchedule(step));
}
tf.util.plot('Learning Rate', lrs);
График помогает определить, не слишком ли резко падает скорость обучения и соответствует ли динамика требованиям модели.
TensorFlow.js позволяет использовать планировщики lr с любым
оптимизатором: sgd, momentum,
adam, adagrad. Например:
const optimizer = tf.train.adam(lrSchedule);
Это обеспечивает гибкость и возможность тонкой настройки процесса обучения, что особенно важно при работе с глубокими нейронными сетями.
Планировщики скорости обучения являются ключевым инструментом для эффективной тренировки моделей в TensorFlow.js. Их правильное использование позволяет ускорить сходимость, повысить точность модели и избежать нестабильного поведения функции потерь.