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

Пулинг для последовательносей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Глобальный пулинг (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. Глобальный пулинг применяется сначала ко всей последовательности, затем к каждой из её половинок, а потом к каждой из её четвертинок: