İçindekiler
VARIANT-GNN projesini geliştirirken sıkça şu soruyla karşılaştım: "Neden sinir ağını zaten biliyoruz, grafı ne işe yarıyor?" Bu yazı o soruya yanıt.
Klasik Veri ile Graf Verisi Farkı#
Klasik makine öğrenmesi modellerini düşünün. Bir tablonuz var: her satır bir örnek, her sütun bir özellik. Model bu satırları bağımsız görür.
Ama bazı veriler doğası gereği birbirine bağlıdır:
- ›Sosyal ağlar (kim kimle arkadaş?)
- ›Molekül yapıları (atomlar arası bağlar)
- ›Genomik etkileşimler (hangi gen hangi proteini etkiler?)
Bu tür verilerde ilişki bilgisi, örnek bilgisi kadar önemlidir. Graf yapısı tam da bunu yakalar.
Graf Nedir?#
Bir graf iki bileşenden oluşur:
- ›Düğümler (Nodes): Varlıklar (gen, atom, kullanıcı)
- ›Kenarlar (Edges): İlişkiler (bağ, etkileşim, arkadaşlık)
Her düğümün özellikleri vardır (feature vector). GNN bu özellikleri komşularla iteratif olarak birleştirir.
Mesaj Geçişi Mekanizması#
GNN'nin temel prensibi şudur: her düğüm, komşularından mesaj alır, bu mesajları birleştirir ve kendi temsilini günceller. Bunu birkaç tur (layer) boyunca tekrarlar.
h_v^(k) = UPDATE(h_v^(k-1), AGG({h_u^(k-1) : u ∈ N(v)}))Yeterli tur sonunda her düğüm, yerel yapısının bir temsilini öğrenmiş olur.
Genomik Veride Neden GNN?#
ClinVar'daki her genetik varyant izole değildir. Aynı gendeki başka varyantlarla, ilgili genlerle, protein etkileşim ağlarıyla bağlantılıdır. Bu bağlantıları tabloya sığdıramazsınız — ama grafa sığdırırsınız.
VARIANT-GNN'de PyTorch Geometric kullandık. Her varyant bir düğüm, biyolojik ilişkiler kenar. Model bu yapıyı öğrenerek patojenite tahmini yapıyor.
Ne Zaman GNN Kullanmalısınız?#
GNN doğru seçimdir eğer:
- 1.Verinizdeki ilişkiler (kenarlar) bilgi taşıyorsa
- 2.Bir örneğin çıktısı komşularına bağlıysa
- 3.Veri doğal olarak ağ/graf yapısındaysa
Tablo verisi için genellikle XGBoost veya klasik DNN daha iyi sonuç verir — GNN'e gerek yoktur.
Proje, iş birliği ya da sadece bir fikir — mesajına açığım. En kısa sürede dönüş yaparım.