что такое полносвязная нейронная сеть

Структура и принцип работы полносвязных нейронных сетей

Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

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

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

Каждая связь между нейронами имеет определенный вес:

что такое полносвязная нейронная сеть. image002. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image002. картинка что такое полносвязная нейронная сеть. картинка image002. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:— от j-го нейрона к i-му нейрону

и, сигнал, проходя по ней, меняет свое значение в соответствии с этим весом:

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

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

В концепции персептрона функции активации выбираются пороговыми:

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

что такое полносвязная нейронная сеть. image006. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image006. картинка что такое полносвязная нейронная сеть. картинка image006. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами: что такое полносвязная нейронная сеть. image007. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image007. картинка что такое полносвязная нейронная сеть. картинка image007. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

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

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

Причем, везде, «да» означает +1, а нет – 0. Наша девочка так воспитана, что положительно относится к наличию квартиры и красоте, и отрицательно к тяжелому року. Она больше любит лирическую музыку. Именно поэтому веса связей для дома и красивого парня – положительные, а для рока установлено отрицательное значение. В момент знакомства, на вход ее НС поступают сигналы что такое полносвязная нейронная сеть. image010. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image010. картинка что такое полносвязная нейронная сеть. картинка image010. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:в виде значений +1 – для «да» и 0 – для «нет». Затем, каждое входное значение умножается на вес синаптической связи, по которой следует к выходному нейрону. На входе формируется суммарный сигнал в виде:

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

Далее, это значение проходит через функцию активации:

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

и на выходе нейрона формируется сигнал «да» или «нет».

Предположим, что ей встречается красивый парень с квартирой и обожающий тяжелый рок. Какая будет реакция? Умножаем все веса на 1, складываем, получаем сумму:

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

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

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

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

Снова на грани была сформирована симпатия. А вот если бы симпатичный парень любил рок, то было бы значение:

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

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

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

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

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

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

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

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

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

Источник

Свёрточная нейронная сеть с нуля. Часть 4. Полносвязный слой

Время чтения: 10 минут

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

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

Что такое полносвязный слой

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

Связь с матрицами

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

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

Зачем нужен полносвязный слой

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

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

Класс матрица

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

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

Перегрузим оператор круглые скобки для индексации:

Создадим класс для слоя

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

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

Создание слоя

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

Получение типа активационной функции

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

Инициализация весовых коэффициентов

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

Прямое распространение

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

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

Обратное распространение ошибки

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

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

Обновление весовых коэффициентов

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

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

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

Теперь же, имея возможность задать свои собственные веса слою проверим работу прямого и обратного распространения. Для этого, аналогично свёрточному слою, мы написали тестирующую функцию, но ввиду её тривиальности приведём лишь данные для тестирования и ожидаемые результаты. Для проверки создадим полносвязный слой, принимающий на входе тензор размером 1х1х8, и состоящий из 4 нейронов и использующий активационную функцию ReLU. Таким образом размер выходного тензора будет 1х1х4:

Если всё сделано правильно, то на выходе должен получиться следующий тензор:

Для обратного распространения зададим следующие градиенты:

Выполнив обратное распространение ошибки слой должен вернуть такой тензор:

Итоги

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

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

Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов

Языки программирования: Python, C, C++, Pascal, C#, Javascript

Выпускник МГУ им. М.В. Ломоносова

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

Источник

CS231n: Свёрточные нейронные сети для распознавания образов

что такое полносвязная нейронная сеть. image loader. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image loader. картинка что такое полносвязная нейронная сеть. картинка image loader. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

Содержание

Свёрточные нейронные сети (CNN / ConvNets)

Свёрточные нейронные сети очень похожи на обычные нейронные сети, которые мы изучали в прошлой главе (отсылка к прошлой главе курса CS231n): они состоят из нейронов, которые, в свою очередь, содержат изменяемые веса и смещения. Каждый нейрон получает какие-то входные данные, вычисляет скалярное произведение и, опционально, использует нелинейную функцию активации. Вся сеть по-прежнему представляет собой единственную дифференциируемую функцию оценки: из исходного набора пикселей (изображения) на одном конце до распределения вероятностей принадлежности к определённому классу на другом конце. У этих сетей по-прежнему есть функция потерь (например, SVM/Softmax) на последнем (полносвязном) слое и все те советы и рекомендации, которые были даны в предыдущей главе относящейся к обычным нейронным сетям, актуальны и для свёрточных нейронных сетей.

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

