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

Основные принципы

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

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

Основными слоями, используемыми в CNN, являются:

  • Слой свертки
  • Слой выпрямленных линейных единиц (ReLU)
  • Уровень объединения
  • Сгладить слой
  • Полностью подключенный (FC) слой
  • Выходной слой

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

Где происходят чудеса

Слой свертки

На заметку: свертка происходит от свертки, а не от свертки

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

Слой взял небольшой кусок полного изображения размером (h x w x d), а затем применил функцию фильтрации ( fh x fw x d) на вход. H обозначает высоту изображения, w - это ширина / ширина, а d - это глубина / количество каналов, например 3 для RGB и 1 для оттенков серого. Затем изображение преобразуется в размер (h - fh +1) x (w - fw + 1) x 1. Вот визуализированный пример:

Входными данными является матрица изображения 5x5x1, фильтр представляет собой ядро ​​3x3x1, которое затем преобразует матрицу 5x5x1 в матрицу 3x3x1. Это соответствует уравнению (5–3 + 1) x (5–3 + 1) x 1. Довольно просто, если вы усвоили концепции.

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

Слой ReLU

ReLU (выпрямленный линейный блок) действует как функция активации сверточного слоя. Он превращает отрицательное значение данных в положительное по формуле f (x) = max (0, x). Таким образом, ReLu служит для введения нелинейности в модель, поскольку CNN хочет, чтобы неотрицательные значения использовались в процессе обучения.

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

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

После прохождения процесса свертки в предыдущем слое изображение затем проходит через слой объединения. Уровень объединения, иногда называемый понижающей дискретизацией, направлен на уменьшение пространственного размера изображения, чтобы уменьшить вычислительную мощность, необходимую для обработки данных. Другой способ использования объединяющего слоя - продолжить процесс обучения путем извлечения доминирующих функций из изображения. Это уменьшение размерности может быть достигнуто с помощью трех общих методов объединения:

  • Максимальное объединение
  • Средний пул
  • Суммарный пул

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

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

Сгладить слой

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

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

Полностью подключенный (FC) слой

А вот и самое лучшее оружие, Экскалибур, система CNN, которая управляет всем одним кольцом, называемая слоем FC.

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

Каждая итерация тренировочного процесса называется эпохой. Хорошая модель будет видеть повышение точности и уменьшение потерь после каждой эпохи, прежде чем достигнет точки застоя. Этот этап обучения называется обратным распространением ошибки. Существует четыре различных части обратного распространения ошибки: прямой проход, функция потерь, обратный проход и обновление веса. Распространенным методом расчета потерь является среднеквадратичная ошибка (MSE), тогда как обновление веса выполняется с помощью переменной, называемой скорость обучения.

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

Выходной слой

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

Вот пример. Предположим, нам нужно определить, является ли животное на картинке собакой или кошкой. В этом случае у нас нет проблем с использованием логистической регрессии, поскольку она присваивает десятичные вероятности каждому из двух классов, которые в сумме дают единицу, например 0,8 для собаки и 0,2 для кошки. Однако история становится иной, если нам нужно определить, является ли изображение птицей, самолетом, лодкой, светофором или автомобилем. Эта проблема требует использования функции softmax, где она будет назначать различные вероятности каждому из этих классов, которые в сумме дадут единицу, например. 0,92 для самолета, 0,03 для птицы, 0,025 для лодки, 0,015 для автомобиля и 0,01 для светофора.

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

Заглянуть в сети

Чтобы способствовать продвижению в области глубокого обучения, существует открытая база данных изображений, предназначенная для использования в исследованиях распознавания изображений. Эта база данных называется проектом ImageNet, в котором доступно более 14 миллионов изображений. В рамках проекта проводится ежегодный конкурс под названием ImageNet Large Scale Visual Recognition Challenge (ILSVRC). В этом конкурсе специалисты по обработке данных и исследователи со всего мира должны разработать архитектуры классификации изображений для правильного обнаружения объектов и сцен в базе данных ImageNet. В рамках проекта были созданы одни из лучших на сегодняшний день архитектур CNN, такие как AlexNet, GoogleNet и ResNet.

AlexNet (2012)

Во время конкурса 2012 года AlexNet значительно превзошел всех конкурентов, достигнув ошибки топ-5 в 15,3%. Для сравнения: конкуренты, занявшие второе место, которые не использовали CNN, получили ошибку первой пятерки в 26,2%.

AlexNet похож на архитектуру LeNet, созданную еще в 1998 году, с более глубокими фильтрами на слой и оснащенными сложенными сверточными слоями. Он проходил обучение в течение 6 дней на двух графических процессорах NVIDIA Geforce GTX 580 и был разработан SuperVision Group во главе с Алексом Крижевским.

GoogleNet / Начало (2014 г.)

Победитель 2014 года был еще более впечатляющим по результату. Он был разработан Google и получил название GoogleNet или InceptionV1. Ошибка GoogleNet составила всего 6,67%, что сопоставимо с показателями экспертов-людей в то время (забавный факт: экспертом был Андрей Карпатый!). Организаторы были вынуждены переоценить задачу и выяснили, что это действительно очень сложно сделать даже с человеческим обучением. GoogleNet был вдохновлен LeNet и реализовал новый элемент, названный модулем Inception. В модуле использовались пакетная нормализация, искажения изображения и RMSprop. Еще одно впечатляющее достижение GoogleNet - это небольшое количество параметров (4 миллиона по сравнению с 60 миллионами AlexNet).

ResNet (2015)

Конкурс 2015 года произвел еще одного популярного победителя под названием Residual Neural Network (ResNet). ResNet, разработанная командой под руководством Кайминга Хе, использует концепцию, называемую «пропускать соединения» или стробированные блоки, и обеспечивает нормализацию тяжелых пакетов. Стробированные единицы или стробированные рекуррентные единицы (GRU) работают аналогичным образом с долговременной краткосрочной памятью (LSTM), широко применяемой в рекуррентных нейронных сетях. ResNet был обучен с использованием 152 слоев и достиг пятерки ошибок в 3,57%.

Подводя итог трем архитектурам, AlexNet имеет два параллельных конвейера, обученных на двух графических процессорах, GoogleNet имеет начальные модули, а ResNet использует остаточные соединения.

Вот таблица, которая демонстрирует различные архитектуры CNN, включая три упомянутые ранее:

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

Использованная литература: