Capsule Networks (CapsNet)
As redes de cápsulas (CapsNets) codificam cada parte como um vetor cujo comprimento representa a sua probabilidade e cuja direção representa a sua pose, ligadas por encaminhamento dinâmico.
Redes de cápsulas (CapsNets) são redes neurais formadas por cápsulas, pequenos grupos de neurônios cuja saída é um vetor, e não um único número. O comprimento do vetor de uma cápsula representa a probabilidade de uma entidade, como um dígito, um olho ou uma roda, estar presente; sua direção codifica os parâmetros de instanciação dessa entidade: posição, tamanho, orientação, espessura do traço e outras propriedades de pose e deformação. Geoffrey Hinton, Alex Krizhevsky e Sida Wang introduziram as cápsulas em um artigo de 2011 sobre autocodificadores transformadores, e Sara Sabour, Nicholas Frosst e Hinton as transformaram em um classificador funcional em Roteamento Dinâmico entre Cápsulas, apresentado no NIPS 2017, que conecta cápsulas em camadas sucessivas por meio de um algoritmo iterativo chamado roteamento por concordância.
Por que as cápsulas substituem o max pooling#
Uma rede neural convolucional (CNN) detecta características com ativações escalares e geralmente reduz seus mapas de características por max pooling, que mantém a resposta mais forte de cada janela e descarta sua localização dentro dela. Isso torna a detecção tolerante a pequenos deslocamentos, mas uma rede que apenas verifica se as partes estão presentes pode aceitar um rosto com a boca acima dos olhos, o chamado problema de Picasso. Hinton defendeu a equivariância em vez da invariância: quando um objeto se move ou gira, o vetor da cápsula deve girar junto com ele, enquanto seu comprimento — a probabilidade de o objeto existir — permanece igual. Cápsulas que aprendem o ponto de vista dessa forma precisam de menos aumento de dados do que uma CNN para reconhecer objetos de novos ângulos.
O Ultralytics YOLO26 mantém as posições dos objetos sem cápsulas: cinco convoluções de stride 2 reduzem a entrada à resolução de 1/32, e seu único bloco de max pooling, o SPPF, aplica pooling com stride 1 e uma janela 5 x 5 três vezes seguidas, ampliando o campo receptivo sem reduzir a grade usada pela cabeça de detecção para fazer previsões.
Como funciona o roteamento dinâmico#
Cada cápsula de uma camada inferior multiplica sua saída por uma matriz de pesos aprendida para prever a saída de cada cápsula da camada acima. O roteamento decide então quanto da saída de cada cápsula filha chega a cada cápsula pai. Um softmax sobre os logits de roteamento, que começam em zero, produz coeficientes de acoplamento que dividem a saída de cada filha entre os pais. Cada pai soma as previsões ponderadas por esses coeficientes e aplica a função squash, que mantém a direção do vetor e mapeia seu comprimento para o intervalo de 0 a 1. O produto escalar entre cada previsão e a nova saída do pai é adicionado ao logit, fazendo com que as filhas enviem mais de sua saída aos pais cujo estado elas previram:
import torch
torch.manual_seed(0)
# 6 cápsulas filhas predizem cada uma uma pose 8D para 2 cápsulas pai
predictions = 0.2 * torch.randn(6, 2, 8)
pose = 0.5 * torch.randn(8)
predictions[:4, 0] = pose + 0.05 * torch.randn(4, 8) # as filhas 0-3 concordam com o pai 0
logits = torch.zeros(6, 2)
for _ in range(3): # roteamento por concordância, 3 iterações como no artigo
coupling = logits.softmax(dim=1) # cada filha divide seu voto entre os pais
s = (coupling.unsqueeze(-1) * predictions).sum(dim=0)
squared = s.square().sum(dim=-1, keepdim=True)
parents = squared / (1 + squared) * s / squared.sqrt() # squash: comprimento no intervalo [0, 1)
logits = logits + (predictions * parents).sum(dim=-1) # a concordância aumenta o logit
print(coupling[:, 0].round(decimals=2))
print(parents.norm(dim=-1).round(decimals=2))Ele imprime tensor([0.9700, 0.9700, 0.9700, 0.9700, 0.5700, 0.4700]) e tensor([0.9800, 0.1500]). Após três iterações, as quatro filhas que concordam enviam 97% de sua saída ao pai 0; as outras duas mantêm uma divisão quase igual, e o comprimento do vetor do pai 0 chega a 0.98, enquanto o do pai 1, que recebeu apenas votos dispersos, fica em 0.15. O roteamento se parece com o mecanismo de atenção de um Transformer executado na direção oposta: o softmax é aplicado aos pais que uma filha poderia alimentar, então os pais competem pela saída de cada filha.
O CapsNet de 2017 e seus resultados#
A rede original é pouco profunda: uma convolução com 256 kernels de tamanho 9 x 9 alimenta a PrimaryCaps, uma camada de cápsulas convolucional que transforma um dígito 28 x 28 em 32 x 6 x 6 = 1.152 cápsulas de oito dimensões; o roteamento as conecta à DigitCaps, que contém uma cápsula de 16 dimensões por classe. O treinamento combina uma função de perda de margem aplicada aos comprimentos das cápsulas, que os eleva acima de 0.9 para os dígitos presentes e os reduz abaixo de 0.1 para os demais, com um decodificador que reconstrói a imagem a partir da cápsula do dígito correto: um termo de regularização no estilo de autocodificador, reduzido por um fator de 0.0005. Alterar uma das 16 dimensões e decodificar o resultado modifica uma única propriedade, como escala, espessura do traço, inclinação ou largura, o que facilita inspecionar as saídas das cápsulas em comparação com as ativações de CNN — um objetivo compartilhado pela IA explicável.
Com 8,2 milhões de parâmetros, contra 35,4 milhões em uma CNN de referência, o CapsNet alcançou erro de teste de 0,25% no MNIST, em comparação com 0,39% para a referência, e 5,2% contra 8,1% no MultiMNIST, pares de dígitos cujas caixas delimitadoras se sobrepõem em média 80%. Treinado apenas com dígitos do MNIST deslocados em até 2 pixels, obteve 79% no affNIST, que contém os mesmos dígitos com transformações afins aleatórias, enquanto uma CNN com quantidade semelhante de parâmetros obteve 66%. No CIFAR-10, um ensemble de sete CapsNets alcançou erro de 10,6%, aproximadamente o resultado das CNNs quando aplicadas pela primeira vez a esse conjunto de dados; os autores atribuíram a diferença à tentativa das cápsulas de levar em conta fundos desordenados.
Limitações e modelos de cápsulas posteriores#
O roteamento executa várias iterações para cada par de cápsulas filhas e pai, então o custo computacional e o uso de memória crescem rapidamente com o tamanho da imagem e a quantidade de classes; as redes de cápsulas nunca igualaram CNNs ou Transformers de visão em grandes benchmarks de classificação de imagens, como o ImageNet. Pesquisadores as aplicaram à análise de imagens médicas, por exemplo, para classificar tipos de tumores cerebrais em exames de ressonância magnética, onde os conjuntos de treinamento são pequenos.
As cápsulas matriciais com roteamento EM, de Hinton, Sabour e Frosst, apresentadas na ICLR 2018, substituíram vetores de pose por matrizes de pose 4 x 4 e usaram expectativa-maximização no roteamento; no benchmark smallNORB de objetos de brinquedo fotografados de muitos pontos de vista, reduziram os erros de teste em 45% em relação ao estado da arte anterior e resistiram melhor a ataques adversariais de caixa branca do que uma CNN de referência. Em 2019, vieram os autocodificadores de cápsulas empilhados, que aprenderam cápsulas sem rótulos; em 2021, a proposta GLOM de Hinton representou as mesmas hierarquias de parte e todo como ilhas de vetores de embedding concordantes, sem usar roteamento dinâmico.