Обзор архитектуры

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

Обычные нейронные сети плохо масштабируются для бОльших изображений. В наборе данных CIFAR-10, изображения размером 32х32х3 (32 пикселя высота, 32 пикселя ширина, 3 цветовых канала). Для обработки такого изображения полносвязный нейрон в первом скрытом слое обычной нейронной сети будет иметь 32х32х3 = 3072 весов. Такое количество всё ещё является допустимым, но становится очевидным тот факт, что подобная структура не будет работать с изображениями бОльшего размера. Например, изображение большего размера — 200х200х3, приведёт к тому, что количество весов станет равным 200х200х3 = 120 000. Более того, нам понадобится не один подобный нейрон, поэтому общее количество весов быстро начнёт расти. Становится очевидным тот факт, что полносвязность чрезмерна и большое количество параметров быстро приведут сеть к переобученности.

3D-представления нейронов. Свёрточные нейронные сети используют тот факт, что входные данные — изображения, поэтому они образуют более чувствительную архитектуру к подобному типу данных. В частности, в отличие от обычных нейронных сетей, слои в свёрточной нейронной сети располагают нейроны в 3 измерениях — ширине, высоте, глубине (Заметка: слово «глубина» относится к 3-му измерению активационных нейронов, а не глубине самой нейронной сети измеряемой в количестве слоёв). Например, входные изображения из набора данных CIFAR-10 являются входными данными в 3D-представлении, размерность которых равна 32х32х3 (ширина, высота, глубина). Как мы увидим позднее, нейроны в одном слое будут связаны с небольшим количеством нейронов в предыдущем слое, вместо того чтобы быть связанными со всеми предыдущими нейронами слоя. Более того, выходной слой для изображения из набора данных CIFAR-10 будет иметь размерность 1х1х10, потому что подбираясь к концу нейронной сети мы уменьшим размер изображения до вектора оценок по классам, расположенного вдоль глубины (3-го измерения).

Стандартная нейронная сетьСвёрточная нейронная сеть
что такое полносвязная нейронная сеть. 2da120014faf76c47fa4294c7206e291. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-2da120014faf76c47fa4294c7206e291. картинка что такое полносвязная нейронная сеть. картинка 2da120014faf76c47fa4294c7206e291. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:что такое полносвязная нейронная сеть. d45f30a26e57d437828f90567867c96f. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-d45f30a26e57d437828f90567867c96f. картинка что такое полносвязная нейронная сеть. картинка d45f30a26e57d437828f90567867c96f. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

С левой стороны: стандартная 3-х слойная нейронная сеть.
С правой стороны: свёрточная нейронная сеть располагает свои нейроны в 3-х измерениях (ширине, высоте, глубине), как это показано на одном из слоёв. Каждый слой свёрточной нейронной сети преобразует 3D-представление входных данных в 3D-представление выходных данных в виде нейронов активации. В этом примере красный входной слой содержит изображение, поэтому его размеры будут равны размерам изображения, а глубина будет равна 3 (три канала — red, green, blue).

Свёрточная нейронная сеть состоит из слоёв. Каждый слой представляет собой простой API: преобразует входное 3D-представление в выходное 3D-представление некой дифференциируемой функцией, которая может содержать, а может и не содержать параметров.

Слои, используемые для построения свёрточных нейронных сетей

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

что такое полносвязная нейронная сеть. d9259be829b1cdb3d98a399ebc56defa. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-d9259be829b1cdb3d98a399ebc56defa. картинка что такое полносвязная нейронная сеть. картинка d9259be829b1cdb3d98a399ebc56defa. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:
Исходное представление содержит значения пикселей изображения (слева) и оценки по классам к которым относится объект на изображении (справа). Каждая трансформация представления отмечена в виде столбца.

Свёрточный слой

Свёрточный слой является основным слоем при построении свёрточных нейронных сетей.

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

что такое полносвязная нейронная сеть. image loader. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-image loader. картинка что такое полносвязная нейронная сеть. картинка image loader. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

