- PVSM.RU - https://www.pvsm.ru -

Обзор топологий глубоких сверточных нейронных сетей

Обзор топологий глубоких сверточных нейронных сетей - 1 Это будет длиннопост. Я давно хотел написать этот обзор, но sim0nsays [1] меня опередил [2], и я решил выждать момент, например как появятся результаты ImageNet’а [3]. Вот момент настал, но имаджнет не преподнес никаких сюрпризов, кроме того, что на первом месте по классификации находятся китайские эфэсбэшники. Их модель в лучших традициях кэгла [4] является ансамблем нескольких моделей (Inception, ResNet, Inception ResNet) и обгоняет победителей прошлого всего на полпроцента (кстати, публикации еще нет, и есть мизерный шанс, что там реально что-то новое). Кстати, как видите из результатов имаджнета, что-то пошло не так с добавлением слоев, о чем свидетельствует рост в ширину архитектуры итоговой модели. Может, из нейросетей уже выжали [5] все что можно? Или NVidia слишком задрала цены [6] на GPU и тем самым тормозит развитие ИИ? Зима [7] близко? В общем, на эти вопросы я тут не отвечу. Зато под катом вас ждет много картинок, слоев и танцев с бубном. Подразумевается, что вы уже знакомы с алгоритмом обратного распространения ошибки и понимаете, как работают основные строительные блоки сверточных нейронных сетей: свертки и пулинг.

Переход от нейрофизиологии к компьютерному зрению

Обзор топологий глубоких сверточных нейронных сетей - 2 Начать рассказ следовало бы с пионеров области нейронных сетей (не только искусственных) и их вклада: формальной модели нейрона МакКаллока — Питтса [8], теории обучения Хебба [9], персептрона Розенблатта [10], экспериментов Пола Бах-и-Риты [11] и других, но, пожалуй, я оставлю это читателям [12] для самостоятельной работы. Так что предлагаю сразу перейти к Дэвиду Хьюбелу и Торстену Визелю, нобелевским лауреатам 1981 года. Они получили премию за работу, проведенную в 1959 году (в то же время Розенблатт ставил свои эксперименты). Формально премия выдана за «работы, касающиеся принципов переработки информации в нейронных структурах и механизмов деятельности головного мозга». Стоит сразу предостеречь чувствительных читателей: далее будет описан эксперимент над котиками [13]. Модель эксперимента изображена на рисунке ниже: коту на темном экране под различными углами демонстрируется яркий вытянутый движущийся прямоугольник; электрод осциллографа подсоединен к затылочной части головного мозга [14], где у млекопитающих находится центр обработки визуальной информации. В процессе эксперимента ученые наблюдали следующие эффекты (вы легко найдете аналогии с современными сверточными сетями и рекуррентными сетями):

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

Обзор топологий глубоких сверточных нейронных сетей - 3

Одним из результатов исследования стала модель зрительной системы, или топографическая карта, со следующими свойствами:

  • соседние нейроны обрабатывают сигналы с соседних областей сетчатки;
  • нейроны образуют иерархическую структуру (изображение ниже), где каждый следующий уровень выделяет все более и более высокоуровневые признаки (сегодня мы уже умеем эффективно манипулировать этими признаками [15]);
  • нейроны организованы в так называемые колонки — вычислительные блоки, которые трансформируют и передают информацию от уровня к уровню.

Обзор топологий глубоких сверточных нейронных сетей - 4

Первым, кто попытался переложить идеи Хьюбела и Визеля в программный код, был Кунихико Фукусима, который в период с 1975 по 1980 годы предложил две модели: когнитрон [16] и неокогнитрон [17]. Эти модели почти повторяли биологическую модель [18], сегодня простые клетки (simple cells) мы называем свертками, а комплексные клетки (complex cells) — пулингом: это все еще основные строительные блоки современных сверточных нейронных сетей. Модель обучалась не алгоритмом обратного распространения ошибки, а оригинальным эвристическим алгоритмом в режиме без учителя. Можно считать, что именно эта работа стала началом нейросетевого компьютерного зрения.

Gradient-based learning applied to document recognition [19] (1998)

