Резюме статьи и код.
Глубокие сверточные нейронные сети привели к ряду прорывов в решении задач классификации изображений.
Такие вызовы, как ILSVRC и COCO, заставили людей использовать все более глубокие модели для достижения лучших результатов. Очевидно, что глубина сети имеет решающее значение.
Из-за сложной природы реальных задач или проблем, возникающих в глубоких нейронных сетях, размер сетей неизбежно увеличивается, если кто-то хочет достичь высокого уровня точности в задачах глубокого обучения. Причина в том, что сети необходимо извлекать большое количество критических шаблонов или функций из обучающих данных и изучать очень сложные, но подразумевающие полные представления, из их комбинаций, на более поздних уровнях в сети, из необработанных входных данных, таких как разноцветные изображения с высоким разрешением. .
Без значительной глубины сеть не сможет комбинировать сложные функции малого / среднего / высокого уровня гораздо более сложными способами, чтобы на самом деле УЗНАТЬ сложную природу, присущую проблема решается с необработанными данными.
Следовательно, первым решением сложных проблем было сделать ваши нейронные сети действительно глубокими Deeeeeeeeeeeeeeeeeeeeeeeep. Для экспериментов и исследовательских целей глубина некоторых сетей была установлена на уровне более 100 слоев, чтобы обеспечить высокое понимание и точность обучения для рассматриваемой проблемы.
Итак, авторы статьи Deep Residual Networks задали один очень важный, но игнорируемый вопрос: Так же легко изучить лучшие сети, как наложить больше слоев?
Однако попытка этого однако оказалась крайне неэффективной и не дала ожидаемого прироста производительности. Причина, спросите вы!
Теоретически, когда количество слоев в простой нейронной сети увеличивается, она должна предоставлять нам все более сложные представления, что приводит к лучшему обучению и, следовательно, к более высокой точности. Вопреки распространенному мнению, эксперименты показали, что с увеличением количества слоев точность поезда сети начала падать. См. Изображение ниже.
Из статьи: Когда более глубокие сети могут начать конвергенцию, возникает проблема деградации: с увеличением глубины сети точность становится насыщенной (что может быть неудивительно), а затем быстро ухудшается. Неожиданно такое ухудшение не вызвано переобучением, а добавление большего количества слоев к достаточно глубокой модели приводит к более высокой ошибке обучения.
Итак, чтобы решить проблему деградации, авторы ввели структуру глубокого остаточного обучения как часть гипотезы, надеясь решить эту проблему.
Идея состоит в том, что вместо того, чтобы позволить слоям изучать лежащее в основе отображение, позвольте сети соответствовать остаточному отображению. Итак, вместо того, чтобы сказать H (x), начальное отображение , пусть сеть соответствует, F (x): = H (x) -x, что дает H (x): = F (x) + Икс
Подход состоит в том, чтобы добавить ярлык или пропустить соединение, который позволяет информации перемещаться, ну просто скажем, более легко от одного уровня к следующему. следующий уровень, то есть вы пропускаете данные вместе с обычным потоком CNN от одного уровня к следующему уровню после непосредственно следующего.
Остаточный блок:
Как это помогает?
По предположению авторов: добавление пропуска соединения не только позволяет данным легко перемещаться между уровнями, но и позволяет очень тривиально изучить функцию идентификации, что позволяет передавать одну и ту же информацию без преобразований. Сеть способна лучше учиться, если на ее стороне есть сопоставление идентичности, поскольку изучение возмущений, связанных с сопоставлением идентичности, проще, чем научиться функционировать в качестве нового с нуля.
ResNet использует два основных строительных блока для построения всей сети.
первый - это блок идентификатора, такой же, как указано выше.
Второй компонент - это блок Conv.
Блок Conv помогает изменять входящие данные и реструктурировать так, чтобы выходные данные первого слоя соответствовали размерам третьего уровня и могли быть добавлены вместе.
Эти строительные блоки помогают создать лучшую и точную модель глубокого обучения. Однако код, который я включил, использует другой подход для пакетной нормализации и Relu.
Результаты на бумаге!
34-слойная ResNet работает лучше, чем 18-слойная ResNet и простой счетчик. Таким образом, проблема деградации была решена в глубокой ResNet лучше, чем в более мелкой сети, как простой, так и ResNet.
Для более глубоких сетей (50 и выше) авторы в целях экономии ввели архитектуры узких мест.
Основываясь на глубоких остаточных сетях, авторы заняли 1-е места по нескольким направлениям в соревнованиях ILSVRC & COCO 2015: обнаружение ImageNet, локализация ImageNet, обнаружение COCO и сегментация COCO.
Варианты ResNet:
КОД:
Репозиторий находится по адресу: https://github.com/MANU-CHAUHAN/deep-residual-net-image-classification
Приведенный выше код включает возможность передавать динамические размеры изображений во время обучения, т.е. позволяет модели быть независимой от размера входного изображения!
Первоначальный код был вдохновлен разными источниками, в основном с https://github.com/raghakot/keras-resnet.
Вывод:
ResNet позволяет достичь более высокой точности по сравнению с обычными сетями и более ранними подходами.
И можно было подумать, что после появления ResNets мир жил счастливо.
Но этого не произошло! Действительно, существовали лучшие подходы, ожидающие, чтобы мир увидел. О чем я расскажу в отдельных статьях.