Например, стандартный фильтр на первом слое свёрточной нейронной сети может иметь размеры 5х5х3 (5px — ширина и высота, 3 — количество цветовых каналов). Во время прямого прохода мы перемещаем (если быть точными — свёртываем) фильтр вдоль ширины и высоты входного представления и вычисляем скалярное произведение между значениями фильтра и подлежащими значениями входного представления в любой точке. В процессе перемещения фильтра вдоль ширины и высоты входного представления мы формируем 2х мерную карту активации, которая содержит значения применения данного фильтра к каждой из областей входного представления. Интуитивно становится ясно, что сеть обучит фильтры активироваться при виде определённого визуального признака, например, прямой под определённым углом или колесообразных представлений на более высоких уровнях. Теперь, когда мы применили все наши фильтры к исходному изображению, например, их было 12. В результате применения 12 фильтров мы получили 12 активационных карт размерностью 2. Чтобы произвести выходное представление — объединим эти карты (последовательно по 3-му измерению) и получим представление размерностью [WxHx12].

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

Локальная связность. Когда мы имеем дело с входными данными с большим количеством измерений, например, как в случае с изображениями, то, как мы уже видели, нет абсолютно никакой необходимости связывать нейроны со всеми нейронами на предыдущем слое. Вместо этого мы будем соединять нейроны только с локальными областями входного представления. Пространственная степень связности является одним из гипер-параметров и называется receptive field (рецептивное поле нейрона — размер того самого фильтра / ядра свёртки). Степень связности вдоль 3-го измерения (глубины) всегда равна глубине исходного представления. Очень важно вновь акцентировать на этом внимание, внимание на том, как мы определяем пространственные измерения (ширину и высоту) и глубину: связи нейрона локальны по ширине и высоте, но всегда простираются по всей глубине входного представления.

Пример 1. Представим, что входное представление имеет размер 32х32х3 (RGB, CIFAR-10). Если размер фильтра (рецептивное поле нейрона) будет размером 5х5, тогда каждый нейрон в свёрточном слое будет иметь веса к области размером 5х5х3 исходного представления, что в итоге приведёт к установлению 5х5х3 = 75 связей (весов) + 1 параметр смещения. Обратите внимание, что степень связности по глубине должна быть равна 3, так как это размерность исходного представления.

Пример 2. Представим, что входное представление имеет размер 16х16х20. Используя в качестве примера рецептивное поле нейрона размером 3х3, каждый нейрон свёрточного слоя будет иметь 3х3х20 = 180 связей (весов) + 1 параметр смещения. Обратите внимание, что связность локальна по ширине и высоте, но полная в глубину (20).

#1#2
что такое полносвязная нейронная сеть. 490db97a0f3fa98eb2f44e84764f8991. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-490db97a0f3fa98eb2f44e84764f8991. картинка что такое полносвязная нейронная сеть. картинка 490db97a0f3fa98eb2f44e84764f8991. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:что такое полносвязная нейронная сеть. 61fe81589ab491d1d3ba612b3bdf5b51. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-61fe81589ab491d1d3ba612b3bdf5b51. картинка что такое полносвязная нейронная сеть. картинка 61fe81589ab491d1d3ba612b3bdf5b51. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

C левой стороны: входное представление отображено красным цветом (например, изображение размером 32х32х3 CIFAR-10) и пример представления нейронов в первом свёрточном слое. Каждый нейрон в свёрточном слое связан только с локальной областью входного представления, но полностью по глубине (в примере — по всем цветовым каналам). Обратите внимание, что на изображении множество нейронов (в примере — 5) и расположены они по 3-му измерению (глубине) — чуть ниже будут даны пояснения относительно такого расположения.
С правой стороны: нейроны из нейронной сети по-прежнему остаются неизменными: они по-прежнему вычисляют скалярное произведение между своими весами и входными данными, применяют функцию активации, но их связность теперь ограничена пространственной локальной областью.

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

Мы можем вычислить итоговую размерность выходного представления представив её функцией от размеров входного представления (W), размером рецептивного поля нейронов свёрточного слоя (F), шагом (S) и размером выравнивания (P) на границах. Вы можете убедиться сами, что корректная формула для подсчёта количества нейронов в выходном представлении выглядит следующим образом (W — F + 2P) / S + 1. Например, для входного представления размером 7х7 и размером фильтра 3х3, шагом 1 и выравниванием 0, мы получим выходное представление размером 5х5. С шагом 2 мы бы получили выходное представление размером 3х3. Давайте рассмотрим ещё один пример, на этот раз проиллюстрированный графически:

Использование выравнивания. Обратите внимание на пример с левой стороны, который содержит 5 элементов на выходе и 5 элементов на выходе. Это сработало потому, что размер рецептивного поля (фильтра) был равен 3 и мы воспользовались выравниванием P = 1. Если бы не было выравнивания, то размер выходного представления был бы равен 3, потому что именно столько нейронов туда «поместилось» бы. В общем, установление размера выравнивания P = (F — 1) / 2 при шаге равном S = 1 позволяет получить размер выходного представления аналогичный входному представлению. Подобный подход с использованием выравнивания часто применяется на практике, а причины мы обсудить чуть ниже, когда будем говорить об архитектуре свёрточных нейронных сетей.

