GCT блокирует внимание канала и явно моделирует отношения между каналами посредством встраивания глобального контекста, нормализации каналов и адаптивного шлюзования для продвижения их конкуренции или сотрудничества.
Название бумаги:Gated Channel Transformation for Visual Recognition
Zongxin Yang, Linchao Zhu, Yu U Wu и Yi Yang
Резюме
- Модуль GCT представляет собой универсальный блок стробируемого преобразования, который можно оптимизировать вместе с весами сети.
- В отличие от неявного обучения SEnet через полные соединения, он использует интерпретируемые переменные для явного моделирования отношений между каналами, решая, конкурировать или сотрудничать.
Ключевые слова: интерпретируемость, явные отношения, стробирование.
вводить
-
Один сверточный слой работает только с соседними локальными контекстами в каждом пространственном местоположении на карте объектов, что может привести к локальной неоднозначности. Обычно есть два способа решить эту проблему: один — увеличить глубину сети, например, VGG, Resnet, другой — увеличить ширину сети для получения более глобальной информации, например, GEnet использует много доменов. Встраивание, SEnet использует глобальную информацию о встраивании для построения отношения модульного канала.
-
Однако есть две проблемы с использованием уровня fc в SEnet:
- Из-за использования слоя fc его нельзя использовать на всех слоях ради сохранения параметров
- Параметры fc-слоя более сложны, и корреляцию между разными каналами анализировать сложно, это фактически своего родаСкрытыйучиться
- Проблемы возникают после размещения некоторых слоев
Связанных с работой
запорный механизм
Механизм стробирования был успешно применен в некоторых архитектурах рекуррентных нейронных сетей. LSTM вводят входные и выходные вентили и вентили забывания для регулирования потока информации в модуль и из него. Основываясь на механизмах стробирования, некоторые методы внимания фокусируются на концентрации вычислительных ресурсов на наиболее информативных частях признаков.
слой нормализации
В последние годы слои нормализации широко используются в глубоких сетях. Нормализация локального отклика (LRN) вычисляет статистику в пределах небольшого межканального соседства для каждого пикселя Пакетная нормализация (BN) использует глобальную пространственную информацию по пакетному измерению Нормализация слоя (LN) по измерению канала Вместо пакетных расчетов по измерению Групповая нормализация (GN) по-разному делит каналы на группы и нормализует, вычисляя среднее значение и дисперсию в каждой группе.
GCT
Идеи дизайна:
- Встраивание глобальной контекстной информации через p-норму
- Нормализация канала путем внедрения информации и обучаемых параметров
- Механизм внимания, управляемый каналом, с помощью весов и смещений
весь кадр
Модуль GCT в основном состоит из трех частей:встраивание глобального контекста,нормализация канала,истробирующая адаптация. Среди них при операции нормализацииНет параметровиз.
В то же время, чтобы сделать GCTобучаемый, вводит три веса -,,,Отвечает за вывод адаптивного встраивания. грузикии предвзятостьОтвечает за управление активацией ворот.
Кроме того,Параметр сложности GCT равен O(C), а сложность SEnet — O(C^2).
Тогда функция активации модуля GCT:
встраивание глобального контекста
Большее рецептивное поле может избежать локальной семантической неоднозначности, поэтому модуль встраивания глобального контекста предназначен дляСовокупная глобальная контекстная информация в каждом канале.
GAP (Global Average Pooling) в некоторых случаях дает сбой, таких как развертывание модуля SE после уровня LN, поскольку LN фиксирует среднее число каждого канала, выход GAP является постоянным для любого входа.
здесьp-норма выбрана для встраивания глобального контекста, 2-норма работает лучше всего, а 1-норма очень близка к ней, но обратите внимание, что при p=1 для неотрицательных входных данных (например, развернутых после ReLU) она будет эквивалентна GAP.
где параметрыопределяется как,когдаКогда значение близко к 0, канал не будет участвовать в нормализации канала.
Модуль определяется как:
вПроблема вывода в нуле избегается для очень малой константы, что также является распространенным методом и не будет упоминаться в будущем.
нормализация канала
Методы нормализации могут быть установлены между нейронами (или каналами)Конкурентные отношения, заставляя значения, при которых отклик канала больше, становиться относительно большими и подавлять другие каналы с меньшей обратной связью (это утверждение могло бытьбумага ЛРНпредложено в статье, но в статье не дается никаких пояснений, автор считает, что, возможно, следуетЭто сыграет роль в установлении конкурентных отношений, т.к.), где регуляризация l_2 используется для нормализации канала.
Подобно LRN, он определяется следующим образом:
стробирующая адаптация
Определяется следующим образом:
Когда активно активируется вес селектора канала, GCT продвигает этот канал, чтобы конкурировать с другими каналами. Когда вес селектора активируется отрицательно, GCT побуждает канал сотрудничать с другими каналами.
Кроме того, когда вес селектора и смещение строба равны 0, исходным функциям разрешается переходить на следующий слой, что эквивалентно остатку:
Эта функция может эффективно решить проблему глубокой деградации сети, и ResNet также выигрывает от этой идеи.
Поэтому рекомендуется инициализировать γ и β равными 0 при инициализации слоя GCT. Таким образом, начальные этапы тренировочного процесса будут более стабильными, а конечная производительность GCT будет лучше.
код
class GCT(nn.Module):
def __init__(self, num_channels, epsilon=1e-5, mode='l2', after_relu=False):
super(GCT, self).__init__()
self.alpha = nn.Parameter(torch.ones(1, num_channels, 1, 1))
self.gamma = nn.Parameter(torch.zeros(1, num_channels, 1, 1))
self.beta = nn.Parameter(torch.zeros(1, num_channels, 1, 1))
self.epsilon = epsilon
self.mode = mode
self.after_relu = after_relu
def forward(self, x):
if self.mode == 'l2':
embedding = (x.pow(2).sum((2, 3), keepdim=True) +
self.epsilon).pow(0.5) * self.alpha #[B,C,1,1]
norm = self.gamma / \
(embedding.pow(2).mean(dim=1, keepdim=True) + self.epsilon).pow(0.5)
# [B,1,1,1],公式中的根号C在mean中体现
elif self.mode == 'l1':
if not self.after_relu:
_x = torch.abs(x)
else:
_x = x
embedding = _x.sum((2, 3), keepdim=True) * self.alpha
norm = self.gamma / \
(torch.abs(embedding).mean(dim=1, keepdim=True) + self.epsilon)
else:
print('Unknown mode!')
sys.exit()
gate = 1. + torch.tanh(embedding * norm + self.beta)
# 这里的1+tanh就相当于乘加操作
return x * gate
интерпретируемость
грузики
Визуализируйте распределение весов строба в ResNet-50:
- value представляет значение веса
- Индекс слоев указывает размерность слоев сети, на которых расположены веса.Чем больше значение, тем ближе позиция к выходу.
- плотность параметров указывает плотность параметров, что и делается здесьобработка для масштабирования по оси Z
Вычислите среднее значение и дисперсию весов стробирования в разных положениях:
можно увидеть:
- В мелком слое сети среднее значение веса ворот меньше 0, а модуль GCT имеет тенденцию уменьшать разницу в каналах и поощрять взаимодействие между каналами.
- В глубокой сети среднее значение веса ворот больше 0, а модуль GCT имеет тенденцию увеличивать разницу каналов и поощрять конкуренцию между каналами.
Объяснение сотрудничества и конкуренции
- В неглубоких слоях сети в основном изучаются функции низкого уровня, такие как текстуры, края и т. д. Для этих основных функций нам необходимо сотрудничество между каналами для более широкого извлечения функций.
- В глубоком слое сети в основном изучаются признаки высокого уровня, а различия между ними часто велики и напрямую связаны с задачей.Нам нужна конкуренция между каналами для получения более ценной информации о признаках.
Абляционные исследования
Эта статья неИзучение эффективности каждой части блока GCT, но сравнить методы p-нормы и функции активации в каждом разделе.
В документе приводится только эффективность весов селектора, и не анализируется конкретно роль смещения селектора и весов встраивания.
Пополнить
тренироваться
При добавлении модуля GCT к существующей модели можно сначала заморозить другие параметры сети и обучить только параметры в модуле GCT, а затем разморозить сеть для совместного обучения.
GCT также можно добавить в сеть с самого начала и обучить с нуля.
считать
Из диаграммы распределения веса в 5.1 видно, что значительная часть веса сосредоточена вокруг 0. Означает ли это, что в GCT есть определенная избыточность?
В соответствующих исследованиях SENet также есть некоторые исследования влияния расположения модуля внимания на общую производительность сети.Модуль внимания может быть размещен в мелких или глубоких слоях сети, а не после всех слоев. , потому что эффект может быть улучшен и параметры Увеличение объема расчета не является линейным, и некоторые выигрыши перевешивают потери.
Можно изучить дополнительные методы встраивания и нормализации глобальной информации.