Как работает сверточная нейронная сеть

Как работает сверточная нейронная сеть

История, архитектура и основы обучения.

Идея сверточных нейросетей появилась в 1950-х, а интерес к ним возобновился после 2012 года, когда математики из Университета Торонто Алек Крижевски и Джефф Хинтон победили на соревнованиях ImageNet по распознаванию образов. Их нейросеть снизила количество ошибок квалификации образов с 26% до 15%, что было рекордом. Сейчас точность алгоритмов в распознавании лиц в толпе — 99,8% (выше, чем у человека).

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

Зачем применяют сверточные нейросети и как они появились

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

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

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

Перцептрон и первая нейросеть 

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

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

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

Принцип работы нейросети

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

Человеческий глаз натренирован находить различия в объектах. А компьютер, когда обрабатывает картинку, принимает на вход набор пикселей. Например, если картинка состоит из 32х32 пикселей, то алгоритм создаст массив размером 32х32 (состоящий из 1024 элементов), когда изображение черно-белое. 

Если обрабатываются цветные картинки, то массив будет иметь вид 32х32х3, так как полноцветное изображение обычно представлено RGB-моделью (red, green, blue). Каждый цветовой компонент будет обрабатываться отдельно.

Все оттенки в модели RGB созданы из красного, зеленого и синего цветов. Каждый пиксель имеет шкалу насыщенности цвета, где 0 — черный, а 255 — максимально насыщенный зеленый, синий или красный цвет. Входной сигнал изображения (значения пикселей) подается на вход нейрона только в пределах небольшой области — например, 5х5 пикселей. Она называется рецептивным полем или полем восприятия. 

Нейрон (ядро) — это фильтр, то есть матрица определенных коэффициентов (весов). Их оптимальное значение устанавливается в процессе обучения нейросети. 

Коэффициентов должно быть столько же, сколько параметров в рецептивном поле. Нейрон умножает значения матрицы фильтра на значения пикселей. Результат умножений суммируется. Получившееся число отображает расположение фильтра на картинке. Этот процесс и называется сверткой. Например, на картинке размером 32х32 есть 784 квадрата, которые может выделить фильтр. Эти числа создают матрицу размером 28х28.

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

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


Визуализация работы фильтров и определения свойств изображения / Proproprogs

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


Умножение значений фильтра на значения пикселей в рецептивном поле / Neural Networks и Deep Learning, Michael Nielsen

Это позволяет системе предположить, что в этой части изображения есть то, что подходит под фильтр. 


Визуализация изображения и фильтра / Neural Networks и Deep Learning, Michael Nielsen

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

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

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

Что такое пулинг

Чтобы анализировать вычисленные признаки на более крупном масштабе, размерность карт признаков сокращают с помощью пулинга. 

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


Операция пулинга. Здесь используется функция максимума (max pooling) / SpringerOpen

Из чего состоит полносвязный слой

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

В полносвязном слое много нейронов с разными весами, поэтому для вывода результатов применяют вектор нейронов. Например, нейросеть создана для определения типов транспорта. Ее задача — установить, к какому из 20 классов принадлежит объект. Алгоритм выдал результат вектора [0; 0; … 0,1; 0; 0,9]. Класс, который набрал значение 0,1, обозначает велосипеды, а класс со значением 0,9 — мотоцикл. Тогда вероятность, что на картинке мотоцикл, — 90%, и нейросеть сделает такой прогноз.   

Как обучают нейросеть

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

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

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

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

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

Ещё статьи
Как упростить разработку.
Data science, web development, gamedev и не только.