Pooling ist eine Downsampling-Operation, die in neuralen Netzen verwendet wird, insbesondere in Convolutional Neural Networks (CNNs). Eine Pooling-Schicht aggregiert Informationen, die über viele Vektoren verteilt sind, in weniger Vektoren und reduziert so Redundanz sowie den benötigten Rechen- und Speicheraufwand. Sie erhöht außerdem das rezeptive Feld von Neuronen in späteren Schichten, wodurch das Modell robuster gegenüber kleinen Variationen in der Eingabe wird. Pooling wird typischerweise nach convolutional Schichten angewendet, um die räumlichen Dimensionen von Feature-Maps schrittweise zu reduzieren, während die wichtigsten Informationen erhalten bleiben.
In einem 2-dimensionalen CNN nimmt eine Pooling-Schicht einen Eingabe-Tensor \(x \in \mathbb{R}^{H \times W \times C}\) entgegen, wobei \(H\) die Höhe, \(W\) die Breite und \(C\) die Anzahl der Kanäle ist, und gibt einen Tensor \(y \in \mathbb{R}^{H' \times W' \times C'}\) aus. Die Operation wird durch zwei Parameter gesteuert: Filtergröße (oder Kernelgröße) \(f\) und Schrittweite (Stride) \(s\). In einigen Fällen werden separate Filtergrößen und Schrittweiten für horizontale und vertikale Richtungen verwendet, bezeichnet als \(f_H, f_W, s_H, s_W\). Das rezeptive Feld eines Ausgabeeintrags \(y_{i,j,c}\) ist die Menge der Eingabeeinträge, die ihn beeinflussen können, typischerweise ein Fenster der Größe \(f \times f\), das an einer durch die Schrittweite bestimmten Position zentriert ist.
Max Pooling
Max Pooling ist die häufigste Pooling-Variante. Es wählt den Maximalwert aus jedem Fenster der Eingabe aus. Formal ist der Ausgabewert an Position \((i,j,c)\) für eine Filtergröße \(f\) und Schrittweite \(s\) definiert als:
\[\mathrm{MaxPool}(x|f,s)_{i,j,c} = \max(x_{is:is+f-1, js:js+f-1, c})\]
wobei die Notation \(is:is+f-1\) den Indexbereich von \(is\) bis \(is+f-1\) angibt. Wenn sich horizontale und vertikale Schrittweiten unterscheiden, verallgemeinert sich die Formel zu \(x_{i s_H : i s_H + f_H - 1, j s_W : j s_W + f_W - 1, c}\). Max Pooling ist effektiv, um die stärkste Aktivierung in jeder lokalen Region zu erhalten, was hilft, Merkmale wie Kanten oder Texturen beizubehalten, während weniger wichtige Details verworfen werden.
Average Pooling
Average Pooling berechnet den Mittelwert aller Werte in jedem Fenster anstelle des Maximums. Es wird manchmal anstelle von Max Pooling verwendet, insbesondere in den letzten Schichten eines Netzes vor einer Klassifikationsausgabe. Average Pooling glättet die Feature-Map, was Überanpassung reduzieren kann, aber scharfe Merkmale verlieren kann. Global Average Pooling, ein Sonderfall, bei dem die Filtergröße der gesamten räumlichen Dimension entspricht, gibt einen einzelnen Wert pro Kanal aus und wird oft verwendet, um vollständig verbundene Schichten in Architekturen wie Netzwerkdesigns aus den späten 2010er Jahren zu ersetzen.
Rolle in Convolutional Architekturen
Pooling-Schichten sind integraler Bestandteil vieler klassischer CNN-Architekturen. Zum Beispiel verwendete das AlexNet-Modell, eingeführt 2012, Max Pooling nach seinen ersten, zweiten und fünften convolutional Schichten. Die VGG-Netze, entwickelt 2014, verwendeten Max Pooling mit einer Filtergröße von 2 und Schrittweite 2 nach jedem Block von convolutional Schichten. Diese Designs halfen, die räumliche Größe von Feature-Maps von Dimensionen wie 224x224 auf 7x7 vor der Klassifikation zu reduzieren, was tiefere Netze mit weniger Parametern ermöglichte.
Alternativen und moderne Verwendung
In modernen Architekturen wird Pooling manchmal durch gestridete Faltungen ersetzt, die durch eine Faltung mit einer Schrittweite größer als 1 herunterabtasten. Dieser Ansatz, der in Modellen wie generativen Modellen und bestimmten transformer-basierten Vision-Systemen verwendet wird, ermöglicht es dem Netz, die Downsampling-Operation zu lernen, anstatt eine feste Regel zu verwenden. Pooling bleibt jedoch in vielen praktischen Implementierungen aufgrund seiner Einfachheit und Effektivität verbreitet. In Transformer-Architekturen ist Pooling weniger zentral, aber Global Average Pooling wird in einigen Vision-Transformern für Klassifikationsköpfe weiterhin verwendet.
Theoretische Eigenschaften
Pooling bietet Translationsinvarianz in begrenztem Maße: Da es über ein lokales Fenster aggregiert, können kleine Verschiebungen in der Eingabe dieselbe Ausgabe erzeugen, wenn der Maximal- oder Durchschnittswert innerhalb des Fensters bleibt. Diese Eigenschaft ist nützlich für Aufgaben wie Objekterkennung, bei denen die genaue Position eines Merkmals weniger wichtig ist als seine Präsenz. Die Vergrößerung des rezeptiven Feldes bedeutet, dass Neuronen in tieferen Schichten auf größere Regionen der Eingabe reagieren können, was es dem Netz ermöglicht, hierarchische Muster zu erfassen. Pooling reduziert auch die Rechenkosten nachfolgender Schichten, indem es die Anzahl der Parameter und Operationen verringert, was für das Training auf Hardware wie GPUs und Beschleunigern entscheidend ist.