RMSProp (Root Mean Square Propagation) — это адаптивный алгоритм оптимизации, который применяется для обучения нейронных сетей. Основная цель RMSProp — ускорение сходимости градиентного спуска и стабилизация процесса обучения при высоких колебаниях градиентов, особенно при работе с рекуррентными и глубокими нейронными сетями. В TensorFlow.js RMSProp реализован как один из встроенных оптимизаторов, что позволяет легко интегрировать его в процесс обучения моделей.
RMSProp модифицирует стандартный градиентный спуск, масштабируя шаг обновления каждого параметра на основе скользящего среднего квадрата прошлых градиентов. Это предотвращает слишком большие колебания параметров при больших градиентах и ускоряет обучение при малых градиентах.
Формально обновление параметра ( ) на итерации ( t ) происходит по формуле:
[ v_t = v_{t-1} + (1 - ) g_t^2]
[ t = {t-1} - g_t]
где:
Ключевое преимущество RMSProp — автоматическая адаптация шага обновления для каждого параметра, что делает оптимизацию более стабильной.
В TensorFlow.js оптимизатор RMSProp представлен через класс
tf.train.rmsprop. Его можно создать с настройкой основных
гиперпараметров:
const optimizer = tf.train.rmsprop(learningRate, decay, momentum, epsilon, centered);
Параметры:
learningRate — скорость обучения (обязательный
параметр).decay — коэффициент затухания скользящего среднего
(аналог (), по умолчанию 0.9).momentum — моментум для ускорения сходимости (по
умолчанию 0).epsilon — малое значение для предотвращения деления на
ноль (по умолчанию 1e-8).centered — булевый параметр, определяющий использование
центрированного RMSProp (по умолчанию false).
Центрированный вариант учитывает среднее градиентов для дополнительной
стабилизации.Создание модели и оптимизация с помощью RMSProp:
import * as tf from '@tensorflow/tfjs';
// Создание простой модели
const model = tf.sequential();
model.add(tf.layers.dense({units: 10, activation: 'relu', inputShape: [5]}));
model.add(tf.layers.dense({units: 1}));
// Определение функции потерь
const loss = 'meanSquaredError';
// Создание оптимизатора RMSProp
const optimizer = tf.train.rmsprop(0.01, 0.9, 0.0, 1e-8);
// Компиляция модели
model.compile({
optimizer: optimizer,
loss: loss
});
// Генерация данных
const xs = tf.randomNormal([100, 5]);
const ys = tf.randomNormal([100, 1]);
// Обучение модели
await model.fit(xs, ys, {
epochs: 50,
batchSize: 10
});
В этом примере RMSProp автоматически масштабирует градиенты, что делает процесс обучения более стабильным, особенно при наличии шумных данных или сильно различающихся градиентов по разным параметрам.
Параметр centered: true позволяет использовать
центрированное скользящее среднее градиентов:
[ t = {t-1} - g_t]
где ( m_t ) — скользящее среднее градиентов. Это уменьшает смещение
градиентов и может улучшить сходимость на некоторых задачах. В
TensorFlow.js активируется через centered: true.
learningRate):
обычно выбирается в диапазоне 0.001–0.01 для большинства задач. Слишком
высокая скорость может вызвать расходимость, слишком низкая — замедлить
обучение.decay): типичное значение 0.9,
регулирует, насколько сильно прошлые градиенты влияют на текущий
шаг.momentum): добавляет инерцию
к обновлению параметров. Значения 0.0–0.9 часто применяются для
ускорения обучения.epsilon): маленькое
положительное число, предотвращающее деление на ноль. Обычно 1e-8
достаточно.RMSProp хорошо показывает себя на:
Его способность адаптировать шаг обучения под каждый параметр особенно полезна, когда разные веса модели имеют разную чувствительность к обновлениям.
RMSProp в TensorFlow.js обеспечивает простую, но мощную реализацию адаптивного градиентного спуска, позволяя эффективно обучать как простые, так и сложные нейронные сети, минимизируя проблемы расходимости и колебаний.