Bir bakışta yapay sinir ağları 10: grafik ağlar

Nöronal ağlar birçok AI ve Genai uygulamasının motorudur. Bu makale dizisi bireysel unsurlar hakkında bir fikir sunar. Serinin onuncu kısmı ihlal testi ağlarını sunuyor.

Dr. Michael Stal, 1991 yılından bu yana Siemens teknolojisi üzerinde çalışmaktadır. Yazılım mimarisi sorunları hakkında iş alanları önermektedir ve Siemens'in kıdemli yazılım mimarlarının mimari oluşumundan sorumludur.

Grafik ağları (grafik sinir ağları, GNN) normal ızgaraların nöronal hesaplanması kavramını düzensiz grafik yapılara genişletir ve bu nedenle ilişkileri düğümler ve kenarlar tarafından daha iyi ifade edilebilecek veriler için derin öğrenmeye izin verir. Bu düğümler arasında birçok V -Knot ve birçok kenardan bir grafik GA oluşur. Her düğüm bir Xᵢ işlev taşıyıcısı giyer ve bilgilerin düğümler arasında nasıl akması gerektiğini kodlayan kenarların motifi.

Birçok GNN'nin merkezinde, haberlerin iletiminin bir paradigması var. Ağın her seviyesinde, her bir düğüm komşularından bilgi toplar (toplama), bu toplam mesajı dönüştürür ve bu nedenle özelliklerini günceller. Farklı seviyelerden başlayan düğümler, giderek daha büyük mahallelerden gelen bilgileri içerebilir.

Grafikteki en basit ve en yaygın grafik biçimlerinden biri, Grafik Tasarımcının (GCN) meclis üyesidir. Diyelim ki, bir x ∈ ℝᴺˣᵈ ℝᴺˣᵈ 'da toplanan karakteristik bir D-Boyutlu taşıyıcıya sahip bir düğümlerimiz var. A ∈ ℝᴺˣᴺ Grafik tasarımcının bitişik matrisi olun, bu nedenle Aᵢⱼ = 1, düğümün bir sınırının J düğümünde ısrar ettiği ve aksi takdirde sıfır olduğu zamandır. Her bir düğümün özelliklerinizi eklemek için é = a + i oluşturan kimlik matrisi i adını ekleyin. Öyleyse d̃ᵢᵢ = σⱼ olan d̃ derecesi matrisini hesaplayalım. Tek bir GCN seviyesi, aşağıdaki kurala göre x'i yeni özelliklere dönüştürür H ∈ ℝᴺˣᵈ ′:

H = σ (d̃⁻½ · · d̃⁻½ · x · w)

Burada w ∈ ℝᵈˣᵈ ′ ′, öğrenmeyi tartmanın bir belirtecidir ve relu gibi doğrusal olmayan bir unsurdur. Ã d̃⁻½'nin simetrik normalizasyonu, yüksek dereceye sahip düğümlerin mesajlarının düşük dereceli düğümlerinkilerle örtüşmemesini garanti eder.

Aşağıda, tek bir GCN seviyesinin minimum pytorch uygulaması bulunmaktadır. Her adımı ayrıntılı olarak açıklıyorum.

Bu kodda, Adatzmatrix formun yoğun bir tensörüdür (n, n). İlk önce kimliği özetleyerek aracı aşma ekleriz. Daha sonra, ã satırlarını ekleyerek her bir düğümün derecesini hesaplarız. Bu derecenin ters kare kökünü çekerek ve diyagonal bir matris oluşturarak d̃⁻½ alırız. D̃⁻½'yi Ã'nin her iki tarafı ile çarparsanız, normalleştirilmiş bitişik alın. X düğümünün özellikleri, bunları yeni bir işlev odasına dönüştürmek için W Wrderation matrisi W ile çarpılır ve son olarak normalleştirilmiş adjacenzmatrix, bu özellikleri grafik yapıya göre dönüştürür. Relu aktivasyonu, doğrusal olmama ekler.


