- PVSM.RU - https://www.pvsm.ru -
У меня тут синхронизируется VM надолго, поэтому есть время рассказать про то, что я недавно читал.
Например, про GoogLeNet.
GoogLeNet — это первая инкарнация так называемой Inception architecture, которая референс всем понятно на что:
(кстати, ссылка на него идет первой в списке референсов статьи, чуваки жгут)
Она выиграла ImageNet recognition challenge в 2014-м году с результатом 6.67% top 5 error. Напомню, top 5 error — метрика, в которой алгоритм может выдать 5 вариантов класса картинки и ошибка засчитывается, если среди всех этих вариантов нет правильного. Всего в тестовом датасете 150K картинок и 1000 категорий, то есть задача крайне нетривиальна.
Чтобы понять зачем, как и почему устроен GoogLeNet, как обычно, немного контекста.
Disclaimer: пост написан на основе отредактированных логов чата closedcircles.com [1], отсюда и стиль изложения, и уточняющие вопросы.
Причем не просто выигрывает, а показывает ошибку почти в два раза меньше второго места (15% vs 26% top5 error)
(чтобы показать развитие области, текущий топовый результат — 3%)
Сетка называется AlexNet по имени Alex Krizhevsky, студента Хинтона. В ней всего 8 уровней (5 convolutional и 3 fully-connected), но в целом она толстая и жырная — аж 60M параметров. Eе тренировка не влезает в один GPU с 3GB памяти и Алексу аж приходится придумать трюк как тренировать такое на двух GPU.
Например, чтобы можно было ее использовать на девайсах поменьше и вообще.
GoogLeNet мы любим не столько даже за точность, сколько именно за эффективность в размере модели и необходимом количестве вычислений.
Cобственно пейпер — http://arxiv.org/abs/1409.4842 [2].
Основные идеи у них такие:
Вот так выглядит один "inception" module:
Видны те самые кернелы разного размера, видны 1x1 convolutions для уменьшения размерности.
И вот сеть состоит из 9 таких блоков. В такой конструкции примерно в 10 раз меньше параметров, чем в AlexNet, и вычисляется она тоже быстрее, потому что dimensionality reduction работает хорошо.
А потом оказалось, что она еще и собственно классифицирует картинки лучше — как было написано выше, 6.67% top5 error.
Вот картинка полной сети. Она выглядит страшно, но когда понимаешь, что это повторяющиеся блоки, попроще.
У нее три training head (желтые квардратики) — это было сделано для того, чтобы проще было тренировать такую глубокую сеть. В каждом дополнительном training head есть немного FC layers, которые предсказывают тот же класс на основе низких уровней, чтобы до нижних уровней сигнал доходил побыстрее (правда, в следующих работах оказалось, что они помогают скорее потому что являются дополнительной регуляризацией).
В релизе все ведущее ко вспомогательным training heads выкидывается. Такая техника используется в других местах в литературе, но с тех пор мы научились лучше deepnets тренировать, поэтому часто уже нужно.
Такая архитектура, кроме собственно GoogLeNet, называется Inception-v1.
Inception-BN — это та же сетка, только натренированная с использованием Batch Normalization [3] (вот здесь [4] хорошее объяснение на пальцах).
А Inception-v2 и далее — уже более сложные архитектуры, про которые я расскажу в следующий раз, а то тут могут начать кормить скоро.
"Le" в GoogLeNet — референс на LeNet 5, первую сетку, опубликованную ЛеКуном before deep learning was a thing.
Про сжатие сетей я тоже недавно кое-что читал. Там берут сеть, обрезают из нее лишние веса, сеть уменьшается раз в сто, точность почти не страдает. То есть, вроде как, прямо с гигабайт до мегабайт, можно пихать в память мобильника. Чувствую, еще лет десять и каждая камера начнет видеть по-настоящему.
Про сжатие пейпер, кстати, если интересно — http://arxiv.org/abs/1510.00149 [5].
Ага. Это игры немного разного уровня.
Можно оптимизировать на уровне архитектуры и обучения, а можно на низком уровне — работая уже с выученными весами.
Скорее всего, на практике нужно и то, и другое.Кстати, вопрос в космос.
А можно из этого всего сделать какой-то глобальный вывод?
Почему это все работает? Или хотя бы — как лучше дизайнить сети с учетом этого опыта?
Отличные вопросы, про это будет много мяса в следующей части рассказа. Stay tuned!
Автор: sim0nsays
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/google/120932
Ссылки в тексте:
[1] closedcircles.com: http://closedcircles.com/?invite=24f9c0846734449fdafe18c58354f5fb4a8aa0da
[2] http://arxiv.org/abs/1409.4842: http://arxiv.org/abs/1409.4842
[3] Batch Normalization: http://arxiv.org/abs/1502.03167
[4] здесь: http://opendatascience.ru/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-batch-normalization-%D0%BD%D0%B0-%D0%BF%D0%B0%D0%BB%D1%8C%D1%86%D0%B0%D1%85/
[5] http://arxiv.org/abs/1510.00149: http://arxiv.org/abs/1510.00149
[6] Источник: https://habrahabr.ru/post/301084/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.