Детализация различных сверток в глубоком обучении (1)

искусственный интеллект глубокое обучение

Добавить Автора

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

В этой статье будут подробно описаны следующие концепции свертки:

  • 2D свертка
  • 3D свертка
  • 1*11*1свертка (1*11*1свертка)
  • Деконволюция (транспонированная свертка)
  • Дилатационная свертка / Атрусная свертка
  • Пространственно разделимая свертка
  • Разделимая по глубине свертка
  • Сплющенная свертка
  • Групповая свертка
  • Перемешанная сгруппированная свертка
  • Поточечная групповая свертка

1. Во-первых, что такое свертка?

В математике (особенно в математическом анализе) свертка является важной операцией. Свертка широко используется в обработке сигналов и изображений и других областях технических наук. Сверточная нейронная сеть (CNN) в глубоком обучении получила свое название от концепции свертки. Суть свертки в глубоком обучении заключается в взаимной корреляции при обработке сигналов и изображений. При обработке сигнала/изображения свертка определяется следующим образом:

Постоянно:

(f*g)(t) =def f(т)g(tт)dт(f * g)(t) \ \ \stackrel{\mathrm{def}}{=}\ \int_{-\infty}^\infty f(\tau) g(t - \tau) \, d\tau

В дискретном случае:

(f*g)[n] =def m=f[m]g[nm]=m=f[nm]g[m](f * g)[n]\ \ \stackrel{\mathrm{def}} {=}\ \sum_{m=-\infty}^{\infty} {f[m] g[n-m]} = \sum_{m=-\infty}^\infty f[n-m]\, g[m]

1.1 Связь между сверткой и кросс-корреляцией

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

Изображение выше (источник: Википедия) представляет собой прямоугольную импульсную волну в RC-цепи.gg(фильтр) и экспоненциальный спадffСвертка пульсовой волны и площадь перекрывающейся части эквивалентнаttЗначение свертки при .

А взаимная корреляция — это скользящее скалярное произведение или скользящее внутреннее произведение между двумя функциями. Фильтрация в кросскорреляции не инвертируется, а просто скользит по функцииff.ffиggОбласть пересечения между ними является кросс-корреляцией. На рисунке ниже (источник: Википедия) показана разница между корреляцией и взаимной корреляцией.

Отсюда видно, что фильтр в кросс-корреляции не реверсирован. Строго говоря, «свертка» в глубоком обучении — это операция взаимной корреляции, которая по существу выполняет поэлементное умножение и сложение. Но его обычно называют сверткой, потому что веса фильтров изучаются во время обучения. Если обратная функция в примере вышеggявляется правильной функцией, то после обучения изученный фильтр будет выглядеть как обратная функцияgg. Таким образом, нет необходимости сначала инвертировать фильтры, как настоящая свертка, перед тренировкой.

1.2 Свертка в глубоком обучении

Целью выполнения свертки является извлечение полезных функций из входных данных. При обработке изображений существует множество фильтров на выбор. Различные фильтры могут извлекать разные функции. Например, горизонтальные, вертикальные, диагональные кромки и т. д. В сверточных нейронных сетях (CNN) различные функции извлекаются путем свертки, а веса фильтров изучаются во время обучения. Затем извлеченные признаки комбинируются для получения окончательного результата. Причина использования свертки заключается в том, что операция свертки имеет распределение веса и инвариантность перевода, а свертка также учитывает связь пространства пикселей Эти характеристики свертки делают ее отличной производительностью в задачах компьютерного зрения. Изображение ниже (источник:Towards Data Science) показывает вычисление свертки (также известной как стандартная свертка) для одноканального графа.

Вход выше5*55*5матрица, фильтр есть3*33*3Матрица [[0,1,2],[2,2,0],[0,1,2]], шаг скольжения Stride=1, значение заполнения Padding=0, вывод3*33*3матрица.

В большинстве приложений нам обычно требуется обрабатывать многоканальные изображения. Наиболее типичным является изображение RGB. Как показано ниже (источник:Andre Mouton) представляет собой одноканальную карту, декомпозированную для RGB-изображения.

Другим примером многоканальных данных являются слои в CNN. Сверточные слои обычно состоят из нескольких или даже сотен каналов. Каждый канал описывает различные характеристики верхнего слоя. Как конвертировать между слоями с разным количеством каналов? т.е. как преобразовать количество каналов вnnКоличество слоев, преобразованное в количество каналов, равноmmслой?

При описании вышеуказанных проблем нам необходимо сначала ввести некоторые термины: Layers (слои), Channels (каналы), Feature Maps (карты функций), Filters (фильтры), Kernels (ядра свертки). С точки зрения иерархии концепции слоев и фильтров находятся на одном уровне, а каналы и ядра свертки находятся на следующем уровне структуры. Каналы и карты объектов — это одно и то же. Слой может иметь несколько каналов (или карт объектов). Если вход представляет собой изображение RGB, то будет 3 канала. Канал (Channel) обычно используется для описания послойной (Layer) структуры. Точно так же ядро ​​свертки (Kernel) используется для описания структуры фильтра (Filter). Следующий рисунок может интуитивно отражать взаимосвязь между слоями и каналами.

