AdaGrad: Интуиция

Вопрос или проблема

Формула обновления для Adagrad следующая:

\begin{equation}
w^i(t)=w^i(t-1) -\frac{\eta}{\sqrt{\epsilon +\sum_{1}^t |\nabla_i\mathcal{L}|^2} } \nabla_i\mathcal{L}
\end{equation}

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

Но формула указывает на противоположное. Пожалуйста, объясните правильную логику за AdaGrad.

Формула обновления для Adagrad выглядит следующим образом:
$$w^i(t+1)=w^i(t)-\frac{\eta}{\sqrt{\epsilon+\sum\limits_{k=1}^t|\nabla_i\mathcal{L(k)}|^2}}\nabla_i\mathcal{L(t)}$$
Во-первых, итерация слева $t+1$, а все итерации справа до $t$ (вы могли бы подставить $t$ в ЛС, но тогда это должно быть $t-1$ во всех местах справа, включая сумму).

Что более важно, в числителе и знаменателе есть разные $\nabla_i\mathcal{L}$.

В числителе находится градиент на текущем шаге итерации $t$: $\nabla_i\mathcal{L}(t)$. Это согласуется с вашим интуицией: чем больше наклон, тем больше обновление.

В знаменателе сумма градиентов на предыдущих шагах итерации. Если ранее мы двигались по долине и внезапно наткнулись на крутой скат, то текущий градиент будет большим, но знаменатель будет маленьким (предыдущие градиенты были маленькими), и обновление параметра будет большим.

Основная причина Adagrad заключается в том, чтобы регулировать скорость обучения отдельно для каждого параметра, таким образом, индекс $i$, а $\nabla_i\mathcal{L}$ на самом деле не является градиентом, а частной производной по направлению $i$-го параметра. Если вы используете стохастический градиентный спуск или мини-батч-обучение, и ваш набор данных такой, что есть определенные признаки, которые дают редкие вложения в градиент, тогда вы можете не двигаться достаточно быстро в этом направлении. Adagrad делает большие прыжки каждый раз, когда такой признак вносит вклад в градиент, и меньшие прыжки для признаков, которые часто вносят вклад в градиент.

Нормально иметь меньшие прыжки для часто вносящих характеристики, потому что в стохастическом градиентном спуске вы обновляете свои веса после каждого шага, и общее обновление будет большим после прохождения всего набора данных. Для определенного признака, который редко продвигает обучение (редко встречается в вашем наборе данных), вам нужен больший прыжок.

Недостаток заключается в том, что знаменатель всегда положителен, поэтому скорость обучения только уменьшается и может стать слишком маленькой в какой-то момент. Чтобы смягчить это, вы рассматриваете не всю историю предыдущих градиентов, а ограничиваете их определенным окном. Такой алгоритм называется Adadelta.

Ответ или решение

Интуиция AdaGrad: Понимание принципов работы алгоритма

AdaGrad (Adaptive Gradient Algorithm) — это алгоритм оптимизации, который предлагает адаптивное управление скоростью обучения для каждого параметра модели. Это важная концепция в машинном обучении и глубоком обучении, поскольку позволяет гибко и эффективно управлять процессом обучения.

Формула обновления весов AdaGrad

Обновление весов по формуле AdaGrad описывается следующим образом:

[
w^i(t+1) = w^i(t) – \frac{\eta}{\sqrt{\epsilon + \sum_{k=1}^t |\nabla_i\mathcal{L(k)}|^2}} \nabla_i\mathcal{L(t)}
]

Здесь:

  • ( w^i(t) ) — вес i на шаге t,
  • ( \eta ) — начальная скорость обучения,
  • ( \epsilon ) — малый положительный параметр для предотвращения деления на ноль,
  • ( \nabla_i\mathcal{L(t)} ) — градиент функции потерь по i-му параметру на текущем шаге t.

Основная идея формирования скорости обучения

При взгляде на формулу возникает на первый взгляд противоречивое ощущение: когда накопленный градиент большой, скорость обучения становится медленной. Это может показаться нелогичным: высокие градиенты обычно сигнализируют о том, что стоит выполнить больший шаг. Однако основная идея AdaGrad заключается в том, что он адаптирует скорость обучения для каждого параметра в зависимости от частоты и величины его обновлений.

  1. Непрерывные обновления и редкие признаки: Если параметр часто обновляется, это обычно означает, что модель движется по "долине" (т.е. область с низким градиентом). Поэтому AdaGrad автоматически уменьшает скорость обучения для этих параметров. Напротив, для редко встречающихся признаков алгоритм будет производить большие обновления, так как его влияние на градиент будет значительным, несмотря на небольшое количество обновлений.

  2. Логика работы: Высокие градиенты указывают на необходимость изменения, но при этом важно учитывать, что если данный параметр часто сталкивался с небольшими градиентами (в истории обновлений), это может указывать на стабильное состояние. Поэтому, когда сумма градиентов в знаменателе растет (из-за частых малых обновлений), текущий градиент будет делиться на большую величину, что приводит к меньшему обновлению.

  3. Гармония между шагами: Правильно подобранная скорость обучения по каждому параметру позволяет избежать больших "рывков" по направлению часто встречающихся признаков, одновременно увеличивая шансы на эффективное обновление редких.

Ограничения и альтернативы

Одним из основных недостатков AdaGrad является то, что скорость обучения со временем уменьшается и может стать слишком малой, что затрудняет дальнейшее обучение. Для решения данной проблемы были предложены альтернативы, такие как Adadelta, которая ограничивает окно значений градиентов и корректирует скорость обучения более динамичным образом.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...