Скорость обучения (learning rate) — один из ключевых гиперпараметров при обучении нейронных сетей. Она определяет величину шага, с которым обновляются веса модели при каждом проходе обратного распространения ошибки. Неправильный выбор скорости обучения может привести к медленной сходимости или нестабильному обучению, включая расходимость градиентов.
Скорость обучения (learning rate) обозначается
обычно как lr и является положительным числом. В контексте
TensorFlow.js она указывается при создании оптимизатора. Например:
const optimizer = tf.train.sgd(0.01); // Стохастический градиентный спуск с lr=0.01
При слишком большом значении lr модель может
«перепрыгивать» через минимумы функции потерь. При слишком маленьком —
обучение будет крайне медленным, и модель может застрять в локальном
минимуме.
TensorFlow.js предоставляет широкий спектр оптимизаторов, каждый из которых использует скорость обучения по-своему:
SGD (Stochastic Gradient Descent) Простейший оптимизатор, обновляет веса напрямую по градиенту:
const optimizer = tf.train.sgd(0.05);
Здесь скорость обучения задаёт коэффициент масштабирования градиента.
Adam (Adaptive Moment Estimation) Более сложный оптимизатор, автоматически адаптирующий шаги на основе моментов градиентов. Начальная скорость обучения всё ещё важна:
const optimizer = tf.train.adam(0.001);
Adam чаще позволяет использовать большие скорости обучения по сравнению с SGD.
RMSProp Применяет экспоненциальное скользящее среднее к градиентам для стабилизации обновлений:
const optimizer = tf.train.rmsprop(0.001);Жёстко заданная константа не всегда оптимальна. В TensorFlow.js можно
реализовать динамическое снижение lr во время обучения,
чтобы ускорить сходимость на начальном этапе и улучшить финальную
точность.
Простейший метод — экспоненциальное уменьшение:
let initialLearningRate = 0.01;
let decayRate = 0.96;
let globalStep = 0;
function getLearningRate() {
return initialLearningRate * Math.pow(decayRate, globalStep);
}
// Внутри цикла обучения
const optimizer = tf.train.sgd(getLearningRate());
globalStep++;
Альтернативный подход — learning rate schedule, позволяющий менять скорость обучения по эпохам или по величине функции потерь. В TensorFlow.js это реализуется вручную через обновление оптимизатора.
lr.lr.const model = tf.sequential();
model.add(tf.layers.dense({units: 128, activation: 'relu', inputShape: [784]}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
const optimizer = tf.train.adam(0.001);
model.compile({
optimizer: optimizer,
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
await model.fit(trainData, trainLabels, {
epochs: 20,
batchSize: 64,
validationSplit: 0.2,
callbacks: {
onEpochEnd: (epoch, logs) => {
console.log(`Эпоха ${epoch + 1}: loss=${logs.loss.toFixed(4)}, accuracy=${(logs.acc*100).toFixed(2)}%`);
}
}
});
Правильная настройка скорости обучения в TensorFlow.js — это баланс между скоростью и стабильностью обучения, ключевой фактор для достижения высокой точности моделей.