Добавить Автора
В этой статье обобщены различные свертки, встречающиеся в глубоком обучении, с примерами, которые помогут вам глубже понять и построить сверточные нейронные сети.
В этой статье будут подробно описаны следующие концепции свертки:
- 2D свертка
- 3D свертка
- свертка (свертка)
- Деконволюция (транспонированная свертка)
- Дилатационная свертка / Атрусная свертка
- Пространственно разделимая свертка
- Разделимая по глубине свертка
- Сплющенная свертка
- Групповая свертка
- Перемешанная сгруппированная свертка
- Поточечная групповая свертка
1. Во-первых, что такое свертка?
В математике (особенно в математическом анализе) свертка является важной операцией. Свертка широко используется в обработке сигналов и изображений и других областях технических наук. Сверточная нейронная сеть (CNN) в глубоком обучении получила свое название от концепции свертки. Суть свертки в глубоком обучении заключается в взаимной корреляции при обработке сигналов и изображений. При обработке сигнала/изображения свертка определяется следующим образом:
Постоянно:
В дискретном случае:
1.1 Связь между сверткой и кросс-корреляцией
Свертка выполняется с помощью двух функцийиматематический оператор, порождающий третью функцию, характеризующую функциюс перевернутым и переведеннымПлощадь криволинейной трапеции, ограниченная функцией произведения .
Изображение выше (источник: Википедия) представляет собой прямоугольную импульсную волну в RC-цепи.(фильтр) и экспоненциальный спадСвертка пульсовой волны и площадь перекрывающейся части эквивалентнаЗначение свертки при .
А взаимная корреляция — это скользящее скалярное произведение или скользящее внутреннее произведение между двумя функциями. Фильтрация в кросскорреляции не инвертируется, а просто скользит по функции.иОбласть пересечения между ними является кросс-корреляцией. На рисунке ниже (источник: Википедия) показана разница между корреляцией и взаимной корреляцией.
Отсюда видно, что фильтр в кросс-корреляции не реверсирован. Строго говоря, «свертка» в глубоком обучении — это операция взаимной корреляции, которая по существу выполняет поэлементное умножение и сложение. Но его обычно называют сверткой, потому что веса фильтров изучаются во время обучения. Если обратная функция в примере вышеявляется правильной функцией, то после обучения изученный фильтр будет выглядеть как обратная функция. Таким образом, нет необходимости сначала инвертировать фильтры, как настоящая свертка, перед тренировкой.
1.2 Свертка в глубоком обучении
Целью выполнения свертки является извлечение полезных функций из входных данных. При обработке изображений существует множество фильтров на выбор. Различные фильтры могут извлекать разные функции. Например, горизонтальные, вертикальные, диагональные кромки и т. д. В сверточных нейронных сетях (CNN) различные функции извлекаются путем свертки, а веса фильтров изучаются во время обучения. Затем извлеченные признаки комбинируются для получения окончательного результата. Причина использования свертки заключается в том, что операция свертки имеет распределение веса и инвариантность перевода, а свертка также учитывает связь пространства пикселей Эти характеристики свертки делают ее отличной производительностью в задачах компьютерного зрения. Изображение ниже (источник:Towards Data Science) показывает вычисление свертки (также известной как стандартная свертка) для одноканального графа.
Вход вышематрица, фильтр естьМатрица [[0,1,2],[2,2,0],[0,1,2]], шаг скольжения Stride=1, значение заполнения Padding=0, выводматрица.
В большинстве приложений нам обычно требуется обрабатывать многоканальные изображения. Наиболее типичным является изображение RGB. Как показано ниже (источник:Andre Mouton) представляет собой одноканальную карту, декомпозированную для RGB-изображения.
Другим примером многоканальных данных являются слои в CNN. Сверточные слои обычно состоят из нескольких или даже сотен каналов. Каждый канал описывает различные характеристики верхнего слоя. Как конвертировать между слоями с разным количеством каналов? т.е. как преобразовать количество каналов вКоличество слоев, преобразованное в количество каналов, равнослой?
При описании вышеуказанных проблем нам необходимо сначала ввести некоторые термины: Layers (слои), Channels (каналы), Feature Maps (карты функций), Filters (фильтры), Kernels (ядра свертки). С точки зрения иерархии концепции слоев и фильтров находятся на одном уровне, а каналы и ядра свертки находятся на следующем уровне структуры. Каналы и карты объектов — это одно и то же. Слой может иметь несколько каналов (или карт объектов). Если вход представляет собой изображение RGB, то будет 3 канала. Канал (Channel) обычно используется для описания послойной (Layer) структуры. Точно так же ядро свертки (Kernel) используется для описания структуры фильтра (Filter). Следующий рисунок может интуитивно отражать взаимосвязь между слоями и каналами.
Разницу между фильтрами и ядрами свертки понять немного сложно. В некоторых случаях они взаимозаменяемы, что может привести к путанице. Какая разница между двумя? Ядро свертки предпочитает двумерную весовую матрицу. Фильтр в основном относится к трехмерной структуре нескольких сложенных ядер свертки. Если это 2D-фильтр, то оба относятся к одному и тому же понятию. Но для 3D-фильтров в большинстве сверток глубокого обучения он содержит ядро свертки. Каждое ядро свертки уникально, главным образом, в подчеркивании различных частей входного канала.
Используя приведенные выше концепции, давайте продолжим объяснение многоканальной свертки. Каждое ядро свертки применяется к входному каналу предыдущего слоя для создания выходного канала. Все выходные каналы объединяются для формирования выходного слоя. Как показано ниже:
Входной слойматричный (то есть трехканальный). ФильтрМатрица (то есть содержит 3 ядра свертки). Во-первых, каждое ядро свертки в фильтре применяется отдельно к трем каналам входного слоя. Выполните последний расчет свертки и выведите 3канал.
Затем добавьте три канала для выполнения сложения матриц, чтобы получитьодин канал. Этот канал находится во входном слое () применить один фильтр ()результат.
Точно так же описанный выше процесс можно более однозначно рассматривать как 3D-фильтр для обработки входного слоя. Входной слой и фильтр имеют одинаковую глубину, то есть количество каналов во входном слое равно количеству ядер свертки в фильтре. 3D-фильтры должны скользить только по 2 измерениям входного слоя (например, изображения) вверху и по ширине (поэтому, когда 3D-фильтры используются для обработки 3D-матриц, процесс операции называется 2D-сверткой). В каждой скользящей позиции выполняются умножение и сложение, чтобы получить результат (одно число). В приведенном ниже примере смахиваниевходной слой (— произвольное значение), а конечный выходной слой содержит только один выходной канал.
Далее мы можем легко понять, как трансформировать на разной глубине слои (Layer). Предположим, что входной слой имеетканалы, а выходной слой должен получитьканал. просто нужнофильтры обрабатывают входной слой, и каждый фильтр имеетядро свертки. Каждый фильтр обеспечивает один выходной канал. После завершения процесса вы получитеКаналы образуют выходной слой.
1.3 Расчет двумерной свертки
Входной слой:
Гиперпараметры:
- Количество фильтров:
- Размер ядра свертки в фильтре:
- Размер скользящего шага (Stride):
- Прокладка:
выходной слой:
Отношение параметров между выходным слоем и входным слоем:
Параметры:
2. 3D свертка
На предыдущей иллюстрации видно, что на самом деле выполняется трехмерная свертка. Но в обычном понимании это все еще называется 2D-сверткой глубокого обучения. Поскольку глубина фильтра совпадает с глубиной входного слоя, 3D-фильтр перемещается только в двух измерениях (например, по высоте и ширине изображения), в результате чего получается один канал.
Обобщая 2D-свертку, 3D-свертка определяется как глубина фильтра меньше, чем глубина входного слоя (то есть количество ядер свертки меньше, чем количество каналов во входном слое), поэтому 3D-фильтр должен скользить в трех измерениях (длина, ширина, высота входного слоя). Выполните операцию свертки в каждой позиции, где скользит фильтр, в результате чего будет получено числовое значение. Поскольку фильтр скользит по всему трехмерному пространству, структура вывода также является трехмерной.
Основное различие между 2D-сверткой и 3D-сверткой заключается в пространственном измерении скольжения фильтра. Преимущество трехмерной свертки заключается в описании отношений объектов в трехмерном пространстве. Трехмерные отношения важны в некоторых приложениях, таких как сегментация трехмерных объектов и реконструкция медицинских изображений.
2.1 Расчет трехмерной свертки
Входной слой:
Гиперпараметры:
- Количество фильтров:
- Размер ядра свертки в фильтре:
- Размер скользящего шага (Stride):
- Прокладка:
выходной слой:
Отношение параметров между выходным слоем и входным слоем:
Параметры:
3. свертка
Свертки очень интересные. какой взглядСвертка для одного канала — это просто умножение каждого элемента на число, но если входной слой многоканальный, ситуация становится интересной.
Диаграмма выше объясняетКак свертка работает с размерамиВходной слой , размер фильтра, размер выходного канала. если применяетсяЗатем эти фильтры объединяются вместе, чтобы получить выходной слой размером.
3.1. Роль свертки
-
Отрегулируйте количество каналов
так какСвертка не меняет высоту и ширину.Первым и наиболее интуитивно понятным результатом изменения канала является увеличение или уменьшение исходного объема данных. См. другие статьи или блоги здесь, которые называются повышением размерности и уменьшением размерности. Но реальная ситуация не изменила масштаба, изменилось толькосерединаРазмер этого измерения только.
-
увеличить нелинейность
Ядро свертки может значительно увеличить нелинейные характеристики (используя последующую нелинейную функцию активации, такую как ReLU), сохраняя при этом масштаб карты объектов неизменным (то есть не изменяясь). Нелинейность позволяет сети изучать более сложные функции и позволяет углубить всю сеть.
-
межканальная информация
использоватьРабота ядра свертки для достижения уменьшения и увеличения размерности фактически является линейной комбинацией межканальных изменений информации. Например: когда размер ядра свертки, фильтры с 64 ядрами свертки и размером ядра свертки равны, комбинация фильтров с числом ядер свертки равна 28, а размер выходного слоя равен размеру ядра свертки через, размер выходного слоя, полученного фильтром с 28 ядрами свертки, исходные 64 канала можно понять, поскольку линейная комбинация между каналами становится 28 каналами, что является информационным взаимодействием между каналами.
-
уменьшить параметры
Упомянутое выше уменьшение размерности на самом деле уменьшает параметры, потому что карт признаков меньше, и параметры уменьшаются естественным образом, что эквивалентно свертке по количеству каналов карты признаков, сжатию карты признаков и двойному извлечению признаков, поэтому что новое Представление объектов на карте объектов лучше.
оИнтересная точка зрения на свертки исходит от Яна Лекуна: «В сверточных нейронных сетях нет концепции «полностью связанных слоев».Ядро свертки и полносвязная таблица. "
3.2. Приложения свертки
Свертка играла важную роль во многих классических сетях, и некоторые из них кратко представлены ниже.Важные приложения свертки.
-
сеть в сети (NI N)
NIN предлагает слой свертки MLP.Сверточный слой MLP улучшает нелинейное выражение, накладывая сеть «Микросеть», а базовым элементом «Микросети» являетсяСверточная сеть, когда дело доходит до этого, необходимо объяснитьСвертка, эта статья первая предлагаетСвертка имеет эпохальное значение, и позже GoogleNet извлекла из нее уроки.Свертка, и отдельное спасибо этой статье.
-
Inception
GoogleNet первым предложил модуль Inception, который имеет четыре версии: V1, V2, V3 и V4 (здесь не подробно). На следующем рисунке показана структура Inception V1, показанная на следующих двух рисунках.
полностью представленПосле уменьшения размера свертки, как показано на рисунке (b), в целом количество параметров свертки уменьшилось почти в 4 раза по сравнению с рисунком (a).
В начальной структуре большое количествоУ свертки есть две основные функции: а) уменьшить размер данных, б) ввести больше нелинейности, чтобы улучшить способность к обобщению, потому что функция активации ReLU требуется после свертки;
-
ResNet
ResNet также используетсвертка и находится вКак до, так и после используется сверточный слой, который не только уменьшает размерность, но и увеличивает размерность, а также дополнительно сокращается количество параметров. Картинка справа также называется «Дизайн узких мест» Цель ясна с первого взгляда.уменьшить количество параметров,ПервыйСвертка уменьшает количество каналов с 256 до 64, а затем проходитДля восстановления свертки общее количество используемых параметров почти в 16,94 раза хуже.
Для обычного ResNet его можно использовать в сетях с 34 уровнями или меньше, а ResNet для проектирования узких мест обычно используется в более глубоких сетях, таких как 101, чтобы уменьшить объем вычислений и параметров.
3.3. Расчет свертки
Свертка фактически рассматривается как частный случай двумерной свертки, и процесс вычисления может относиться к процессу вычисления двумерной свертки.
4. Convolution Arithmetic
Теперь мы знаем свертку измерения глубины. Мы переходим к двум другим направлениям (высота и ширина), одинаково важным алгоритмам свертки. Некоторые термины:
-
Размер ядра: ядро свертки упоминалось в предыдущем разделе, а размер ядра свертки определяет представление свертки.
-
Шаг: определяет размер каждого шага, который ядро свертки перемещает в изображении. Например, Stride=1, тогда ядро свертки перемещается на один размер пикселя. Шаг=2, то ядро свертки перемещается по изображению на 2 пикселя (т. е. оно пропускает пиксель). Мы можем понизить разрешение изображения с шагом>=2.
-
Отступы: отступы можно понимать как добавление нескольких пикселей к периферии изображения. Заполнение может поддерживать пространственное выходное измерение равным входному изображению и может при необходимости дополнять входную периферию 0. С другой стороны, свертка без заполнения выполняет свертку только для пикселей входного изображения без заполнения нулями. Размер вывода будет меньше, чем ввод.
использованная литература
-
Одна статья для понимания ядра свертки 1x1 в сверточной нейронной сети — Zhihu (zhihu.com)
-
Начальная сетевая модель - Ah Shun - Blog Park (cnblogs.com)
-
Intuitively Understanding Convolutions for Deep Learning | by Irhum Shafkat | Towards Data Science
- An Introduction to different Types of Convolutions in Deep Learning
- Обзор: DilatedNet — расширенная свертка (семантическая сегментация)
- ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
- Сепарабельные свертки «Основное введение в разделимые свертки
- Начальная сеть «Простое руководство по версиям исходной сети»
- A Tutorial on Filter Groups (Grouped Convolution)
- Convolution arithmetic animation
- Up-sampling with Transposed Convolution
- Intuitively Understanding Convolutions for Deep Learning