Сверточные нейросети как работают

0
15

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

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

Свертка (англ. convolution) — операция над парой матриц [math]A[/math] (размера [math]n_x\times n_y[/math] ) и [math]B[/math] (размера [math]m_x \times m_y[/math] ), результатом которой является матрица [math]C = A * B[/math] размера [math](n_x-m_x+1)\times (n_y-m_y+1)[/math] . Каждый элемент результата вычисляется как скалярное произведение матрицы [math]B[/math] и некоторой подматрицы [math]A[/math] такого же размера (подматрица определяется положением элемента в результате). То есть, [math]C_ = \sum_^\sum_^A_B_[/math] . На Рисунке 1 можно видеть, как матрица [math]B[/math] «двигается» по матрице [math]A[/math] , и в каждом положении считается скалярное произведение матрицы [math]B[/math] и той части матрицы [math]A[/math] , на которую она сейчас наложена. Получившееся число записывается в соответствующий элемент результата.

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

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

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

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

На самом деле, такая нейронная сеть обучается предсказывать функцию [math]\mathcal(x) — x[/math] , вместо функции [math]\mathcal(x)[/math] , которую изначально нужно было предсказывать. Для компенсации этой разницы и вводится это замыкающее соединение (англ. shortcut connection), которое добавляет недостающий [math]x[/math] к функции. Предположение авторов, которые предложили residual block, заключалось в том, что такую разностную функцию будет проще обучать, чем исходную. Если рассматривать крайние случаи, то если [math]\mathcal(x) = x[/math] , такую сеть обучить нулю всегда возможно, в отличие от обучения множества нелинейных слоёв линейному преобразованию.

Расширенная свертка (aнгл. Dilated convolution)

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

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

Двумя серьезными проблемами в обучении глубоких нейронных сетей являются исчезающий градиент (англ. 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] — функция активации.

ЧИТАТЬ ТАКЖЕ:  Нейросеть которая делает аватарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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