Pooling é uma operação de redução de dimensionalidade usada em redes neurais, mais proeminentemente em redes neurais convolucionais (CNNs). Uma camada de pooling agrega informações dispersas em muitos vetores em menos vetores, reduzendo a redundância e a quantidade de computação e memória necessárias. Também aumenta o campo receptivo dos neurones em camadas posteriores, tornando o modelo mais robusto a pequenas variações na entrada. O pooling é tipicamente aplicado após camadas convolucionais para reduzir progressivamente as dimensões espaciais dos mapas de características, preservando as informações mais salientes.
Em uma CNN bidimensional, uma camada de pooling toma um tensor de entrada \(x \in \mathbb{R}^{H \times W \times C}\), onde \(H\) é a altura, \(W\) é a largura e \(C\) é o número de canais, e produz um tensor \(y \in \mathbb{R}^{H' \times W' \times C'}\). A operação é controlada por dois parâmetros: tamanho do filtro (ou tamanho do kernel) \(f\) e stride \(s\). Em alguns casos, tamanhos de filtro e strides separados são usados para direções horizontal e vertical, denotados \(f_H, f_W, s_H, s_W\). O campo receptivo de uma entrada de saída \(y_{i,j,c}\) é o conjunto de entradas de entrada que podem afetá-la, tipicamente uma janela de tamanho \(f \times f\) centrada em uma posição determinada pelo stride.
Max Pooling
Max pooling é a variante de pooling mais comum. Selecciona o valor máximo de cada janela da entrada. Formalmente, para um tamanho de filtro \(f\) e stride \(s\), a saída na posição \((i,j,c)\) é definida como:
\[\mathrm{MaxPool}(x|f,s)_{i,j,c} = \max(x_{is:is+f-1, js:js+f-1, c})\]
onde a notação \(is:is+f-1\) indica o intervalo de índices de \(is\) a \(is+f-1\). Se os strides horizontal e vertical diferem, a fórmula generaliza a \(x_{i s_H : i s_H + f_H - 1, j s_W : j s_W + f_W - 1, c}\). Max pooling é eficaz em preservar a ativación mais forte em cada região local, o que ajuda a retener características como bordes ou texturas, descartando detalhes menos importantes.
Average Pooling
Average pooling calcula a média de todos os valores em cada janela em vez do máximo. É às vezes usado no lugar de max pooling, particularmente nas camadas finais de uma rede antes de uma saída de classificação. Average pooling suaviza o mapa de características, o que pode reduzir o overfitting, mas pode perder características nítidas. Global average pooling, um caso especial onde o tamanho do filtro iguala toda a dimensão espacial, produz um único valor por canal e é frequentemente usado para substituir camadas totalmente conectadas em arquiteturas como desenhos de redes do final dos anos 2010.
Papel em Arquitecturas Convolucionais
Camadas de pooling são integrais a muitas arquitecturas CNN clássicas. Por exemplo, o modelo AlexNet, introducido em 2012, usou max pooling após suas primeira, segunda e quinta camadas convolucionais. As redes VGG, desenvolvidas em 2014, empregaram max pooling com um tamanho de filtro de 2 e stride 2 após cada bloco de camadas convolucionais. Estes desenhos ajudaram a reduzir o tamanho espacial dos mapas de características de dimensões como 224x224 até 7x7 antes da classificação, permitendo redes mais profundas com menos parâmetros.
Alternativas e Uso Moderno
Em arquitecturas modernas, o pooling é às vezes substituído por convoluciones com stride, que reducen a dimensionalidade usando uma convolución com stride maior que 1. Esta abordagem, usada em modelos como modelos generativos e certos sistemas de visão baseados em transformers, permite que a rede aprenda a operação de redução de dimensionalidade em vez de usar uma regra fixa. No entanto, o pooling permanece comum em muitas implementações práticas devido à sua simplicidade e eficacia. Em arquitecturas transformer, o pooling é menos central, mas global average pooling ainda é usado em alguns vision transformers para cabeças de classificação.
Propiedades Teóricas
Pooling proporciona invariancia à traducción em um grau limitado: porque agrega sobre uma janela local, pequenos deslocamentos na entrada podem produzir a mesma saída se o valor máximo ou médio permanece dentro da janela. Esta propriedade é útil para tarefas como reconhecimento de objetos, onde a posição exata de uma característica é menos importante que sua presença. O aumento no campo receptivo significa que neurones em camadas más profundas podem responder a regiões maiores da entrada, permitendo que a rede capture padrões hierárquicos. Pooling também reduz o custo computacional de camadas subsequentes, diminuendo o número de parâmetros e operações, o que é crítico para o treinamento em hardware como GPUs e aceleradores.