6.2.1.4 Последователи AlexNet. GoogLeNet как новый уровень
Неудивительно, что победителем ILSVRC-2013 также стала свёрточная нейронная сеть. Обычно её называют ZFNet, но это не совсем точно.
Сеть была разработана доктором Робом Фергюсом из Нью-Йоркского университета и его тогдашним аспирантом Мэтью Зейлером. В своей статье авторы благодарят также Яна Лекуна, который, будучи профессором Нью-Йоркского университета, участвовал в обсуждениях при работе над моделью. Окончательная версия сети, показавшая наилучший результат на соревнованиях, называется Clarifai — по имени стартапа, основанного Зейлером. Но всё-таки чаще эту модель называют ZFNet (по первым буквам фамилий её создателей).
Итоговая величина ошибки Clarifai составила 11,74% (11,20% с привлечением дополнительных данных для обучения, не принадлежащих к обучающей выборке)[1]. Модель представляла собой ансамбль из шести сетей, по архитектуре идентичных AlexNet[2].
В 2014 г. авторам сети GoogLeNet (другое её название — Inception V1; это название сеть получила в честь одноимённого научно-фантастического фильма) удалось уменьшить величину ошибки до дьявольски низкого значения в 6,66%[3].
Так или иначе, показатели сетей приблизились к человеческому уровню, который организаторы конкурса теперь были вынуждены оценить. Сделать это оказалось не так просто. Для того чтобы побить точность GoogLeNet, потребовалось потратить некоторое время на обучение персонала. После нескольких дней обучения человек-эксперт (им был Андрей Карпатый, ныне — директор по ИИ и зрению автопилота в Tesla) смог достичь уровня ошибки в 5,1%. Ансамбль экспертов продемонстрировал уровень ошибки в 3,6%[4]. Трудно признать эти оценки достаточно надёжными, однако именно их принято в наши дни использовать для оценки точности людей при распознавании картинок ImageNet.
GoogLeNet — свёрточная сеть, в названии которой явно читается отсылка к LeNet. Основой сети стал новый элемент, получивший название «модуль основания» [inception module] (далее в тексте я буду писать «модуль inception», поскольку «модуль основания» по-русски никто не говорит). Изюминкой модуля inception является использование свёртки с ядром 1 × 1 — для снижения размерности выходов предшествующих слоёв. То есть к пространству признаков размерностью X × Y × Z применяется свёртка с ядром 1 × 1 с размером фильтра 1 × 1 × Z, дающая слой размерностью X × Y × 1. Совершив N таких свёрток (с разными фильтрами) и соединив полученные результаты, мы получим пространство признаков размерностью X × Y × N. Задавая N сильно меньше Z, мы получим сокращение пространства признаков.
Каждый модуль inception осуществляет четыре параллельные ветви свёртки (одиночная свёртка с ядром 1 × 1, две последовательные свёртки — 1 × 1 и 3 × 3, две последовательные свёртки 1 × 1 и 5 × 5 и в последней ветке — максимизирующий пулинг 3 × 3 с последующей свёрткой 1 × 1), после чего результаты всех веток объединяются. Вся сеть собрана из подобных блоков, однако это не единственное новшество. Например, вместо одного из полносвязных слоёв на выходе сети авторы GoogLeNet применили слой усредняющего пулинга. Сеть также содержит два дополнительных «досрочных» выхода, используемых при обучении для борьбы с исчезающими градиентами, и множество других гитик, на которых мы не будем здесь останавливаться. В общем, по сравнению с лучшими архитектурами 2013 г. GoogLeNet смотрелась как работа утончённого ювелира среди грубых булыжников мостовой. GoogLeNet состояла из 22 слоёв, однако количество параметров сети по сравнению с AlexNet сократилось на порядок[5].
Второе место на соревнованиях 2014 г. с небольшим отрывом заняла сеть VGGNet, созданная Кареном Симоняном и Эндрю Зиссерманом из оксфордской Группы визуальной геометрии (Visual Geometry Group). Так же как и AlexNet, VGGNet использовала свёртки с ядром 3 × 3, но с большим количеством фильтров. Авторы обучили несколько вариантов сети, число слоёв которых варьировало от 11 до 19. На обучение самого большого варианта сети системе, оснащённой четырьмя GPU Nvidia Titan Black, требовалось порядка 2–3 недель. Наибольшей точности удалось достичь с применением ансамбля двух сетей (с 16 и 19 свёрточными слоями), имевшими 138 и 144 млн параметров соответственно (что также на порядок больше, чем у GoogLeNet)[6].
Как бы ни была удивительна архитектура GoogLeNet, победительница состязаний 2015 г. была ещё более странной. Ею стала модель ResNet (а точнее, ансамбль из нескольких таких моделей), представленная Каймином Хе и его коллегами из Miscrosoft. ResNet — это сокращение от residual network, то есть «нейронная сеть с остатками». Этим термином в наши дни принято называть нейронные сети, в которых имеются skip connections — связи, перепрыгивающие слои. Благодаря перепрыгивающим связям, а также применению слоёв пакетной нормализации Хе смог обучить сеть, в которой было целых 152 слоя! При этом число параметров сети (около 60 млн) было более чем вдвое меньше, чем у VGG. Вероятно, примерно в это время в сообществе специалистов по глубокому обучению и появился мем: Stack more layers! [Громозди больше слоёв!].
На соревновании ResNet-152 показала величину ошибки в 3,57%, тем самым достигнув сверхчеловеческого уровня точности распознавания и даже превзойдя уровень, продемонстрированный годом ранее ансамблем людей-экспертов.
В 2016 г. победу одержал ансамбль из пяти моделей, которыми были ResNet-200 (с двумя сотнями слоёв), третья и четвёртая версия сети Inception, плод «порочной любви» Inception и ResNet — InceptionResnet-v2, а также Wide residual network [Широкая сеть с остатками]. Ошибка такого ансамбля составила всего 2,99%.
Создатели ансамбля — команда TRIMPS (Third Research Institute of the Ministry of Public Security, Третий исследовательский институт Министерства общественной безопасности [Китая]) — в своём докладе, рассказывающем об их модели, обратили внимание на основные источники ошибок распознавания, среди которых главными были недостатки самого набора изображений и его разметки: неправильные метки, число объектов более пяти, неправильный «уровень» метки (например, картинка, на которой изображена тарелка с едой, имеет метку «ресторан» и т. д.). Подробный анализ «ошибок» современных моделей на базе ImageNet показывает, что ошиблась на самом деле не модель, а человек, выполнявший разметку[7].
Впрочем, в 2017 г. авторам лучшей модели удалось ещё немного превзойти результат прошлого года. Ошибка снизилась до 2,25% благодаря появлению новой архитектуры, получившей название «Сети сжатия и возбуждения» (Squeeze-and-Excitation Networks). «Строительный блок» таких сетей представляет собой модуль inception со встроенным перепрыгивающим соединением[8].
Рис. 120. Уменьшение ошибки при распознавании изображений на соревнованиях ILSVRC
- ↑ Tsang S.-H. (2018). Review: ZFNet — Winner of ILSVRC 2013 (Image Classification) // https://medium.com/coinmonks/paper-review-of-zfnet-the-winner-of-ilsvlc-2013-image-classification-d1a5a0c45103
- ↑ Tsang S. H. (2018). Review: ZFNet — Winner of ILSVRC 2013 (Image Classification) // https://medium.com/coinmonks/paper-review-of-zfnet-the-winner-of-ilsvlc-2013-image-classification-d1a5a0c45103
- ↑ * Во многих популярных статьях, посвящённых результатам ILSVRC-2014, результирующая ошибка указана равной 6,67%. На самом деле точное значение ошибки — 0,06656, то есть 6,66%. Интересно, кто так «округлил» результат? И сделано ли это было во славу Господа?
- ↑ Das S. (2017). CNN Architectures: LeNet, AlexNet, VGG, GoogLeNet, ResNet and more… // https://medium.com/analytics-vidhya/cnns-architectures-lenet-alexnet-vgg-googlenet-resnet-and-more-666091488df5
- ↑ Tsang S. H. (2018). Review: GoogLeNet (Inception v1)— Winner of ILSVRC 2014 (Image Classification) // https://medium.com/coinmonks/paper-review-of-googlenet-inception-v1-winner-of-ilsvlc-2014-image-classification-c2b3565a64e7
- ↑ Simonyan K., Zisserman A. (2015). Very deep convolutional networks for large-scale image recognition // https://arxiv.org/abs/1409.1556
- ↑ Shao J., Zhang X., Ding Z., Zhao Y., Chen Y., Zhou J., Wang W., Mei L., Hu C. (2016). Good Practices for Deep Feature Fusion // http://image-net.org/challenges/talks/2016/Trimps-Soushen@ILSVRC2016.pdf
- ↑ Hu J., Shen L, Sun G. (2018). Squeeze-and-Excitation Networks / IEEE Conference on Computer Vision and Pattern Recognition // https://github.com/hujie-frank/SENet