www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Типы ядер свертки: упрощенный

Дата публикации Oct 18, 2019

Интуитивное введение в различные вариации гламурного слоя CNN

Просто краткое вступление

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

Например, ядро, использованное выше, полезно для повышения резкости изображения. Но что такого особенного в этом ядре ?? Рассмотрим два расположения входных изображений, как показано в примере ниже. Для первого изображения центральное значение равно 3 * 5 + 2 * -1 + 2 * -1 + 2 * -1 + 2 * -1 = 7. Значение 3 увеличено до 7. Для второго изображения вывод равно 1 * 5 + 2 * -1 + 2 * -1 + 2 * -1 + 2 * -1 = -3. Значение 1 уменьшилось до -3. Очевидно, что контраст между 3 и 1 увеличен до 7 и -3, что, в свою очередь, сделает изображение более четким.

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

Интуитивно понятное понимание сверток для глубокого обучения

Изучение сильных визуальных иерархий, которые заставляют их работать

towardsdatascience.com

Ядро против фильтра

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

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

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

1D, 2D и 3D свертки

1D свертки обычно используются для анализа данных временных рядов (поскольку в таких случаях вводится 1D). Как упоминалось ранее, ввод данных 1D может иметь несколько каналов. Фильтр может двигаться только в одном направлении, и, следовательно, выходной сигнал равен 1D. Ниже приведен пример одноканальной свертки 1D.

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

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

Большая часть работы, проделанной в модификации и настройке слоев CNN, была сфокусирована только на двухмерных свертках, и поэтому с этого момента я буду обсуждать только эти вариации в контексте двухмерных сверток.

Транспонированная Свертка (Деконволюция)

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

Чтобы достичь этого с помощью свертки, мы используем модификацию, известную как транспонированная свертка или деконволюция (хотя это не совсем «обратная» операция свертки, поэтому многие люди не предпочитают использовать этот термин). Пунктирные блоки в GIF ниже представляют отступы.

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

Отделимая свертка

Разделяемая свертка относится к разбиению ядра свертки на ядра более низкой размерности. Отделимые свертки бывают двух основных типов Во-первых, это пространственно отделимые свертки, см., Например, ниже.

Стандартное ядро ​​двумерной свертки
Пространственно отделимая двумерная свертка

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

Стандартная двумерная свертка с 3 входными каналами и 128 фильтрами
Глубоко разделяемая двумерная свертка, которая сначала обрабатывает каждый канал отдельно, а затем применяет межканальные свертки

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

Дилатационная (злокачественная) свертка

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

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

Деформируемая свертка

Свертки очень жесткие с точки зрения формы выделения признаков. То есть формы ядра - это только квадрат / прямоугольник (или какая-то другая форма, которую необходимо определить вручную), и, таким образом, они могут работать только с такими шаблонами.Что, если форма свертки сама по себе была обучаемой?Это основная идея введения деформируемых извилин.

Реализация деформируемой свертки на самом деле очень проста. Каждое ядро ​​фактически представлено двумя разными матрицами. Первая ветвь учится предсказывать «смещение» от источника. Это смещение указывает на то, какие входные данные вокруг источника будут обрабатываться. Поскольку каждое смещение прогнозируется независимо, им не нужно формировать какую-либо жесткую форму между собой, что позволяет деформируемому характеру. Вторая ветвь - это просто ветвь свертки, вход которой теперь является значениями этих смещений.

Что дальше?

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


Этот блог является частью усилий по созданию упрощенного введения в области машинного обучения. Следуйте за полной серией здесь

Машинное обучение: упрощенное

Знай это, прежде чем погрузиться в

towardsdatascience.com

Или просто прочитайте следующий блог в серии

Распределенное векторное представление: упрощенное

Возможно, самый важный метод представления функций в машинном обучении

towardsdatascience.com


Ссылки

[1] Крижевский, Алекс, Илья Суцкевер и Джеффри Э. Хинтон. «Классификация Imagenet с глубокими сверточными нейронными сетями». Достижения в системах обработки нейронной информации. 2012.
[2] Думулин, Винсент и Франческо Висин. «Руководство по арифметике свертки для глубокого обучения». Препринт arXiv arXiv: 1603.07285 (2016).
[3] Чен, Лян-Цзе и др. «Deeplab: семантическая сегментация изображений с помощью глубоких сверточных сетей, атомной свертки и полностью связанных crfs». IEEE-транзакции по анализу образов и машинному интеллекту 40.4 (2017): 834–848.
[4] Dai, Jifeng, et al. «Деформируемые сверточные сети». Материалы международной конференции IEEE по компьютерному зрению. 2017.
[5] Говард, Эндрю Дж. И соавт. «Мобильные сети: эффективные сверточные нейронные сети для приложений мобильного зрения». Препринт arXiv arXiv: 1704.04861 (2017).
[6]
https://github.com/vdumoulin/conv_arithmetic

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map