Capsule Networks (CapsNet)
Kapsül ağları (CapsNets), her parçayı uzunluğu olasılığını, yönü ise pozunu belirten bir vektör olarak kodlar; parçaları dinamik yönlendirmeyle ilişkilendirir.
Kapsül ağları (CapsNets), çıktısı tek bir sayı yerine vektör olan küçük nöron gruplarından, yani kapsüllerden oluşan sinir ağlarıdır. Bir kapsülün vektörünün uzunluğu, rakam, göz veya tekerlek gibi bir varlığın mevcut olma olasılığını; yönüyse o varlığın konum, boyut, yönelim, çizgi kalınlığı ve poz ile deformasyona ilişkin diğer özelliklerden oluşan gerçekleşme parametrelerini kodlar. Geoffrey Hinton, Alex Krizhevsky ve Sida Wang kapsülleri 2011'de otomatik kodlayıcıları dönüştürme üzerine bir makalede tanıttı; Sara Sabour, Nicholas Frosst ve Hinton ise 2017 NIPS'te sunulan Kapsüller Arasında Dinamik Yönlendirme makalesinde onları çalışan bir sınıflandırıcıya dönüştürdü. Bu çalışma, ardışık katmanlardaki kapsülleri uzlaşmaya dayalı yönlendirme adlı yinelemeli bir algoritmayla birbirine bağlar.
Kapsüller Maksimum Havuzlamanın Yerini Neden Alır#
Evrişimli sinir ağı (CNN), özellikleri skaler etkinleşmelerle algılar ve çoğunlukla özellik haritalarını maksimum havuzlamayla küçültür; bu işlem her penceredeki en güçlü yanıtı tutar, ancak bunun pencerenin neresinde gerçekleştiğini atar. Bu, algılamayı küçük kaymalara karşı toleranslı kılar; ancak yalnızca parçaların var olup olmadığını denetleyen bir ağ, ağzı gözlerin üstünde olan bir yüzü, yani Picasso sorununu kabul edebilir. Hinton, değişmezlik yerine eşdeğişmezliği savundu: bir nesne hareket ettiğinde veya döndüğünde kapsülün vektörü de onunla birlikte dönmeli, ancak nesnenin var olma olasılığını belirten uzunluğu aynı kalmalıdır. Bakış açısını bu şekilde öğrenen kapsüller, bir CNN'in nesneleri yeni açılardan tanımak için kullandığı veri artırma yöntemine daha az ihtiyaç duyar.
Ultralytics YOLO26, nesne konumlarını kapsüller olmadan korur: beş adet 2 adımlı evrişim, girdisinin çözünürlüğünü 1/32'ye düşürür; tek maksimum havuzlama bloğu olan SPPF ise 5 x 5 pencerede 1 adımlı havuzlamayı arka arkaya üç kez uygular. Böylece algılama başlığının tahmin yaptığı ızgarayı küçültmeden alıcı alanı genişletir.
Dinamik Yönlendirme Nasıl Çalışır#
Alt katmandaki her kapsül, çıktısını öğrenilmiş bir ağırlık matrisiyle çarparak üst katmandaki her kapsülün çıktısını tahmin eder. Yönlendirme daha sonra her alt kapsülün çıktısının ne kadarının üst kapsüllere ulaşacağına karar verir. Sıfırdan başlayan yönlendirme logitleri üzerindeki bir softmax, her alt kapsülün çıktısını üst kapsüllere bölen bağlantı katsayılarını verir. Her üst kapsül, tahminleri bu katsayılarla ağırlıklandırıp toplar ve vektörün yönünü korurken uzunluğunu 0 ile 1 aralığına eşleyen sıkıştırma işlevini uygular. Her tahmin ile üst kapsülün yeni çıktısı arasındaki nokta çarpımı logite eklenir; böylece alt kapsüller, durumunu tahmin ettikleri üst kapsüllere çıktılarının daha büyük bir bölümünü gönderir:
import torch
torch.manual_seed(0)
# # 6 alt kapsül, 2 üst kapsülün her biri için 8 boyutlu bir poz tahmini yapar
predictions = 0.2 * torch.randn(6, 2, 8)
pose = 0.5 * torch.randn(8)
predictions[:4, 0] = pose + 0.05 * torch.randn(4, 8) # # 0-3 numaralı alt kapsüller, 0 numaralı üst kapsülle uzlaşır
logits = torch.zeros(6, 2)
for _ in range(3): # # Makaledeki gibi 3 yinelemeli uzlaşmaya dayalı yönlendirme
coupling = logits.softmax(dim=1) # # Her alt kapsül oyunu üst kapsüller arasında paylaştırır
s = (coupling.unsqueeze(-1) * predictions).sum(dim=0)
squared = s.square().sum(dim=-1, keepdim=True)
parents = squared / (1 + squared) * s / squared.sqrt() # # Sıkıştırma: uzunluk [0, 1) aralığında
logits = logits + (predictions * parents).sum(dim=-1) # # Uzlaşma logiti artırır
print(coupling[:, 0].round(decimals=2))
print(parents.norm(dim=-1).round(decimals=2))tensor([0.9700, 0.9700, 0.9700, 0.9700, 0.5700, 0.4700]) ve tensor([0.9800, 0.1500]) çıktısını verir. Üç yinelemeden sonra uzlaşan dört alt kapsül, çıktılarının %97'sini 0 numaralı üst kapsüle gönderir; diğer iki alt kapsül çıktısını neredeyse eşit paylaşır. Yalnızca dağınık oylar alan 1 numaralı üst kapsülün vektör uzunluğu 0.15'te kalırken 0 numaralı üst kapsülün vektör uzunluğu 0.98'e ulaşır. Yönlendirme, ters yönde çalıştırılan bir dönüştürücünün dikkat mekanizmasına benzer: softmax, bir alt kapsülün besleyebileceği üst kapsüller üzerinde çalışır; böylece üst kapsüller, her alt kapsülün çıktısı için yarışır.
2017 CapsNet'i ve Sonuçları#
Özgün ağ sığdır: 9 x 9 boyutunda 256 çekirdek içeren bir evrişim, 28 x 28 boyutundaki bir rakamı 32 x 6 x 6 = 1.152 adet sekiz boyutlu kapsüle dönüştüren evrişimli bir kapsül katmanı olan PrimaryCaps'i besler; yönlendirme de bunları her sınıf için bir adet 16 boyutlu kapsül içeren DigitCaps'e bağlar. Eğitim; mevcut rakamlar için kapsül uzunluğunu 0,9'un üzerine, diğerleri içinse 0,1'in altına çıkaran kapsül uzunluklarına dayalı bir marj kayıp işlevini, doğru rakam kapsülünden görüntüyü yeniden oluşturan bir kod çözücüyle birleştirir. Bu kod çözücü, 0.0005 ile ölçeklendirilmiş, otomatik kodlayıcı tarzı bir düzenlileştirme terimidir. 16 boyuttan birini değiştirip sonucu çözmek; ölçek, çizgi kalınlığı, eğiklik veya genişlik gibi tek bir özelliği değiştirir. Böylece kapsül çıktıları, açıklanabilir yapay zekâ ile ortak bir hedef doğrultusunda, CNN etkinleşmelerine kıyasla daha kolay incelenebilir.
Temel bir CNN'deki 35,4 milyona karşılık 8,2 milyon parametreyle CapsNet, MNIST testinde temel modelin %0,39'luk hata oranına kıyasla %0,25 hata oranına ulaştı; sınırlayıcı kutuları ortalama %80 oranında üst üste binen rakam çiftlerinden oluşan MultiMNIST'te ise oranlar sırasıyla %5,2 ve %8,1 oldu. Yalnızca en fazla 2 piksel kaydırılmış MNIST rakamlarıyla eğitildiğinde, aynı rakamların rastgele afin dönüşümlerinden oluşan affNIST'te %79 puan aldı; benzer sayıda parametreye sahip CNN ise %66 puan aldı. CIFAR-10 üzerinde yedi CapsNet'ten oluşan bir topluluk %10,6 hata oranına ulaştı; bu, CNN'lerin veri kümesine ilk uygulandığı zamanki sonuçlarla yaklaşık aynıydı. Yazarlar aradaki farkı, kapsüllerin karmaşık arka planlarla başa çıkmaya çalışmasına bağladı.
Sınırlamalar ve Sonraki Kapsül Modelleri#
Yönlendirme, her alt ve üst kapsül çifti üzerinde birkaç yineleme çalıştırır; bu nedenle işlem ve bellek gereksinimleri görüntü boyutu ve sınıf sayısıyla hızla artar. Kapsül ağları, ImageNet gibi büyük görüntü sınıflandırma kıyaslamalarında CNN'lerin veya görüntü dönüştürücülerinin düzeyine hiçbir zaman ulaşamadı. Araştırmacılar kapsülleri, örneğin küçük eğitim kümelerinin bulunduğu MRI taramalarından beyin tümörü türlerini sınıflandırmak için tıbbi görüntü analizinde kullandı.
Hinton, Sabour ve Frosst'un ICLR 2018'de sunduğu EM yönlendirmeli matris kapsüller, poz vektörlerini 4 x 4 poz matrisleriyle değiştirdi ve beklenti-maksimizasyon yöntemiyle yönlendirme yaptı. Farklı bakış açılarından fotoğraflanan oyuncak nesnelerin yer aldığı smallNORB kıyaslamasında test hatalarını önceki en iyi sonuca kıyasla %45 azalttı ve temel CNN'e göre beyaz kutu karşıt saldırılarına daha iyi dayandı. 2019'da, etiket kullanmadan kapsülleri öğrenen yığılmış kapsül otomatik kodlayıcılar geldi. Hinton'ın 2021 tarihli GLOM önerisi ise aynı parça-bütün hiyerarşilerini, tamamen dinamik yönlendirmeden yoksun, üzerinde uzlaşılan gömme vektör adacıkları olarak temsil eder.










