В этой статье я расскажу, что такое сверточная нейронная сеть, и покажу пример на Python с использованием Tensorflow.

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

Основная причина появления сверточных нейронных сетей заключается в том, что некоторые задачи глубокого обучения настолько сложны, что полностью связанные нейронные сети (нейронные сети, в которых каждый нейрон соединен со всеми остальными нейронами в последующем слое ; также называется плотным слоем —AlgoExpert.io) не может эффективно их решать. Действительно, в задачах Обработка естественного языка и особенно в задачах Компьютер Зрение количество признаков (параметров) часто очень велико, что приводит к оптимизация, которая требует огромного количества сил и времени. Например, нейронной сети, обучающейся на изображении размером 100x100 пикселей (10 000 пикселей), потребуются миллионы соединений и весов, поскольку для обучения она использует все изображение целиком.

Мы можем представить CNN с помощью того, что мы называем Неокогнитрон, который представляет собой многослойную нейронную сеть, которая в первую очередь находит простые шаблоны на входных данных (в первом слое — S-клетки), а более сложные — во втором слое ( С-клетки). Это идея сверточных нейронных сетей, и мы ее сейчас увидим.

Как работает сверточная нейронная сеть?

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

Сверточные слои

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

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

Прежде чем идти дальше, мы должны иметь в виду, что изображения представлены красным, зеленым, синим яркостью пикселей или после оттенка серого. strong> (преобразование цветового пространства пикселей в уникальное число от 0 до 255). В первом случае у нас есть 3 канала, а во втором — только 1 канал. Мы можем думать о каналах как об изображении, представленном числом для каждого пикселя либо для каждого цвета в представлении RGB, либо для каждого пикселя после масштабирования по серому. В обоих случаях слой будет выполнять почти одинаковую работу.

Что такое рецептивное поле?

Рецептивное поле в сверточном слое:

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

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

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

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

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

Какова цель такого слоя?

… поиск шаблонов, составляющих входное изображение, путем оптимизации весов внутри ядра фильтрации на основе функции потерь.

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

Что вам нужно знать, так это то, что одно рецептивное поле относится к каждому пикселю изображения, а это означает, что новое изображение представляет собой один шаблон. Но сверточный слой обычно имеет много «новых изображений», каждое из которых представляет другой шаблон. Они называются картами объектов и обычно варьируются от 1 до 500+. Каждая карта функций поддерживается определенным ядром фильтрации и, следовательно, уникальным шаблоном со своими собственными весами для оптимизации.

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

Обычно рецептивное поле, содержащее фильтрующее ядро, имеет размеры 3x3, 5x5 или 7x7, что значительно уменьшает количество весов, которые должен будет вычислить каждый нейрон (для рецептивного поля 3x3 нейрон вычисляет 9 весов).

Наконец, последний элемент сверточных слоев — использование шага, который представляет собой шаг, совершаемый рецептивными полями от пикселя к другому. Если он инициализирован как 2, размер карт объектов на слое будет уменьшен.

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

Объединение слоев

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

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

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

Идея состоит в том, чтобы захватить самые важные элементы изображения, даже если они меняют положение (между изображениями).

Окончательное представление CNN

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

Наиболее известные архитектуры CNN

Вот некоторые из самых известных архитектур CNN с момента их появления:

  • LeNet-5, Янн Лекун
  • AlexNet Алекса Крижевого, Ильи Суцкевера и Джеффри Хинтона.
  • GoogLeNet от Кристиана Сегеди
  • ResNet от Каймин Хэ

Базовая реализация CNN

Прежде чем создавать сетевую архитектуру, важно начать с некоторой предварительной обработки изображения:

  • Преобразование изображений в массивы
  • Изменение размера для повышения эффективности

Затем идет построение CNN (пример с Tensorflow и Keras API):

Все настраивается в зависимости от проблемы, которую необходимо решить.

Заключение

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

Спасибо за прочтение статьи, надеюсь, она вам понравилась, и теперь вы лучше понимаете, что такое CNN! Если вам интересна наука о данных и машинное обучение, ознакомьтесь с другими моими статьями здесь.

Ресурсы