Как автоматически определить, конвергент ли процесс обучения модели глубокого обучения?

avatar
Fengfan Zhou
9 августа 2021 в 06:27
118
1
2

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

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

Поэтому я хотел бы знать, существует ли алгоритм или пакет, который может автоматически определять, сходится ли процесс обучения модели глубокого обучения.

Кто-нибудь может мне помочь?

Большое спасибо.

Источник

Ответы (1)

avatar
Joseph Budin
9 августа 2021 в 10:38
3

Рискуя вас разочаровать, я считаю, что такого универсального алгоритма не существует. По моему опыту, это зависит от того, чего вы хотите достичь, какие показатели важны для вас и сколько времени вы готовы отдать на обучение.

  • Я уже наблюдал резкое увеличение потерь при проверке (признак переобучения), в то время как другие показатели (в данном случае mIoU) по-прежнему улучшались в наборе проверки. В этих случаях вам необходимо знать, что является вашей целью.

  • Возможно (хотя это и очень редко), что ваш убыток будет увеличиваться в течение значительного периода времени, прежде чем снова уменьшится и достигнет более высокого уровня, чем раньше. Это невозможно предвидеть.

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

Если вам действительно нужен алгоритм, я бы предложил этот довольно простой:

  1. Вычислить метрику проверки M(i) после каждой iй эпохи в фиксированном подмножестве вашего набора проверки или всего набора проверки. Допустим, чем выше M(i), тем лучше. Исправьте k целое число в зависимости от продолжительности одной тренировочной эпохи (k~3 должно помочь)
  2. Если для некоторого n у вас есть M(n) > max(M(n+1), ... M(n+k)), остановите и сохраните сеть, которая была у вас в эпоху n.

Это далеко не идеально, но для простых задач должно хватить.

[Изменить] Если вы еще не используете его, я предлагаю вам использовать TensorBoard, чтобы визуализировать эволюцию ваших показателей на протяжении всего обучения. После настройки вы сэкономите много времени.