Разницу между фильтрами и ядрами свертки понять немного сложно. В некоторых случаях они взаимозаменяемы, что может привести к путанице. Какая разница между двумя? Ядро свертки предпочитает двумерную весовую матрицу. Фильтр в основном относится к трехмерной структуре нескольких сложенных ядер свертки. Если это 2D-фильтр, то оба относятся к одному и тому же понятию. Но для 3D-фильтров в большинстве сверток глубокого обучения он содержит ядро ​​свертки. Каждое ядро ​​свертки уникально, главным образом, в подчеркивании различных частей входного канала.

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

Входной слой5*5*35*5*3матричный (то есть трехканальный). Фильтр3*3*33*3*3Матрица (то есть содержит 3 ядра свертки). Во-первых, каждое ядро ​​свертки в фильтре применяется отдельно к трем каналам входного слоя. Выполните последний расчет свертки и выведите 33*33*3канал.

Затем добавьте три канала для выполнения сложения матриц, чтобы получить3*3*13*3*1один канал. Этот канал находится во входном слое (5*5*35*5*3) применить один фильтр (3*3*33*3*3)результат.

Точно так же описанный выше процесс можно более однозначно рассматривать как 3D-фильтр для обработки входного слоя. Входной слой и фильтр имеют одинаковую глубину, то есть количество каналов во входном слое равно количеству ядер свертки в фильтре. 3D-фильтры должны скользить только по 2 измерениям входного слоя (например, изображения) вверху и по ширине (поэтому, когда 3D-фильтры используются для обработки 3D-матриц, процесс операции называется 2D-сверткой). В каждой скользящей позиции выполняются умножение и сложение, чтобы получить результат (одно число). В приведенном ниже примере смахивание5*5*x5*5*xвходной слой (xx— произвольное значение), а конечный выходной слой содержит только один выходной канал.

Далее мы можем легко понять, как трансформировать на разной глубине слои (Layer). Предположим, что входной слой имеетXinX_{in}каналы, а выходной слой должен получитьDoutD_{out}канал. просто нужноDoutD_{out}фильтры обрабатывают входной слой, и каждый фильтр имеетDinD_{in}ядро свертки. Каждый фильтр обеспечивает один выходной канал. После завершения процесса вы получитеDoutD_{out}Каналы образуют выходной слой.

1.3 Расчет двумерной свертки

Входной слой:Win*Hin*DinW_{in}*H_{in}*D_{in}

Гиперпараметры:

  • Количество фильтров:kk
  • Размер ядра свертки в фильтре:w*hw*h
  • Размер скользящего шага (Stride):ss
  • Прокладка:pp

выходной слой:Wout*Hout*DoutW_{out}*H_{out}*D_{out}

Отношение параметров между выходным слоем и входным слоем:

