Adadelta — это адаптивный метод градиентного спуска, разработанный для улучшения сходимости нейронных сетей без необходимости ручного подбора скорости обучения. В библиотеке ConvNetJS он реализован как один из оптимизаторов для тренировки нейронных сетей.
Метод Adadelta основан на двух ключевых принципах:
Адаптация шагов обучения по каждому параметру отдельно Вместо фиксированного глобального шага обучения, как в классическом SGD, Adadelta динамически масштабирует шаг для каждого веса, исходя из истории градиентов.
Использование экспоненциального скользящего среднего квадратов градиентов Вместо накопления всех прошлых градиентов (как в Adagrad), Adadelta использует скользящее среднее квадратов градиентов с коэффициентом затухания, что предотвращает слишком маленькие шаги обучения на поздних этапах тренировки.
Для параметра ( ) с градиентом ( g ) в шаге ( t ):
[ E[g^2]t = E[g^2]{t-1} + (1 - ) g_t^2]
где ( ) — коэффициент затухания (обычно около 0.95), ( E[g^2]_t ) — экспоненциальное скользящее среднее квадратов градиентов.
[ _t = - g_t]
где ( E[^2]_{t-1} ) — скользящее среднее квадратов предыдущих обновлений, а ( ) — малое число для численной стабильности (обычно ( 1e-6 )).
[ _{t+1} = _t + _t]
В ConvNetJS оптимизатор Adadelta создается через конструктор adadeltaSolver:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'adadelta',
rho: 0.95, // коэффициент затухания
epsilon: 1e-6, // числовая стабилизация
batch_size: 1 // размер мини-батча
});
method: 'adadelta' — указывает использование
Adadelta.rho и epsilon соответствуют формулам
обновления.batch_size влияет на частоту обновлений весов.После создания trainer применяется для обновления весов сети:
trainer.train(x, y);
где x — входной вектор или тензор, а y —
целевое значение (метка или вектор меток).
rho: Значение 0.95–0.99 обычно
обеспечивает стабильную работу. Меньшее значение делает обновления более
реактивными, но менее гладкими.epsilon: Малое значение
предотвращает деление на ноль, его менять обычно не требуется.При обучении сети с Adadelta часто наблюдается:
Adadelta в ConvNetJS предоставляет мощный инструмент для тренировки сетей с автоматическим управлением шагом обучения, обеспечивая баланс между адаптивностью и стабильностью обновлений.