Изменение learning rate во время обучения

В Keras.js, библиотеке для запуска моделей Keras в браузере на JavaScript, управление параметром learning rate не такое прямое, как в Python-версии Keras. Базовые механизмы оптимизации требуют понимания структуры модели и способов передачи весов и гиперпараметров в браузер.

Learning rate — это ключевой гиперпараметр, определяющий величину шага при обновлении весов нейронной сети. Слишком высокий learning rate приводит к нестабильному обучению и расходимости, слишком низкий — к медленной сходимости.


Передача learning rate в Keras.js

В Keras.js оптимизаторы создаются на основе заранее обученных моделей. При конвертации модели из Python Keras в формат JSON для Keras.js, learning rate обычно фиксируется на момент сохранения модели. Прямое изменение learning rate через API Keras.js отсутствует, поэтому применяются следующие подходы:

  1. Модификация JSON-файла модели Оптимизатор и его параметры, включая learning rate, сохраняются в разделе "optimizer_config" JSON-файла. Для изменения learning rate нужно:

    • Открыть JSON-файл модели.
    • Найти ключ "optimizer_config""learning_rate".
    • Задать новое значение, например "learning_rate": 0.001.
  2. Динамическое обновление через кастомные оптимизаторы Keras.js поддерживает реализацию пользовательских оптимизаторов. Можно создать функцию-обёртку над стандартным SGD или Adam, в которой learning rate вычисляется на основе текущего шага обучения:

    function dynamicLearningRate(step) {
        const initialLR = 0.01;
        const decay = 0.001;
        return initialLR / (1 + decay * step);
    }

    Эта функция позволяет изменять learning rate на каждом шаге обучения, эмулируя поведение learning rate scheduler из Python.


Стратегии изменения learning rate

  1. Step Decay (пошаговое уменьшение) Learning rate уменьшается через фиксированное количество шагов: [ lr = lr_{initial} drop^{ }] В Keras.js можно обновлять параметр optimizer при каждом epoch через пользовательскую логику.

  2. Exponential Decay (экспоненциальное снижение) Learning rate уменьшается по формуле: [ lr = lr_{initial} e^{-k epoch}] Реализуется аналогично через динамическое вычисление значения перед каждым шагом оптимизации.

  3. Adaptive Learning Rate (адаптивный метод) В Keras.js поддерживаются оптимизаторы типа Adam и RMSprop, где скорость обучения частично адаптируется автоматически. Для тонкой настройки адаптивного метода можно комбинировать:

    • Изначальный learning rate в JSON-модели.
    • Дополнительное программное управление через пользовательские функции изменения весов.

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

  • Перед обучением проверять корректность параметра в JSON-файле. Неправильная запись, например строка вместо числа, приведёт к ошибкам во время инициализации модели.
  • Сохранение состояния оптимизатора важно, если требуется продолжить обучение после остановки. В Keras.js оптимизатор хранит внутренние моменты, которые необходимо восстанавливать вручную, иначе динамическое изменение learning rate может стать некорректным.
  • Комбинация методов: для эффективного обучения в браузере часто используется комбинация экспоненциального снижения и адаптивного оптимизатора, что компенсирует небольшие вычислительные мощности JavaScript-движка по сравнению с Python.

Примеры интеграции в код

// Пример инициализации модели Keras.js с динамическим learning rate
const model = new KerasJS.Model({
  filepath: 'model.json',
  gpu: true
});

let step = 0;
function trainStep(input, target) {
  const lr = dynamicLearningRate(step);
  model.optimizer.learning_rate = lr;
  model.train({input, target});
  step++;
}
  • В данном примере learning rate изменяется на каждом шаге.
  • Использование GPU ускоряет обучение, что критично при частой модификации learning rate.

Важные нюансы

  • Отсутствие встроенного callbacks как в Python Keras. Поэтому любые стратегии изменения learning rate нужно реализовывать вручную.
  • Синхронизация с весами: при загрузке модели из JSON и изменении learning rate необходимо убедиться, что новые значения применяются именно к активному экземпляру оптимизатора.
  • Тестирование стабильности: браузерное обучение чувствительно к слишком резким изменениям learning rate. Оптимально проверять поведение на небольших выборках перед масштабным обучением.