Окунаясь в бассейн раскрытие магии слоев пулинга в CNN

Вскрытие магии слоев пулинга окунитесь в бассейн CNN!

Мотивация

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

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

Почему использовать слои пулинга

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

Вот несколько преимуществ использования слоев пулинга в ваших моделях:

  • Снижение размерности

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

  • Инвариантность к переносу

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

Теперь давайте рассмотрим различные методы пулинга, которые часто используются на практике.

Общий пример

Для удобства сравнения давайте используем простую двумерную матрицу и применим разные техники с одинаковыми параметрами.

Слои пулинга наследуют ту же терминологию, что и сверточные слои, и сохраняют концепцию размера ядра (Kernel Size), шага (Stride) и заполнения (Padding).

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

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

Пулинг по максимуму (Max Pooling)

Мы проходим ядро по матрице и выбираем максимальное значение из каждого окна. В приведенном выше примере мы используем ядро размером 2×2 с шагом два и проходим по матрице, формируя четыре разных окна, обозначенных разными цветами.

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

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

  • Сохранение высоких значений активации

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

  • Сохранение доминирующих признаков

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

  • Устойчивость к шуму

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

Недостатки

  • Возможная потеря информации

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

  • Нечувствительность к малым сдвигам

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

  • Чувствительность к высокому шуму

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

Усредняющее объединение

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

Преимущества усредняющего объединения

  • Сохранение пространственной информации

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

  • Стабильность относительно выбросов

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

  • Плавные переходы

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

Недостатки

  • Не способность захватывать ключевые особенности

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

  • Уменьшение различий между картами признаков

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

Глобальное усреднение

Глобальное объединение отличается от обычных слоев объединения. Оно не имеет понятия о окнах, размере ядра или шаге. Мы рассматриваем всю матрицу в целом и учитываем все значения в сетке. В контексте вышеприведенного примера мы берем среднее из всех значений в матрице 4×4 и получаем единственное значение в качестве результата.

Когда использовать

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

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

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

При применении глобального объединения перед полносвязными слоями, все размеры входных данных будут уменьшены до размера 1×1. Таким образом, ввод с размерами (5,5) или (50,50) будет понижен до размера 1×1. Затем их можно сплющить и отправить в полносвязные слои без необходимости беспокоиться о несоответствии размеров.

 

Основные выводы

 

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

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