Ограничения на размер шага. Обратите внимание, что гипер-параметры отвечающие за пространственное расположение, так же связаны между собой ограничениями. Например, если входное представление имеет размер W = 10, P = 0 и размер рецептивного поля F = 3, тогда использовать размер шага равный S = 2 становится невозможно, так как (W — F + 2P)/S + 1 = (10 — 3 + 0)/2 + 1 = 4.5, что даёт нецелочисленное значение количества нейронов. Таким образом подобная конфигурация гипер-параметров считается недействительной и библиотеки по работе со свёрточными нейронными сетями выбросят исключение, принудительно произведут выравнивание, либо вообще обрежут входное представление. Как мы увидим в следующих секциях данной главы, определение гипер-параметров свёрточного слоя доставляет ещё ту головную боль, которую можно уменьшить используя определённые рекомендации и «правила хорошего тона» при проектировании архитектуры свёрточных нейронных сетей.

Пример из реальной жизни. Архитектура свёрточной нейронной сети Krizhevsky et al., которая выиграла соревнование ImageNet в 2012 году принимала изображения размером 227х227х3. На первом свёрточном слое она использовала рецептивное поле размером F = 11, шаг S = 4 и размер выравнивания P = 0. Поскольку (227 — 11)/4 + 1 = 55, а свёрточный слой был глубиной K = 96, то выходная размерность представления была 55х55х96. Каждый из 55х55х96 нейронов в этом представлении был связан с областью размером 11х11х3 во входном представлении. Более того, все 96 нейронов в глубинном столбце связаны с такой же областью 11х11х3, но с другими весами. А теперь немного юмора — если вы решите ознакомиться с оригиналом документа (исследования), то обратите внимание, что в документе утверждается, что на вход поступают изображения размером 224х224, что не может быть правдой, потому что (224 — 11) / 4 + 1 никаким образом не дадут целочисленное значение. Подобного рода ситуации часто вводят в замешательство людей в историях со свёрточными нейронными сетями. По моим догадкам Алекс использовал размер выравнивания P = 3, но забыл упомянуть об этом в документе.

Совместное использование параметров. Механизм совместного использования параметров в свёрточных слоях используется для контроля количества параметров. Обратите внимание на приведённый выше пример, как можно увидеть там есть 55х55х96 = 290 400 нейронов на первом свёрточном слое и каждый из нейронов имеет 11х11х3 = 363 веса + 1 значение смещения. Суммарно, если перемножить эти два значения, получится 290400х364 = 105 705 600 параметров только на первом слое свёрточной нейронной сети. Очевидно, что это огромное значение!

Оказывается есть возможность значительно снизить количество параметров делая одно допущение: если некоторое свойство, вычисленное в позиции (x, y), имеет значение для нас, то это же свойство вычисленно в позиции (x2, y2) так же будет иметь для нас значение. Другими словами, обозначая двумерный «слой» в глубину как «глубинный слой» (например, представление [55x55x96] содежит 96 глубинных слоёв, каждый из которых размером 55х55), мы будем выстраивать нейроны в глубину с одними и теми же весами и смещением. При такой схеме совместного использования параметров первый свёрточный слой в нашем примере теперь будет содержать 96 уникальных наборов весов (каждый набора на каждый глубинный слой), всего будет 96х11х11х3 = 34 848 уникальных весов или 34 944 параметров (+96 смещений). Кроме того, все 55х55 нейронов на каждом глубинном слое будут теперь использовать те же параметры. На практике, во время обратного распространения, каждый нейрон в этом представлении будет вычислять градиент для собственных весов, но эти градиенты будут суммироваться по каждому глубинному слою и обновлять только единственный набор весов на каждом уровне.

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

