Остаточные сети (ResNets) являются типом глубокой сети, состоящей из базовых блоков, которые имеют остаточные связи (также известный как пропуск или связи ярлыка). Эти связи позволяют входу пропускать сверточные модули основной ветви, таким образом обеспечивая более простой путь через сеть. Позволяя градиентам параметра течь более легко от выходного слоя до более ранних слоев сети, остаточные связи помогают смягчить проблему исчезающих градиентов во время раннего обучения.
Структура остаточной сети гибка. Ключевой компонент является включением остаточных связей в остаточных блоках. Группа остаточных блоков называется стеком. Архитектура ResNet состоит из начальных слоев, сопровождаемых стеками, содержащими остаточные блоки, и затем последние слои. Сеть имеет три типа остаточных блоков:
Начальный остаточный блок — Этот блок происходит в начале первого стека. Слои в остаточной связи начального остаточного блока определяют, сохраняет ли блок размеры активации или выполняет субдискретизацию.
Стандартный остаточный блок — Этот блок происходит многократно в каждом стеке после первого блока невязки субдискретизации. Стандартный остаточный блок сохраняет размеры активации.
При субдискретизации остаточного блока — Этот блок происходит однажды, в начале каждого стека. Первый сверточный модуль в блоке субдискретизации прореживает пространственные размерности на коэффициент два.
Типичный стек имеет блок невязки субдискретизации, сопровождаемый m
стандартные остаточные блоки, где m
больше или равен одному. Первый стек является единственным стеком, который начинается с начального остаточного блока.
Начальная буква, стандарт и субдискретизация остаточных блоков могут быть блоки неузкого места или узкое место. Блоки узкого места выполняют 1 сверткой 1 на 1 перед 3 3х3 сверткой, чтобы сократить количество каналов на коэффициент четыре. Сети с и без блоков узкого места имеют подобный уровень вычислительной сложности, но общее количество распространения функций в остаточных связях в четыре раза больше, когда вы используете модули узкого места. Поэтому использование блоков узкого места увеличивает КПД сети.
Слои в каждом блоке определяются типом блока и опций, которые вы устанавливаете.
Блокируйте слои
Имя | Начальные слои | Начальный остаточный блок | Стандартный остаточный блок (BottleneckType="downsample-first-conv" ) | Стандартный остаточный блок (BottleneckType="none" ) | Субдискретизация остаточного блока | Последние слои |
Описание | Остаточная сеть запускается со следующих слоев в порядке:
Установите дополнительный слой объединения с помощью InitialPoolingLayer аргумент. | Основная ветвь начального остаточного блока имеет те же слои как стандартный остаточный блок. InitialNumFilters и NumFilters значения определяют слои на остаточной связи. Остаточная связь имеет сверточный слой с [1,1,1] фильтр и [1,1,1] шагните, если одному из следующих условий отвечают:
BottleneckType="downsample-first-conv" (значение по умолчанию) и InitialNumFilters не равно четыре раза первому элементу NumFilters .
BottleneckType="none" и InitialNumFilters не равно первому элементу NumFilters .
Если ResidualBlockType установлен to"batchnorm-before-add" , остаточная связь будет также иметь слой нормализации партии. | Стандартный остаточный блок с модулями узкого места имеет следующие слои в порядке:
convolution3dLayer с [1,1,1] фильтр и [1,1,1] шаг
batchNormalizationLayer
reluLayer
convolution3dLayer с [3,3,3] фильтр и [1,1,1] шаг
batchNormalizationLayer
reluLayer
convolution3dLayer с [1,1,1] фильтр и [1,1,1] шаг
batchNormalizationLayer
additionLayer
reluLayer
Стандартный блок имеет остаточную связь от выхода предыдущего блока к слою сложения. Установите положение слоя сложения с помощью ResidualBlockType аргумент. | Стандартный остаточный блок без модулей узкого места имеет следующие слои в порядке:
Стандартный блок имеет остаточную связь от выхода предыдущего блока к слою сложения. Установите положение слоя сложения с помощью ResidualBlockType аргумент. | Блок невязки субдискретизации совпадает со стандартным блоком (или с или без узкого места), но шагом [2,2,2] в первом сверточном слое и дополнительных слоях на остаточной связи. Слои на остаточной связи зависят от ResidualBlockType значение.
Когда ResidualBlockType установлен в "batchnorm-before-add" , вторая ветвь содержит a convolution3dLayer с [1,1,1] фильтр и [2,2,2] шагните, и a batchNormalizationLayer . Когда ResidualBlockType установлен в "batchnorm-after-add" , вторая ветвь содержит a convolution3dLayer с [1,1,1] фильтр и [2,2,2] шаг.
Половины блока субдискретизации высота и ширина входа, и увеличивают число каналов. | Остаточная сеть заканчивается следующими слоями в порядке:
|
Визуализация в качестве примера |
| Пример начального остаточного блока для сети без узкого места и со слоем нормализации партии. перед слоем сложения.
| Пример стандартного остаточного блока для сети с узким местом и со слоем нормализации партии. перед слоем сложения.
| Пример стандартного остаточного блока для сети без узкого места и со слоем нормализации партии. перед слоем сложения.
| Пример блока невязки субдискретизации для сети без узкого места и со слоем нормализации партии. перед слоем сложения.
|
|
Свертка и веса полносвязного слоя инициализируются с помощью Него метод инициализации веса [3]. Для получения дополнительной информации смотрите convolution3dLayer
.