Специальные виды свёрток
Поточечная свёртка
Поточечная свёртка (pointwise convolution [1]) - это обычная свёртка, но с размером ядра , где - число входных каналов. Таким образом, в каждой точке поточечная свёртка генерирует признак, который зависит лишь от входных признаков в той же самой пространственной позиции.
Таким образом, выходной слой поточечной свёртки представляет собой линейную комбинацию входных слоёв.
Применяя набор поточечных свёрток, можно управлять числом выходных каналов, то есть размерностью внутреннего представления изображения. Это полезно для того, чтобы понизить размерность каналов, сократив тем самым объём вычислений перед применением обычных свёрток большого размера, поскольку их сложность линейно зависит от числа каналов.
Групповая свёртка
Групповая свёртка (grouped convolution [2]) призвана уменьшить как число вычислений, так и число настраиваемых параметров за счёт того, что набор свёрток применяется не ко всем входным каналам, а только к части (каждый блок свёрток применяется к своему подмножеству входных каналов).
Рассмотрим для примера свёрточный слой с двумя равными группами.
Стандартная свёртка зависит от всех каналов, что даёт сложность для вычисления одной активации свёртки с ядром . В групповой свёртке с двумя группами каналы разбиваются на две половины. Используя нотацию питона для индексирования массивов, можно записать, что к первой половине каналов применяется свёртка с ядром , а ко второй группе каналов применяется свёртка с ядром , при этом смещение у двух уполовиненных свёрток разное. Активациии первой и второй свёртки затем конкатенируются вдоль размерности каналов (channel dimension).
Область значений, от которых зависят стандартная свёртка и групповая с двумя группами, показаны ниже слева и справа соответственно:
В общем случае используется групп: входные каналы разбиваются на непересекающиеся группы примерно одинакового размера, а результаты действия свертки в каждой группе затем конкатенируются вдоль размерности выходных каналов.
Таким образом, расчёт свёрточного слоя групповых свёрток с группами будет
Выходом будет конкатенация всех выходов вдоль размерности каналов:
В примере число входных и выходных каналов совпадает. Но так делать необязательно. Например, если к каждой группе применять в два раза меньшее число свёрток, чем число каналов в группе, то и итоговое выходное число каналов будет в два раза меньше.
Параметрами слоя будут ядра и смещения для каждого выходного канала в рамках каждой группы.
Таким образом, групповая свёртка эквивалентна разбиению входа вдоль каналов на K групп, применению независимых свёрток к каждой группе, а потом объединению полученных результатов вдоль размерности выходных каналов.
Групповая свёртка сокращает число вычислений и параметров примерно в S раз ценой извлечения менее выразительных признаков, поскольку признаки теперь зависят не от всех входных каналов, а лишь от каналов группы.
Поканальная свёртка
Поканальная свёртка (depthwise convolution [3]) - это частный случай групповой свёртки, когда число групп совпадает с числом входных каналов, то есть на каждый канал выделяется своя группа. Получается, что каждый канал обрабатывается независимо свёрткой с плоским ядром и смещением . Число применяемых свёрток при этом совпадает с числом входных каналов .
Объём вычислений сокращается максимально - в раз, где - число каналов, но каждый выходной признак будет зависеть только от одного своего канала.
Чтобы выходные каналы зависели не только от соответствующих входных каналов, а сразу от всех, после применения поканальной свёртки рекомендуется применить поточечную свёртку. Такая комбинация двух свёрток называется поканальной сепарабельной свёрткой (depthwise separable convolution [3]) и представляет собой частый приём при создании вычислительно эффективных свёрточных архитектур.
Сложность (в терминах операции умножения) однократного применения обычной свёртки из в каналов будет , а у поканальной сепарабельной будет лишь .
Будет ли поканальная сепарабельная свёртка эквивалентна обычной свёртке? Почему?
Визуализацию работы представленных видов свёрток можно посмотреть в [4].