что такое полносвязная нейронная сеть. dd62e1d75bda9b592dabb91627d68aa6. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-dd62e1d75bda9b592dabb91627d68aa6. картинка что такое полносвязная нейронная сеть. картинка dd62e1d75bda9b592dabb91627d68aa6. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:
Примеры фильтров, которые были получены при обучении модели Krizhevsky et al. Каждый из 96 фильтров показанных тут размером 11х11х3 и каждый из них совместно используется всеми 55х55 нейронами одного глубинного слоя. Обратите внимание, что предположение о совместном использовании одних и те же весов имеет смысл: если детектирование горизонтальной линии важно в одной части изображения, то интуитивно понятно, что подобное детектирование важно и в другой части этого изображения. Поэтому нет никакого смысла каждый раз переобучаться находить горизонтальные линии в каждом из 55х55 различных мест изображения в свёрточном слое.

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

Резюме. Подводим итоги по свёрточному слою:

Стандартными значениями для гипер-параметров являются F = 3, S = 1, P = 1. Такие значения обоснованы рядом практических наблюдений и рекомендаций. Подробнее будет рассказано в разделе «Архитектура свёрточных нейронных сетей».

Демо. Чуть ниже мы показали пример работы свёрточного слоя. Так как 3D-представления сложно визуализировать (синий — входное представление, красное — веса, зеленое — выходное представление), мы представили каждый слой в виде стопок — один под другим. Размер входного представления W1 = 5, H1 = 5, D1 = 3, а параметры свёрточного слоя K = 2, F = 3, S = 2, P = 1. Итак, у нас есть два фильтра размером 3х3, которые применяются с шагом 2. Таким образом выходное представление будет иметь размер (5 — 3 + 2)/2 + 1 = 3. Более того, обратите внимание, что смещение P = 1 применяется ко входному представлению и дополняет его нулями. В визуализации ниже с правой стороны перемещается зеленый квадрат, который является результатом скалярного произведения части исходного представления (изображения) и фильтра, плюс значение смещения.

(здесь должна быть анимация, но она реализована на html+css в исходной странице, поэтому идём на исходную страницу и смотрим)

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

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

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

1х1 свёртка. Отойдём немного от нашей темы и рассмотрим свёртку размером 1х1, примеры использования которой впервые приводятся в Network in Network. Некоторые удивляются, когда впервые видят размер свёртки 1х1, особенно удивляются те, кто пришел с опытом в обработке сигналов. Обычно, сигналы представлены в 2-х мерном пространстве, поэтому свёртка 1х1 не имеет смысла (это всего лишь точечное изменение масштабов). Однако в свёрточных нейронных сетях всё обстоит совершенно иначе, потому что стоит всегда помнить о том, что в свёрточных нейронных сетях мы оперируем с 3-х мерным представлением, где фильтры применяются всегда по всей глубине входного представления. Например, если входное представление размером 32х32х3, а над ним выполняется операция свёртки с размером фильтра 1х1, то, по факту, мы выполняем скалярное произведение единичных значений по 3м измерениям (R, G, B — три канала, глубина).

Операция свёртки с расширением. Недавние исследования вводят ещё один гипер-параметр в свёрточные нейронные сети называемый расширением. До этого момента мы рассматривали свёрточные нейронные сети с непрерывными фильтрами. Однако можно использовать и фильтры у которых есть пробелы между ячейками, так называемые расширения. В качестве примера рассмотрим одномерный фильтр w размера 3 применённый к входному представлению x: w[0] x[0] + w[1] x[1] + w[2] x[2]. Это пример с расширением равным 0. При расширении равном 1 и применении фильтра мы получим следующий результат: w[0] x[0] + w[1] x[2] + w[2] x[4]. Другими словами в фильтре есть «дыра» в 1 значение между каждым элементом. Такой подход может быть крайне полезным в случаях, когда необходимо более агрессивно выделять пространственные признаки входного представления используя меньшее количество слоёв. Например, если расположить последовательно 2 свёрточных слоя размером 3х3, то можно убедиться в том, что второй слой нейронов будет являться функцией получающей на вход представление размером 5х5 (можем называть размер 5х5 эффективным рецептивным полем нейронов). При использовании расширений в операциях свёртки размер эффективных рецептивных полей будет очень быстро увеличиваться.

Слой подвыборки

Обычное дело — чередовать свёрточные слои в архитектуре свёрточной нейронной сети со слоями подвыборки. Задачей слоя подвыборки является снижение пространственных размеров входного представления, что приводит к снижению количества используемых параметров и сложности вычислений в самой сети, кроме этого слой подвыборки позволяет контролировать переобучение модели. Слой подвыборки применяется к каждому глубинному слою входного представления независимо, снижая его пространственные размеры используя операцию MAX. Наиболее распространен размер подвыборки 2х2 с шагом 2, который позволяет уменьшить каждый глубинный слой в 2 раза, исключая тем самым 75% активаций. Применение операции MAX в данном случае будет выбирать максимальное значение пикселя из поля размером 2х2. Количество глубинных слоёв остаётся неизменным. В обобщённом виде, слой подвыборки:

