Оптимизатор в ConvNetJS отвечает за обновление весов нейронной сети на основе вычисленного градиента. От правильного выбора оптимизатора зависит скорость сходимости модели, устойчивость к застреванию в локальных минимумах и способность сети обрабатывать сложные функции потерь.
1. SGD (Stochastic Gradient Descent) Стандартный стохастический градиентный спуск обновляет веса по формуле:
[ w w - ]
где ( ) — скорость обучения, ( L ) — функция потерь. В ConvNetJS
реализован как trainer.SGD, он требует явного указания
скорости обучения. Особенности:
2. SGD с импульсом (Momentum) Добавляет компонент импульса, учитывающий предыдущее направление градиента:
[ v v - , w w + v]
где ( ) — коэффициент импульса, обычно в диапазоне 0.5–0.99. В
ConvNetJS параметр импульса задается через momentum.
Преимущества:
3. AdaGrad Автоматически адаптирует скорость обучения для каждого веса:
[ w_i w_i - ]
где ( G_i ) — сумма квадратов предыдущих градиентов для веса ( i ). В
ConvNetJS используется как trainer.AdaGrad.
Особенности:
4. RMSProp Модификация AdaGrad с экспоненциальным сглаживанием градиентов:
[ E[g^2]t = E[g^2]{t-1} + (1-) g_t^2, w w - g_t]
В ConvNetJS реализован как trainer.RMSProp.
Особенности:
5. Adam (Adaptive Moment Estimation) Объединяет идеи импульса и RMSProp, учитывая скользящие средние градиента и его квадрата:
[ m_t = 1 m{t-1} + (1-_1) g_t, v_t = 2 v{t-1} + (1-_2) g_t^2]
[ _t = , _t = , w w - ]
ConvNetJS поддерживает Adam через trainer.Adam.
Особенности:
Все оптимизаторы настраиваются через объект trainer, где
ключевые параметры включают:
learning_rate — скорость обучения.momentum — коэффициент импульса (для SGD с
импульсом).decay — скорость уменьшения шага обучения со
временем.l2_decay — регуляризация весов, предотвращающая
переобучение.batch_size — размер мини-батча, влияющий на дисперсию
градиента.Настройка этих параметров критически важна для стабильного обучения. Например, высокая скорость обучения с малым импульсом может вызвать хаотичное поведение, тогда как низкая скорость при RMSProp замедлит процесс.
learning_rate и momentum, так как
оптимальные значения зависят от архитектуры сети и масштаба данных.ConvNetJS использует trainer для связывания сети с
выбранным методом оптимизации:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 32,
l2_decay: 0.001
});
Обновление весов выполняется автоматически при вызове:
trainer.train(x, y);
где x — входной вектор, y — ожидаемый
выход. При использовании Adam или RMSProp достаточно изменить только
конструктор trainer, остальные шаги остаются
идентичными.
Выбор оптимизатора напрямую влияет на:
Оптимизатор является критически важным инструментом, формирующим динамику обучения нейронной сети, и грамотная его настройка позволяет существенно ускорить и улучшить процесс построения моделей.