что собой представляет генераторная матрица сверточного кода

Сверточный слой: методы оптимизации основанные на матричном умножении

Введение

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

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

Параметры свёрточного слоя

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

Размеры входного и выходного изображения

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Размеры ядра свертки

Операция свертки по своей сути — это взвешенная сумма некой окрестности данной точки изображения. Размер ядра свертки — характеризует величину этой окрестности и описывается двумя параметрами:

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Шаг свертки

Еще один важный параметр — шаг свертки:

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Растяжение свертки

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Паддинг входного изображения

Если применить свертку с окном, отличным от единичного к изображению, то выходное изображение будет меньше на величину kernel — 1. Свертка как бы «съедает» края. Чтобы сохранить размер изображения, входное изображение часто дополняют по краям нулями. За это отвечают еще четыре параметра:

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Группы каналов

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Смещение и активационная функция

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

Базовая реализация алгоритма

Для начала хотелось бы привести базовую реализацию алгоритма:

В этой реализации я предполагал, что входное и выходное изображение имеет формат NCHW:

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

Мы имеем 8 вложенных циклов и общее количество операций:

при этом количество данных во входном:

Источник

Принцип работы свёрточной нейронной сети. Просто о сложном

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

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.
2D Свёрточная нейронная сеть

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

Структура сверточных нейронных сетей

Предположим, дана задача в которой требуется предсказать по аудио, есть ли голос человека в аудиофайле.

На входе получаем образцы аудио в разные моменты времени. Образцы равномерно распределены.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Более сложный подход учитывает некоторую симметрию в свойствах, которые которая находится в данных. Мы уделяем много внимания локальным свойствам данных: какая частота звука в течение определенного времени? Увеличивается или уменьшается? И так далее.

Мы учитываем те же свойства во все моменты времени. Полезно знать частоты вначале, середине и в конце. Обратите внимание, что это локальные свойства, поскольку нужно только небольшое окно аудиопоследовательности, чтобы определить их.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

В приведенном выше примере A обрабатывало только сегменты, состоящие из двух точек. Это редко встречается на практике. Обычно, окно слоя свертки намного больше.

В следующем примере A получает на вход 3 отрезка. Это тоже маловероятно для реальных задач, но, к сожалению, сложно визуализировать A, соединяющее множество входов.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

В следующем примере есть новая группа нейронов B. B используется для создания еще одного сверточного слоя, уложенного поверх предыдущего.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Сверточные слои часто переплетены pooling (объединяющими) слоями. В частности, есть вид слоя, называемый max-pooling, который чрезвычайно популярен.

Часто, нас не волнует точный момент времени, когда присутствует полезный сигнал в данных. Если изменение частоты сигнала происходит раньше или позже, имеет ли это значение?

Max-pooling вбирает максимум фичей из небольших блоков предыдущего уровня. Вывод говорит, присутствовал ли полезный сигнал функции в предыдущем слое, но не точно где.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

В двумерном сверточном слое вместо того, чтобы смотреть на сегменты, A будет смотреть патчи.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Мы, также можем выполнять max-pooling в двух измерениях. Здесь мы берем максимум фичей из небольшого патча.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

Ранее, мы говорили, что A — группа нейронов. Будем более точными в том: что такое А?
В традиционных сверточных слоях A представляет собой параллельную связку нейронов, все нейроны получают одинаковые входные сигналы и вычисляют разные функции.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

В статье ‘Network in Network’ (Lin et al. (2013)) предлагается новый слой «Mlpconv». В этой модели, A имеет несколько уровней нейронов, причем последний слой выводит функции более высокого уровня для обрабатываемого региона. В статье, модель достигает впечатляющих результатов, устанавливая новый уровень техники в ряде эталонных наборов данных.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Для целей этой публикации мы сосредоточимся на стандартных сверточных слоях.

Результаты сверточных нейронных сетей

В 2012 году Alex Krizhevsky, Ilya Sutskever, и Geoff Hinton достигли существенного улучшения качества распознавания в сравнении с известными на тот момент решениями (Krizehvsky et al. (2012)).

