Эволюция Нейронных Сетей Для Распознавания Изображений В Google: Googlenet

Моя ВМ здесь уже давно синхронизируется, так что у меня есть время рассказать о том, что я недавно прочитал.

Например, о ГугЛеНете.

GoogLeNet — это первое воплощение так называемой архитектуры Inception, которую все понимают как эталонную:

Эволюция нейронных сетей для распознавания изображений в Google: GoogLeNet

(кстати, ссылка на нее первая в списке литературы статьи, чуваки горят) В 2014 году она выиграла соревнование по распознаванию изображений ImageNet с результатом 6,67% ошибок в топ-5. Напомню, что топ-5 ошибок — это метрика, в которой алгоритм может выдать 5 вариантов класса изображения и засчитывается ошибка, если среди всех этих вариантов нет правильного.

Всего тестовый датасет содержит 150К изображений и 1000 категорий, то есть задача крайне нетривиальная.

Чтобы понять, почему, как и почему работает GoogLeNet, как обычно, немного контекста.

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

closecircles.com , отсюда и стиль изложения и уточняющих вопросов.



В 2012 году происходит эпохальное событие — конкурс ImageNet побеждает глубокую сверточную сеть.

И он не просто выигрывает, а показывает ошибку почти вдвое меньше, чем у второго места (15% против 26% ошибки топ5) (чтобы показать развитие региона, текущий верхний результат — 3%) Сеть называется AlexNet в честь Алекса Крижевского, ученика Хинтона.

У него всего 8 уровней (5 сверточных и 3 полносвязных), но в целом он толстый и жирный — целых 60М параметров.

Его обучение не помещается в один GPU с 3 ГБ памяти, и Алексу уже приходится придумывать трюк, чтобы обучить его на двух GPU.

И теперь люди в Google работают над тем, чтобы сделать это более практичным.

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

Мы любим GoogLeNet даже не столько за точность, сколько именно за эффективность в размере модели и необходимом количестве вычислений.

Сама бумага - http://arxiv.org/abs/1409.4842 .

Их основные идеи:

  • Оригинальный AlexNet делал большие свертки, требующие множества параметров, давайте попробуем сделать меньшие свертки с большим количеством строк.

  • А затем мы агрессивно уменьшим количество измерений, чтобы компенсировать более толстые слои.

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

    Так как он еще и учится, то это получается очень эффективно.

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

    Если масштаб слишком велик для текущего уровня, он распознается на следующем.

  • Мы вообще не делаем скрытые слои FC, потому что они Очень множество параметров.

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

Вот как выглядит один «начальный» модуль:

Эволюция нейронных сетей для распознавания изображений в Google: GoogLeNet

Видны одинаковые ядра разного размера, видны извилины 1х1 для уменьшения размерности.

И сеть состоит из 9 таких блоков.

Эта конструкция имеет примерно в 10 раз меньше параметров, чем AlexNet, а также рассчитывается быстрее, поскольку уменьшение размерности работает хорошо.

А потом оказалось, что он еще и картинки классифицирует действительно лучше - как писалось выше, ошибка топ5 6,67%.



Эволюция нейронных сетей для распознавания изображений в Google: GoogLeNet

Вот изображение всей сети.

Выглядит страшно, но когда понимаешь, что это повторяющиеся блоки, все становится проще.



Какие еще подробности можно рассказать.

Имеет три обучающие головки (желтые квадраты) — это сделано для того, чтобы было проще обучать такую глубокую сеть.

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

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

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

Эта архитектура, помимо самого GoogLeNet, называется Inception-v1. Inception-BN — это та же сетка, только обученная с помощью Пакетная нормализация (Здесь Здесь хорошее объяснение на пальцах).

А Inception-v2 и далее — это более сложные архитектуры, о которых я расскажу в следующий раз, а то скоро здесь могут начать кормить.

«Le» в GoogLeNet — это отсылка к LeNet 5, первой сетке, опубликованной LeCun еще до того, как появилось глубокое обучение.

Я также недавно прочитал кое-что о сжатии сети.

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

Я чувствую, что еще через десять лет каждая камера начнет видеть по-настоящему.

Насчет сжатия бумаги, кстати, если интересно - http://arxiv.org/abs/1510.00149 .

Ага.

Это игры немного разного уровня.

Оптимизировать можно на уровне архитектуры и обучения или на низком уровне — работая с уже изученными весами.

Скорее всего, на практике вам понадобится и то, и другое.

Кстати, вопрос про космос.

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

Следите за обновлениями!

Теги: #глубокое обучение #CNN #классификация изображений #Google #обработка изображений #машинное обучение
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.