Проблемы с переоснащением
Это очень типичная проблема машинного обучения, также называемая высокой дисперсией.
Проще говоря, обученная модель слишком сложна, что приводит к следующему:
– чтобы достичь оптимальной сходимости (максимизации правдоподобия) на обучающем наборе (пространстве выборки), потери (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