Вопрос или проблема
Я обучаю сеть для предсказания дельты между восемью соответствующими 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), сеть быстро сходится к локальному минимуму:
Однако они не равны нулю и далее не улучшаются.
В то же время, веса близки к неподвижным на основе гистограммы (это также применимо к другим слоям):
в то время как соответствующие градиенты далеки от насыщения:
В то же время, смещения имеют намного лучшую динамику:
и соответствующие градиенты:
Оптимизатор Adam
с lr=1e-3
(я также пробовал SGD и другие значения скорости обучения).
У меня есть два вопроса на основе графиков:
- Почему потери стабилизируются на локальном минимуме, учитывая стабильные градиенты?
- Почему оптимизатор не обновляет веса, учитывая достаточно высокую скорость обучения и относительно крупные градиенты (имея отрицательные градиенты, я ожидал бы увеличения весов, их распределение постепенно смещается вправо на гистограмме)?
Ответ или решение
Теория
Когда работаем с оптимизацией нейронных сетей, важными компонентами являются выбор оптимизатора и настройка гиперпараметров, таких как скорость обучения, которая сильно влияет на сходимость модели. Алгоритм Adam (Adaptive Moment Estimation) — популярный выбор, так как он сочетает в себе преимущества двух других методов: AdaGrad и RMSProp, обеспечивая адаптивное обновление параметров модели. Тем не менее, при определенных условиях даже оптимизаторы, такие как Adam, могут сталкиваться с проблемами, как это случилось в вашей модели.
Ваши два основных вопроса касаются исчезновения улучшения потерь, несмотря на ненасыщенные градиенты и кажущуюся статичность весов, несмотря на их большие градиенты. Это может происходить по нескольким причинам:
-
Переобучение или недообучение: поскольку модель быстро достигает локального минимума, она может просто не иметь достаточной сложности для захвата данных. Либо, возможно, модель переобучилась на начальных данных.
-
Асимметрия архитектуры: учитывая вашу архитектуру, асимметрия размеров слоев может также влиять на процесс обучения, особенно если у межслойных переходов нет необходимой сложности для корректного обучения.
-
Игра гиперпараметров: зачастую причина кроется в неправильных настройках гиперпараметров, даже если они кажутся оптимальными.
Пример
Рассмотрим гипотетическую проблему, когда в модели, аналогичной вашей, применяется алгоритм Adam, и она сталкивается с проблемой стагнации в локальном минимуме. Посмотрим, как изменения в гиперпараметрах, таких как объем нагрузки, планировщик скорости обучения или добавление регуляризации, могут изменить ситуацию. Например, до настройки гиперпараметров модель стабильно достигала точки равновесия, однако, добавление гибкости через увеличение количества нейронов, а также использования dropout, может сместить её из локального минимума в глобальный.
Применение
-
Изменение структуры модели: Возможно, ваша архитектура предусматривает узкие места, которые ограничивают способность модели обучаться. Попробуйте увеличить число нейронов в слоях или добавить дополнительные слои.
-
Регуляризация и Dropout: Если есть подозрения на переобучение, стоит попробовать регуляризацию или dropout, чтобы улучшить обобщающую способность сети.
-
Адаптация скорости обучения: Ваше текущее значение — 1e-3, но возможно стоит использовать планировщик скорости обучения, который динамически снижает lr по мере достижения определённых точек.
-
Аугментация данных: Проверьте методику предобработки данных; возможно, модель всегда "усваивает" одно и то же. Аугментация данных может помочь добавить новизны на каждом шаге.
-
Пересмотр потерь: Используемый вами Huber loss — хороший выбор для задач, подверженных выбросам, но стоит попробовать другие функции потерь или их комбинации.
-
Инструменты анализа: Используйте инструменты визуализации для глубокой аналитики весов и градиентов на каждом этапе обучения.
Таким образом, решение ваших вопросов требует системного подхода к анализу и оптимизации процесса обучения. Пробуйте различные комбинации предложенных стратегий и наблюдайте, как это влияет на динамику тренировки модели. Надеюсь, эти нормы помогут вывести вашу модель из состояния стагнации и достичь желаемого улучшения потерь.