Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

9.3. Современные архитектурные шаблоны сверточных сетей    321

conv2d_4 (Conv2D) (None, 16, 16, 64) 36928 conv2d_3[0][0]

___________________________________________________________________________________

max_pooling2d_1 (MaxPooling2D) (None, 8, 8, 64) 0 conv2d_4[0][0]

___________________________________________________________________________________

conv2d_5 (Conv2D) (None, 8, 8, 64) 2112 add[0][0]

___________________________________________________________________________________

add_1 (Add)

(None, 8, 8, 64)

0

max_pooling2d_1[0][0]

 

 

 

conv2d_5[0][0]

___________________________________________________________________________________

conv2d_6 (Conv2D) (None, 8, 8, 128) 73856 add_1[0][0]

___________________________________________________________________________________

conv2d_7 (Conv2D) (None, 8, 8, 128) 147584 conv2d_6[0][0]

___________________________________________________________________________________

conv2d_8 (Conv2D) (None, 8, 8, 128) 8320 add_1[0][0]

___________________________________________________________________________________

add_2 (Add)

(None, 8, 8, 128)

0

conv2d_7[0][0]

 

 

 

conv2d_8[0][0]

___________________________________________________________________________________

global_average_pooling2d (Globa (None, 128) 0 add_2[0][0]

___________________________________________________________________________________

dense (Dense)

(None, 1)

129

global_average_

 

 

 

pooling2d[0][0]

===================================================================================

Total params: 297,697 Trainable params: 297,697 Non-trainable params: 0

___________________________________________________________________________________

С.остаточными.связями.можно.конструировать.сети.произвольной.глубины,. не.беспокоясь.о.затухании.градиентов.

Теперь.перейдем.к.следующему.важному.шаблону.архитектуры.сверточных. сетей.—.пакетной нормализации.

9.3.3. Пакетная нормализация

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

normalized_data = (data - np.mean(data, axis=...)) / np.std(data, axis=...)

322    Глава 9. Введение в глубокое обучение в технологиях зрения

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

Пакетная.нормализация.—.это.тип.слоя.(BatchNormalization .в.Keras),.введен- ный.в.2015.году.Сергеем.Йоффе.и.Кристианом.Сегеди1;.он.может.адаптивно. нормализовать.данные,.даже.если.среднее.и.дисперсия.изменяются.во.время. обучения..В.процессе.обучения.образцы.нормализуются.с.использованием. среднего.и.дисперсии.текущего.пакета.данных,.а.во.время.прогнозирования. (когда.достаточно.большой.пакет.репрезентативных.данных.может.быть.недоступен).применяются.экспоненциальное.скользящее.среднее.и.дисперсия.по. всем.пакетам,.наблюдавшиеся.при.обучении.

В.оригинальной.статье.авторы.утверждают,.что.пакетная.нормализация.работает. за.счет.«уменьшения.внутреннего.ковариантного.сдвига»,.но.в.действительности. никто.точно.не.знает,.почему.она.способствует.улучшению.эффективности.обучения..Есть.разные.гипотезы,.но.нет.уверенности..Далее.вы.не.раз.убедитесь,. что.подобное.положение.дел.характерно.для.многих.вопросов.глубокого.обуче- ния..Глубокое.обучение.—.это.не.точная.наука,.а.набор.постоянно.меняющихся. инженерных.практик,.полученных.опытным.путем.и.сплетенных.в.единое. целое.ненадежными.стереотипами..Иногда.может.казаться,.что.книга,.которую. вы.держите.в.руках,.говорит.вам,.как.делать.то.или.это,.но.не.дает.конкретного. объяснения,.почему.это.работает..Причина.проста:.мы.сами.этого.не.знаем..При. наличии.надежного.объяснения.я.обязательно.его.упоминаю..Пакетная.нормализация.не.относится.к.таким.случаям.

Эффект.пакетной.нормализации,.по.всей.видимости,.способствует.распростра- нению.градиента.—.подобно.остаточным.связям.—.и,.соответственно,.делает. возможным.создание.более.глубоких.сетей..Некоторые.глубокие.сети.могут. обучаться,.только.если.включают.в.себя.несколько.слоев.BatchNormalization.. Например,.слои.пакетной.нормализации.широко.используются.во.многих.продвинутых.архитектурах.сверточных.нейронных.сетей,.входящих.в.состав.Keras. (таких.как.ResNet50,.EfficientNet.и.Xception).

Слой.BatchNormalization.можно.использовать.после.любого.слоя.—.Dense,. Conv2D .и.т..д.:

x = ...

x = layers.Conv2D(32, 3, use_bias=False)(x) x = layers.BatchNormalization()(x)

Поскольку выход слоя Conv2D нормализуется, слой не нуждается в собственном векторе смещения

1. Ioffe Sergey .and.Szegedy Christian,.Batch.Normalization:.Accelerating.Deep.Network. Training.by.Reducing.Internal.Covariate.Shift.//.Proceedings.of.the.32nd.International. Conference.on.Machine.Learning,.2015,.https://arxiv.org/abs/1502.03167.

9.3. Современные архитектурные шаблоны сверточных сетей    323

ПРИМЕЧАНИЕ

Слои.обоих.типов,.Dense.и.Conv2D,.включают.вектор.смещения.(bias.vector).—. обучаемую.переменную,.цель.которой.—.сделать.слой.аффинным,.а.не.чисто.линейным..

Например,.в.общем.случае.слой.Conv2D.возвращает.y.=.conv(x,.kernel).+.bias,. а.слой.Dense.—.y.=.dot(x,.kernel).+.bias..Так.как.на.этапе.нормализации.происходит. центрирование.результатов.слоя.по.нулю,.то.при.использовании.BatchNormalization. необходимость.в.векторе.смещения.отпадает.и.слой.можно.создать.без.него,.передав. параметр.use_bias=False..Это.делает.слой.немного.тоньше.

Обычно.я.рекомендую.размещать.активацию.предыдущего.слоя.после.слоя.пакетной.нормализации.(хотя.это.и.спорно)..Поэтому.вместо.приема,.показанного. в.листинге.9.4,.желательно.использовать.подход.из.листинга.9.5.

Листинг 9.4. Как не следует использовать пакетную нормализацию

x = layers.Conv2D(32, 3, activation="relu")(x) x = layers.BatchNormalization()(x)

Листинг 9.5. Как следует использовать пакетную нормализацию: активация применяется после нормализации

x = layers.Conv2D(32, 3, use_bias=False)(x)

 

Обратите внимание на отсутствие

x = layers.BatchNormalization()(x)

 

 

 

 

функции активации здесь

x = layers.Activation("relu")(x)

 

Активация применяется

 

 

 

 

 

после слоя BatchNormalization

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

О ПАКЕТНОЙ НОРМАЛИЗАЦИИ И ДООБУЧЕНИИ

Применение пакетной нормализации имеет множество особенностей. Одна из них связана с дообучением: при дообучении модели, включающей слои BatchNormalization, я рекомендую замораживать эти слои (передавать им в атрибуте trainable значение False). Иначе они продолжат обновлять свое внутреннее среднее значение и дисперсию, что может помешать очень небольшим корректировкам, применяемым к окружающим слоям Conv2D.

324    Глава 9. Введение в глубокое обучение в технологиях зрения

Перейдем.к.следующему.архитектурному.шаблону:.раздельной.свертке.по. глубине.

9.3.4. Раздельная свертка по глубине

Что.бы.вы.подумали,.если.бы.я.сказал,.что.существует.такой.слой,.который. можно.использовать.взамен.Conv2D.и.таким.образом.сделать.модель.более.легкой. (с.меньшим.количеством.обучаемых.весовых.параметров).и.быстрой.(с.меньшим. количеством.операций.с.вещественными.числами),.а.также.повысить.качество. решения.задачи.на.несколько.процентных.пунктов?.Всеми.перечисленными. свойствами.обладает.слой.раздельной свертки по глубине .(SeparableConv2D . в.Keras)..Этот.слой.выполняет.пространственную.свертку.каждого.канала.во. входных.данных.в.отдельности.перед.смешиванием.выходных.каналов.посредством.поточечной.свертки.(свертки.1.×.1),.как.показано.на.рис..9.10.

Рис. 9.10. Раздельная свертка по глубине: за сверткой по глубине следует поточечная свертка

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

9.3. Современные архитектурные шаблоны сверточных сетей    325

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

В.отношении.крупных.моделей.раздельные.свертки.по.глубине.составляют.основу.архитектуры.Xception.высококачественных.сверточных.нейронных.сетей,. входящей.в.состав.Keras..Узнать.больше.о.теоретических.основах.раздельной. свертки.по.глубине.и.архитектуре.Xception.можно.в.моей.статье.Xception: Deep Learning with Depthwise Separable Convolutions1.

ОДНОВРЕМЕННАЯ ЭВОЛЮЦИЯ ОБОРУДОВАНИЯ, ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И АЛГОРИТМОВ

Рассмотрим обычную операцию свертки с окном 3 ×3, 64 входными каналами

и64 выходными каналами. В ней используется 3 ×3 ×64 ×64 = 36 864 обучае­ мых параметра. При применении ее к изображению будет выполнено множество действий с вещественными числами, пропорционально количеству параметров. А теперь представьте эквивалентную раздельную свертку по глубине: она включает всего 3 ×3 ×64 + 64 ×64 = 4672 обучаемых параметра

ивыполняет намного меньше действий с вещественными числами. Разница в эффективности увеличивается еще больше с увеличением количества фильтров или размеров окон свертки.

То есть при использовании раздельной свертки по глубине можно ожидать

значительного ускорения? Не торопитесь с выводами. Утверждение было бы

верным, если бы вы писали простые реализации алгоритмов на CUDA или C. На самом деле значительное ускорение можно увидеть на CPU при использовании распараллеленной базовой реализации на C. Но на практике вы, вероятно, берете GPU — и ваши фактические реализации весьма далеки от «простых» реализаций CUDA: это ядро cuDNN, фрагмент кода, чрезвычайно оптимизированный, вплоть до каждой машинной инструкции. Безусловно, на оптимизацию подобного кода нужно потратить много усилий, ведь свертки cuDNN на оборудовании NVIDIA выполняют много квинтиллионов операций с плавающей точкой каждый день. Однако подобная экстремальная оптимизация имеет один побочный эффект: альтернативные подходы почти не дают преимуществ в производительности, даже те с существенными внутренними преимуществами (как раздельные свертки по глубине).

1. Chollet F..Xception:.Deep.Learning.with.Depthwise.Separable.Convolutions.//.Conference. on.Computer.Vision.and.Pattern.Recognition,.2017,.https://arxiv.org/abs/1610.02357.