Давайте поговорим об одной из самых известных архитектур нейронных сетей: Convolution Neural Network (CNN). Этот тип сети отлично подходит для компьютерного зрения, что способствовало внедрению решений глубокого обучения за последнее десятилетие.

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

В сети MLP мы могли выбирать объекты для передачи во входной слой в любом порядке. Конечно, после выбора одного порядка мы должны обучать МЛП именно с этим порядком. Но для CNN все по-другому, поскольку данные имеют пространственную корреляцию, мы не можем выбирать порядок, в котором информация будет передаваться в CNN.

В изображении в градациях серого каждый пиксель (точка на экране) представляет собой число от 0 (черный) до 255 (белый), а количество пикселей зависит от разрешения изображения. Изображение 512х512 воспринимается компьютером как матрица 512х512. Для цветного изображения 512x512 мы должны сообщить три матрицы 512x512, одну для красного, одну для зеленого и одну для синего (в системе RGB). Таким образом, изображения обрабатываются как тензоры формы высота x ширина x канал, в примерах до тензора 512x512x1 и тензора 512x512x3.

В сети MLP есть веса, соединяющие нейроны одного слоя с другим, но в CNN есть некоторые линейные операции, соединяющие один слой с другим, такие как свертка и объединение.

свертка

Учтите, что у нас есть две непрерывные функции, функция f (вход) и функция g (ядро), поэтому свертка f и g равна

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

Одномерные свертки

На практике предположим, что у нас есть входные данные [2 1 4 1 1 0 3 2 2] и ядро ​​[2 0 -1], поэтому мы можем выполнить свертку следующим образом.

То есть мы делаем сумму умножения поэлементно и таким образом получаем наш результат.

Двумерные свертки

В двумерных данных дела обстоят интереснее. Учтите, что у нас есть входные данные I и ядро ​​​​K, как показано ниже.

Давайте вычислим свертку, чтобы получить карту объектов O. Рассмотрим пример ниже.

Действуя таким образом, мы имеем

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

В общем, мы можем написать что-то вроде

То есть

Или мы можем просто написать

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

Чтобы уменьшить размеры карты признаков, мы можем использовать большее ядро ​​(фильтр) или увеличить размер шага. Давайте сделаем ту же свертку, что и выше, но на этот раз мы увеличим шаг до 2.

Таким образом, мы можем рассчитать размерность карты объектов как

Где I — массив n x n, K — массив k x k, p — заполнение, а s — шаг.

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

Например, предположим, что у нас есть изображение размером 100 x 100 и ядро ​​​​размером 20 x 20 и шагом 2. Если мы применим это к нашему входу 13 раз, то слой будет представлять собой трехмерный массив формы 40 х 40 х 13.

Трехмерные свертки

Трехмерная свертка свертывается по глубине, а также по высоте и ширине. Предположим, что входные данные имеют размер 21 x 21 x 15 и ядро ​​размером 5 x 5 x 5 с шагом 1, тогда выходные данные будут иметь размер 17 x 17 x 11.

Этот тип свертки используется в задачах на поиск взаимосвязей в 3D. Например, сегментация объектов или обнаружение движения в видео.

Любопытно, что если мы выполним свертку данных размером n x n x t с ядром вида k x k x t, мы получим двумерный массив. Давайте посмотрим на один пример.

Предположим, что у нас есть цветное изображение в качестве входных данных с размерами 3x3x3 и ядро ​​​​размеров 2x2x3, поэтому входные данные

Делаем свертки в каждом канале

Итак, наш вывод

Мы можем записать это в математическом виде как

Объединение

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

Операция объединения не имеет параметров, поэтому ее нельзя «выучить» и настроить. Мы можем рассчитать размер карты объектов после объединения с помощью приведенного ниже выражения.

Предположим, что вход I 4x4 и максимальное объединение 2x2, как показано ниже, мы получим карту функций 3x3.

Предположим теперь тот же случай, но со средним объединением, и давайте использовать шаг 2.

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

На практике наиболее часто используемые свертки имеют размеры 3x3, 5x5 и 7x7, но можно использовать и другие порядки. Причина использования этих размеров заключается в том, что они менее требовательны к вычислительным ресурсам и обеспечивают такую ​​же производительность, как ядра большего размера.

Обзор CNN

Как мы видим, между MLP и CNN есть различия. В CNN каждый нейрон в последующем слое получает входные данные от небольшой локальной группы пикселей изображения; каждый нейрон в слое CNN имеет одинаковый вес; CNN являются трансляционными инвариантами, то есть один и тот же объект может быть обнаружен независимо от положения на изображении; CNN имеет меньше параметров, и наиболее часто используемыми функциями активации являются ReLU, PReLU и Exponential Linear Unit.

В целом архитектура CNN такова:

Как видно ниже.

До скорой встречи…

Все хорошо! Мы совершили путешествие по царству CNN. Надеюсь, вам понравилось и вы узнали в целом, как работает CNN. В следующем посте мы найдем еще одну очень интересную архитектуру — рекуррентную нейронную сеть (RNN). До скорой встречи!