Стоит упомянуть о том, что на практике встречаются два наиболее распространенных варианта конфигурации слоёв подвыборки: слой подвыборки с F=3, S=2 (так же называемый пересекающейся подвыборкой), и более распространенный — F=2, S=2. Слои подвыборки с большими значениями гипер-параметров являются более деструктивными.

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

#1#2
что такое полносвязная нейронная сеть. cd717414dcf32dac4df73c00f1e7c6c3. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-cd717414dcf32dac4df73c00f1e7c6c3. картинка что такое полносвязная нейронная сеть. картинка cd717414dcf32dac4df73c00f1e7c6c3. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:что такое полносвязная нейронная сеть. 1a4b2a3795d8f073e921d766e70ce6ec. что такое полносвязная нейронная сеть фото. что такое полносвязная нейронная сеть-1a4b2a3795d8f073e921d766e70ce6ec. картинка что такое полносвязная нейронная сеть. картинка 1a4b2a3795d8f073e921d766e70ce6ec. Как я отмечал во введении, простейшая НС – персептрон, представляет собой упрощенное отражение работы биологической сети, состоящей из нейронов, соединенных между собой дендридами и аксонами:

Слой подвыборки уменьшает пространственные размеры входного представления независимо друг от друга по каждому глубинному слою. Слева: в этом примере входное представление размером 224х224х64 подвергается применению операции подвыборки с размером фильтра 2х2 и шагом 2, формируя выходное представление размером 112х112х64. Обратите внимание, что количество глубинных слоёв осталось неизменным. Справа: наиболее частая операция подвыборки — по максимальному значению (max-pooling), здесь показана с размером шага 2. Максимальное значение выбирается из каждых 4 значений (небольшой области размером 2х2)

Обратное распространение. Вспомните из главы об обратном распространении, что обратное распространение операции max(a,b) имеет простую интерпретацию — перенос градиента входных данных у которого было максимальное значение при прямом распространении. Таким образом, во время прямого распространения через слой подвыборки имеет смысл хранить индекс максимального значения (иногда называется переключателем), чтобы при последующем обратном распространении вычислять градиент эффективно.

Избавляемся от подвыборки. Многим не нравится операция подвыборки и они считают, что от неё можно избавиться и отказаться в свёрточных нейронных сетях. Например, в статье Борьба за простоту: Свёрточные нейронные сети, предлагается избавиться от слоёв подвыборки и заменить их последовательностью свёрточный слоёв. Для уменьшения размера представления предлагают использовать большие размеры шагов в некоторых свёрточных слоях. Исключение слоёв подвыборки показало себя так же с хорошей стороны при тренировке генеративных моделей, таких как вариационные автокодировщики (VAEs) или генеративно состязательные сети (GANs). Кажется, что будущие архитектуры будут всё-таки без слоёв подвыборки, либо с малых количеством.

Слой нормализации

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

Полносвязный слой

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

Преобразуем полносвяный слой в свёрточный слой

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

Полносвяный слой в свёрточный слой. Из перечисленных двух преобразований, возможность преобразования полносвязного слоя в свёрточный слой является наиболее полезной на практике. Давайте рассмотрим на примере архитектуру свёрточной нейронной сети, которая на входе принимает изображение размером 224х224х3 и затем использует серию свёрточных слоёв и слоёв подвыборки для уменьшения размера изображения до размера активационных карт 7х7х512 (в архитектуре свёрточной нейронной сети AlexNet, как мы увидим позднее, это реализовано с использованием 5 слоёв подвыборки, которые снижают размерность изображения каждый раз в два раза до 7 — 224/2/2/2/2/2 = 7). После этого AlexNet использует два полносвязных слоя размером 4096 и, наконец, последний полносвязный слой с 1000 нейронов, которые вычисляют оценку по классу. Мы можем преобразовать каждый из этих трёх полносвязных слоёв в свёрточный слой как описано ниже:

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

