Я видел графики ошибок тестирования / обучения, внезапно падающих в определенные эпохи несколько раз во время обучения нейронной сети, и мне интересно, что вызывает эти скачки производительности:
Это изображение взято из Kaiming He's Github, но подобные графики появляются во многих статьях.
conv-neural-network
libphy
источник
источник
Ответы:
Они изменили скорость обучения. Обратите внимание, что падение происходит ровно в 30 и 60 эпох, очевидно, кто-то устанавливает его вручную.
источник
Подумайте о «ландшафте оптимизации». Например, если у вас была сеть только с двумя весами, вы могли бы построить все комбинации этих двух весов на поверхности, где высота в каждой точке представляет величину ошибки, которую возвращает ваша функция стоимости, если вы используете это (x, y ) координировать как ваши два веса. Вы пытаетесь перейти к самой низкой точке на этой поверхности, чтобы получить самый низкий уровень ошибки.
Иногда проблема заключается в том, что поверхность может стать довольно сумасшедшей, особенно в сетях с миллионами параметров вместо двух. Вы можете застрять в седловых точках, где прогресс замедляется, а затем внезапно перекидывается назад в нисходящий холм.
Вот анимация, чтобы помочь визуализировать это. Как вы можете видеть, более простые алгоритмы градиентного спуска застревают в этих позициях намного легче.
Для этого могут быть и другие причины, но об этом вы чаще всего слышите. Вполне возможно, что в сети может быть группа юнитов, получающих насыщенные активации (или в случае relu - юнит, который активируется только очень небольшим количеством тренировочных входов), и когда один юнит выходит из насыщения, он запускает цепную реакцию, которая выводит остальное из насыщения, и веса внезапно получают ускорение градиентного потока? Я не рассматривал ничего подобного, но мне было бы интересно, если у кого-то есть другие причины, чтобы добавить.
источник