Normalizing Flows
Normalleştirici akışlar, basit gürültüyü tersinir katmanlarla karmaşık verilere dönüştürür; böylece tek bir model hem örnekleyebilir hem de kesin olabilirlikleri hesaplayabilir. Nasıl çalıştıklarını öğren.
Normalleştirici akış, basit bir temel dağılımı (genellikle standart bir Gauss dağılımını) tersinir ve türevlenebilir fonksiyonlar dizisi aracılığıyla karmaşık bir veri dağılımına dönüştüren bir üretken yapay zekâ modelidir. Her katman geriye doğru çalıştırılabildiği ve hacim üzerindeki etkisi tam olarak hesaplanabildiği için tek bir akış, çoğu üretken modelin birlikte yapamadığı iki işi yapar: katmanlardan ileri yönde gürültü geçirerek yeni örnekler üretir ve gözlemlenen bir veri noktasını temel dağılıma doğru geriye geçirerek tam olabilirliğini hesaplar. Esteban Tabak ve çalışma arkadaşları, yoğunluk kestirimi için akışları 2010 ve 2013'te formüle etti; DeepMind'dan Danilo Rezende ve Shakir Mohamed ise bu adı ICML 2015'teki Normalleştirici Akışlarla Varyasyonel Çıkarım çalışmasıyla derin öğrenmeye taşıdı. “Normalleştirici” ifadesi, veri dağılımını normal, yani Gauss dağılımına dönüştürmeyi anlatır ve yığın normalleştirme ile ilgisi yoktur.
Değişken Dönüşümü Formülü#
Tersinir bir f fonksiyonu, x veri noktasını z = f(x) olan bir gizil noktaya eşliyorsa, verinin log-olabilirliği log p(x) = log p_z(f(x)) + log |det J| olur. Burada J, f'nin Jakoben matrisidir; determinant ise f'nin x çevresindeki hacmi ne kadar genişletip daralttığını ölçer. D değişkenli genel bir fonksiyon için bu determinantın hesaplanması D³ mertebesinde işlem gerektirir; bu da yüz binlerce boyutlu görüntüler için çok yavaştır. Bu nedenle akış katmanları, determinantı köşegen elemanlarının çarpımından ibaret olan üçgensel Jakobenlerle tasarlanır. Bu tür birçok katmanın üst üste eklenmesi dönüşümleri birleştirir ve log-determinantlarını toplar; eğitim de eğitim verisinin log-olabilirliğini doğrudan en üst düzeye çıkarır.
RealNVP'den gelen afin eşleştirme katmanı klasik tasarımdır. Girdinin yarısı değişmeden geçer ve diğer yarı için ölçek ile kaymayı belirleyen küçük bir sinir ağını besler. İşte bu PyTorch katmanı:
import torch
from torch import nn
torch.manual_seed(0)
# Affine coupling layer (RealNVP): x1 passes through unchanged and sets the scale and shift for x2
net = nn.Sequential(nn.Linear(2, 32), nn.Tanh(), nn.Linear(32, 4))
def coupling(x):
"""Map data x to z and return log|det J|, which is just the sum of the log-scales."""
x1, x2 = x.chunk(2, dim=-1)
log_s, t = net(x1).chunk(2, dim=-1)
return torch.cat([x1, x2 * log_s.exp() + t], dim=-1), log_s.sum(dim=-1)
x = torch.randn(4)
z, log_det = coupling(x)
jacobian = torch.autograd.functional.jacobian(lambda v: coupling(v)[0], x)
print(f"log|det J|: {log_det:.4f} from the formula, {torch.logdet(jacobian):.4f} from the full 4x4 Jacobian")
# Inverse: z1 equals x1, so the same scale and shift can be recomputed and undone
z1, z2 = z.chunk(2)
log_s, t = net(z1).chunk(2)
x_rec = torch.cat([z1, (z2 - t) * (-log_s).exp()])
print(f"Largest reconstruction error: {(x_rec - x).abs().max():.1e}")Basit formül de tam Jakoben de 0.1489 log-determinantı verir; ters işlem ise girdiyi kayan noktalı 32 bit yuvarlaması olan 1.2e-07 farkla geri elde eder. Katmanın içindeki ağın tersinin alınması gerekmez, bu nedenle ağ istenildiği kadar karmaşık olabilir.
Akış Mimarileri#
- Eşleştirme akışları: Laurent Dinh ve çalışma arkadaşlarının NICE (2014) ve RealNVP (2016) modelleri, dönüştürülen yarıyı sırayla değiştirir. OpenAI'ın Glow'u (2018) ise öğrenilebilir, tersinir 1 x 1 evrişimler ekledi ve gerçekçi 256 x 256 yüzler üretti. Örnekleme ve yoğunluk değerlendirmesi hızlıdır.
- Otoregresif akışlar: Her boyutu kendisinden önce gelen boyutlara koşullu olarak dönüştürür. Maskeli otoregresif akışlar yoğunlukları tek geçişte değerlendirir, ancak örnekleri her seferinde bir boyut üreterek oluşturur; ters otoregresif akışlar bunun tersini yapar. Apple'ın TarFlow'u (2024), otoregresif Transformer bloklarını görüntü yamaları üzerine yığar ve örnek kalitesi difüzyon modellerininkiyle yarışan ilk bağımsız akış olmuştur.
- Sürekli akışlar: Dönüşümü sıradan bir diferansiyel denklemin çözümü olarak tanımlar ve böylece katman tasarımı kısıtlarını ortadan kaldırır; FFJORD (2018), log-yoğunluktaki değişimi stokastik iz kestiricisiyle izler.
Uygulamalar#
- Anomali tespiti: DifferNet (2021), CFLOW-AD ve FastFlow; kusursuz ürün görüntülerindeki önceden eğitilmiş bir evrişimli sinir ağının özelliklerine akışları uydurur ve düşük olabilirlikli görüntüleri kusurlu olarak işaretler. FastFlow, 2021'de MVTec AD endüstriyel inceleme karşılaştırma testinde anomali tespiti için %99.4 AUC bildirdi.
- Konuşma sentezi: NVIDIA'nın WaveGlow'u (2018), mel spektrogramlarından tek bir paralel geçişte konuşma sesi üretti.
- Bilimsel örnekleme: Frank Noé ve çalışma arkadaşlarının Boltzmann üreteçleri (2019), moleküllerin ve proteinlerin denge durumlarını örnekler; örnekleri gerçek fiziksel dağılıma göre yeniden ağırlıklandırmak için tam olabilirlikten yararlanır.
Bu algılayıcıların pikseller yerine özellikleri modellemesinin bir nedeni var. Eric Nalisnick ve çalışma arkadaşlarının 2019'da gösterdiği üzere, CIFAR-10 fotoğraflarıyla eğitilmiş bir Glow modeli, daha önce hiç görmediği SVHN ev numarası görüntülerine daha yüksek olabilirlik atar. Bu başarısızlığın daha sonra, akışların görüntü içeriğinden çok yerel piksel korelasyonlarını modellemesinden kaynaklandığı anlaşıldı. Kusur tespiti için akışa girdi olarak, önceden eğitilmiş herhangi bir omurgadan alınan gömme vektörleri kullanılabilir: Ultralytics YOLO26'nın embed yöntemi, varsayılan olarak algılama başlığından hemen önceki katmandan her görüntü için ortalama havuzlanmış bir özellik vektörü döndürür.
Normalleştirici Akışlar ve İlgili Terimler#
- Akış eşleştirme ve düzeltilmiş akış: Hız alanını regresyonla öğrenerek sürekli bir akışı, eğitim sırasında log-determinant hesaplamadan eğitir ve günümüzde büyük görüntü üreteçlerine güç verir.
- Varyasyonel otomatik kodlayıcılar ve difüzyon modelleri: Olabilirliğin alt sınırını kullanarak eğitilir.
- GAN'ler: Bir ayırt ediciyi kandırmayı öğrenir ve hiçbir olabilirlik vermez.
- Üretken akış ağları (GFlowNets): “Akış” sözcüğünü paylaşırlar ancak ayrık nesneleri, ödülle orantılı olasılıkla adım adım oluştururlar.










