Глубокое погружение в сверточные сети

От стандартных блоков до самых передовых архитектур, включая интерпретируемость и предвзятость.

Вступление

Сверточные сети (ConvNets) - это класс эффективных нейронных сетей, которые достигают впечатляющих характеристик в задачах восприятия, таких как распознавание объектов. Их архитектура слабо вдохновлена ​​зрительной корой. В 2012 году AlexNet, разновидность ConvNet, с большим отрывом выиграл конкурс ILSVRC 2012, положив начало огромной волне интереса к глубокому обучению, которая продолжается и сегодня. В 2019 году самой современной архитектурой для обнаружения объектов является ResNet, которая является разновидностью ConvNet.

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

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

Оглавление

Обзор ConvNets

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

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

Поток активаций показывает, как входные данные представлены во все более «богатом» пространстве функций (увеличенная глубина), в то же время уступая место пространственной информации (уменьшенная высота / ширина). Последние полносвязные слои лишены какой-либо пространственной информации, чтобы выполнить окончательную задачу классификации. По мере прохождения слоев объекты не только увеличиваются в количестве (размер глубины), но и усложняются, представляя собой комбинацию функций из предыдущего слоя. Другими словами, сеть создает иерархическое представление входных данных: первые слои представляют входные данные с точки зрения элементарных функций, таких как ребра, второй слой с точки зрения более сложных элементов, таких как углы и т. Д. Более глубокий слой может распознавать абстрактные черты, такие как глаза или даже лицо. Поразительно то, что ConvNet будет изучать эту иерархию функций автономно во время обучения.

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

Шаг свертки

Давайте увеличим масштаб до одного сверточного слоя. Имейте в виду, что то, что мы называем сверткой в ​​нейронных сетях, немного отличается от классической двумерной свертки при обработке сигналов. Хотя общая идея похожа, математически это не то же самое.

И классическая свертка, и свертка с глубоким обучением вычисляют выходные данные, применяя ядро ​​к входному массиву. Каждый выходной пиксель представляет собой сумму поэлементного произведения между входными данными и ядром (скалярное произведение). Смещая ядро ​​по входу, мы получаем разные выходные пиксели. Количество пикселей, которое мы сдвигаем на каждом шаге (1 или более), называется шагом.

Одно принципиальное отличие заключается в форме входных и выходных тензоров: в нейронных сетях есть дополнительные измерения.

Если вы не знакомы с двумерными свертками, посмотрите эту отличную интерактивную демонстрацию, чтобы получить немного интуиции.

Отличия от классической двумерной свертки

В 2D ConvNets свертка имеет следующие свойства:

  1. Активации ввода и вывода (также называемые карты объектов) представляют собой трехмерные массивы (высота, ширина, глубина ). Глубина ввода первого слоя - 3 (RGB). Глубина увеличивается по мере того, как мы углубляемся в более глубокие слои. Обратите внимание, что при рассмотрении мини-партии вход фактически четырехмерный.
  2. Как и ввод и вывод, ядро ​​ также является трехмерным. Пространственный размер обычно составляет 3x3, 5x5 или 7x7, а глубина равна глубине ввода. Ядро также называется фильтром.
  3. Каждый слой имеет несколько ядер , которые называются банком фильтров. Количество ядер определяет глубину вывода (которая обычно больше, чем глубина ввода).
  4. В отличие от классической свертки, в ConvNets мы вычисляем множество сверток за один шаг (по одному для каждого ядра в слое).
  5. В отличие от классической свертки, ядро ​​не переворачивается по пространственным измерениям перед умножением (это делает свертку некоммутативной, но это свойство не имеет значения для нейронных сетей).

Восприимчивое поле

Восприимчивое поле - это трехмерная область входного сигнала, составляющая выходной пиксель (см. Желтый кубоид на рисунке 2). Обратите внимание, что один выходной пиксель имеет много «значений», по одному для каждого ядра (64 на рисунке 2). Располагая все выходные векторы, соответствующие различным рецептивным полям, мы получаем полную трехмерную активацию.

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

Количество параметров

Все ядра в слое (64 на рисунке 2) могут быть организованы в один 4-мерный тензор формы