Спустя много лет настал 1998 год. Зима прошла. Ян ЛеКунн [20], который уже давно побывал постдоком одного из авторов [21] статьи об алгоритме обратного распространения ошибки, публикует работу (в соавторстве с другими корифеями нейронных сетей), в которой смешивает идеи сверток и пулинга с бекпропом, в итоге получая первую работающую сверточную нейронную сеть. Ее внедрили в почту США для распознавания индексов. Эта архитектура была стандартным шаблоном для построения сверточных сетей вплоть до недавнего времени: свертка чередуется с пулингом несколько раз, затем несколько полносвязных слоев. Такая сеть состоит из 60 тысяч параметров. Основные строительные блоки — свертки 5 × 5 со сдвигом 1 и пулинг 2 × 2 со сдвигом 2. Как вы уже знаете, свертки играют роль детекторов признаков, а пулинг (или сабсемплинг) используют для уменьшения размерности, эксплуатируя тот факт, что изображения обладают свойством локальной скоррелированности пикселей — соседние пиксели, как правило, не сильно отличаются друг от друга. Таким образом, если из нескольких соседних получить какой-либо агрегат, то потери информации будут незначительными.

Обзор топологий глубоких сверточных нейронных сетей - 5

ImageNet Classification with Deep Convolutional Neural Networks [22] (2012)

Прошло еще 14 лет. Алекс Крижевский из той же лаборатории, где был постдоком ЛеКун, добавил последние ингредиенты к формуле. Глубокое обучение = модель + теория обучения + большие данные + железо. GPU позволило значительно увеличить количество обучаемых параметров. Модель содержит 60 миллионов параметров, на три порядка больше, для обучения такой модели использовалось два графических ускорителя.

Обзор топологий глубоких сверточных нейронных сетей - 6

Другие изображения AlexNet

Обмен данными между GPU
Обзор топологий глубоких сверточных нейронных сетей - 7

Размеры слоев
Обзор топологий глубоких сверточных нейронных сетей - 8

С точки зрения топологии сети это почти тот же LeNet, просто увеличенный в тысячу раз. Добавились еще несколько сверточных слоев, а размер ядер свертки уменьшается от входа сети к выходу. Это объясняется тем, что в начале пиксели сильно скоррелированы, и рецепторную область можно смело брать большую, мы все равно теряем мало информации. Далее мы применяем пулинг, тем самым увеличивая плотность некоррелированных участков. На следующем уровне логично взять чуть меньшую рецепторную область. В итоге у авторов получилась такая вот пирамида из сверток 11 × 11 –> 5 × 5 –> 3 × 3…

Также были применены другие трюки для избежания переобучения, и некоторые из них сегодня являются стандартными для глубоких сетей: DropOut [23] (RIP), Data Augmentation и ReLu [24]. Мы не будем заострять внимание на этих трюках, сосредоточимся на топологии модели. Добавлю только, что с 2012 года не нейросетевые модели больше не побеждали в имаджнете.

Обзор топологий глубоких сверточных нейронных сетей - 9

Very Deep Convolutional Networks for Large-Scale Image Recognition [25] (12 Apr 2014)

В этом году вышли две интересные статьи, эта и Google Inception, которую мы рассмотрим ниже. Работа же Оксфордской лаборатории — это последняя работа, придерживающаяся паттерна топологии, заложенного ЛеКуном. Их модель VGG-19 состоит из 144 миллионов параметров и добавляет в архитектуру, помимо 84 миллионов параметров, еще одну простую идею. Возьмем для примера свертку 5 × 5, это отображение Обзор топологий глубоких сверточных нейронных сетей - 10, оно содержит 25 параметров. Если заменить ее стеком из двух слоев со свертками 3 × 3, то мы получим такое же отображение, но количество параметров будет меньше: 3 × 3 + 3 × 3 = 18, а это на 22 % меньше. Если же заменить 11 × 11 на четыре свертки 3 × 3, то это уже на 70 % меньше параметров.

Обзор топологий глубоких сверточных нейронных сетей - 11

Модели VGG-*

Network in Network [27] (4 Mar 2014)

Обзор топологий глубоких сверточных нейронных сетей - 13

А вот тут начинаются танцы с бубном. Такой вот картинкой проиллюстрировал автор публикации свой пост в блоге, где рассказал о Сascaded Сross Сhannel Parameteric pooling. Рассмотрим основные идеи этой статьи. Очевидно, что операция свертки — это линейное преобразование патчей изображения, тогда сверточный слой — это обобщенная линейная модель (GLM). Предполагается, что образы линейно разделимы. Но почему же тогда CNN работает? Все просто: используется избыточное представление (большое количество фильтров), чтобы учесть все вариации одного образа в пространстве признаков. Чем больше фильтров на одном слое, тем больше вариаций нужно учесть следующему слою. Что делать? Давайте заменим GLM чем-нибудь поэффективнее, а самое эффективное, что есть, — однослойный персептрон [28]. Это позволит нам эффективнее разделять пространство признаков, тем самым сократив их количество.

