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

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

Я обучаю сеть для предсказания дельты между восемью соответствующими 3D точками в два момента времени.

Модель состоит из двух MLP с двумя слоями каждая. Они принимают на вход конкатенированные ключевые точки в два момента времени и выдают набор дельта-точек:

Model(

  (shared_mlp): 
    act: <function leaky_relu at 0x1474bd111580>

  MLP(

    (layers): ModuleList(

      (0): Linear(in_features=48, out_features=256, bias=True)

      (1): Linear(in_features=256, out_features=512, bias=True)

    )

  )

  (t_mlp): 
    act: <function leaky_relu at 0x1474bd111580>
    MLP(

    (layers): ModuleList(

      (0): Linear(in_features=512, out_features=256, bias=True)

      (1): Linear(in_features=256, out_features=24, bias=True)

    )

  )
)

Что касается потерь (Huber loss), сеть быстро сходится к локальному минимуму:

enter image description here

Однако они не равны нулю и далее не улучшаются.

В то же время, веса близки к неподвижным на основе гистограммы (это также применимо к другим слоям):

enter image description here

в то время как соответствующие градиенты далеки от насыщения:

enter image description here

В то же время, смещения имеют намного лучшую динамику:

enter image description here

и соответствующие градиенты:

enter image description here

Оптимизатор Adam с lr=1e-3 (я также пробовал SGD и другие значения скорости обучения).

У меня есть два вопроса на основе графиков:

  1. Почему потери стабилизируются на локальном минимуме, учитывая стабильные градиенты?
  2. Почему оптимизатор не обновляет веса, учитывая достаточно высокую скорость обучения и относительно крупные градиенты (имея отрицательные градиенты, я ожидал бы увеличения весов, их распределение постепенно смещается вправо на гистограмме)?

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

Теория

Когда работаем с оптимизацией нейронных сетей, важными компонентами являются выбор оптимизатора и настройка гиперпараметров, таких как скорость обучения, которая сильно влияет на сходимость модели. Алгоритм Adam (Adaptive Moment Estimation) — популярный выбор, так как он сочетает в себе преимущества двух других методов: AdaGrad и RMSProp, обеспечивая адаптивное обновление параметров модели. Тем не менее, при определенных условиях даже оптимизаторы, такие как Adam, могут сталкиваться с проблемами, как это случилось в вашей модели.

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

  1. Переобучение или недообучение: поскольку модель быстро достигает локального минимума, она может просто не иметь достаточной сложности для захвата данных. Либо, возможно, модель переобучилась на начальных данных.

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

  3. Игра гиперпараметров: зачастую причина кроется в неправильных настройках гиперпараметров, даже если они кажутся оптимальными.

Пример

Рассмотрим гипотетическую проблему, когда в модели, аналогичной вашей, применяется алгоритм Adam, и она сталкивается с проблемой стагнации в локальном минимуме. Посмотрим, как изменения в гиперпараметрах, таких как объем нагрузки, планировщик скорости обучения или добавление регуляризации, могут изменить ситуацию. Например, до настройки гиперпараметров модель стабильно достигала точки равновесия, однако, добавление гибкости через увеличение количества нейронов, а также использования dropout, может сместить её из локального минимума в глобальный.

Применение

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

  2. Регуляризация и Dropout: Если есть подозрения на переобучение, стоит попробовать регуляризацию или dropout, чтобы улучшить обобщающую способность сети.

  3. Адаптация скорости обучения: Ваше текущее значение — 1e-3, но возможно стоит использовать планировщик скорости обучения, который динамически снижает lr по мере достижения определённых точек.

  4. Аугментация данных: Проверьте методику предобработки данных; возможно, модель всегда "усваивает" одно и то же. Аугментация данных может помочь добавить новизны на каждом шаге.

  5. Пересмотр потерь: Используемый вами Huber loss — хороший выбор для задач, подверженных выбросам, но стоит попробовать другие функции потерь или их комбинации.

  6. Инструменты анализа: Используйте инструменты визуализации для глубокой аналитики весов и градиентов на каждом этапе обучения.

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

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

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