Краткий ответ: Глубокие архитектуры и, в частности, GoogLeNet (22 слоя) находятся под угрозой исчезающей проблемы градиентов во время обучения (алгоритм обратного распространения). Инженеры GoogLeNet решили эту проблему, добавив классификаторы и в промежуточные слои, так что окончательная потеря представляет собой комбинацию промежуточной потери и окончательной потери. Вот почему вы видите в общей сложности три слоя потерь, в отличие от обычного одиночного слоя в качестве последнего уровня сети.
Более длинный ответ: в классическом машинном обучении обычно проводится различие между характеристикой и классификацией. Нейронные сети наиболее известны своей способностью решать задачи «конец в конец», то есть они сочетают в себе этапы изучения представления данных и подготовки классификатора. Таким образом, вы можете думать о нейронной сети со стандартной архитектурой (например, AlexNet) как состоящей из фазы «обучения представлению» (от уровней до предыдущего до последнего) и фазы «классификации», которая, как ожидается, включает функция потерь.
При создании более глубоких сетей возникает проблема, придуманная как проблема «исчезающих градиентов». Это на самом деле не характерно для нейронных сетей; скорее к любым градиентным методам обучения. Это не так тривиально и поэтому заслуживает надлежащего объяснения для себя; смотрите здесь для хорошей ссылки. Интуитивно, вы можете думать о градиентах, несущих все меньше и меньше информации, чем глубже мы идем внутри сети, что, конечно, вызывает серьезную озабоченность, поскольку мы настраиваем параметры (веса) сети, основываясь исключительно на градиентах, используя «back-prop» "алгоритм.
Как разработчики GoogLeNet справились с этой проблемой? Они признали тот факт, что не только свойства конечных слоев несут всю дискриминационную информацию: промежуточные функции также способны различать различные метки; и, что наиболее важно, их значения являются более «надежными», поскольку они извлекаются из более ранних слоев, в которых градиент несет больше информации. Опираясь на эту интуицию, они добавили «вспомогательные классификаторы» в двух промежуточных слоях. Это является причиной появления «ранних побегов» в середине сети, на которые вы ссылались в своем вопросе.
Полная потеря тогда является комбинацией этих трех уровней потерь. Я цитирую оригинальную статью:
Эти классификаторы принимают форму меньших сверточных сетей, размещенных поверх выходных данных модулей Inception (4a) и (4d). Во время обучения их потеря добавляется к общей потере сети с дисконтированным весом (потери вспомогательных классификаторов были взвешены на 0,3). Во время вывода эти вспомогательные сети отбрасываются.
Визуально:
В дополнение к ответу @ galoosh33: мне кажется, что вспомогательные классификаторы используют те же метки, что и конечный классификатор выходных данных. Источник: слайд 34 в https://pdfs.semanticscholar.org/0b99/d677883883584d9a328f6f2d54738363997a.pdf
Ранее я задавался вопросом, используют ли эти вспомогательные классификаторы другой тип ярлыков (например, просто собака вместо сибирской хаски).
источник