Обычно нейронным сетям требуется время, чтобы «включиться» во время тренировки?

10

Я пытаюсь обучить глубокую нейронную сеть для классификации, используя обратное распространение. В частности, я использую сверточную нейронную сеть для классификации изображений, используя библиотеку Tensor Flow. Во время тренировок я испытываю какое-то странное поведение, и мне просто интересно, типично ли это, или я что-то делаю не так.

Итак, моя сверточная нейронная сеть имеет 8 слоев (5 сверточных, 3 полностью связанных). Все весовые коэффициенты и смещения инициализируются небольшими случайными числами. Затем я устанавливаю размер шага и приступаю к тренировкам с использованием мини-пакетов с использованием Adam Optimizer Tensor Flow.

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

Затем, внезапно, потеря тренировки резко уменьшается. Например, в течение примерно 10 циклов данных тренировки точность обучения составляет от 20% до 80%. С этого момента все заканчивается тем, что хорошо сходится. То же самое происходит каждый раз, когда я запускаю обучающий конвейер с нуля, и ниже приведен график, иллюстрирующий один пример выполнения.

введите описание изображения здесь

Итак, меня интересует, является ли это нормальным поведением с обучением глубоким нейронным сетям, в результате чего требуется некоторое время, чтобы «включиться». Или, скорее всего, я что-то делаю не так, что вызывает эту задержку?

Огромное спасибо!

Karnivaurus
источник
Думаю, я немного опоздал на вечеринку. Но, возможно, я все еще могу добавить некоторую ценность к разговору. Так ... для меня это звучит как функция активации сигмовидной кишки. Поскольку производная сигмоида мала для очень малых или очень больших значений, обучение может быть медленным для «насыщенных нейронов». К сожалению, я не могу точно сказать, каков ваш CNN из описания, которое вы дали.
Нима Мусави

Ответы:

7

Тот факт, что алгоритму потребовалось некоторое время для «запуска», не особенно удивителен.

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

Клифф AB
источник