Обзор топологий глубоких сверточных нейронных сетей - 14

Уверен, что вы уже начали сомневаться в целесообразности такого решения, мы и вправду уменьшим количество признаков, но значительно увеличим количество параметров. Авторы говорят, что СССР решит эту проблему. Работает это следующим образом: на выходе из сверточного слоя мы получаем куб размером W × H × D. Для каждой позиции (w, h) возьмем все значения по D, Cross Channel, и посчитаем линейную комбинацию, Parametric pooling, и так будем делать несколько раз, тем самым создавая новый объем, и так несколько раз — Cascade. Оказывается, что это просто свертки 1 × 1 с последующей нелинейностью. Этот трюк идейно такой же, как и в статье VGG про свертки 3 × 3. Получается, что сначала мы предлагаем заменить обычную свертку на MLP, но так как MLP очень дорог, то заменим каждый его полносвязный слой на сверточный слой — такой вот сингапурский трюк. Получается, что NIN — это глубокая сверточная нейронная сеть, а вместо сверток в ней — небольшие сверточные нейронные сети с ядром 1 × 1. В общем, пока они еще не подозревали, какого джинна выпустили.

Обзор топологий глубоких сверточных нейронных сетей - 15

Следующая идея, еще более интересная, заключается в полном отказе от полносвязных слоев — global average pooling. Такую сеть называют fully convolutional network, так как она больше не требует на вход какого-либо определенного размера изображения и состоит только из сверток/пулингов. Допустим, есть задача классификации на N классов, тогда вместо полносвязных слоев используется свертка 1 × 1, для того чтобы из куба W × H × D сделать куб W × H × N, т. е. сверткой 1 × 1 можно изменять произвольно глубину куба признаков. Когда у нас есть N плашек W × H, мы можем вычислить среднее значение плашки и посчитать softmax. Чуть более глубокая идея заключена в утверждении авторов, что раньше сверточные слои выступали просто как механизмы извлечения признаков, а дискриминаторами были полносвязные слои (оттуда и такой паттерн, заданный ЛеКунном). Авторы утверждают, что свертки — это тоже дискриминаторы, так как сеть состоит только из сверток и решает задачу классификации. Стоит заметить, что в сверточных сетях формата LeNet 80 % вычислений приходится на сверточные слои, а 80 % потребления памяти — на полносвязные.

Обзор топологий глубоких сверточных нейронных сетей - 16

Позже ЛеКун напишет [29] у себя в фейсбуке:

In Convolutional Nets, there is no such thing as «fully-connected layers». There are only convolution layers with 1 × 1 convolution kernels and a full connection table.

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

Going Deeper with Convolutions [30] (17 Sep 2014)

Обзор топологий глубоких сверточных нейронных сетей - 17

В игру вступает гугл, свою сеть они назвали Inception, название выбрано не случайно, оно как бы продолжает идеи предыдущей работы про «Сеть внутри Сети», а также известного мема. Вот что пишут авторы:

In this paper, we will focus on an efficient deep neural network architecture for computer vision, codenamed Inception, which derives its name from the Network in network paper by Lin et al [12] in conjunction with the famous “we need to go deeper” internet meme [1]. In our case, the word “deep” is used in two different meanings: first of all, in the sense that we introduce a new level of organization in the form of the “Inception module” and also in the more direct sense of increased network depth. In general, one can view the Inception model as a logical culmination of [12] while taking inspiration and guidance from the theoretical work by Arora et al [2].

