Объяснение свертки 1D/2D, ее роли в изучении признаков и инструмента визуализации

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

Введение

Свертка — это процесс изменения формы одной функции путем применения другой функции. Это операция над двумя функциями, как и любая другая арифметическая операция, однако она применяется к функциям, а не к значениям функций. Следовательно, в результате получается третья функция. Более формально свертка C=f(x)*g(x) — это операция между функцией f > и функция g и представлена ​​оператором свертки *. С точки зрения математической формулировки, свертка — это интеграл произведения функции f на функцию g, которая зеркально отражается по оси X и смещается на шаг времени t.

Обратите внимание, что выходная функция — это функция t, а входная функция f — это функция х. Выполняется количество временных шагов, обычно равное количеству выборок значений функции f. На каждом временном шаге функция свертки вычисляет площадь под кривой функции f, используя значения функции G как весы. Знак tопределяет направление движения. При положительном значении t направление движения — к +∞, а при отрицательном значении — к —∞. Интуитивно понятно, что функции свертки предоставляют скользящее среднее значение значений функции f.

Оператор свертки также можно рассматривать как форму интегрального преобразования. Интегральное преобразование в исчислении — это тип функционального преобразования T, которое применяется к входной функции f с использованием Функция ядра K.

Свертка выборок данных

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

Если мы возьмем примерный набор данных, как на рисунке 2, и применим ядро ​​свертки с постоянным значением 0,25, то мы получим нормально распределенную кривую, как показано на рисунке 2. Это показывает, что Функция свертки с выходом постоянного значения создает нормирующую кривую данных. Теперь, если мы расширим эту концепцию и создадим функцию ядра размера 10, заполненную только значениями 0,1, и применим ее к тем же данным, мы увидим результат, как на рисунке 3. Как мы видим, результат представляет собой сглаженную кривую. Это связано с тем, что мы создали ядро ​​скользящей средней с окном в 10 соседних точек. Каждое значение в функции ядра обеспечивало вес вероятности для вычисления средневзвешенного значения в данной точке.

Эти веса, которые мы предоставили, не обязательно должны быть одинаковыми в функции ядра. На самом деле большую часть времени они не являются постоянными значениями. Итак, мы можем построить функцию ядра, которая постепенно увеличивает значения, начиная с 0–0,5 до середины ядра, а затем постепенно уменьшается до нуля. Такое ядро ​​даст результат, показанный на рисунке 4. Результат показывает, что оно лучше справляется со сглаживанием кривой данных. Это связано с тем, что мы аппроксимировали наиболее распространенное ядро ​​сглаживания, называемое «ядро Гаусса».

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

Одномерная свертка

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

В этом случае свертка произошла между двумя похожими функциями. Свертывающая функция имела отличие только по амплитуде, а ее фаза была сдвинута. Однако в целом это может быть не так. Функция свертки может принимать различные формы и, соответственно, давать разные результаты. Некоторые примеры таких функций ядра свертки и их влияние на различные функции показаны на рисунке 6. Вы можете увидеть «эффект усреднения» прямоугольной волны, когда она свернута либо с синусоидой, либо с ядром постоянного тока. В случае двух противоположных фаз волны не компенсируют друг друга, в отличие от деструктивной интерференции двух волн, а получается средний выход двух фаз. При использовании со сложным сигналом, состоящим из нескольких простых синусоидальных, косинусоидальных и шумовых составляющих, свернутый сигнал получается гладким и помогает уменьшить шум. Сглаживание — наиболее распространенный эффект операции свертки; однако функция ядра также может использоваться для выделения, различения или подавления различных сегментов функции. Мы увидим, как это может быть полезно в следующем разделе.

2D-свертка

2D Convolution — это просто расширение 1D Convolution с дополнительным измерением. Операция выполняется не только в одном измерении, но и в обоих направлениях. Изображение является примером двумерной функции, а его значения (т. е. R, G, B) представляют собой набор дискретных отсчетов функции, полученных в результате квантования. Эти образцы организованы в виде набора двумерных матриц, где каждая матрица представляет цветовой канал. Функция ядра для такой структуры данных также представляет собой двумерную матрицу, а набор матриц ядра называется фильтром. Операция свертки выполняется итеративно путем перемещения скользящего окна на изображении по всем цветовым каналам и применения соответствующего ядра.

На рисунке 7 вы можете увидеть процесс 2D свертки при применении к изображению. Для каждого пикселя извлекается соседнее окно, эквивалентное размеру ядра. Вставляется набор нулевых пикселей заполнения, если это пиксель на границе изображения. Скалярное произведение окна соседства и матрицы ядра дает значение пикселя для соответствующей позиции в новом свернутом изображении. Из рисунка видно, что свернутое изображение имеет более высокие значения по диагонали окна просмотра. Вот что такое ядро ​​делает с изображением. Это пример детектора краев, который находит диагональные края в изображении. Тот же процесс повторяется для каждого пикселя изображения путем перемещения ядра по всему изображению и получения нового свернутого изображения того же размера. Обратите внимание, что мы не перевернули матрицу ядра; это потому, что это ядро ​​симметрично. В случае несимметричной конструкции ядра перед скалярным произведением необходимо перевернуть/отзеркалить.

Как упоминалось ранее, процесс свертки не ограничивается конкретной операцией, но может использоваться для выполнения различных операций. На рисунке 8 показаны два примера применения операции свертки. Когда изображение свёрнуто с ядром Гаусса, оно производит эффект размытия на изображении. Однако, когда применяется ядро ​​обнаружения краев, подобное тому, которое мы показали ранее, оно создает выходное изображение, в котором выделяются только края изображения. Коэффициенты ядра определяют вывод изображения. Эти коэффициенты могут быть созданы вручную или изучены с помощью системы обучения.

Изучение признаков с помощью 2D-свертки

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

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

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

Заключительные замечания

В этой статье мы рассмотрели концепцию свертки, ее различные типы и обсудили, как ее можно использовать для извлечения признаков из изображений. Свертка — это механизм вычислений общего назначения. Он может использовать мощность обработки графического процессора благодаря своей согласованности с архитектурой графического процессора. Вычисления могут быть разбиты на пакеты и могут выполняться независимо. Изучение признаков с помощью Convolution обеспечивает надежное и автоматическое извлечение признаков из изображений, которые используют глубокие нейронные сети. Фактически, изучение признаков является, пожалуй, наиболее важной частью глубокой сверточной нейронной сети для классификации объектов. Изученные ядра лучше фиксируют сложные шаблоны, а изученные функции более разнообразны.

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

Код:

https://www.github.com/azad-academy/DL-Convolutions

Стать сторонником Patreon:

https://www.patreon.com/azadacademy

Найди меня в Substack:

https://azadwolf.substack.com

Подпишитесь на обновления Twitter:

https://twitter.com/azaditech

Получить книгу:

https://www.amazon.com/dp/B0BT4YBZQC