Например, если при размерах изображения 224х224 на входе, получаем 7х7х512 на выходе — снижая размер в 32 раза, то подавая на вход изображение уже размером 384х384 можно получить на выходе представление размером 12х12х512, так как 384/32 = 12. Если проделать такую операцию с теми свёрточными слоями к которым при пришли в ходе преобразования полносвязных слоёв, то итоговый размер представления, после прохождения всех слоёв, будет равен 6х6х1000, так как (12 — 7)/1 + 1 = 6. Обратите внимание, что вместо единственного вектора с оценками размера 1х1х1000 мы получаем весь массив 6х6 оценок по всем 384х384 изображениям.

Подавая на вход исходной свёрточной нейронной сети (с полносвязными слоями) независимо все изображения размером 384х384, обрезанные до 224х244 с шагом 32 пикселя, даст те же результаты, что и единственный проход новой свёрточной нейронной сети.

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

Что, если бы мы захотели более эффективно использовать исходную свёрточную нейронную сеть, но с шагом меньше 32 пикселей? Мы могли бы этого добиться через множественные прямые распространения (несколько итераций прямого распространения). Например, если бы мы захотели использовать шаг равный 16 пикселям, то могли бы это сделать через объединение представлений полученных при прямом распространении 2 раза: первый раз проведя преобразования над исходным изображением и второй раз над изображением смещённым на 16 пикселей вдоль ширины и высоты.

Архитектура свёрточных нейронных сетей

Как мы уже успели понять свёрточные нейронные сети, в основном, состоят из 3 различных типов слоёв: свёрточный слой, слой подвыборки (подразумеваем подвыборка по максимальному значению, если не отмечено другое) и полносвязный слой. Мы так же явно вынесем активационную функцию ReLU в отдельный слой, которая применяется по-элементно добавляя нелинейности. В этой части мы обсудим каким образом эти слои чередуются для формирования всей свёрточной нейронной сети.

Наиболее часто используемая архитектура свёрточной нейронной сети представляет собой последовательность нескольких CONV-RELU-слоёв, после них следует POOL-слой и подобная комбинация повторяется такое количество раз, пока исходное представление изображения не будет небольшого размера. В какой-то момент происходит переход к полносвязному слою. Последний полносвязный слой содержит выходные данные, например, оценки по классам. Другими словами, наиболее частая архитектура свёрточной нейронной сети выглядит так:

Выбирайте группировку нескольких свёрточных слоёв с небольшим размером фильтра нежели свёрточный слой с большим размером фильтра. Предположим что мы разместили подряд 3 свёрточных слоя размером 3х3 (с RELU слоем между ними, конечно же). В таком расположении каждый нейрон первого свёрточного слоя имеет «обзор» области размером 3х3 входного представления. Нейрон на втором слое имеет «обзор» области размером 3х3 уже выходного представления первого слоя, а с учетом выравнивания — размеры входного представления равны 5х5. Аналогичным образом нейрон на третем слое имеет «обзор» области 3х3 выходного представления уже второго слоя, с учетом выравнивания — размер области 7х7. Теперь представим, что вместо трёх свёрточных слоёв 3х3 мы хотели бы использовать один свёрточный слой с размером фильтра 7х7. У нейронов этого слоя был бы такой же «обзор» области 7х7 (с учетом выравниваний) как и у нашей предыдущей структуры, но с рядом недостатков. Во-первых, нейроны будут вычислять линейную функцию по входным данным, в то время как наши 3 подряд идущих свёрточных слоя содержат нелинейность, которая позволит сделать значимые признаки более заметными. Во-вторых, если мы предположим что все представления содержат C каналов, тогда можно заметить, что наш единственный 7х7 свёрточный слой будет содержать (Cх(7х7хС)) = 49xСxC параметров, в то время как три свёрточных слоя 3х3 будут содержать только 3х(Сх(3х3хС)) = 27хСхС параметра. Интуитивно становится понятно, что последовательное размещение свёрточных слоёв с небольшими фильтрами вместо размещения одного свёрточного слоя с большим размером фильтра, позволяет выделить больше значимых признаков из входных данных с меньшим количеством параметров. С практической точки зрения у такого подхода есть свой недостаток — необходимо больше памяти для хранения промежуточных результатов вычислений свёрточных слоёв, если мы планируем реализовывать обратное распространение.

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

На практике: используйте то, что наилучшим образом работает на наборах данных ImageNet. Если ты уже чувствуешь себя немного потерянным при мыслях о выборе подходящей архитектуры свёрточной нейронной сети, то будешь приятно удивлён, что в 90% случаев тебе не стоит об этом беспокоиться. Мне нравится выражение для данной ситуации — «не будь героем»: вместо того, чтобы изобретать собственные архитектуры для решения задачи, стоит взглянуть на существующие решения и выбрать оптимальные, те которые работают наилучшим образом на наборах данных ImageNet — загрузить обученные модели, докрутить их на своих данных и использовать. Редко когда тебе понадобится обучать свёрточную нейронную сеть с нуля или проектировать архитектуру с нуля.