Произвольное увеличение ширины (количество нейронов в слоях) и глубины (количество слоев) имеет ряд недостатков. Во-первых, увеличение количества параметров способствует переобучению, а увеличение количества слоев добавляет еще и проблему затухания градиента. Кстати, последнее утверждение разрешится ResNet’ом, о которой речь пойдет дальше. Во-вторых, увеличение количества сверток в слое приводит к квадратичному увеличению вычислений в этом слое. Если же новые параметры модели используются неэффективно, например многие из них становятся близки к нулю, тогда мы просто впустую тратим вычислительные мощности. Несмотря на эти проблемы, первый автор стати хотел поэкспериментировать с глубокими сетями, но со значительно меньшим количеством параметров. Для этого он обратился к статье «Provable Bounds for Learning Some Deep Representations [31]», в которой доказывают, что если вероятностное распределение данных можно представить в виде разреженной, глубокой и широкой нейронной сети, тогда можно построить оптимальную нейронную сеть для данного датасета, анализируя корреляции нейронов предыдущего слоя и объединяя коррелированные нейроны в группы, которые будут нейронами следующего слоя. Таким образом, нейроны поздних слоев «смотрят» на сильно пересекающиеся области исходного изображения. Напомню, как выглядят рецепторные области нейронов на разных уровнях и какие признаки они извлекают.

рецепторная область слоя conv1_2 сети VGG-19

Да, вы почти ничего не видите, так как рецептивная область очень маленькая, это вторая свертка 3 × 3, соответственно, общая область 5 × 5. Но, увеличив, мы увидим, что фича — это просто детектор градиента.

Обзор топологий глубоких сверточных нейронных сетей - 18

рецепторная область слоя conv3_3 сети VGG-19

Обзор топологий глубоких сверточных нейронных сетей - 19
рецепторная область слоя conv4_3 сети VGG-19

Обзор топологий глубоких сверточных нейронных сетей - 20
рецепторная область слоя conv5_3 сети VGG-19

Обзор топологий глубоких сверточных нейронных сетей - 21
рецепторная область слоя pool5 сети VGG-19

Обзор топологий глубоких сверточных нейронных сетей - 22

На ранних слоях (ближе к входу) коррелированные нейроны будут концентрироваться в локальных областях. Это значит, что если несколько нейронов в одной координате (w, h) на плашке могут выучить примерно одно и то же, то в тензоре после первого слоя их активации будут располагаться на небольшом регионе в районе некоторой точки (w, h), а распределены будут вдоль размерности банка фильтров — D. Примерно так:

Обзор топологий глубоких сверточных нейронных сетей - 23

Каким же образом поймать такие корреляции и превратить их в один признак? На помощь приходит идея сверток 1 × 1 из предыдущей работы. Продолжая эту идею, можно предположить, что чуть меньшее количество коррелированных кластеров будет чуть большего размера, например 3 × 3. То же самое справедливо для 5 × 5 и т. д., но гугл решил остановиться на 5 × 5.

свертки 1 × 1

Обзор топологий глубоких сверточных нейронных сетей - 24
свертки 3 × 3

Обзор топологий глубоких сверточных нейронных сетей - 25
свертки 5 × 5

Обзор топологий глубоких сверточных нейронных сетей - 26

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

конкатенация признаков

Обзор топологий глубоких сверточных нейронных сетей - 27

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

Additionally, since pooling operations have been essential for the success in current state of the art convolutional networks, it suggests that adding an alternative parallel pooling path in each such stage should have additional beneficial effect, too.

Обзор топологий глубоких сверточных нейронных сетей - 28

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

  • увеличения размерности (после операции);
  • уменьшения размерности (до операции);
  • группировки коррелированных значений (первая операция в блоке).

Итоговая модель выглядит следующим образом:

Обзор топологий глубоких сверточных нейронных сетей - 29

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

Rethinking the Inception Architecture for Computer Vision [32] (11 Dec 2015)

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

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

Помните идею VGG в 2014 году, что свертки большего размера можно факторизовать в стек сверток 3 × 3? Так вот, гугл пошел еще дальше и факторизовал все свертки в N × 1 и 1 × N.

Обзор топологий глубоких сверточных нейронных сетей - 30

Модели Inception block

Первая оригинальная.
Обзор топологий глубоких сверточных нейронных сетей - 31

Первая факторизованная по принципу VGG.
Обзор топологий глубоких сверточных нейронных сетей - 32

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

Что же касается бутылочных горлышек, то предлагается следующая схема. Допустим, если входная размерность Обзор топологий глубоких сверточных нейронных сетей - 34, а мы хотим получить Обзор топологий глубоких сверточных нейронных сетей - 35, то мы сначала применяем свертку из Обзор топологий глубоких сверточных нейронных сетей - 36 фильтров с шагом 1 и затем делам пулинг. Итоговая сложность такой операции Обзор топологий глубоких сверточных нейронных сетей - 37. Если делать сначала пулинг, а затем свертку, то сложность упадет до Обзор топологий глубоких сверточных нейронных сетей - 38, но тогда будет нарушен первый принцип. Предлагается увеличивать количество параллельных веток, делать свертки с шагом 2, но в то же время увеличивать количество каналов в два раза, тогда репрезентативная сила представления уменьшается «плавнее». А для манипулирования глубиной тензора используются свертки 1 × 1.

