Ограничение обычной нейронной сети

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

Рассмотрим пример, в котором мы используем изображение с тремя цветовыми каналами размером 1 мегапиксель (высота 1000 x ширина 1000), тогда наш вход будет иметь характеристики 1000 x 1000 x 3 (3 миллиона). Если мы используем полностью связанный скрытый слой с 1000 скрытых единиц, тогда матрица весов будет иметь 3 миллиарда (3 миллиона X 1000) параметров. Таким образом, обычная нейронная сеть не масштабируется для классификации изображений, поскольку обработка таких больших входных данных требует больших вычислительных ресурсов и неосуществима. Другая проблема заключается в том, что большое количество параметров может привести к чрезмерной подгонке. Однако, когда дело доходит до изображений, кажется, что существует небольшая корреляция между двумя близко расположенными отдельными пикселями. Это приводит к идее свертки.

Что такое свертка?

Свертка - это математическая операция над двумя функциями для создания третьей функции, которая выражает, как форма одной изменяется другой. Термин свертка относится как к функции результата, так и к процессу ее вычисления [1]. В нейронной сети мы будем выполнять операцию свертки на матрице входного изображения, чтобы уменьшить ее форму. В приведенном ниже примере мы сворачиваем изображение в оттенках серого размером 6 x 6 с матрицей 3 x 3, называемой фильтром или ядром, для получения матрицы 4 x 4. Сначала мы возьмем скалярное произведение между фильтром и первыми 9 элементами матрицы изображения и заполним выходную матрицу. Затем мы проведем фильтр на один квадрат по изображению слева направо, сверху вниз и выполним тот же расчет. Наконец, мы создадим двумерную карту активации, которая дает ответы этого фильтра в каждой пространственной позиции матрицы входного изображения.

Проблемы со сверткой

1- Уменьшение вывода

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

2- Данные в углах изображения потеряны

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

Обивка

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

Мы видим, что, используя нулевое заполнение как 1, мы сохранили размер исходного изображения. Есть два распространенных варианта заполнения. «Действительный», когда мы используем P = 0, означает отсутствие заполнения вообще, а «То же», когда значение P выбрано таким образом, что размер выходного изображения равен размеру входного изображения. Что касается размера фильтра «F», рекомендуется выбирать нечетное число. Обычные варианты: 1, 3, 5, 7… и т. Д.

Свертка по изображениям RGB

Ранее мы видели операцию свертки на изображении в оттенках серого (6 X 6). Если наше изображение является RGB, то его размеры будут 6 X 6 X 3, где 3 обозначает количество цветовых каналов. Чтобы обнаружить особенности в изображениях RGB, мы используем фильтры с 3-мя измерениями, где 3-е измерение всегда будет равно количеству каналов.

Один уровень сверточной сети

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

Размеры сверточной сети

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

Уровень объединения

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

Максимальное объединение:

Давайте рассмотрим матрицу изображения 4 x 4, которую мы хотим уменьшить до 2 x 2. Мы будем использовать блок 2 x 2 с размером шага 2. Мы возьмем максимальное значение из каждого блока и зафиксируем его в нашей новой матрице.

Средний пул:

При объединении средних значений мы берем среднее значение каждого блока вместо максимального значения для каждого из четырех квадратов.

Архитектура сверточной нейронной сети

Нейронная сеть, которая имеет один или несколько сверточных слоев, называется сверточной нейронной сетью (CNN). Давайте рассмотрим пример глубокой сверточной нейронной сети для классификации изображений, где размер входного изображения составляет 28 x 28 x 1 (оттенки серого). На первом уровне мы применяем операцию свертки с 32 фильтрами 5 x 5, поэтому наш вывод станет 24 x 24 x 32. Затем мы применим объединение с фильтром 2 x 2, чтобы уменьшить размер до 12 x 12 x 32. ко второму слою мы применим операцию свертки с 64 фильтрами размером 5 x 5. Выходные размеры станут 8 x 8 x 64, к которому мы применим слой объединения с фильтром 2 x 2, и размер уменьшится до 4 x 4. x 64. Наконец, мы пропустим его через два полностью связанных слоя, чтобы преобразовать нашу матрицу изображения в матрицу классификации.

Заключительные слова

Мы узнали о сверточном слое, пуле и полностью связном слое. Теперь вопрос в том, как сделать комбинацию этих слоев для решения задач компьютерного зрения. На самом деле это искусство, и оно может варьироваться в зависимости от проблемы. Было проведено много исследований, и было представлено много архитектур CNN, таких как LeNet-5, AlexNet, VGG, ResNet… и т. Д. Рекомендуется всегда сначала применять эти архитектуры к вашей проблеме, а затем вносить необходимые изменения на основе интуиции и результатов. В следующей статье мы практически реализуем CNN с использованием Keras.

Ссылки

  1. Https://en.wikipedia.org/wiki/Convolution
  2. Сверточные нейронные сети, Эндрю Нг. (coursera.org)
  3. Основное обучение нейронных сетей и сверточных нейронных сетей, Джонатан Фернандес (LinkedIn.com/learning)

Эта статья изначально была опубликована на сайте engmrk.com

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