Capsule Networks (CapsNet)
Kapselnetzwerke (CapsNets) kodieren jeden Teil als Vektor, dessen Länge seiner Wahrscheinlichkeit und dessen Richtung seiner Pose entspricht. Die Teile sind durch dynamisches Routing miteinander verbunden.
Kapselnetzwerke (CapsNets) sind neuronale Netze, die aus Kapseln aufgebaut sind: kleinen Gruppen von Neuronen, deren Ausgabe ein Vektor statt einer einzelnen Zahl ist. Die Länge des Kapselvektors gibt die Wahrscheinlichkeit an, dass eine Entität wie eine Ziffer, ein Auge oder ein Rad vorhanden ist. Seine Richtung codiert die Parameter der konkreten Ausprägung dieser Entität: Position, Größe, Ausrichtung, Strichstärke und weitere Eigenschaften der Pose und Verformung. Geoffrey Hinton, Alex Krizhevsky und Sida Wang stellten Kapseln 2011 in einer Arbeit zu transformierenden Autoencodern vor. Sara Sabour, Nicholas Frosst und Hinton entwickelten daraus einen funktionierenden Klassifikator in Dynamic Routing Between Capsules, vorgestellt auf der NIPS 2017. Die Arbeit verbindet Kapseln aufeinanderfolgender Schichten mit einem iterativen Algorithmus namens Routing durch Übereinstimmung.
Warum Kapseln Max-Pooling ersetzen#
Ein Convolutional Neural Network (CNN) erkennt Merkmale anhand skalarer Aktivierungen und verkleinert seine Merkmalskarten häufig mit Max-Pooling. Dabei bleibt die stärkste Reaktion in jedem Fenster erhalten, während verloren geht, an welcher Stelle im Fenster sie auftrat. Dadurch ist die Erkennung gegenüber kleinen Verschiebungen unempfindlich. Ein Netz, das nur prüft, ob Teile vorhanden sind, kann jedoch ein Gesicht akzeptieren, bei dem sich der Mund oberhalb der Augen befindet – das sogenannte Picasso-Problem. Hinton plädierte für Äquivarianz statt Invarianz: Wenn sich ein Objekt bewegt oder dreht, sollte sich der Vektor einer Kapsel mitbewegen oder mitdrehen, während seine Länge – die Wahrscheinlichkeit, dass das Objekt existiert – gleich bleibt. Kapseln, die auf diese Weise den Blickwinkel lernen, benötigen weniger von der Datenerweiterung, mit der ein CNN Objekte aus neuen Blickwinkeln erkennen lernt.
Ultralytics YOLO26 bewahrt Objektpositionen auch ohne Kapseln: Fünf Faltungen mit Schrittweite 2 reduzieren die Eingabe auf 1/32 der Auflösung. Der einzige Max-Pooling-Block, SPPF, arbeitet mit Schrittweite 1 und wendet dreimal hintereinander ein 5 x 5 großes Fenster an. Dadurch erweitert sich das Empfangsfeld, ohne das Raster zu verkleinern, aus dem der Detektionskopf seine Vorhersagen ableitet.
Wie dynamisches Routing funktioniert#
Jede Kapsel in einer unteren Schicht multipliziert ihre Ausgabe mit einer erlernten Gewichtungsmatrix, um die Ausgabe jeder Kapsel in der darüberliegenden Schicht vorherzusagen. Beim Routing wird dann festgelegt, welcher Anteil der Ausgabe jedes untergeordneten Elements welche übergeordnete Kapsel erreicht. Ein Softmax über Routing-Logits, die anfangs null sind, ergibt Kopplungskoeffizienten, die die Ausgabe jedes untergeordneten Elements auf die übergeordneten Kapseln verteilen. Jede übergeordnete Kapsel summiert die mit diesen Koeffizienten gewichteten Vorhersagen und wendet die Squash-Funktion an. Diese behält die Richtung des Vektors bei und bildet seine Länge auf den Bereich von 0 bis 1 ab. Das Skalarprodukt zwischen jeder Vorhersage und der neuen Ausgabe der übergeordneten Kapsel wird zum Logit addiert. So senden untergeordnete Kapseln mehr ihrer Ausgabe an übergeordnete Kapseln, deren Zustand sie vorhergesagt haben:
import torch
torch.manual_seed(0)
# # 6 untergeordnete Kapseln sagen jeweils eine 8D-Pose für 2 übergeordnete Kapseln voraus
predictions = 0.2 * torch.randn(6, 2, 8)
pose = 0.5 * torch.randn(8)
predictions[:4, 0] = pose + 0.05 * torch.randn(4, 8) # # untergeordnete Kapseln 0–3 stimmen mit übergeordneter Kapsel 0 überein
logits = torch.zeros(6, 2)
for _ in range(3): # # Routing durch Übereinstimmung, 3 Iterationen wie in der Arbeit
coupling = logits.softmax(dim=1) # # jede untergeordnete Kapsel teilt ihre Stimme auf die übergeordneten Kapseln auf
s = (coupling.unsqueeze(-1) * predictions).sum(dim=0)
squared = s.square().sum(dim=-1, keepdim=True)
parents = squared / (1 + squared) * s / squared.sqrt() # # Squash: Länge im Bereich [0, 1)
logits = logits + (predictions * parents).sum(dim=-1) # # Übereinstimmung erhöht den Logit
print(coupling[:, 0].round(decimals=2))
print(parents.norm(dim=-1).round(decimals=2))Es gibt tensor([0.9700, 0.9700, 0.9700, 0.9700, 0.5700, 0.4700]) und tensor([0.9800, 0.1500]) aus. Nach drei Iterationen senden die vier übereinstimmenden untergeordneten Kapseln 97 % ihrer Ausgabe an die übergeordnete Kapsel 0. Die beiden anderen bleiben nahe an einer gleichmäßigen Aufteilung, und die Länge des Vektors der übergeordneten Kapsel 0 erreicht 0.98, während Kapsel 1, die nur vereinzelte Stimmen erhielt, bei 0.15 bleibt. Das Routing ähnelt dem Attention-Mechanismus eines Transformers, der in umgekehrter Richtung ausgeführt wird: Der Softmax wird über die übergeordneten Kapseln berechnet, die eine untergeordnete Kapsel versorgen könnte, sodass die übergeordneten Kapseln um die Ausgabe jeder untergeordneten Kapsel konkurrieren.
CapsNet von 2017 und seine Ergebnisse#
Das ursprüngliche Netzwerk ist flach aufgebaut: Eine Faltung mit 256 Kerneln der Größe 9 x 9 speist PrimaryCaps, eine Faltungsschicht für Kapseln, die eine Ziffer der Größe 28 x 28 in 32 x 6 x 6 = 1.152 achtdimensionale Kapseln umwandelt. Das Routing verbindet sie mit DigitCaps, einer 16-dimensionalen Kapsel pro Klasse. Das Training kombiniert eine Margin-Verlustfunktion für die Kapsellängen, die die Länge bei vorhandenen Ziffern über 0.9 und bei den übrigen unter 0.1 treibt, mit einem Decoder, der das Bild anhand der richtigen Ziffernkapsel rekonstruiert – einem Autoencoder-ähnlichen Regularisierungsterm, der mit 0.0005 skaliert wird. Wird eine der 16 Dimensionen verändert und das Ergebnis decodiert, ändert sich eine einzelne Eigenschaft wie Maßstab, Strichstärke, Schräglage oder Breite. Dadurch lassen sich Kapselausgaben leichter untersuchen als CNN-Aktivierungen – ein Ziel, das auch die erklärbare KI verfolgt.
Mit 8,2 Millionen Parametern gegenüber 35,4 Millionen bei einem CNN als Basis erreichte CapsNet auf MNIST einen Testfehler von 0,25 %, verglichen mit 0,39 % beim Basis-CNN. Auf MultiMNIST erzielte es 5,2 % gegenüber 8,1 %. Bei MultiMNIST überlappen sich die Begrenzungsrahmen von Ziffernpaaren durchschnittlich zu 80 %. CapsNet wurde nur mit MNIST-Ziffern trainiert, die um bis zu 2 Pixel verschoben waren, erreichte auf affNIST jedoch 79 % bei denselben Ziffern unter zufälligen affinen Transformationen; ein CNN mit ähnlicher Parameterzahl kam auf 66 %. Auf CIFAR-10 erzielte ein Ensemble aus sieben CapsNets einen Fehler von 10,6 %, ungefähr so viel wie CNNs bei ihren ersten Anwendungen auf diesen Datensatz. Die Autoren führten den Abstand darauf zurück, dass Kapseln mit unübersichtlichen Hintergründen Schwierigkeiten hatten.
Grenzen und spätere Kapselmodelle#
Das Routing durchläuft mehrere Iterationen für jedes Paar aus untergeordneter und übergeordneter Kapsel. Dadurch wachsen Rechenaufwand und Speicherbedarf schnell mit Bildgröße und Klassenzahl. Kapselnetzwerke konnten bei großen Bildklassifizierungs-Benchmarks wie ImageNet nie mit CNNs oder Vision Transformers gleichziehen. Forschende haben sie in der medizinischen Bildanalyse eingesetzt, etwa um Hirntumortypen auf MRT-Aufnahmen zu klassifizieren, wo die Trainingsdatensätze klein sind.
Matrixkapseln mit EM-Routing von Hinton, Sabour und Frosst auf der ICLR 2018 ersetzten Pose-Vektoren durch 4 x 4-Posematrizen und nutzten Erwartungsmaximierung für das Routing. Beim smallNORB-Benchmark mit Spielzeugobjekten, die aus vielen Blickwinkeln fotografiert wurden, senkten sie die Testfehler gegenüber dem damaligen Spitzenwert um 45 % und widerstanden White-Box-Angriffen mit adversarialen Beispielen besser als ein CNN als Basis. 2019 folgten gestapelte Kapsel-Autoencoder, die Kapseln ohne Labels lernten. Hintons GLOM-Vorschlag von 2021 bildet dieselben Teil-Ganzes-Hierarchien als Gruppen übereinstimmender Embedding-Vektoren ab – ganz ohne dynamisches Routing.