Прогресс был результатом объединения нескольких подходов. Использовались графические процессоры для обучения большой (по меркам 2012 года), глубокой нейронной сети. Использовался новый тип нейронов (ReLU) и новая техника для уменьшения проблемы, называемой «overfitting» (DropOut). Использовали большой набор данных с большим количеством категорий изображений (ImageNet). И конечно же, это была сверточная нейронная сеть.
Архитектура, показанная ниже, была глубокой. Она имеет 5 сверточных слоев, 3 pooling с чередованием и три полносвязных слоя.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

From Krizehvsky et al. (2012)
Сеть была обучена классификации фотографий в тысячи разных категорий.

Модель Крижевского и др. была способна дать правильный ответ в 63% случаев. Кроме того, правильный ответ из 5 лучших ответов, присутствует 85% прогнозов!

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Проиллюстрируем, что узнает первый уровень сети.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Фильтры, полученные первым сверточным слоем. Верхняя половина соответствует слою на одном графическом процессоре, нижняя — на другом. From Krizehvsky et al. (2012)
Нейроны с одной сторону, фокусируются на черно-белом цвете, учась обнаруживать края разных ориентаций и размеров. Нейроны с другой стороны, специализируются на цвете и текстуре, обнаруживают цветовые контрасты и узоры. Помните, что нейроны случайным образом инициализируются. Ни один человек не пошел и не поставил их пограничными детекторами, или разделил таким образом. Это произошло при обучении сети классификации изображений.

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

Формализация сверточных нейронных сетей

Рассмотрим одномерный сверточный слой с входами и выводами :

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Сравнительно легко описать результаты в терминах входных данных:

Например, в приведенном выше примере:

у0 = А (х0, х1)
y1 = А (x1, x2)

Аналогично, если мы рассмотрим двумерный сверточный слой с входами и выводами :

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Сеть можно представить двумерной матрицей из значений.

Источник

Наглядно о том, как работает свёрточная нейронная сеть

что собой представляет генераторная матрица сверточного кода. 5d6f10de728203200518e5989a82f408. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-5d6f10de728203200518e5989a82f408. картинка что собой представляет генераторная матрица сверточного кода. картинка 5d6f10de728203200518e5989a82f408. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

Начинаем сначала

Свёрточная нейронная сеть (ConvNet/CNN) — это алгоритм глубокого обучения, который может принимать входное изображение, присваивать важность (изучаемые веса и смещения) аспектам или объектам изображении и отличать одно от другого. При этом изображения в сравнении с другими алгоритмами требуют гораздо меньше предварительной обработки. В примитивных методах фильтры разрабатываются вручную, но достаточно обученные сети CNN учатся применять эти фильтры/характеристики.

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

Почему слои свёртки расположены над сетью с прямой связью

Изображение — не что иное, как матрица значений пикселей, верно? Так почему бы не сделать его плоским (например, матрицу 3×3 сделать вектором 9×1) и скормить этот вектор многослойному перцептрону, чтобы тот выполнил классификацию? Хм… всё не так просто.

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

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

Входное изображение

На рисунке мы видим разделённое на три цветовых плоскости (красную, зелёную и синюю) RGB-изображение, которое можно описать в разных цветовых пространствах — в оттенках серого (Grayscale), RGB, HSV, CMYK и т. д.

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

Слой свёртки — ядро

1 — количество каналов, например, RGB.

В демонстрации выше зелёная секция напоминает наше входное изображение 5×5×1. Элемент, участвующий в выполнении операции свёртки в первой части слоя свёртки, называется ядром/фильтром K, он представлен жёлтым цветом. Пусть K будет матрицей 3×3×1:

Ядро смещается 9 раз из-за длины шага в единицу (то есть шага нет), каждый раз выполняя операцию умножения матрицы K на матрицу P, над которой находится ядро.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.Перемещение ядра

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.Операция свёртки на матрице изображения M×N×3 с ядром 3×3×3

В случае изображений с несколькими каналами (например, RGB) ядро имеет ту же глубину, что и у входного изображения. Матричное умножение выполняется между стеками Kn и In ([K1, I1]; [K2, I2]; [K3, I3]), все результаты суммируются со смещением, чтобы получить уплощённый канал вывода свёрнутых признаков с глубиной в 1.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.Операция свёртки с длиной шага, равной 2

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

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.Нулевое заполнение: для создания изображения 6×6×1 изображение 5×5×1 дополняется нулями

