Сверточные нейронные сети, или как научить компьютер «видеть»

Распознавание изображений, основанное на глубоком обучении, сегодня решает многие задачи эффективнее, чем человеческое зрение. В этом материале мы рассмотрим, как человек и компьютер распознают изображение в наборе «сырых» пикселов, и объясним, почему глубокие сверточные нейронные сети (convolutional neural networks) так успешно работают в этом направлении.

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

1

 

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

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

2

 

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

Начиная с 1998 года, когда Янн ЛеКун (Yann LeCun) и другие популяризовали сверточные нейронные сети, этой концепции обязаны своим успехом многие решения, связанные с глубоким обучением и распознаванием речи и изображений. Сегодня эта тема актуальна, как никогда.

Работа сверточной нейронной сети обеспечивается двумя основными элементами:

  1. Фильтры (filters) (определители признаков)
  2. Карты признаков (feature maps).

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

3

 

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

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

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

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

4

 

Однако мы можем предложить еще более красивое решение. Предположим, лицо характеризуется глазами, носом и ртом. Это означает, что, если мы хотим получить на слое m карту признаков, которая распознает лицо, нам нужно получить информацию с трех разных карт признаков, представленных на (m-1) слое нейронов. Это значит, что необходимо создать фильтры, зависящие от всего объема информации и пересекающие различные карты признаков в пределах слоя. Такие связи могут быть определены с помощью полного сверточного слоя, который делает следующее:

 

5

 

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

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

6

 

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

7

 

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

По материалам: KDnuggets

комментариев 5

  1. Алексей:

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

  2. Артем:

    А сейчас?

Добавить комментарий

Ваш e-mail не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =