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

Архитектура DCNN

1. Сверточный слой + Relu
2. Пулирующий слой
3. Полностью подключенный слой
4. Исключение
5. Функции активации

1. Сверточный слой + Relu

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

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

2. Слой объединения

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

В Max Pooling самый большой элемент берется из карты объектов. Пул среднего значения вычисляет среднее значение элементов в разделе изображения предопределенного размера. Общая сумма элементов в предопределенном разделе вычисляется в Sum Pooling. Слой пула обычно служит мостом между сверточным слоем и уровнем FC.

3. Полностью связанный слой

Слой Fully Connected (FC) состоит из весов и смещений вместе с нейронами и используется для соединения нейронов между двумя разными слоями. Эти слои обычно размещаются перед выходным слоем и образуют несколько последних слоев архитектуры CNN.

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

4. Отсев

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

Чтобы преодолеть эту проблему, используется слой отсева, при котором несколько нейронов удаляются из нейронной сети в процессе обучения, что приводит к уменьшению размера модели. При прохождении отсева 0,3 30% узлов случайным образом выпадают из нейронной сети.

5. Функции активации

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

Это добавляет нелинейность в сеть. Существует несколько часто используемых функций активации, таких как ReLU, Softmax, tanH и сигмовидные функции. Каждая из этих функций имеет определенное применение. Для модели CNN с бинарной классификацией предпочтительны сигмовидные и softmax-функции, а для многоклассовой классификации используется softmax.

Как работает DCNN?

CNN сравнивает изображения по частям. Части, которые он ищет, называются функциями, которые представляют собой не что иное, как набор матриц MxM с числами (изображения - это не что иное, как числовые матрицы MxM значений пикселей для компьютера). Находя грубые совпадения признаков примерно в одинаковых позициях на двух изображениях, CNN намного лучше видят сходства, чем схемы сопоставления всего изображения. Однако при представлении нового изображения CNN не знает точно, где эти функции будут совпадать, поэтому она пробует их везде, во всех возможных позициях (поэтапно сопоставляет матрицы функций, сдвигая определенные шаги за раз). При вычислении соответствия признаку по всему изображению мы делаем его фильтром. Математика, которую мы используем для этого, называется свертка, от которой сверточные нейронные сети получили свое название.

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

Теперь наступает этап, когда мы вводим в нашу модель так называемую «нелинейность», чтобы наша модель могла предсказывать и изучать нелинейные границы. Очень распространенный способ сделать это — использовать нелинейную функцию (например, Relu, gelu). Самая популярная нелинейная функция — RELU, которая выполняет простую математическую операцию: везде, где встречается отрицательное число, замените его на 0. Это помогает CNN оставаться математически здоровым, не давая полученным значениям застревать около 0 или раздуваться до бесконечности. . Обратите внимание, что эта операция свертки + Relu может создавать массивные карты объектов, и очень важно уменьшить размер карты объектов, сохранив при этом идентифицированный объект.

Объединение — это способ брать большие изображения и уменьшать их, сохраняя при этом наиболее важную информацию. Он состоит из перемещения небольшого окна по изображению и взятия максимального значения из окна на каждом шаге. На практике хорошо работает окно в 2 или 3 пикселя по стороне и шаг в 2 пикселя. Слой объединения — это просто операция объединения изображения или набора изображений. На выходе будет такое же количество изображений, но каждое из них будет иметь меньше пикселей. Это также полезно для управления вычислительной нагрузкой.

После выполнения желаемого количества операций свертки (в зависимости от разработанной модели) настало время использовать возможности нейронных сетей глубокого обучения, чтобы использовать весь потенциал операций, выполненных на более ранних этапах. Но прежде чем мы передадим объединенные карты объектов в нейронную сеть для обучения, нам нужно сгладить матрицы. Причина очень очевидна: нейронная сеть принимает на вход только одно измерение. Поэтому мы складываем их, как кирпичики Lego. В конце концов, необработанные изображения фильтруются, исправляются и объединяются для создания набора уменьшенных, отфильтрованных по функциям изображений, и теперь они готовы отправиться в мир нейронов (нейронная сеть).

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

Именно так работает Deep CNN. На приведенном ниже рисунке подытожено то, о чем мы говорили выше.

Рекомендации по модели DCNN (настройка гиперпараметров)

К сожалению, не каждый аспект CNN можно изучить так просто. Существует еще длинный список решений, которые должен принять дизайнер CNN.

  • Сколько функций для каждого слоя свертки? Сколько пикселей в каждой функции?
  • Какой размер окна для каждого слоя пула? Какой шаг?
  • Какую функцию следует использовать? Сколько эпох? Любая ранняя остановка?
  • Сколько скрытых нейронов для каждого дополнительного полносвязного слоя? и так далее...

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

И лучший способ определиться – сделать и увидеть самому.

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

https://colab.research.google.com/drive/1gXenThfIViK2v14WJ2D-U9U3hcW5QjC3?usp=sharing

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

Рекомендации

MIT 6.S191: Сверточные нейронные сети https://youtu.be/AjtX1N_VT9E

CNN: Объяснение сверточных нейронных сетей — Computerphile https://youtu.be/py5byOOHZM8

Слои CNN — архитектура глубокой нейронной сети PyTorch https://youtu.be/IKOHHItzukk