Увеличивая изображение 5×5×1 до 6×6×1, а затем проходя над ним ядром 3×3×1, мы обнаружим, что свёрнутая матрица будет обладать разрешением 5×5×1. Отсюда и название — нулевое заполнение. С другой стороны, проделав то же самое без заполнения, мы обнаружим матрицу с размерами самого ядра (3×3×1); эта операция называется допустимым заполнением.

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

Слой объединения

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

Есть два типа объединения: максимальное и среднее. Первое возвращает максимальное значение из покрытой ядром части изображения. А среднее объединение возвращает среднее значение из всех значений покрытой ядром части.

Максимальное объединение также выполняет функцию шумоподавления. Оно полностью отбрасывает зашумленные активации, а также устраняет шум вместе с уменьшением размерности. С другой стороны, среднее объединение для подавления шума просто снижает размерность. Значит, можно сказать, что максимальное объединение работает намного лучше среднего объединения.

что собой представляет генераторная матрица сверточного кода. 75b81bd7b975be61b651c9404c3133e9. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-75b81bd7b975be61b651c9404c3133e9. картинка что собой представляет генераторная матрица сверточного кода. картинка 75b81bd7b975be61b651c9404c3133e9. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.Типы объединения

Слои объединения и свёртки вместе образуют i-тый слой свёрточной нейронной сети. Количество таких слоёв может быть увеличено в зависимости от сложности изображений, чтобы лучше схватывать детали, но это делается за счёт увеличения вычислительной мощности.

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

Классификация — полносвязный слой

что собой представляет генераторная матрица сверточного кода. 22f5f9131b2ad5abf92af4ae940dc026. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-22f5f9131b2ad5abf92af4ae940dc026. картинка что собой представляет генераторная матрица сверточного кода. картинка 22f5f9131b2ad5abf92af4ae940dc026. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

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

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

Репозиторий с проектом по распознаванию цифр.

CNN имеет огромное количество практических приложений; и если вам интересны эксперименты и поиски в области ИИ, обратите внимание на наш курс о машинном и глубоком обучении или прокачайтесь в работе с данными или освойте перспективную специальность с помощью нашего флагманского курса о Data Science.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Источник

Что такое свёрточная нейронная сеть

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Введение

Свёрточные нейронные сети (СНС). Звучит как странное сочетание биологии и математики с примесью информатики, но как бы оно не звучало, эти сети — одни из самых влиятельных инноваций в области компьютерного зрения. Впервые нейронные сети привлекли всеобщее внимание в 2012 году, когда Алекс Крижевски благодаря им выиграл конкурс ImageNet (грубо говоря, это ежегодная олимпиада по машинному зрению), снизив рекорд ошибок классификации с 26% до 15%, что тогда стало прорывом. Сегодня глубинное обучения лежит в основе услуг многих компаний: Facebook использует нейронные сети для алгоритмов автоматического проставления тегов, Google — для поиска среди фотографий пользователя, Amazon — для генерации рекомендаций товаров, Pinterest — для персонализации домашней страницы пользователя, а Instagram — для поисковой инфраструктуры.

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

Задача

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

Вводы и выводы

Чего мы хотим от компьютера

Теперь, когда мы определили задачу, ввод и вывод, давайте думать о том, как подбираться к решению. Мы хотим, чтобы компьютер мог различать все данные ему изображения и распознавать уникальные особенности, которые делают собаку собакой, а кошку кошкой. У нас и этот процесс происходит подсознательно. Когда мы смотрим на изображение собаки, мы можем отнести его к конкретному классу, если у изображения есть характерные особенности, которые можно идентифицировать, такие как лапы или четыре ноги. Аналогичным образом компьютер может выполнять классификацию изображений через поиск характеристик базового уровня, например границ и искривлений, а затем с помощью построения более абстрактных концепций через группы свёрточных слоев. Это общее описание того, что делают СНС. Теперь перейдём к специфике.

Биологические связи

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

Структура

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

Первый cлой — математическая часть

