Резюме статьи и код.

Глубокие сверточные нейронные сети привели к ряду прорывов в решении задач классификации изображений.

Такие вызовы, как 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 мир жил счастливо.

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