Обзор топологий глубоких сверточных нейронных сетей - 39

Новую модель называют Inception V2, а если добавить batch normalization [33], то будет Inception V3 [34]. Кстати, убрали дополнительные классификаторы, так как оказалось, что они особо не увеличивают качество, но могут выступать регуляризатором. Но к этому моменту уже были более интересные способы регуляризации.

Deep Residual Learning for Image Recognition [35] (10 Dec 2015)

Пришло время изучить работу китайского подразделения Microsoft Research, которому проиграл гугл в 2015 году. Давно было замечено, что если просто стекать больше слоев, то качество такой модели растет до некоторого предела (смотрите VGG-19), а затем начинает падать. Эту проблему называют degradation problem, а сети, полученные стеканием большего количества слоев, — plain, или плоские сети. Авторы смогли найти такую топологию, при которой качество модели растет при добавлении новых слоев.

Обзор топологий глубоких сверточных нейронных сетей - 40

Достигается это простым, на первый взгляд, трюком, хотя и приводит к неожиданным математическим результатам. Благодаря Арнольду и Колмогорову мы и они в курсе, что нейросеть может аппроксимировать почти любую функцию, например некоторую сложную функцию Обзор топологий глубоких сверточных нейронных сетей - 41. Тогда справедливо, что такая сеть легко выучит residual-функцию (по-русски будем называть ее остаточной функцией): Обзор топологий глубоких сверточных нейронных сетей - 42. Очевидно, что наша первоначальная целевая функция будет равна Обзор топологий глубоких сверточных нейронных сетей - 43. Если мы возьмем некоторую сеть, например VGG-19, и пристекаем к ней еще слоев двадцать, то нам хотелось бы, чтобы глубокая сеть вела себя как минимум не хуже своего неглубокого аналога. Проблема деградации подразумевает, что сложная нелинейная функция Обзор топологий глубоких сверточных нейронных сетей - 44, полученная стеканием нескольких слоев, должна выучить тождественное преобразование, в случае если на предыдущих слоях был достигнут предел качества. Но этого не происходит по каким-то причинам, возможно, оптимизатор просто не справляется с тем, чтобы настроить веса так, чтобы сложная нелинейная иерархическая модель делала тождественное преобразование. А что, если мы поможем ей добавить shortcut-соединение, и, возможно, оптимизатору будет легче сделать все веса близкими к нулю, нежели создавать тождественное преобразование. Наверняка это вам очень напоминает идеи бустинга.

Обзор топологий глубоких сверточных нейронных сетей - 45

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

Обзор топологий глубоких сверточных нейронных сетей - 46

Детали построения ResNet-52 на theano/lasagne описаны тут [36], здесь же упомянем лишь то, что 1 × 1 свертки эксплуатируются для увеличения и уменьшения размерности, как и завещал гугл. Сеть является fully convolution.

Обзор топологий глубоких сверточных нейронных сетей - 47

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

Обзор топологий глубоких сверточных нейронных сетей - 48

А выводы из всего этого примерно такие:

Обзор топологий глубоких сверточных нейронных сетей - 49

Сравните глубину ResNet’ов и всех предыдущих сетей

Обзор топологий глубоких сверточных нейронных сетей - 50
Обзор топологий глубоких сверточных нейронных сетей - 51

Еще один интересный слайд авторов показывает, что они сделали прорыв в глубине/качестве сетей. Модель, с которой они победили на имаджнете, содержит меньше параметров, чем 19-слойный VGG, при глубине 152 слоя.

Обзор топологий глубоких сверточных нейронных сетей - 52

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

Несколько вариантов визуализации ResNet:

Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning [39] (23 Feb 2016)

Спустя несколько месяцев гугл публикует статью, в которой задается вопросом, а будет ли лучше работать их модель Inception, если позаимствовать идеи ResNet’а. И внезапно оказывается, что да, если добавить тождественных связей, то и их модель улучшится. Далее в статье идет множество картинок, которые еще больше подтверждают то, что их модель строится в полуавтоматическом режиме. Результатом статьи становятся модели Inception V4 и Inception ResNet.

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

