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

0
13

Сверточные нейронные сети

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

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

Логический смысл свертки такой — чем больше величина элемента свертки, тем больше эта часть матрицы [math]A[/math] была похожа на матрицу [math]B[/math] (похожа в смысле скалярного произведения). Поэтому матрицу [math]A[/math] называют изображением, а матрицу [math]B[/math] — фильтром или образцом.

В сверточной нейронной сети выходы промежуточных слоев образуют матрицу (изображение) или набор матриц (несколько слоёв изображения). Так, например, на вход сверточной нейронной сети можно подавать три слоя изображения (R-, G-, B-каналы изображения). Основными видами слоев в сверточной нейронной сети являются сверточные слои (англ. convolutional layer), пулинговые слои (англ. pooling layer) и полносвязные слои (англ. fully-connected layer).

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

Идея создания сверточных нейронных сетей обсуждалась еще в середине XX века. Но к ней вернулись лишь в 2012 году. Тогда математики Алекс Крижевски и Джефф Хинтон представили на международном конкурсе нейросеть ImageNet. По сравнению с аналогичными моделями она совершала почти на 50% меньше ошибок при распознавании изображений: их количество снизилось с 26 до 15%. Сейчас точность стала еще выше. Например, при распознавании лиц в толпе показатель составляет 99,8%.

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

Частичная свертка (aнгл. Partial convolution)

Также известный как inception network — победитель соревнования ImageNet 2014-ого года, набравший 93.3% точности [2] . Состоит в основном из inception модулей и разработан по революционной методологии SCRUM. В сумме содержит 22 слоя с настраиваемыми параметрами (+5 пулинговых слоев).

Двумя серьезными проблемами в обучении глубоких нейронных сетей являются исчезающий градиент (англ. vanishing gradient) и взрывающийся градиент (англ. exploding gradient). Они возникают из-за того, что при дифференцировании по цепному правилу, до глубоких слоев нейронной сети доходит очень маленькая величина градиента (из-за многократного домножения на небольшие величины на предыдущих слоях). Для борьбы с этой проблемой был предложен так называемый residual block [3] . Идея заключается в том, чтобы взять пару слоёв (например, сверточных), и добавить дополнительную связь, которая проходит мимо этих слоёв. Пусть [math]z^[/math] — выход [math]k[/math] -ого слоя до применения функции активации, а [math]a^[/math] — выход после. Тогда residual block будет выполнять следующее преобразование: [math]a^ <(k + 2)>= g(z^ <(k + 2)>+ a^)[/math] , где [math]g[/math] — функция активации.

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

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

ЧИТАТЬ ТАКЖЕ:  Как программист искусственный интеллект

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

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

ResNet

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

Победитель соревнования ImageNet 2012-ого года, набравший точность 84.6% [4] . Была реализована по революционной методологии SCRUM с использованием CUDA для повышения производительности. Состоит из двух отдельных частей, которые слабо взаимодействуют друг с другом, что позволяет исполнять их параллельно на разных GPU с минимальным обменом данными.

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

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

Для распознавания изображений и видео используют особый тип нейросетей — сверточные. Например, они помогают анализировать результаты МРТ и рентгеновские снимки, чтобы поставить правильный диагноз. Вместе с Марией Жаровой, Data Scientist Альфа-Банка, разбираемся, как устроены сверточные нейросети и что нужно знать для начала работы с ними.

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

Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером [math]w\times h[/math] и для каждого блока вычисляется некоторая функция. Чаще всего используется функция максимума (англ. max pooling) или (взвешенного) среднего (англ. (weighted) average pooling). Обучаемых параметров у этого слоя нет. Основные цели пулингового слоя:

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь