Я пытаюсь обучить глубокую нейронную сеть для классификации, используя обратное распространение. В частности, я использую сверточную нейронную сеть для классификации изображений, используя библиотеку Tensor Flow. Во время тренировок я испытываю какое-то странное поведение, и мне просто интересно, типично ли это, или я что-то делаю не так.
Итак, моя сверточная нейронная сеть имеет 8 слоев (5 сверточных, 3 полностью связанных). Все весовые коэффициенты и смещения инициализируются небольшими случайными числами. Затем я устанавливаю размер шага и приступаю к тренировкам с использованием мини-пакетов с использованием Adam Optimizer Tensor Flow.
Странное поведение, о котором я говорю, заключается в том, что примерно в течение первых 10 циклов в моих данных о тренировках потери при обучении, как правило, не уменьшаются. Веса обновляются, но потери при обучении остаются примерно на одном уровне, иногда повышаясь, а иногда снижаясь между мини-партиями. Это остается таким некоторое время, и у меня всегда складывается впечатление, что потери никогда не уменьшатся.
Затем, внезапно, потеря тренировки резко уменьшается. Например, в течение примерно 10 циклов данных тренировки точность обучения составляет от 20% до 80%. С этого момента все заканчивается тем, что хорошо сходится. То же самое происходит каждый раз, когда я запускаю обучающий конвейер с нуля, и ниже приведен график, иллюстрирующий один пример выполнения.
Итак, меня интересует, является ли это нормальным поведением с обучением глубоким нейронным сетям, в результате чего требуется некоторое время, чтобы «включиться». Или, скорее всего, я что-то делаю не так, что вызывает эту задержку?
Огромное спасибо!