Inception V4

Общая схема сети.
Обзор топологий глубоких сверточных нейронных сетей - 53

Stem-блок.
Обзор топологий глубоких сверточных нейронных сетей - 54

Inception блок А.
Обзор топологий глубоких сверточных нейронных сетей - 55

Если же в общей схеме Inception V4 заменить Inception-блоки на аналогичные, но с shortcut-связью, то получится Inception ResNet.

Обзор топологий глубоких сверточных нейронных сетей - 56

А так, в общем, в статье картинок больше, чем текста.

Обзор топологий глубоких сверточных нейронных сетей - 57

Identity Mappings in Deep Residual Networks [40] (12 Apr 2016)

Если вы заглянули в детали реализации оригинального ResNet, то могли заметить, что нелинейность берется после агрегирования двух ветвей: остаточной функции и тождественной связи. Авторы заявляют, что это не совсем правильная техника и лучше вообще не брать нелинейность после агрегации. Лучше как бы сдвинуть все нелинейности на один шаг назад по остаточным ветвям. Таким образом выход из блока подается на тождественную связь следующего, где он неизмененным доходит до своего выхода; а также на остаточную сеть следующего, где над выходом текущего уже применяется нелинейность. Так удалось обучить сверхглубокую нейронную сеть, состоящую из 1001 слоя. Сравните, еще в 2014 году 19-слойная нейронная сеть считалась «very deep convolutional neural networks».

Обзор топологий глубоких сверточных нейронных сетей - 58

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

  • Обзор топологий глубоких сверточных нейронных сетей - 59 — вход текущего слоя;
  • Обзор топологий глубоких сверточных нейронных сетей - 60 — shortcut connection, в нашем случае это просто тожественное преобразование Обзор топологий глубоких сверточных нейронных сетей - 61;
  • Обзор топологий глубоких сверточных нейронных сетей - 62 — residual network;
  • Обзор топологий глубоких сверточных нейронных сетей - 63 — агрегированный выход двух ветвей блока;
  • Обзор топологий глубоких сверточных нейронных сетей - 64 — вход следующего блока равен некоторому преобразованию от агрегации двух ветвей предыдущего блока.

Тогда можно рассмотреть две ситуации, в первой Обзор топологий глубоких сверточных нейронных сетей - 65 — это как раз вариант, предложенный в текущей статье. Обозначим любой слой сети K, тогда его значение можно вывести как сумму всех предыдущих плюс некоторое начальное значение. Напомню, что для градиентного спуска нам необходимо вычислять частную производную целевой функции по входам в каждый слой. Если продифференцировать целевую функцию по какому-либо слою k, то получим, что градиент декомпозируется в сумму двух членов: производной целевой функции по последнему слою и суммы частных производных. Это отличается от формулы для плоской сети тем, что в плоской сети формула градиента состоит из серии матрично-векторных произведений. Мы можем видеть, что градиент целевой функции доходит до каждого слоя внутри сети, а чтобы наблюдался vanishing gradients, необходимо, чтобы все Обзор топологий глубоких сверточных нейронных сетей - 66 были равны –1. Авторы считают, что это крайне маловероятно. Таким образом, проблему затухания градиентов можно больше не брать в расчет.

Обзор топологий глубоких сверточных нейронных сетей - 67

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

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

Вариации остаточного блока

Обзор топологий глубоких сверточных нейронных сетей - 69

Обзор топологий глубоких сверточных нейронных сетей - 70

Тут стоит упомянуть отца глубоких рекуррентных сетей — Юргена Шмидхубера (Jürgen Schmidhuber [41]). Если вы знакомы с его LSTM-моделью [42], опубликованной еще в 1997 году, то вы легко заметите, что ResNet в предложенной версии — это не что иное, как развернутый LSTM, где скрытые состояния соединены друг с другом по оси времени фиксированной необучаемой связью с весом 1. И неудивительно, что Юрген работал в это же время над очень похожей моделью — Highway Network [43]. Но, похоже, они переусложнили модель, добавив несколько вентилей (gate), и не смогли получить результатов лучше, чем вариант из текущей статьи.

Обзор топологий глубоких сверточных нейронных сетей - 71

Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex [44] (13 Apr 2016)

