Перейти к основному содержимому

Пулинг

Операция пулинга

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

Максимизирующий пулинг (max pooling) агрегирует по области, возвращая максимальный элемент, как показано ниже для области из 3х соседних элементов:

Усредняющий пулинг (average pooling) агрегирует по области, возвращая среднее значение элементов области, как показано ниже тоже для области из 3х соседних элементов:

Если пулинг применяется к нескольким каналам (результатам действия нескольких свёрток), то он применяется независимо для каждого канала:

Гиперпараметры

У пулинга отсутствуют настраиваемые параметры, но есть два гиперпараметра:

  • размер области, по которой производится агрегация (называется также размером ядра или kernel size). В примерах выше размер ядра был 3.

  • сдвиг агрегируемой области для получения следующего выходного значения (stride). В примерах выше сдвиг также был 3, и, как правило, его всегда выбирают равным размеру ядра.

Интуиция и преимущества

Пусть свёртка, к результатам которой применяется пулинг, извлекает некоторый признак (например, наличие резкого увеличения значений).

Максимизирующий пулинг извлекает признак присутствия исходного признака где-либо в агрегируемой области.

Усредняющий пулинг извлекает признак, равный по смысле средней представленности исходного (свёрточного признака) в усредняемой области.

Обрабатываемые последовательности обычно имеют высокую размерность и пулинг используется для того, чтобы эту размерность снизить. Например, пулинг с размером ядра 4 и сдвигом 4 уменьшит размерность выхода в 4 раза.

Более сложные пулинги

Существуют и более сложные способы агрегации. Например, в качестве результата пулинга можно возвращать взвешенного усреднения максимизирующего и усредняющего пулинга, а параметр усреднения настраивать вместе с остальными весами сети.

При обработке последовательностей существуют пулинги, которые возвращают не один, а сразу несколько значений агрегации. Например, top-1 и top-2 элемента по величине.

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

где 1.(3)=1.333...., а 1.(6)=1.666....

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

Глобальный пулинг

Свёртка и пулинг, изученные ранее, переводят входную последовательность в выходную последовательность. Часто возникает необходимость перевести последовательность в вектор фиксированной длины, независимо от длины входной последовательности. Для этих целей используются глобальный и пирамидальный пулинг.

Глобальный пулинг (global pooling) применяет агрегирующую операцию (усреднение или взятие максимума) по всем значениям для каждого канала. Таким образом KK свёрток предыдущего слоя генерируют KK последовательностей, для каждой из которых ищется агрегация, в результате чего для входной последовательности произвольной длины получаем её представление KK-мерным вектором.

Этот вид пулинга проиллюстрирован ниже для двух каналов и максимизирующего глобального пулинга.

Пирамидальный пулинг

Глобальный пулинг успешно справляется с переводом последовательности произвольной длины в KK-мерный вектор. Однако при агрегации по всей длине последовательности полностью теряется информация, в каких именно участках достигались максимальные значения. Отчасти сохранить эту информацию позволяет пирамидальный пулинг, при котором последовательность делится на K1,K2,...KpK_1,K_2,...K_p блоков и агрегация производится как глобальная, так и в рамках каждого блока, в результате чего каждый канал кодируется 1+K1+K2+...+Kp1+K_1+K_2+...+K_p значениями для каждого из SS каналов, в результате чего входная последовательность произвольной длины кодируется S(1+K1+K2+...+Kp)S(1+K_1+K_2+...+K_p)-мерным вектором.

Ниже приведена работа максимизирующего пирамидального пулинга для 2х каналов, K1=2,K2=4K_1=2,K_2=4: