RMSProp

RMSProp (Root Mean Square Propagation) — это адаптивный алгоритм оптимизации, который применяется для обучения нейронных сетей. Основная цель RMSProp — ускорение сходимости градиентного спуска и стабилизация процесса обучения при высоких колебаниях градиентов, особенно при работе с рекуррентными и глубокими нейронными сетями. В TensorFlow.js RMSProp реализован как один из встроенных оптимизаторов, что позволяет легко интегрировать его в процесс обучения моделей.


Основная идея RMSProp

RMSProp модифицирует стандартный градиентный спуск, масштабируя шаг обновления каждого параметра на основе скользящего среднего квадрата прошлых градиентов. Это предотвращает слишком большие колебания параметров при больших градиентах и ускоряет обучение при малых градиентах.

Формально обновление параметра ( ) на итерации ( t ) происходит по формуле:

[ v_t = v_{t-1} + (1 - ) g_t^2]

[ t = {t-1} - g_t]

где:

  • ( g_t ) — градиент функции потерь по параметру ( ) на итерации ( t ),
  • ( v_t ) — скользящее среднее квадрата градиентов,
  • ( ) — коэффициент затухания (обычно около 0.9),
  • ( ) — скорость обучения,
  • ( ) — малая константа для предотвращения деления на ноль.

Ключевое преимущество RMSProp — автоматическая адаптация шага обновления для каждого параметра, что делает оптимизацию более стабильной.


Использование RMSProp в TensorFlow.js

В 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

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


Центрированный RMSProp

Параметр centered: true позволяет использовать центрированное скользящее среднее градиентов:

[ t = {t-1} - g_t]

где ( m_t ) — скользящее среднее градиентов. Это уменьшает смещение градиентов и может улучшить сходимость на некоторых задачах. В TensorFlow.js активируется через centered: true.


Советы по настройке гиперпараметров

  • Скорость обучения (learningRate): обычно выбирается в диапазоне 0.001–0.01 для большинства задач. Слишком высокая скорость может вызвать расходимость, слишком низкая — замедлить обучение.
  • Decay (decay): типичное значение 0.9, регулирует, насколько сильно прошлые градиенты влияют на текущий шаг.
  • Momentum (momentum): добавляет инерцию к обновлению параметров. Значения 0.0–0.9 часто применяются для ускорения обучения.
  • Epsilon (epsilon): маленькое положительное число, предотвращающее деление на ноль. Обычно 1e-8 достаточно.

Применение RMSProp в сложных моделях

RMSProp хорошо показывает себя на:

  • Рекуррентных нейронных сетях (RNN, LSTM), где градиенты могут сильно колебаться.
  • Глубоких сверточных сетях с большим числом слоев, где стандартный градиентный спуск медленно сходится.
  • Задачах с шумными или несбалансированными данными.

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


RMSProp в TensorFlow.js обеспечивает простую, но мощную реализацию адаптивного градиентного спуска, позволяя эффективно обучать как простые, так и сложные нейронные сети, минимизируя проблемы расходимости и колебаний.