Моя ВМ здесь уже давно синхронизируется, так что у меня есть время рассказать о том, что я недавно прочитал.
Например, о ГугЛеНете.
GoogLeNet — это первое воплощение так называемой архитектуры Inception, которую все понимают как эталонную:
(кстати, ссылка на нее первая в списке литературы статьи, чуваки горят) В 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, потому что они Очень множество параметров.
Вместо этого на последнем уровне мы создаем глобальный средний пул и напрямую подключаем его к выходному слою.
Видны одинаковые ядра разного размера, видны извилины 1х1 для уменьшения размерности.
И сеть состоит из 9 таких блоков.
Эта конструкция имеет примерно в 10 раз меньше параметров, чем AlexNet, а также рассчитывается быстрее, поскольку уменьшение размерности работает хорошо.
А потом оказалось, что он еще и картинки классифицирует действительно лучше - как писалось выше, ошибка топ5 6,67%.
Вот изображение всей сети.
Выглядит страшно, но когда понимаешь, что это повторяющиеся блоки, все становится проще.
Какие еще подробности можно рассказать.
Имеет три обучающие головки (желтые квадраты) — это сделано для того, чтобы было проще обучать такую глубокую сеть.
Каждая дополнительная обучающая головка содержит несколько слоев FC, которые прогнозируют один и тот же класс на основе низких уровней, чтобы сигнал быстрее достигал более низких уровней (однако в последующих работах выяснилось, что они помогают скорее потому, что являются дополнительной регуляризацией).
В релизе выкинуто все, что ведет к вспомогательным обучающим главам.
Этот метод используется и в другой литературе, но с тех пор мы научились лучше обучать глубокие сети, поэтому это часто необходимо.
Эта архитектура, помимо самого GoogLeNet, называется Inception-v1. Inception-BN — это та же сетка, только обученная с помощью Пакетная нормализация (Здесь Здесь хорошее объяснение на пальцах).
А Inception-v2 и далее — это более сложные архитектуры, о которых я расскажу в следующий раз, а то скоро здесь могут начать кормить.
«Le» в GoogLeNet — это отсылка к LeNet 5, первой сетке, опубликованной LeCun еще до того, как появилось глубокое обучение.
Я также недавно прочитал кое-что о сжатии сети.Теги: #глубокое обучение #CNN #классификация изображений #Google #обработка изображений #машинное обучениеТам берут сеть, отрезают от нее лишние грузы, сеть уменьшается в сто раз, точность почти не страдает. То есть вроде как можно прямо из гигабайт в мегабайт запихнуть в память мобильника.
Я чувствую, что еще через десять лет каждая камера начнет видеть по-настоящему.
Насчет сжатия бумаги, кстати, если интересно - http://arxiv.org/abs/1510.00149 .
Ага.
Это игры немного разного уровня.
Оптимизировать можно на уровне архитектуры и обучения или на низком уровне — работая с уже изученными весами.
Скорее всего, на практике вам понадобится и то, и другое.
Кстати, вопрос про космос.
Можно ли из всего этого сделать какой-то глобальный вывод? Почему все это работает? Или хотя бы как лучше проектировать сети с учетом этого опыта? Отличные вопросы, об этом будет много мяса в следующей части рассказа.
Следите за обновлениями!
-
Когда Прекратить Добавлять Цвета
19 Oct, 24 -
Где Найти Бесплатные Онлайн-Игры
19 Oct, 24 -
Привет.
19 Oct, 24 -
«Жизнь» Джона Конвея На Qt
19 Oct, 24 -
Метапоиск
19 Oct, 24 -
Торпеда Для Паровоза
19 Oct, 24 -
Дача Зимой: Быть Или Не Быть?
19 Oct, 24