На следующий день появляется статья, в которой авторы сравнивают ResNet и обычные RNN. Одну мысль из этой статьи считаю нужным упомянуть. Авторы утверждают, что успехи глубоких нейронных сетей объясняются тем, что глубокие сети аппроксимируют рекуррентные сети, которые, в свою очередь, аппроксимируют динамические системы и вообще ближе к тому, как работает мозг [14].

The dark secret of Deep Networks: trying to imitate Recurrent Shallow Networks?

A radical conjecture would be: the effectiveness of most of the deep feedforward neural networks, including but not limited to ResNet, can be attributed to their ability to approximate recurrent computations that are prevalent in most tasks with larger t than shallow feedforward networks. This may offer a new perspective on the theoretical pursuit of the long-standing question “why is deep better than shallow”.

Residual Networks are Exponential Ensembles of Relatively Shallow Networks [45] (20 May 2016)

Уверен, почти все из вас знакомы с DropOut, стратегией обучения [46], которая до недавнего времени являлась стандартом при обучении глубоких сетей. Было показано, что такая стратегия эквивалентна обучению экспоненциально большого числа моделей и усреднению результата прогнозирования. Получается построение ансамбля алгоритмом обучения. Авторы данной статьи показывают, что ResNet — это ансамбль по своей конструкции. Показывают они это серией интересных экспериментов. Для начала посмотрим на развернутый вариант ResNet, который получается, если считать два подряд идущих shortcut-соединения как одно ребро flowing graph’а.

Обзор топологий глубоких сверточных нейронных сетей - 72

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

Как видите, сеть выросла еще по одной размерности, помимо ширины и глубины. Авторы говорят, что это новая третья размерность, и называют ее multiplicity, по-русски, наверное, ближе всего будет — многообразие. Получается, что благодаря Арнольду и Колмогорову мы знаем, что сеть нужно растить в ширину (доказано). Благодаря Хинтону мы знаем, что добавление слоев улучшает нижнюю вариационную границу правдоподобия модели, в общем, тоже хорошо (доказано). И вот предлагается новое измерение, что нужно делать модели многообразными, хотя это еще стоит доказать.

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

Обзор топологий глубоких сверточных нейронных сетей - 74

Оказывается, что качество прогнозирования у ResNet плавно ухудшается при увеличении количества удаленных слоев. Скажем, если удалить половину слоев, то качество падает не так драматично.

Обзор топологий глубоких сверточных нейронных сетей - 75

Похоже, ради троллинга авторы удаляют несколько слоев из VGG и из ResNet и сравнивают качество.

Результаты удивительные.

Обзор топологий глубоких сверточных нейронных сетей - 76

В следующем эксперименте авторы строят распределение абсолютных значений градиента, полученных из подсетей разной длины. Оказывается, что для ResNet-50 эффективная длина подсети — от 5 до 17 слоев, на их долю приходится почти весь вклад в обучение всей модели, хотя они занимают всего 45 % от всех длин путей.

Анализ распределения градиентов.

Обзор топологий глубоких сверточных нейронных сетей - 77

Заключение

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

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

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

Будем посмотреть.

Обзор топологий глубоких сверточных нейронных сетей - 78

Автор: Mail.Ru Group

Источник [55]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/198537

Ссылки в тексте:

[1] sim0nsays: https://habrahabr.ru/users/sim0nsays/

[2] опередил: https://habrahabr.ru/users/sim0nsays/topics/

[3] результаты ImageNet’а: http://image-net.org/challenges/LSVRC/2016/results

[4] лучших традициях кэгла: http://mlwave.com/kaggle-ensembling-guide/

[5] выжали: https://www.youtube.com/watch?v=E1XMjIXWKtA

[6] задрала цены: https://www.overclockers.ru/hardnews/75464/superkompjuter-nvidia-dgx-1-na-gp100-v-kartinkah.html

[7] Зима: https://en.wikipedia.org/wiki/AI_winter

[8] нейрона МакКаллока — Питтса: https://en.wikipedia.org/wiki/Artificial_neuron

[9] теории обучения Хебба: https://en.wikipedia.org/wiki/Hebbian_theory

[10] персептрона Розенблатта: https://en.wikipedia.org/wiki/Perceptron

[11] Пола Бах-и-Риты: https://en.wikipedia.org/wiki/Paul_Bach-y-Rita

[12] это читателям: https://habrahabr.ru/company/mailru/blog/252965/

[13] эксперимент над котиками: https://www.youtube.com/watch?v=IOHayh06LJ4

[14] мозга: http://www.braintools.ru

