Как ConvNets получили свое название?

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

Вот как работает операция свертки в нейронных сетях:

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

Почему сети свертки?

  1. Разреженные взаимодействия: ConvNets используются для извлечения важных функций, таких как ребра, с помощью ядер небольшого размера (размер k). Это свойство CNN дает им преимущество перед умножением матриц в традиционных нейронных сетях, поскольку им нужно выполнять (k * n) вычислений над (m * n) вычислениями, где m и n - размеры входных и выходных данных соответственно.
  2. Совместное использование параметров. В отношении CNN совместное использование параметров означает, что единственный набор параметров, который мы изучаем, совместно используется или используется со всеми частями входных данных. Здесь общим общим набором параметров является ядро ​​. С другой стороны, в традиционных нейронных сетях для разных частей входных данных используется только один набор параметров. используется один раз для расчета выхода.
  3. Эквивариантность: означает, что если входные данные изменяются, выходные данные изменяются таким же образом. Например. если яркость применяется к одному пикселю и пиксель перемещается на одну позицию вправо. Затем, если свертка применяется снова, это будет выглядеть так, как будто яркость применяется к перемещенному пикселю.

Прежде чем мы перейдем к написанию кода ConvNet в Pytorch, нам нужно охватить еще одну важную концепцию CNN.

Объединение

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

Этапы создания единого CNN:

А. Слой свертки

Фильтр множественной свертки или ядра могут использоваться для создания ряда карт функций. Две такие карты функций созданы на следующих иллюстрациях Отавио Гуда из его знаменитого выступления о Google Translate.

Б. Слой ReLu

Затем карта характеристик проходит через слой ReLu, который использует функцию ReLu (= 1, если больше, = 0, если меньше порогового значения), чтобы удалить отрицательные образцы (выделены красным) из вышеуказанных карт характеристик и создает карту, которая только что получила положительный результат. значения (только зеленые пиксели на изображении ниже).

С. Слой Maxpool

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

D. Добавьте другую комбинацию вышеперечисленных слоев, чтобы создать сложную CNN.

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

А теперь давайте посмотрим на код!

Ниже приводится структура базовой CNN в Pytorch:

BatchNorm или Batch Normalization используется для нормализации входных данных и предотвращения переобучения.

Вы можете найти полный код по адресу: https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/02-intermediate/convolutional_neural_network/main.py

Что следует помнить при внедрении CNN:

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

Спасибо, что прочитали! Если вам понравилась статья, нажмите на зеленый значок хлопка и поддержите больше статей о концепциях глубокого обучения от Mad Data Science !! :))