Первый слой в СНС всегда свёрточный. Вы же помните, какой ввод у этого свёрточного слоя? Как уже говорилось ранее, вводное изображение — это матрица 32 х 32 х 3 с пиксельными значениями. Легче всего понять, что такое свёрточный слой, если представить его в виде фонарика, который светит на верхнюю левую часть изображения. Допустим свет, который излучает этот фонарик, покрывает площадь 5 х 5. А теперь давайте представим, что фонарик движется по всем областям вводного изображения. В терминах компьютерного обучения этот фонарик называется фильтром (иногда нейроном или ядром), а области, на которые он светит, называются рецептивным полем (полем восприятия). То есть наш фильтр — это матрица (такую матрицу ещё называют матрицей весов или матрицей параметров). Заметьте, что глубина у фильтра должна быть такой же, как и глубина вводного изображения (тогда есть гарантия математической верности), и размеры этого фильтра — 5 х 5 х 3. Теперь давайте за пример возьмем позицию, в которой находится фильтр. Пусть это будет левый верхний угол. Поскольку фильтр производит свёртку, то есть передвигается по вводному изображению, он умножает значения фильтра на исходные значения пикселей изображения ( поэлементное умножение). Все эти умножения суммируются (всего 75 умножений). И в итоге получается одно число. Помните, оно просто символизирует нахождение фильтра в верхнем левом углу изображения. Теперь повторим этот процесс в каждой позиции. (Следующий шаг — перемещение фильтра вправо на единицу, затем еще на единицу вправо и так далее). Каждая уникальная позиция введённого изображения производит число. После прохождения фильтра по всем позициям получается матрица 28 х 28 х 1, которую называют функцией активации или картой признаков. Матрица 28 х 28 получается потому, что есть 784 различных позиции, которые могут пройти через фильтр 5 х 5 изображения 32 х 32. Эти 784 числа преобразуются в матрицу 28 х 28.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

(Небольшая ремарка: некоторые изображения, в том числе то, что вы видите выше, взяты из потрясающей книги «Нейронные сети и глубинное обучение» Майкла Нильсена («Neural Networks и Deep Learning», by Michael Nielsen). Настоятельно рекомендую).

Допустим, теперь мы используем два 5 х 5 х 3 фильтра вместо одного. Тогда выходным значением будет 28 х 28 х 2.

Первый слой

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Значение намного ниже! Это потому, что в новой области изображения нет ничего, что фильтр определения кривой мог засечь. Помните, что вывод этого свёрточного слоя — карта свойств. В самом простом случае, при наличии одного фильтра свертки (и если этот фильтр — детектор кривой), карта свойств покажет области, в которых больше вероятности наличия кривых. В этом примере в левом верхнем углу значение нашей 28 х 28 х 1 карты свойств будет 6600. Это высокое значение показывает, что, возможно, что-то похожее на кривую присутствует на изображении, и такая вероятность активировала фильтр. В правом верхнем углу значение у карты свойств будет 0, потому что на картинке не было ничего, что могло активировать фильтр (проще говоря, в этой области не было кривой). Помните, что это только для одного фильтра. Это фильтр, который обнаруживает линии с изгибом наружу. Могут быть другие фильтры для линий, изогнутых внутрь или просто прямых. Чем больше фильтров, тем больше глубина карты свойств, и тем больше информации мы имеем о вводной картинке.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

(Заметка: изображения выше — из Стэнфордского курса 231N, который преподают Андрей Карпатый и Джастин Джонсон (Andrej Karpathy and Justin Johnson). Рекомендую тем, кто хочет лучше изучить СНС).

Идём глубже по сети

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Последний слой, хоть и находится в конце, один из важных — мы перейдём к нему позже. Давайте подытожим то, в чём мы уже разобрались. Мы говорили о том, что умеют определять фильтры первого свёрточного слоя. Они обнаруживают свойства базового уровня, такие как границы и кривые. Как можно себе представить, чтобы предположить какой тип объекта изображён на картинке, нам нужна сеть, способная распознавать свойства более высокого уровня, как например руки, лапы или уши. Так что давайте подумаем, как выглядит выходной результат сети после первого свёрточного слоя. Его размер 28 х 28 х 3 (при условии, что мы используем три фильтра 5 х 5 х 3). Когда картинка проходит через один свёрточный слой, выход первого слоя становится вводным значением 2-го слоя. Теперь это немного сложнее визуализировать. Когда мы говорили о первом слое, вводом были только данные исходного изображения. Но когда мы перешли ко 2-му слою, вводным значением для него стала одна или несколько карт свойств — результат обработки предыдущим слоем. Каждый набор вводных данных описывает позиции, где на исходном изображении встречаются определенные базовые признаки.

