Наиболее полное руководство по сверточной нейронной сети

Что вы видите, когда смотрите на эту картинку?

Рисунок женщины, но если вы сосредоточитесь исключительно на черной части, что вы увидите?

Да, рисунок мужчины, держащего саксофон.

Давайте посмотрим на другой пример. Что вы видите, когда смотрите на эту картинку?

Утка открывает рот, но если вы сосредоточитесь на его затылке, вы увидите кролика.

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

Так что же такое сверточная нейронная сеть?

Вообще говоря, сверточные нейронные сети, сокращенно CNN, представляют собой специализированный вид нейронной сети, которая имеет дело со структурой, подобной сетке. У них есть множество приложений (обработка естественного языка, классификация изображений, финансовые временные ряды ...), но они обычно используются для анализа визуальных образов.

В этой статье мы исследуем тонкости сверточной нейронной сети, начав с объяснения термина свертка в более широком смысле слова, а затем того, как он применяется в контексте CNN. Затем мы более подробно рассмотрим строительный блок сверточной архитектуры.

Операция свертки:

Интуитивно свертка описывает значения функции f с помощью другой функции g. Например, предположим, что у вас есть специальная лазерная указка, которая делает форму сердца на стене. Если собрать связку этих лазерных указок в форме круга. Узор на стене теперь представляет собой свертку сердца с кругом.

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

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

В демонстрационных целях мы будем использовать следующее изображение:

Допустим, мы хотели определить края этого изображения. Это потребует взятия разницы в пикселях в некоторых небольших областях вокруг каждой точки изображения. Вместо того, чтобы давать каждому локальному пикселю одно и то же «представление» в процессе дифференциации рядом с определенной точкой, мы бы использовали ядро ​​Собеля, чтобы дать положительный «вес» на определенной стороне локального пикселя, соответственно, в зависимости от расстояния от точки и отрицательный «вес» на противоположной стороне.

При применении детектора края Собеля полученное изображение выглядит следующим образом:

Математическая формула:

Однако, поскольку изображение не является непрерывной функцией, как мы видели ранее, формула принимает следующий вид:

Изображение имеет конечный набор пикселей, поэтому суммирование осуществляется по ограниченному количеству значений и поскольку входные данные обычно являются многомерными массивами, поэтому, представляя как изображение I, так и ядро ​​K матрицами, операция становится.

А теперь давайте перейдем к фактическим строительным блокам CNN.

Существует два обычно используемых набора терминов для описания этих уровней. Первый описывает каждый уровень как сложный уровень с несколькими этапами, второй терминология разделяет сложный уровень на несколько простых уровней.

Мы будем использовать терминологию сложных слоев.

Сверточный слой:

Этап 1- свертки:

Судя по названию, именно здесь происходит печально известная операция свертки. Анимация ниже демонстрирует операцию свертки входного изображения 6x6 с ядром 3x3.

Эта анимация подчеркивает очень важные особенности CNN.

Если мы посмотрим на каждую ячейку как на единицу в CNN, то, как вы можете видеть, карта характеристик связана только с небольшой частью ввода (которую мы называем рецептивным полем), что сильно отличается от в обычных нейронных сетях, где каждый выход подключен ко всем входам, эта функция называется разреженной связью. Это означает, что нам нужно хранить меньше параметров, что снижает требования модели к памяти и повышает ее эффективность, поскольку для вывода требуется меньше операций.

Еще одна интересная особенность, которую мы можем вывести, заключается в том, что мы используем только 9 параметров для всех подключений между устройствами в обычной нейронной сети, для каждого подключения есть другой параметр, если вы объедините это с тем фактом, что каждый выход в нормальной нейронной сети подключен. для всех входов у нас будет 36 * 36 = 1296 параметров с этим относительно небольшим изображением и с использованием одного ядра, но в CNN мы используем только 9 параметров, что является огромным уменьшением объема памяти, эта функция называется совместное использование параметров .

В CNN эта конкретная форма совместного использования параметров приводит к тому, что слой имеет другое свойство, которое является эквивалентностью трансляции, это означает, что если изображение (I) сдвигается (Ishift), свернутое изображение исходного изображения Conv (I) сдвигается на ту же величину. равна свертке Ishift. Другими словами, Conv (Ishift) = Conv (I) shift, что очень полезно, потому что функция будет обнаруживаться даже при нескольких переводах, что делает модель более надежной.

Этап с двумя детекторами:

Сверточные нейронные сети предназначены для захвата некоторых функций из изображений, начиная с основных функций на начальном уровне и функций очень высокого уровня на более глубоких уровнях. Под высоким уровнем я имею в виду функции, более общие для определенного класса. Такое обобщение невозможно с линейным отображением, поэтому мы вводим нелинейности, используя функцию активации, такую ​​как Relu, tanh,…

Этап 3 объединения:

Объединение в пул состоит из замены выходных данных в определенном месте на сводную статистику из ближайшего примера выходных данных с использованием max-pooling:

Максимальное объединение обеспечивает частичную инвариантность к небольшим трансляциям, поскольку максимальное значение области зависит только от единственного наибольшего элемента. Если небольшой перевод не приводит к появлению нового самого большого элемента на краю области объединения, а также не удаляет самый большой элемент, выводя его за пределы области объединения, то максимальное значение не изменяется. Таким образом, max-pooling помогает модели быть инвариантной для перевода.

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

Объединение по пространственным областям обеспечивает инвариантность к трансляции, но если мы объединим выходные данные сверток с использованием ядер с разными параметрами, функции могут узнать, какие преобразования должны стать инвариантными.

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

Давайте начнем с заполнения или, точнее, заполнения нулями, которое представляет собой просто действие добавления других ячеек в сетку с нулевым значением. Этот простой трюк помогает нам контролировать размер ввода.

например, вот свертка без заполнения или то, что мы называем действительной сверткой:

а вот свертка со специальным заполнением, которую мы называем той же сверткой, потому что она поддерживает тот же размер входных данных.

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

возьмем предыдущий пример:

шаг 1:

шаг 2:

размер вывода o ввода шириной i с размером ядра k и заполнением stride s и p определяется по формуле :

После того, как наш ввод прошел несколько сверточных слоев, окончательный вывод будет сглажен и передан в обычную нейронную сеть с выходным слоем Softmax для классификации.

Обзор CNN: