Проблемы с переоснащением

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

Проще говоря, обученная модель слишком сложна, что приводит к следующему:
– чтобы достичь оптимальной сходимости (максимизации правдоподобия) на обучающем наборе (пространстве выборки), потери (y и yhat) сведены к минимуму.
– Применяя модель к тестовому набору или перекрестной проверке, мы видим большие потери.
– Обратите внимание, что здесь обсуждается только потеря, вы можно назвать это убытком, но есть и стоимость, на самом деле, стоимость представляет собой простое суммирование убытка всей > набор данных (обучение, перекрестная проверка или тестовый набор) и усредненные.

Классическое решение

Переоснащение определяется путем просмотра разницы в потерях или стоимости между обучающим набором и тестовым набором (также набором перекрестной проверки) и отмечая, что разница определяется искусственно. , рекомендуется функция linregress():

наклон, *_ = линейная регрессия (эпохи, val_loss)

Здесь val_loss — это средняя потеря всей перекрестной проверки. Можно сказать, что когда наклон превышает 0,00005, кривая val_loss определяется как слишком крутая и должна иметь переоснащение.

  • Хорошо выбирайте инструмент: Tensorflow, PyTorch, Sklearn
  • Используйте больше обучающих данных, насколько это возможно, не говоря уже о достаточном количестве.
    - Если есть отдельный обучающий набор, перекрестная проверка, тестовый набор, это лучше!
    - Гарантируется, что перекрестная проверка, тестовые наборы поступают из схожих регионов распространения, что позволяет избежать несоответствия между нашим обучением и практическим использованием.
    – Учебный набор должен содержать область распространения перекрестной проверки и тестового набора.
    – Если имеется только один набор, использовать коэффициент разделения в наборе данных:
    — 99 % обучение + перетасовка
    — 0,5 % перекрестная проверка
    — 0,5 % проверка
  • Если возможно, организуйте команду для создания данных синтеза.
  • Используйте увеличение изображения для компьютерного зрения, воздействие похоже на использование данных синтеза.
  • Назначить штрафы модели
     – Регуляризация, L2, L1 (предпочтительнее L2)
     – Отсев, предпочтительнее для компьютерного зрения и сверточной 2D-сети
  • Хорошо наблюдать за тем, последовательно ли уменьшаются потери на тестовом наборе, но если они появляются, небольшие повторяющиеся вверх и вниз (перерегулирование), вы можете попытаться позволить learning_rate уменьшаться вниз.
  • Сложность модели уменьшена надлежащим образом, при этом гарантируется небольшая разница в точности.
    - Уменьшение количества слоев
    - Уменьшение единиц слоев

Эталонное решение

  • Используйте PCA для уменьшения размерности объекта, иногда это работает.
  • Используйте пакетную нормализацию, она может обобщить модель.

Проблемы недообучения

Опять же, это типичная проблема машинного обучения, также называемая высоким смещением.

  • Модель находится на обучающем наборе с определенной степенью точности.
    – Модель не так точна, как должна быть на тестовом наборе или наборе перекрестной проверки, и подвержена ошибкам.

Классическое решение

  • Хорошо выбирайте инструмент: Tensorflow, PyTorch, Sklearn
  • Увеличивайте сложность модели соответствующим образом, при условии, что нет обширного переобучения.
  • НЕ слишком много регуляризации и отсева.

Для решения как переобучения, так и занижения

  • Попробуйте перенос обучения (повторное использование модели с предварительно обученным весом)
  • Выберите: Tensorflow, PyTorch, Sklearn
    - Никогда не стройте сеть с нуля, это не имеет смысла, кроме того, что вы хотите изучить концепцию.

Попытка дела

Используется в классических наборах данных IMDB и Sarcasm (их можно найти в Google) соответственно.
 — Одномерная сверточная нейронная сеть используется для IMDM, а затем переходит в полную связанный плотный слой.
- Для сарказма используется двунаправленная сеть LSTM, а затем переходит в полносвязный плотный слой.

Процесс оптимизации

  • Добавьте регуляризацию (L2) на сверточный слой или LSTM.
    - Дайте множитель L2, вы можете попробовать с одного десятичного знака, и вы обнаружите, что сеть не может быть обучена, если она слишком большой, что означает, что потери и точность не изменятся ни на обучающем, ни на тестовом наборе.
     – Попробуйте отрегулировать до двух знаков после запятой, обычно 0,02 больше или меньше. будет эффективным.
     – Обратите внимание, что тест будет выходить за пределы, то есть обучение и тестовый набор потери (потеря и val_loss) выглядят по-разному. дрожание вверх и вниз, иногда вверх и вниз.
  • Скорректируйте оптимизацию Адама:
     – Уменьшите learning_rate для перерегулирования.
     – эпсилон настроен на более классический 1e-8.
  • Отрегулируйте коэффициент разделения обучающего набора и тестового набора.

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

Случай 1

https://drive.google.com/file/d/1A-Q47OhC5701bBX4R2Ggb0cbY34ZCnB7/view?usp=sharing

Случай 2

https://colab.research.google.com/drive/1ynPQLjSyBqphhjDir_5RQkf-_RoZ7-rz?usp=sharing