{Wout=(Win+2pw)/s+1,Hout=(Hin+2ph)/s+1,Dout=k\begin{cases} W_{out} = (W_{in} +2p - w)/s + 1 ,\\ H_{out} = (H_{in} +2p - h)/s + 1, \\ D_{out} = k \end{cases}

Параметры:(w*h*Din+1)*k(w*h*D_{in} + 1)*k

2. 3D свертка

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

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

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

2.1 Расчет трехмерной свертки

Входной слой:Win*Hin*Din*CinW_{in}*H_{in}*D_{in}*C_{in}

Гиперпараметры:

  • Количество фильтров:kk
  • Размер ядра свертки в фильтре:w*h*dw*h*d
  • Размер скользящего шага (Stride):ss
  • Прокладка:pp

выходной слой:Wout*Hout*Dout*CoutW_{out}*H_{out}*D_{out}*C_{out}

Отношение параметров между выходным слоем и входным слоем:

{Wout=(Win+2pw)/s+1,Hout=(Hin+2ph)/s+1,Dout=(Din+2pd)/s+1,Cout=k\begin{cases} W_{out} = (W_{in} +2p - w)/s + 1 ,\\ H_{out} = (H_{in} +2p - h)/s + 1, \\ D_{out} = (D_{in} +2p - d)/s + 1, \\ C_{out} = k \end{cases}

Параметры:(w*h*d+1)*k(w*h*d + 1)*k

3. 1*11*1свертка

1*11*1Свертки очень интересные. какой взгляд1*11*1Свертка для одного канала — это просто умножение каждого элемента на число, но если входной слой многоканальный, ситуация становится интересной.

Диаграмма выше объясняет1*11*1Как свертка работает с размерамиH*W*DH*W*DВходной слой , размер фильтра1*1*D1*1*D, размер выходного каналаH*W*1H*W*1. если применяетсяnnЗатем эти фильтры объединяются вместе, чтобы получить выходной слой размеромH*W*nH*W*n.

3.1. 1*11*1Роль свертки

  • Отрегулируйте количество каналов

    так как1×11×1Свертка не меняет высоту и ширину.Первым и наиболее интуитивно понятным результатом изменения канала является увеличение или уменьшение исходного объема данных. См. другие статьи или блоги здесь, которые называются повышением размерности и уменьшением размерности. Но реальная ситуация не изменила масштаба, изменилось толькоheight×width×channelsвысота × ширина × каналысерединаchannelschannelsРазмер этого измерения только.

  • увеличить нелинейность

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

  • межканальная информация

    использовать1*11*1Работа ядра свертки для достижения уменьшения и увеличения размерности фактически является линейной комбинацией межканальных изменений информации. Например: когда размер ядра свертки3*33*3, фильтры с 64 ядрами свертки и размером ядра свертки равны1*11*1, комбинация фильтров с числом ядер свертки равна 28, а размер выходного слоя равен размеру ядра свертки через3*33*3, размер выходного слоя, полученного фильтром с 28 ядрами свертки, исходные 64 канала можно понять, поскольку линейная комбинация между каналами становится 28 каналами, что является информационным взаимодействием между каналами.

  • уменьшить параметры

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

о1*11 * 1Интересная точка зрения на свертки исходит от Яна Лекуна: «В сверточных нейронных сетях нет концепции «полностью связанных слоев».1*11*1Ядро свертки и полносвязная таблица. "

3.2. 1*11*1Приложения свертки

1*11*1Свертка играла важную роль во многих классических сетях, и некоторые из них кратко представлены ниже.1*11*1Важные приложения свертки.

  • сеть в сети (NI N)

    NIN предлагает слой свертки MLP.Сверточный слой MLP улучшает нелинейное выражение, накладывая сеть «Микросеть», а базовым элементом «Микросети» является1*11*1Сверточная сеть, когда дело доходит до этого, необходимо объяснить1*11*1Свертка, эта статья первая предлагает1*11*1Свертка имеет эпохальное значение, и позже GoogleNet извлекла из нее уроки.1*11*1Свертка, и отдельное спасибо этой статье.

  • Inception

    GoogleNet первым предложил модуль Inception, который имеет четыре версии: V1, V2, V3 и V4 (здесь не подробно). На следующем рисунке показана структура Inception V1, показанная на следующих двух рисунках.

    полностью представлен1*11*1После уменьшения размера свертки, как показано на рисунке (b), в целом количество параметров свертки уменьшилось почти в 4 раза по сравнению с рисунком (a).

    В начальной структуре большое количество1*11*1У свертки есть две основные функции: а) уменьшить размер данных, б) ввести больше нелинейности, чтобы улучшить способность к обобщению, потому что функция активации ReLU требуется после свертки;

  • ResNet

    ResNet также использует1*11*1свертка и находится в3*33*3Как до, так и после используется сверточный слой, который не только уменьшает размерность, но и увеличивает размерность, а также дополнительно сокращается количество параметров. Картинка справа также называется «Дизайн узких мест» Цель ясна с первого взгляда.уменьшить количество параметров,Первый1*11*1Свертка уменьшает количество каналов с 256 до 64, а затем проходит1*11*1Для восстановления свертки общее количество используемых параметров почти в 16,94 раза хуже.

    ​ Для обычного ResNet его можно использовать в сетях с 34 уровнями или меньше, а ResNet для проектирования узких мест обычно используется в более глубоких сетях, таких как 101, чтобы уменьшить объем вычислений и параметров.

3.3. 1*11*1Расчет свертки

1*11*1Свертка фактически рассматривается как частный случай двумерной свертки, и процесс вычисления может относиться к процессу вычисления двумерной свертки.

4. Convolution Arithmetic

Теперь мы знаем свертку измерения глубины. Мы переходим к двум другим направлениям (высота и ширина), одинаково важным алгоритмам свертки. Некоторые термины:

  • Размер ядра: ядро ​​свертки упоминалось в предыдущем разделе, а размер ядра свертки определяет представление свертки.

  • Шаг: определяет размер каждого шага, который ядро ​​свертки перемещает в изображении. Например, Stride=1, тогда ядро ​​свертки перемещается на один размер пикселя. Шаг=2, то ядро ​​свертки перемещается по изображению на 2 пикселя (т. е. оно пропускает пиксель). Мы можем понизить разрешение изображения с шагом>=2.

  • Отступы: отступы можно понимать как добавление нескольких пикселей к периферии изображения. Заполнение может поддерживать пространственное выходное измерение равным входному изображению и может при необходимости дополнять входную периферию 0. С другой стороны, свертка без заполнения выполняет свертку только для пикселей входного изображения без заполнения нулями. Размер вывода будет меньше, чем ввод.

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