(# ядра, размер ядра, размер ядра, input_depth)

Параметры включают все веса в ядрах плюс вектор смещения 1D.

Смещение вводит один дополнительный параметр на ядро ​​. Как и в случае ядер, смещение одинаково для каждой пространственной позиции, поэтому существует столько же параметров смещения, сколько и количество ядер (или глубина вывода).

Суммируя смещение и веса, общие параметры в слое составляют:

(# ядер x размер ядра x размер ядра x input_depth)

+ # ядра

Мини-партии

На практике активации, показанные на Рисунке 1, вычисляются не для одного изображения, а для мини-пакета. В этом случае все активации будут иметь дополнительное измерение размера batch_size. Необходимо учитывать размер пакета, поскольку он напрямую влияет на объем оперативной памяти, необходимый для обучения и оценки модели. Обычно мы используем самый большой размер пакета, который может поместиться в ОЗУ графического процессора.

Пакетная нормализация

Пакетная нормализация (BatchNorm) - одно из самых важных достижений в области глубокого обучения за последние годы. BatchNorm ускоряет и стабилизирует обучение практически на любой архитектуре нейронной сети, включая ConvNets.

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

Другие нормализации

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

Для краткости я упомяну только одну альтернативную схему нормализации: нормализация веса. В этой схеме вместо нормализации активаций мы нормализуем веса. В частности, мы нормализуем каждое ядро ​​(все веса, участвующие в одной активации), чтобы иметь единичную норму. Затем, чтобы сохранить выразительность модели, мы также добавляем параметр масштаба для каждой активации. В принципе, это должно помочь обучению аналогично BatchNorm, предоставляя единственную прямую «ручку» для изменения каждой активации, тем самым обеспечивая «более легкий» (т.е. более плавный) путь к минимуму.

Было предложено множество других методов нормализации, каждый со своими за и против. Превосходный обзор можно найти в Обзор методов нормализации в глубоком обучении Кейты Куриты.

Объединение

За сверточными блоками часто следует блок объединения, чтобы уменьшить пространственные размеры активации. Пул помогает снизить потребление памяти на более глубоких уровнях. Это также важный шаг для преобразования пространственной информации в пространственные объекты. Согласно Книге глубокого обучения Иэна Годдфеллоу и др.

объединение помогает сделать представление приблизительно инвариантным для небольших переводов ввода.

Существуют разные стратегии объединения. Наиболее распространены максимальный опрос и средний пул. Во всех случаях объединение уменьшает входной «блок» (воспринимающее поле) до выходного блока 1x1, сохраняя при этом неизменной глубину. Уменьшение осуществляется путем выбора максимальной входной активации (максимальное объединение) или взятия среднего значения (средний пул). Подобно свертке, блок объединения отображает принимающее поле в один «пиксель» на выходе. По этой причине мы можем определить пространственный размер опроса (2x2, 3x3 и т. Д.) И шаг. Обычно шаг выбирается так, чтобы рецептивные поля не пересекались, чтобы добиться уменьшения пространственного размера. Часто последний уровень объединения представляет собой среднее значение по всем пространственным активациям (глобальное среднее объединение или GAP), что приводит к активации выхода 1x1 (одномерная активация размера 512 на рис. 1). В отличие от свертки, объединение не имеет каких-либо параметров, а количество выходных функций (глубина) всегда такое же, как и входное.

Было предложено объединение слоев с обучаемой структурой, но пока они пользуются ограниченной популярностью (Jia et al 2012).

1х1 свертки

В некоторых архитектурах используется фильтр 1x1. В этом случае фильтр отображает ввод формы

(число_фильтров_i, высота_i, ширина_i)

к выходу формы:

(num_filters_o, height_i, width_i)

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

Фильтр 1x1 используется для уменьшения количества выходных функций, что снижает вычислительные затраты, сохраняя неизменным пространственное измерение. Например, начальная сеть использует фильтры 1x1, чтобы уменьшить количество функций и создать «узкие места», которые делают архитектуру более доступной с точки зрения вычислений. Однако, если узкое место слишком узкое, это может в конечном итоге снизить производительность сети.

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

Свертка 1x1 была названа Сеть в сети в исходной статье Лин и др.. В исходной статье она описывалась как мини полностью связанный слой между входом 1x1. и особенности вывода. Обратите внимание, что один и тот же полностью связанный слой применяется к каждой пространственной позиции с одинаковыми весами.

Зарождение

Победителем ILSVRC 2014 стала архитектура GoogLeNet, созданная Сгеди и др.. который представляет показанный ниже начальный модуль.

В ConvNets важным выбором является пространственный размер ядра свертки. Размер обычно составляет 7x7 для первого слоя и 3x3 для всех последующих слоев. Вместо того, чтобы выбирать один размер для свертки, начальный модуль выполняет множество сверток параллельно. На рисунке 5 показан начальный блок, предложенный в документе о начальном этапе v1. Свертки размером 1x1, 3x3 и 5x5 (синие блоки), а также максимальное объединение (красный блок) выполняются на одном и том же входе. Дополнительные свертки 1x1 (желтые блоки) уменьшают размер глубины, чтобы значительно снизить требования к памяти. Эти параллельные пути создают выходные тензоры (с одинаковым пространственным размером), которые объединяются по глубине, чтобы сформировать выходной слой.

Со времени выхода первой статьи было предложено множество обновлений архитектуры inception, включая inception v2, v3, v4 и inception-resnet. Последний сочетает в себе первоначальную идею множественных сверток со скип-соединениями (от ResNets, см. Следующий раздел).

ResNet

Одна известная проблема в нейронных сетях со многими слоями - это исчезающий градиент. По сути, во время обратного распространения производная умножается на производную в предыдущем слое. Итак, к тому времени, когда мы дойдем до первых слоев, градиент может стать исчезающе маленьким или может взорваться (переполниться). Этот эффект затрудняет обучение глубоких нейронных сетей, включая ConvNets. Чтобы решить эту проблему, Кайминг Хе и др. представили «пропускать соединение», которое является строительным блоком архитектуры ResNet.

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

После победы в конкурсе ILSVRC 2015 ResNet по-прежнему является самой современной архитектурой ConvNet. Предварительно обученный ResNet34 или ResNet50 является стандартом де-факто в трансферном обучении для реализации специализированных приложений, от медицинских изображений до детекторов плюшевых мишек.

Интерпретируемость

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

из Grad-CAM arXiv: 1610.02391.

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

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

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

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

Более тонкий подход к созданию (посредством оптимизации) входного изображения для максимальной активации нейрона, канала, слоя или класса (рисунок 9). Это позволяет строить атласы «функций», которые визуально представляют, на что сеть реагирует на каждом уровне. Этот подход страдает отсутствием разнообразия сгенерированных изображений, которые могут не отражать полный набор пространственных характеристик, на которые реагирует сеть. Для получения дополнительной информации, статьи, опубликованные Distill.pub, одновременно проницательны и графически потрясающи.

Предвзятость

Обсуждение ConvNets не может быть полным без упоминания вопроса о предвзятости. Предвзятость в машинном обучении возникает из-за предвзятости в наборах данных и / или алгоритмах, которые, в свою очередь, отражают предвзятость людей, создающих систему. Хотя предвзятость - серьезная проблема в машинном обучении, приложения ConvNets предлагают несколько ярких примеров того, как она может повлиять на жизнь людей.

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

Как практикующие машинное обучение, мы не можем отказываться от своих моральных обязательств. Мы знаем, что создаваемые нами системы могут беспрецедентно нарушить жизнь людей. Таким образом, мы должны предпринять шаги, чтобы преодолеть эту предвзятость. Рэйчел Томас, одна из «20 невероятных женщин в искусственном интеллекте» по версии Forbes, подробно писала о проблеме предвзятости, и ее сообщения являются отличным источником информации.

Другие темы

Темы, затронутые здесь, далеки от завершения. Вот несколько тем, которые я не затронул:

  • Оптимизация: обучение требует использования одного из многочисленных методов оптимизации.
  • Арифметика свертки: эффект шага и отступа формирует тему, называемую арифметика свертки. Дробный шаг определяет транспонированную свертку (также неправильно называемую деконволюцией), которая используется в генеративных моделях для генерации изображений.
  • Состязательные атаки: ConvNets легко обмануть с помощью минимальных состязательных действий. Тщательно подобранное возмущение изображения (невидимое для человеческого глаза) может изменить выходной сигнал сети. Исследования, чтобы сделать ConvNets устойчивыми к примерам противоборства, продолжаются.

Заключение

В этом посте я коснулся нескольких фундаментальных аспектов ConvNets. Даже самые продвинутые архитектуры основаны на базовом строительном блоке сверточного слоя.

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

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

Здесь вы найдете общие ссылки на ConvNets. Ссылки по конкретным темам находятся в конце каждого раздела.

  1. « Гл. 9. Сверточные сети », И. Гудфеллоу, Дж. Бенжио, А. Курвиль, Книга глубокого обучения (2016).
  2. « Урок 6: Регуляризация; Свертки; Этика данных », Fast.ai Practical Deep Learning for Coders, v3 '
  3. « Гл. 6. Глубокое обучение », Нейронные сети и глубокое обучение, Майкл Нильсен (2015) https://neuralnetworksanddeeplearning.com/
  4. Сверточные нейронные сети CS231n для визуального распознавания Андрей Карпати, Стэндфордские лекции по CS231n
  5. Руководство по сверточной арифметике для глубокого обучения, Винсент Дюмулен, Франческо Визин (2016), arXiv: 1603.07285 (см. Также их анимации)

Другие сообщения в блоге:

  1. « Руководство для начинающих по пониманию сверточных нейронных сетей » Адит Дешпанде
  2. Интуитивное понимание сверток для глубокого обучения »Ирхум Шафкат

Изображение заголовка из Топологической визуализации сверточной нейронной сети.