import torch
import torch.nn as nn

class GCNLayer(nn.Module):
    def __init__(self, in_features, out_features):
        super(GCNLayer, self).__init__()
        # Gewichtungsmatrix W der Form (in_features, out_features)
        self.weight = nn.Parameter(torch.randn(in_features, out_features))
    
    def forward(self, X, adjacency):
        # Selbstschleifen hinzufügen, indem die Identitätsmatrix zur Adjazenz hinzugefügt wird
        A_tilde = adjacency + torch.eye(adjacency.size(0), device=adjacency.device)
        # Berechne die Gradmatrix von A_tilde
        degrees = A_tilde.sum(dim=1)
        # D_tilde^(-1/2) berechnen
        D_inv_sqrt = torch.diag(degrees.pow(-0.5))
        # Symmetrische Normalisierung: D^(-1/2) * A_tilde * D^(-1/2)
        A_normalized = D_inv_sqrt @ A_tilde @ D_inv_sqrt
        # Lineare Transformation: X * W
        support = X @ self.weight
        # Nachrichten weiterleiten: A_normalized * support
        out = A_normalized @ support
        # Nichtlinearität anwenden
        return torch.relu(out)

Bunların farklı seviyelerine başlayarak, masraflar iyileşir, örneğin:


class SimpleGCN(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(SimpleGCN, self).__init__()
        self.gcn1 = GCNLayer(input_dim, hidden_dim)
        self.gcn2 = GCNLayer(hidden_dim, output_dim)

    def forward(self, X, adjacency):
        h1 = self.gcn1(X, adjacency)
        # h1 dient als Eingabe für die nächste Schicht
        h2 = self.gcn2(h1, adjacency)
        return h2

Her düğümün iki atlama düğümlerinden bilgi toplamasına izin veriyoruz. Her bir düğümün {1 etiket, …, c} 'de bir yᵢ olduğu bir sınıflandırma etkinliği için, son sürümleri h ∈ ℝᴺˣᶜ, tıpkı sıradan sınıflandırmada olduğu gibi ve gradyanı bırakan Ayad kaybı kaybıyla eğitebiliriz.

GCN'ye ek olarak, dikkate dayanan grafik ağları, bir düğümün her komşuya ne kadar güçlü bir şekilde odaklanması gerektiğini söyleyen kenarın belirli ağırlıklarını hesaplar. Grafik Dikkat Ağı (GAT), aşağıdaki gibi tanımlanan αᵢⱼ öğrenmenin dikkat katsayılarını sunar:

Eᵢⱼ = Sheakerlu (Aᵀ · · [ W·xᵢ ∥ W·xⱼ ] )))

αᵢⱼ = softmax_j (eᵢⱼ)

∥ zincir olarak adlandırılır, a ∈ ℝ²ᵈ ′ bir öğrenme vektörüdür ve Softmax_J I'in tüm komşularında normalleştirilir. Düğümler bu nedenle okunabilir:

Hᵢ ′ = σ (σⱼ αᵢⱼ · w · xⱼ).

Bir GAT katmanının sıfırdan uygulanması aynı haber iletim modelini takip eder, ancak her kenar için Eᵢⱼ hesaplanmasını ve müteakip normalleştirmeyi gerektirir. Büyük grafik tasarımcılar, verimliliği sağlamak için pytorch geometrik gibi dağınık gösterimler veya kitapçılar kullanır.

Grafik sinir ağları, kimyada açık kullanımlar, sosyal ağların analizi, öneri ve kombinatoryal optimizasyon sistemleri. Herhangi bir varlığın bağlamının ilişkileri tarafından tanımlandığı yapılandırılmış verilerin temsillerini öğrenmek için temel bir yol sunarlar.

Serinin bir sonraki kısmı, tamamen dikkat mekanizmalarına dayanan ve paralel dizileri işlemek için özyineleme ve katlama gerektirmeyen bir nöral mimari olan Transformers ile ilgilenir.


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir