Визуальное объяснение концепций, которые заставляют работать сверточные нейронные сети, и их интуиции.

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

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

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

Все примеры, которые мы рассмотрим в этом посте, можно найти в этой записной книжке.

Свертки: все дело в фильтрах

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

В качестве примера предположим, что у нас есть входное изображение и фильтр:

Помните, что любое изображение можно представить в виде матрицы пикселей, где каждый пиксель представляет интенсивность цвета:

Свертка делает следующее:

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

Но зачем нам это делать? Похоже, в этом нет особого смысла!

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

(Обратите внимание, что это больше не матрица. На самом деле это изображение)

И примените к нему несколько фильтров:

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

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

И, очевидно, мы можем применить фильтр, который оставит исходное изображение таким же:

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

Но давайте попробуем с другим изображением, чтобы узнать больше о фильтрах:

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

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

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

Давайте применим несколько фильтров и посмотрим, что произойдет:

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

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

Объединение: увеличение мощности сверток

Концепция пула проста:

То есть мы собираемся взять группы пикселей (например, группы 2x2 пикселей) и выполнить агрегацию по ним. Одна из возможных агрегаций, которую мы можем сделать, - это взять максимальное значение пикселей в группе (это известно как Максимальное объединение). Еще одна распространенная агрегация - это усреднение (Среднее объединение).

Но, опять же, есть ли в этом смысл? Чтобы ответить на вопрос, давайте возьмем одно из предыдущих изображений и применим к нему 2x2 max pooling:

Мы видим две вещи:

  • Прежде всего, размер изображения уменьшается вдвое: если взять группы по 2x2 пикселя и сохранить только максимум, теперь изображение становится вдвое больше.
  • Края, которые мы сохранили при применении свертки с фильтром вертикальных краев, не только сохраняются, но также усиливаются.

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

Как это вписывается в сверточную нейронную сеть?

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

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

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

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

Попробуйте сами

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

Записную книжку можно найти здесь.

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

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

Заявление об ограничении ответственности: эта статья дает интуитивное представление о том, как работают сверточные нейронные сети. Для простоты объяснения я пропустил некоторые концепции, такие как обработка различных каналов в цветных изображениях, шагах, отступах и т. Д. Эти концепции важны для полного понимания CNN, поэтому не забывайте о них! Вдобавок этот пост был вдохновлен специализацией deeplearning.ai TensorFlow на практике, которая дает отличное объяснение интуиции, лежащей в основе CNN.