Почему значение потерь моей модели возрастает?

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

Я экспериментирую с ML5JS и Mediapipe, чтобы обучить модель на языке жестов (в частности, движущихся жестах). Мой код заставляет mediapipe собирать 3780 кадров, обрабатывать их и сохранять в переменной, которая выглядит так:

    {
      "label": "wave",
      "vector": [        
        0.7023592591285706,
        0.9515798091888428,
        (и так далее (всего 3790)
      ]
    }, (еще 34 примера)

У меня есть 3 позы с примерно 35 примерами в общей сложности. Когда я заставляю ML5 обучаться (с помощью нейронной сети), значение потерь, похоже, увеличивается.

График, показывающий, что значение моих потерь увеличивается с первой эпохи

У моей модели следующие параметры: скорость обучения: 0.15 эпох: 30 скрытых юнитов: 20. Я пробовал изменить количество скрытых юнитов на 2 и настроить скорость обучения на 0.0015, в случае если проблема заключается в переобучении, это не влияет на результаты.

Что вызывает увеличение значения потерь? Может быть, это результат маленького размера пакета?

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

Повышение значения потерь (loss value) вашей модели может быть вызвано несколькими факторами. Давайте разберем наиболее распространенные причины и возможные решения вашей проблемы.

  1. Слишком высокий темп обучения (learning rate):
    Вы указали, что у вас темп обучения 0.15, что является довольно высоким значением. Высокий темп обучения может привести к тому, что модель слишком быстро обновляет свои веса, что может вызвать колебания и, как следствие, увеличение значения потерь. Рекомендуется начать с более низкого значения обучения, например, 0.01 или 0.001, и затем провести обучение с таким значением.

  2. Нехватка данных:
    У вас всего 35 примеров для трех классов. Это может быть недостаточно, чтобы модель эффективно обобщала данные. Рассмотрите возможность увеличения объема обучающего набора. Соберите больше примеров для каждой из ваших поз или используйте аугментацию данных для создания дополнительных образцов на основе существующих.

  3. Размерность входных данных:
    Вы упомянули, что входные данные представляют собой вектор из 3790 значений. Если данные слишком сложные или содержат много шумов, это может усложнить задачу для сети. Убедитесь, что данные предобработаны (например, нормализованы), и подумайте о снижении размерности, если это необходимо.

  4. Архитектура модели:
    У вас 20 скрытых юнитов, что может быть недостаточно для выявления сложных паттернов. Попробуйте увеличить количество скрытых юнитов, либо применять более глубокую архитектуру (добавив дополнительные слои), чтобы улучшить способность модели к обобщению.

  5. Параметры обучения:
    Вы упомянули, что пробовали различные параметры, включая количество скрытых юнитов и темп обучения. Экспериментируйте с другими значениями и комбинациями этих параметров. Например, попробуйте использовать оптимизаторы типа Adam или RMSprop, которые автоматически настраивают темп обучения в процессе обучения.

  6. Проблемы с затуханием или взрывом градиентов:
    Высокие значения градиентов могут привести к их взрыву, что, в свою очередь, влияет на величину потерь. Если вы наблюдаете резкие изменения в значениях потерь, это может быть признаком проблемы. Рассмотрите возможность использования методов нормализации, таких как нормализация батчей (Batch Normalization) или градиентный клиппинг (Gradient Clipping), чтобы контролировать значения градиентов.

  7. Размер батча (batch size):
    Небольшие размеры батчей могут привести к более нестабильным обновлениям весов, что может вызывать колебания в значениях потерь. Попробуйте увеличить размер батча, чтобы получить более стабильные обновления.

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

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

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