Планировщики скорости обучения

Планировщик скорости обучения (learning rate scheduler) — это инструмент, позволяющий динамически изменять значение скорости обучения во время процесса тренировки модели. В TensorFlow.js он используется для улучшения сходимости, предотвращения застревания в локальных минимумах и ускорения обучения.


Основы работы со скоростью обучения

Скорость обучения (learning rate, lr) определяет величину корректировки весов нейронной сети на каждом шаге оптимизации. Слишком высокая скорость обучения может привести к расходимости функции потерь, слишком низкая — к медленной сходимости.

Ключевой принцип: планировщик позволяет задать зависимость learning rate от номера эпохи или шага оптимизации.


Использование встроенных планировщиков в TensorFlow.js

TensorFlow.js предоставляет несколько встроенных функций для изменения learning rate:

  1. 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.
  2. 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 для интервалов.
  3. 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)));

Преимущества:

  • Полный контроль над поведением lr.
  • Возможность комбинировать несколько методов уменьшения.

Интеграция с fit и fitDataset

При обучении моделей через model.fit() или model.fitDataset() оптимизатор с планировщиком lr работает автоматически. TensorFlow.js обновляет скорость обучения на каждом шаге тренировки согласно заданной функции.

await model.fit(trainData, trainLabels, {
    epochs: 30,
    batchSize: 32,
    optimizer: optimizer
});

Если используется пользовательская функция lr, она вызывается на каждом шаге, позволяя адаптивно регулировать обновления весов.


Практические рекомендации

  • Начальная скорость обучения должна быть выше, если используется экспоненциальное затухание, чтобы компенсировать снижение lr на поздних этапах.
  • Дискретные изменения lr эффективны для моделей, которые быстро сходятся на первых эпохах.
  • Комбинация с адаптивными оптимизаторами (Adam, RMSProp) может дать лучшие результаты при сложных данных.

Визуализация изменения learning rate

Для анализа поведения 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. Их правильное использование позволяет ускорить сходимость, повысить точность модели и избежать нестабильного поведения функции потерь.