Потеря на валидации и точность на валидации остаются неизменными в модели нейронной сети.

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

Я пытаюсь обучить модель регрессии на основе keras для предсказания эмоций музыки по аудиофичам. (Я новичок в нейронных сетях и делаю это как учебный проект.) У меня есть 193 признака для обучения/предсказания, и она должна предсказывать значения валентности и возбуждения.

Я подготовил модель нейронной сети с 5 слоями:

model = Sequential()
model.add(Dense(100, activation='elu', input_dim=193))
model.add(Dense(200, activation='elu'))
model.add(Dense(200, activation='elu'))
model.add(Dense(100, activation='elu'))
model.add(Dense(  2, activation='elu'))

И вот мои метрики потерь и оптимизации:

model.compile( loss = "mean_squared_error", optimizer="RMSprop", metrics=['accuracy'] )

Когда я пытаюсь обучить эту модель, я получаю следующий график потерь и валидации:

Таким образом, модель обучается и достигает точности >0.9 на обучающем наборе данных, но на тестовых данных точность не падает, а остается на уровне ~0.5.
enter image description here

Я не знаю, как интерпретировать этот график. Я не думаю, что это переобучение, потому что точность валидации не падает, а остается на том же уровне. Как я могу попытаться это исправить?

Обновление: Я попробовал добавить dropout и регуляризацию, и это сработало в том смысле, что теперь я четко вижу, что у меня проблема с переобучением. Но теперь я снова застрял. Я не могу заставить свою модель уменьшить потери валидации. Она всегда останавливается на уровне около 0.3 потерь валидации. Я пробовал менять архитектуру модели, предобработку данных, функцию оптимизации, и ничего не помогло.
enter image description here

Вы говорите, что это задача регрессии, предсказание значений валентности и возбуждения, хотя вы используете точность как метрику производительности. Это не имеет большого смысла, поэтому ваш график точности действительно мало что говорит. MSE является допустимой метрикой производительности для задач регрессии в целом, так что ваш график потерь более описателен того, что происходит. График потерь определенно демонстрирует характеристику переобучения, поэтому я бы порекомендовал добавить регуляризацию в вашу модель.

Это можно сделать, например, встроив dropout и L1/L2-регуляризацию.

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

model = Sequential()
model.add(Dense(100, activation='elu', input_dim=193))
model.add(Dense(200, activation='elu'))
model.add(Dense(200, activation='elu'))
model.add(Dense(100, activation='elu'))
model.add(Dense(2))

model.compile( loss = "mean_squared_error", optimizer="RMSprop", metrics=['mse'] )
```

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

Теория

Ваша задача заключается в обучении нейронной сети (НС) для предсказания эмоциональной окраски музыки, используя аудиофичи как входные данные. Вы пытаетесь предсказать значения валентности и возбуждения — два стандарта в измерении эмоционального восприятия музыки. Проблема, с которой вы столкнулись, заключается в том, что, хотя точность на обучающем наборе данных превосходит 0.9, точность на валидационном наборе остается примерно на уровне 0.5 и более того, валидационная потеря не уменьшается. Это намекает на явление в машинном обучении, известное как "переобучение" (overfitting).

"Переобучение" — это общая проблема, когда модель начинает адаптироваться не только к общей форме функции, но и к случайным шумам или спецификам обучающего набора данных, из-за чего её способность обобщаться на новых данных резко падает. Для борьбы с этим используют методы регуляризации, такие как "dropout" и L1/L2-регуляризация.

Пример

В контексте архитектуры вашей модели у вас есть пять слоёв. Вы используете активацию elu, за исключением выходного слоя, который должен использовать линейную активацию, так как вы решаете задачу регрессии. Однако проблема в том, что вы используете accuracy как метрику для задачи регрессии, что неправильно, так как точность больше применяется к задачам классификации. Для регрессии метрики, такие как mean_squared_error (MSE), более подходящие, из-за этого MSE и будет определять, насколько хорошо ваша модель работает.

Применение

  1. Изменение метрики:

    • Прежде всего, измените метрику с accuracy на mse, потому что использование точности в задаче регрессии неправильно интерпретирует результаты. Обновленная компиляция модели должна выглядеть так:
      model.compile(loss="mean_squared_error", optimizer="RMSprop", metrics=['mse'])
  2. Регуляризация:

    • Попробуйте добавить dropout между слоями. Это поможет избежать переобучения, случайно отключая веса во время тренировки.
    • Добавьте L2-регуляризацию в полносвязные слои:

      from keras.regularizers import l2
      
      model.add(Dense(100, activation='elu', input_dim=193, kernel_regularizer=l2(0.01)))
      model.add(Dense(200, activation='elu', kernel_regularizer=l2(0.01)))
      # и так далее...
  3. Проверка данных:

    • Будьте уверены, что ваши входные данные правильно нормализованы либо стандартизированы. Neural Networks могут чувствительно относиться к масштабу данных.
  4. Изменение архитектуры:

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

    • Попробуйте изменить параметры обучения, такие как скорость обучения. Модифицируйте optimizer, например Adam, и попробуйте разное значение learning rate. Настройка гиперпараметров может значительно повлиять на производительность модели.
  6. Кросс-валидация:

    • Используйте кросс-валидацию, чтобы быть уверенным, что модель производит одинаково хорошо на всех разделах данных.

Заключение

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

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

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