Модель GoogLeNet
Архитектура
Модель GoogLeNet [1], известная также как Inception-v1, победила в соревновании ISLVRC 2014. В основе архитектуры GoogLeNet лежи т наблюдение, что классифицируемый объект на изображении может иметь разный размер.
Допустим, мы классифицируем изображение машины. Эта машина может быть изображена крупным, средним и мелким планом. Свёртка, как известно, имеет ограниченную область видимости (receptive field), задаваемую ядром свёртки (convolution kernel). Поэтому для распознавания мелкой машины потребуются свёртки небольшого размера, а для распознавания крупной машины - свёртки уже большого размера.
Поскольку модель должна выдавать один и тот же прогноз для объектов разного размера, в GoogLeNet предлагается использовать блок Inception, показанный ниже [1]:
В стандартном Inception блоке (a) свёртки разных размеров действуют параллельно, после чего их результаты объединяются. Такой блок приводит к сильному разрастанию числа выходных каналов, содержащих выходы всех свёрток. Также если число входных каналов велико, то свёртки будут работать медленно. Поэтом у в GoogLeNet использовались усовершенствованные Inception блоки (b), в которых перед применением свёрток 3x3 и 5x5 предварительно уменьшается число каналов за счёт вычислительно эффективных свёрток 1x1. Такое упрощение промежуточных представлений называется операцией "бутылочного горлышка" (bottleneck operation) и часто используется в сложных архитектурах.
Вся архитектура GoogLeNet состоит из предварительных свёрточных слоёв, за которыми применяется 9 Inception блоков (с разными весами), как показано ниже [1]:
В блоках отвечающих свёрткам и пулингам, используется обозначение , где - пространственный размер операции, задаваемый размером ядра свёртки (kernel size), а - шаг (stride).
Для уменьшения числа параметров, в GoogLeNet используется всего один полносвязный слой (fully-connected, FC) перед выдачей итогового прогноза (softmax2). Вместо векторизации промежуточного представления, о но обрабатывается глобальным усредняющим пулингом, выдающим вектор из глобальных (по пространственным координатам) средних активаций вдоль каждого канала.
Сравнение GoogleNet с VGG
За счёт массового снижения числа каналов свёртками 1x1, а также использования единственного полносвязного слоя, применённого к результату глобального усредняющего пулинга, число параметров GoogLeNet оказалось существенно ниже, чем в модели VGG, несмотря на возросшую глубину. Но GoogleNet работает медленнее из-за увеличенного числа слоёв.
Возможность упрощённой обработки
Обратим внимание, что в Inception блоке результаты действия свёрток объединяются с результатом максимизирующего пулинга 3x3. Это вызвано тем, что распознавать простые объекты оптимальнее меньшим количеством свёрток. Поэтому часть сигнала направляется через пулинг вместо его обработки последующими свёртками и операциями нелинейности. Этот пулинг не приводит к уменьшению размерности, поскольку применяется с шагом 1.
Особенность обучения и применения
Обучение таких глубоких сетей, как GoogLeNet, сопряжено с практическими сложностями, вызванными размытием градиента в методе обратного распространения ошибки, пока он доходит до более ранних слоёв. Иными словами, связь выхода сети с ранними слоями менее прямая и более опосредованная, чем с поздними, из-за чего ра нние слои хуже настраиваются. Поэтому авторы архитектуры во время обучения сети добавляли два вспомогательных классификатора в середину сети с выходами softmax0 и softmax1. Итоговая модель настраивалась на взвешенной сумме потерь всех трёх классификаторов softmax0, softmax1 и softmax2. Более ранние классификаторы позволили лучше обучить начальные слои сети. Во время применения сети вспомогательные классификаторы не использовались и прогноз строился только по выходу softmaх2.
Доработки архитектуры
Сеть GoogLeNet показала top-5 точность порядка 7%, и впоследствии дорабатывалась, используя идеи других моделей. В частности, была предложена улучшенная архитектура модуля Inception-v4, позволившая достичь точности уже порядка 3% [2].