Паттерны при выборе размеров слоёв

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

Входной слой (содержащий изображение) должен делиться на 2 множество раз. Стандартные значения включают 32 (например, CIFAR-10), 64, 96 (например, STL-10), или 224 (например, ImageNet), 384 и 512.

В свёрточном слое рекомендуется использовать фильтры небольшого размера (например, 3х3 или, максимум 5х5), с использованием шага S=1 и, что не менее важно, размером выравнивания таким образом, чтобы свёрточный слой не изменял пространственные размеры входного представления. Таким образом, F=3 и при P=1 будет возможность сохранить исходные пространственные размеры входного представления. При F=5, P=2. Для обобщённого размера F может быть определено, что при P=(F-1)/2 размеры исходного представления будут сохранены. Если по каким-то причинам необходимо использовать фильтры большего размера (такие как 7х7), то есть смысл использовать их только на первом слое свёрточной нейронной сети при работе с исходным изображением.

Слой подвыборки отвечает за снижение размерности входного представления. Наиболее частой конфигурацией является использование слоя подвыборки по максимальному значению размером 2х2 (F=2) и шагом 2 (S=2). Учтите, что подобная конфигурация исключает 75% активаций входного представления (из-за сэмплирования, в два раза по ширине и высоте). Другой, менее распространенной конфигурацией, является конфигурация с параметрами 3х3 (размер фильтр) и 2 (размер шага). Изредка вы увидите размеры фильтра больше 3х3 для слоя подвыборки, потому что подвыборка представляет собой очень агрессивную функцию при применении которой теряется информация по признакам. Такой подход обычно приводит к плохой производительности.

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

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

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

Компромиссы основанные на ограничениях памяти. В некоторых ситуациях (особенно на ранних стадиях развития архитектур свёрточных нейронных сетей), количество требуемой памяти может очень быстро увеличиваться, если следовать всем рекомендациям выше. Например, применяя три свёрточных слоя по 64 фильтра каждый с размером 3х3 и шагом 1 к изображению 224х224х3, создаст на выходе активационное представление размером 224х224х64. Это, примерно, равно 10 млн активаций, или 72 Мб памяти (на изображение, как для активаций так и для градиентов). Так как бутылочным горлышком в процессе вычислений является размер доступной памяти GPU, то приходится идти на компромиссы. На практике, одним из компромиссов может быть использование первого свёрточного слоя с размером фильтра 7х7 и шагом 2. Другой компромисс, как это сделано в AlexNet, использовать фильтр размером 11х11 и шагом 4.

Исследования существующих решений

Существует несколько архитектур свёрточных нейронных сетей у которых есть собственные имена. Вот некоторые из них:

VGGNet в деталях. Давайте рассмотрим VGGNet подробнее в качестве эксперимента. Вся сеть VGGNet состоит из свёрточных слоёв, которые выполняют операцию свёртки с применением фильтра размером 3х3, шагом 1 и выравниванием 1, слой подвыборки с конфигурацией размера фильтра 2х2 и шагом 2. Мы можем зафиксировать размер представлений на каждом шаге выполнения (прохождения через слои свёрточной нейронной сети) и общее количество весов:

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

Вычислительные примечания

Самым узким местом при конструировании архитектур свёрточных нейронных сетей является память. Многие современные GPU ограничены 3/4/6 Гб памяти, а лучшие GPU — 12 Гб памяти. Три основных источника затрат по памяти, которые стоит иметь ввиду:

Как только у вас появляется грубая оценка общего количества значений (активаций, градиентов и прочих), то это значение должно быть приведено к размеру в Гб. Возьмите количество полученных значений, умножайте его на 4 для получения количества байт (каждое значение с плавающей точкой занимает 4 байта, при использовании значений с двойной точностью — на 8), а затем разделите полученное значение на 1024 несколько раз, чтобы получить сперва Кб, затем Мб и в конце Гб. Если сеть «не помещается», то стандартной практикой сжатия является уменьшение размеров блоков, так как большая часть памяти приходится на активации.

… и стандартные call-to-action — подписывайся, ставь плюс и делай share 🙂
YouTube
Telegram
ВКонтакте

Источник

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

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