Теперь, когда вы применяете набор фильтров поверх этого (пропускаете картинку через второй свёрточный слой), на выходе будут активированы фильтры, которые представляют свойства более высокого уровня. Типами этих свойств могут быть полукольца (комбинация прямой границы с изгибом) или квадратов (сочетание нескольких прямых ребер). Чем больше свёрточных слоёв проходит изображение и чем дальше оно движется по сети, тем более сложные характеристики выводятся в картах активации. В конце сети могут быть фильтры, которые активируются при наличии рукописного текста на изображении, при наличии розовых объектов и т.д. Если вы хотите узнать больше о фильтрах в свёрточных сетях, Мэтт Зейлер и Роб Фергюс написали отличную научно-исследовательскую работу на эту тему. Ещё на ютубе есть видео Джейсона Йосински c отличным визуальным представлением этих процессов.

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

Полносвязные слои

Теперь, когда мы можем обнаружить высокоуровневые свойства, самое крутое — это прикрепление полносвязного слоя в конце сети. Этот слой берёт вводные данные и выводит N-пространственный вектор, где N — число классов, из которых программа выбирает нужный. Например, если вы хотите программу по распознаванию цифр, у N будет значение 10, потому что цифр 10. Каждое число в этом N-пространственном векторе представляет собой вероятность конкретного класса. Например, если результирующий вектор для программы распознавания цифр это [0 0,1 0,1 0,75 0 0 0 0 0,05], значит существует 10% вероятность, что на изображении «1», 10% вероятность, что на изображение «2», 75% вероятность — «3», и 5% вероятность — «9» (конечно, есть и другие способы представить вывод).

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

Обучение (или «Что заставляет эту штуку работать»)

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

Перед тем, как перейти к объяснению этого метода, поговорим о том, что нейронной сети нужно для работы. Когда мы рождаемся, наши головы пусты. Мы не понимаем как распознать кошку, собаку или птицу. Ситуация с СНС похожа: до момента построения сети, веса или значения фильтра случайны. Фильтры не умеют искать границы и кривые. Фильтры верхних слоёв не умеют искать лапы и клювы. Когда мы становимся старше, родители и учителя показывают нам разные картинки и изображения и присваивают им соответствующие ярлыки. Та же идея показа картинки и присваивания ярлыка используется в обучающем процессе, который проходит СНС. Давайте представим, что у нас есть набор обучающих картинок, в котором тысячи изображений собак, кошек и птиц. У каждого изображения есть ярлык с названием животного.

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

что собой представляет генераторная матрица сверточного кода. image loader. что собой представляет генераторная матрица сверточного кода фото. что собой представляет генераторная матрица сверточного кода-image loader. картинка что собой представляет генераторная матрица сверточного кода. картинка image loader. Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

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

Тестирование

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

Как компании используют СНС

Данные, данные, данные. Компании, у которых тонны этого шестибуквенного магического добра, имеют закономерное преимущество перед остальными конкурентами. Чем больше тренировочных данных, которые можно скормить сети, тем больше можно создать обучающих итераций, больше обновлений весов и перед уходом в продакшн, получить лучше обученную сеть. Facebook (и Instagram) могут использовать все фотографии миллиарда пользователей, которые у них сегодня есть, Pinterest — информацию из 50 миллиардов пинов, Google — данные поиска, а Amazon — данные о миллионах продуктов, которые ежедневно покупаются. И теперь вы знаете какое волшебство они используют в своих целях.

Ремарка

Хоть этот пост и должен быть хорошим началом для понимания СНС, это не полный обзор. К моментам, которые не обсуждались в этой статье, относятся нелинейные (nonlinear) слои и слои объединения (pooling), а также гиперпараметры сети, такие как размеры фильтров, шаги и отступы. Сетевая архитектура, пакетная нормализация, исчезающие градиенты, выпадение, методы инициализации, невыпуклая оптимизация, сдвиг, варианты функций потерь, расширение данных, методы регуляризации, машинные особенности, модификации обратного распространения и много других необсуждённых (пока 😉 тем.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *