Шаг 224.
Глубокое обучение на Python. ... . Современные архитектурные шаблоны сверточных сетей. Модульность, иерархия, многократное использование

    На этом шаге мы поговорим о способах упрощения сложной системы.

    Есть универсальный рецепт, помогающий упростить сложную систему: нужно лишь структурировать всю аморфную мешанину в модули, организовать модули в иерархию и многократно использовать одни и те же модули в разных местах по мере необходимости ("многократное использование" - еще один термин для обозначения абстракции в этом контексте). Формула "модульность - иерархия - многократное использование" лежит в основе системной архитектуры практически во всех областях, где в принципе используется термин "архитектура". На ней базируется любая сложная система, будь то собор, ваше собственное тело, военно-морской флот страны или кодовая база Keras (рисунок 1).


Рис.1. Сложные системы организованы в модули с иерархической структурой, которые многократно используются (например, ваши четыре конечности или ваши 20 пальцев являются вариантами одного и того же шаблона)

    Инженеры-программисты хорошо знакомы с этими принципами: эффективная кодовая база имеет иерархическую модульную организацию, в которой одни и те же классы и функции используются повторно, а не реализуются дважды. Если вы организуете свой код, следуя этим принципам, то можно сказать, что вы планируете "архитектуру программного обеспечения".

    Само по себе глубокое обучение - всего лишь применение данного рецепта к непрерывной оптимизации методом градиентного спуска: вы берете классический метод оптимизации (градиентный спуск по непрерывному функциональному пространству) и структурируете пространство поиска на модули (слои), организованные в иерархию (часто в виде простого стека - простейшей разновидности иерархии), в которой повторно используется все что можно (например, свертки предназначены для повторного применения одной и той же информации в разных пространственных местоположениях).

    Точно так же архитектура модели глубокого обучения в первую очередь связана с разумным применением принципов модульности, иерархии и повторного использования. В своей практике вы будете замечать, что все популярные сверточные архитектуры не только структурированы по слоям - их слои также организованы в повторяющиеся группы, называемые блоками или модулями. Например, популярная архитектура VGG16, которую мы использовали в предыдущих шагах, имеет повторяющиеся блоки "свертка, свертка, выбор максимального" (рисунок 2).


Рис.2. Архитектура VGG16: обратите внимание на повторяющиеся блоки слоев и пирамидальную структуру карт признаков

    Кроме того, большинство сверточных сетей имеют пирамидальную структуру (иерархию признаков). Вспомните, например, последовательное увеличение количества сверточных фильтров, которые мы использовали в первой сверточной сети, построенной на предыдущих шагах: 32, 64, 128. Число фильтров растет с глубиной слоя, а размер карт признаков, соответственно, уменьшается. То же самое можно заметить в организации модели VGG16 (рисунок 2).

    Более глубокие иерархии хороши тем, что способствуют повторному использованию признаков и, следовательно, абстрагированию. В общем случае глубокий стек слоев меньшей размерности работает лучше, чем мелкий стек слоев большой размерности. Однако количество слоев не может увеличиваться до бесконечности из-за проблемы затухания градиента. Для ее преодоления используется важный архитектурный шаблон - остаточные связи.


О важности исследования возможности упрощения моделей глубокого обучения

    Архитектуры моделей глубокого обучения чаще являются результатом постепенного развития, чем проектирования, - они разрабатываются методом проб и ошибок. Так же как в биологических системах, если взять любую сложную экспериментальную модель глубокого обучения, есть вероятность, что удаление нескольких модулей (или замена некоторых обученных весов случайными значениями) не приведет к потере качества.

    Наращивая сложность, исследователи глубокого обучения сталкиваются со следующим соблазном: сложная (даже более, чем необходимо) система может быть более интересной или более новой - что увеличит шансы прохождения авторских статей о ней через процесс рецензирования. Прочитав множество трудов по глубокому обучению, вы заметите, что они часто подгоняются под требования рецензентов как по стилю, так и по содержанию - и это отрицательно сказывается на ясности объяснения и надежности результатов. Например, математический аппарат в подобных текстах редко используется для четкой формализации идей или неочевидных результатов - чаще он применяется для придания налета серьезности, как дорогой костюм продавца.

    Целью исследований должна быть не только публикация, но и получение надежных знаний. Самый простой путь для этого - изучение причинно-следственной связи в вашей системе. Есть очень простой способ изучения причинно-следственной связи: исследование абляции (возможности упрощения модели). Оно предполагает систематические попытки упростить систему удалением ее частей, чтобы определить, где в действительности формируются основные результаты. Если вы обнаружите, что X + Y + Z дает хорошие результаты, попробуйте также X, Y, Z, X + Y, X + Z и Y + Z и посмотрите, что будет.

    Став исследователем глубокого обучения, старайтесь избавляться от шума в процессе исследований: изучайте возможность упрощения своих моделей. Всегда спрашивайте: "Есть ли более простое объяснение? Действительно ли необходима эта дополнительная сложность? Зачем?"


    На следующем шаге мы рассмотрим остаточные связи.




Предыдущий шаг Содержание Следующий шаг