[15] мы уже умеем эффективно манипулировать этими признаками: https://habrahabr.ru/company/mailru/blog/306916/

[16] когнитрон: http://sci-hub.cc/10.1007/bf00342633

[17] неокогнитрон: http://sci-hub.cc/10.1007/bf00344251

[18] биологическую модель: http://cns-alumni.bu.edu/~slehar/webstuff/pcave/hubel.html

[19] Gradient-based learning applied to document recognition: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

[20] Ян ЛеКунн: https://en.wikipedia.org/wiki/Yann_LeCun

[21] одного из авторов: https://en.wikipedia.org/wiki/Geoffrey_Hinton

[22] ImageNet Classification with Deep Convolutional Neural Networks: http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

[23] DropOut: https://arxiv.org/pdf/1207.0580v1.pdf

[24] ReLu: https://en.wikipedia.org/wiki/Rectifier_(neural_networks)

[25] Very Deep Convolutional Networks for Large-Scale Image Recognition: https://arxiv.org/pdf/1409.1556.pdf

[26] VGG-16 flowing graph: http://ethereon.github.io/netscope/#/preset/vgg-16

[27] Network in Network: https://arxiv.org/pdf/1312.4400v3.pdf

[28] самое эффективное, что есть, — однослойный персептрон: https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%93%D0%B8%D0%BB%D1%8C%D0%B1%D0%B5%D1%80%D1%82%D0%B0

[29] ЛеКун напишет: https://www.facebook.com/yann.lecun/posts/10152820758292143

[30] Going Deeper with Convolutions: https://arxiv.org/pdf/1409.4842v1.pdf

[31] Provable Bounds for Learning Some Deep Representations: http://jmlr.org/proceedings/papers/v32/arora14.pdf

[32] Rethinking the Inception Architecture for Computer Vision: https://arxiv.org/pdf/1512.00567v3.pdf

[33] batch normalization: https://arxiv.org/pdf/1502.03167v3.pdf

[34] будет Inception V3: http://josephpcohen.com/w/wp-content/uploads/inception-v3.pdf

[35] Deep Residual Learning for Image Recognition: https://arxiv.org/pdf/1512.03385v1.pdf

[36] ResNet-52 на theano/lasagne описаны тут: https://github.com/Lasagne/Recipes/blob/master/examples/resnet50/ImageNet%20Pretrained%20Network%20(ResNet-50).ipynb

[37] ResNet-56: http://josephpcohen.com/w/wp-content/uploads/resnet-28-small.pdf

[38] ResNet-50: http://ethereon.github.io/netscope/#/gist/db945b393d40bfa26006

[39] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning: http://arxiv.org/pdf/1602.07261v1.pdf

[40] Identity Mappings in Deep Residual Networks: https://arxiv.org/pdf/1603.05027v2.pdf

[41] Jürgen Schmidhuber: https://en.wikipedia.org/wiki/J%C3%BCrgen_Schmidhuber

[42] LSTM-моделью: https://en.wikipedia.org/wiki/Long_short-term_memory

[43] Highway Network: https://arxiv.org/pdf/1505.00387v2.pdf

[44] Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex: https://arxiv.org/pdf/1604.03640.pdf

[45] Residual Networks are Exponential Ensembles of Relatively Shallow Networks: https://arxiv.org/pdf/1605.06431v1.pdf

[46] DropOut, стратегией обучения: https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

[47] Convolutional Residual Memory Networks: https://arxiv.org/pdf/1606.05262v3.pdf

[48] Wide Residual Networks: https://arxiv.org/pdf/1605.07146v1.pdf

[49] Depth Dropout: Efficient Training of Residual Convolutional Neural Networks: http://users.cecs.anu.edu.au/~sgould/papers/dicta16-depthdropout.pdf

[50] Resnet in Resnet: Generalizing Residual Architectures: https://arxiv.org/pdf/1603.08029v1.pdf

[51] Residual Networks of Residual Networks: Multilevel Residual Networks: https://arxiv.org/pdf/1608.02908v1.pdf

[52] Multi-Residual Networks: https://arxiv.org/pdf/1609.05672v2.pdf

[53] Deep Learning with Separable Convolutions: https://arxiv.org/pdf/1610.02357v1.pdf

[54] Deep Pyramidal Residual Networks: https://arxiv.org/pdf/1610.02915v1.pdf

[55] Источник: https://habrahabr.ru/post/311706/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best