Продолжаю рассказывать о жизни архитектуры Inception — архитектуры Google для сетей.
(первая часть - здесь здесь )
Итак, проходит год, ребята публикуют успехи разработки со времен GoogLeNet.
Вот устрашающая картина того, как выглядит окончательная сеть:
Что за ужас там творится? Отказ от ответственности: этот пост основан на отредактированных журналах чата.
closecircles.com , отсюда и стиль изложения и уточняющих вопросов.
На этот раз авторы пытаются сформулировать некоторые основные принципы построения архитектуры эффективных сетей (сама статья http://arxiv.org/abs/1512.00567 ).
(напомню, что цель архитектуры Inception — это, прежде всего, эффективность вычислений и количества параметров для реальных приложений, за это мы ее и любим) Они формулируют следующие принципы:
- Многие сигналы расположены близко друг к другу в пространстве (т.е.
в соседних «пикселях»), и это можно использовать для создания свёрток меньшего размера.
Они говорят, что поскольку соседние сигналы часто коррелируют, то перед сверткой можно уменьшить размерность без потери информации.
- Чтобы эффективно использовать ресурсы, вам необходимо увеличить как ширину, так и глубину сети.
Те.
если, например, ресурсов в два раза больше, эффективнее всего сделать слои шире, а сеть глубже.
Если вы сделаете это только глубже, это будет неэффективно.
- Плохо иметь острые узкие места, то есть линию жизни с резким снижением параметров, особенно в начале.
- «Широкие» слои обучаются быстрее, что особенно важно на высоких уровнях (но локально, т.е.
после них вполне возможно уменьшить размерность)
Какие изменения они вносят в него?
- Во-первых , отметим, что большую и жирную свертку 5х5 мы можем заменить двумя последовательными свертками 3х3, а так как сигналы коррелированы, то мы немного проиграем.
Экспериментально выясняется, что сделать нелинейность между этими 3х3 лучше, чем не сделать этого.
- Во-вторых , раз уж это такая пьянка, давайте заменим 3х3 на 3х1+1х3.
Здесь мы обнаруживаем, что свертки становятся дешевыми, и тогда почему бы не сделать 3x1 + 1x3, а просто nx1 + 1xn! И они это делают, вплоть до 7, хотя и не в начале сетки.
Со всеми этими улучшениями основной кирпичик становится таким:
- Третий Следуя заповеди «не создавайте узких мест», они задумываются об объединении.
Какая проблема с пулом.
Пусть пул уменьшит изображение вдвое, а количество фич после пула будет в два раза больше.
Можно сделать пул, а потом свертку в меньшем разрешении, а можно сначала свертку, а потом пул.
Вот варианты на картинке:
Проблема в том, что первый вариант резко уменьшит количество активаций, а второй неэффективен с вычислительной точки зрения, поскольку нужно проводить свертку в полном разрешении.
Поэтому они предлагают гибридную схему — давайте сделаем половину пула функций и половину свертки.
А поскольку после пула количество функций обычно удваивается, узких мест не будет. Пул сожмет предыдущий без уменьшения количества функций; некоторые свертки будут выполняться в полном разрешении, но с меньшим количеством функций.
Сеть научится разделять то, что требует полного разрешения, и то, для чего достаточно пула.
- Окончательно , немного модифицируют кирпич для последних реек, чтобы он был шире, хотя и менее глубоким.
Чтобы пирс лучше учился, в конце сети это важнее всего.
Всего в сети имеется 11 начальных уровней.
Отсюда и ужас на первой картинке.
Они также обнаружили, что дополнительные классификаторы по бокам не сильно ускоряют обучение, а скорее помогают, поскольку работают как регуляризаторы — когда к ним подключили Batch Normalization, сеть стала лучше прогнозировать.
Что еще.
Они предлагают еще один прием для дополнительной регуляризации — так называемую сглаживание меток .
Вкратце идея такова: обычно целевая метка для конкретного образца равна 1, если класс правильный, и 0, если класс неправильный.
Это означает, что если сеть уже очень уверена в правильности класса, градиент все равно будет подталкивать к увеличению и увеличению этой уверенности, потому что 1 возникает только на бесконечности из-за softmax, что приводит к переобучению.
Они предлагают смешивать одноразовую цель с распределением, тупо пропорциональным распределению классов по набору данных, чтобы у других классов были не нули, а какие-то небольшие значения.
Это позволяет выиграть еще процент, то есть много.
Общий
И вся эта техника потребляет в 2,5 раза больше вычислительных ресурсов, чем Inception-v1, и дает существенно лучшие результаты.Основную архитектуру они называют Inception-v2, а версию, где с BN работают дополнительные классификаторы — Inception-v3. Ошибка классификации Inception-v3 в топ-5 на Imagenet составляет 4,2%, а ансамбль из четырех моделей достигает 3,58%.
И благодаря этому добру ребята из Google решили выиграть Imagenet в 2015 году.
Однако случился ResNets и товарищи Kaiming He из Microsoft Research Asia победили с результатом.
3,57%!!! (следует отметить, что при локализации объектов результат принципиально лучше) Но о ResNets я, пожалуй, расскажу в другой раз.
Интересно, какую ошибку докажет на этих картинках среднестатистический homo sapiens? Единственный широко обсуждаемый эксперимент провёл Андрей «наше всё» Карпаты.Теги: #глубокое обучение #Google #CNN #классификация изображений #обработка изображений #машинное обучениеhttp://karpathy.github.io/2014/09/02/what-i-learned-from-competing-against-a-convnet-on-imagenet/ Он проверил себя на какой-то части набора данных и получил 5,1%.
Это тоже топ5, но человеку может быть сложнее выбрать топ5. Кстати, вы можете проверить это сами - http://cs.stanford.edu/people/karpathy/ilsvrc/ И это действительно сложно.
Они покажут вам какой-нибудь подвид средиземноморского вьюрка и отгадают.
-
Обзор Wondershare Dvd Creator
19 Oct, 24 -
Конференции Рунета 2014
19 Oct, 24