İçindekiler[Saklamak][Göstermek]
"Grafik sinir ağları" (GNN'ler) olarak bilinen derin öğrenme teknikleri, grafik alanında çalışır. Bu ağlar son zamanlarda bilgisayarla görme, öneri sistemleri ve kombinatoryal optimizasyon gibi çeşitli alanlarda kullanım alanı bulmuştur.
Ek olarak, bu ağlar, sosyal ağlar, protein-protein etkileşim ağları, bilgi grafikleri ve çeşitli çalışma alanlarındaki diğerleri dahil olmak üzere karmaşık sistemleri temsil etmek için kullanılabilir.
Öklidyen olmayan alan, resimler gibi diğer veri türlerinin aksine, grafik verilerinin çalıştığı yerdir. Düğümleri sınıflandırmak, bağlantıları ve küme verilerini tahmin etmek için grafik analizi kullanılır.
Bu yazımızda Grafiği inceleyeceğiz. Sinir ağı ayrıntılı olarak, türleri, ayrıca PyTorch kullanarak pratik örnekler sağlar.
Peki, Grafik nedir?
Grafik, düğümlerden ve köşelerden oluşan bir veri yapısı türüdür. Çeşitli düğümler arasındaki bağlantılar köşeler tarafından belirlenir. Düğümlerde yön belirtilirse, grafiğin yönlendirildiği söylenir; aksi takdirde yönsüzdür.
Grafiklerin iyi bir uygulaması, çeşitli bireyler arasındaki ilişkileri belirli bir düzende modellemektir. sosyal ağ. Bağlantılar ve değiş tokuşlar gibi karmaşık durumlarla uğraşırken grafikler çok faydalıdır.
Öneri sistemleri, anlamsal analiz, sosyal ağ analizi ve örüntü tanıma tarafından kullanılırlar.
. Grafik tabanlı çözümler oluşturmak, karmaşık ve birbiriyle ilişkili verilerin kapsamlı bir şekilde anlaşılmasını sağlayan yepyeni bir alandır.
Grafik Sinir Ağı
Grafik sinir ağları, bir grafik veri formatında çalışabilen özel sinir ağı türleridir. Grafik gömme ve evrişimli sinir ağlarının (CNN'ler) bunlar üzerinde önemli bir etkisi vardır.
Grafik Sinir Ağları, düğümleri, kenarları ve grafikleri tahmin etmeyi içeren görevlerde kullanılır.
- CNN'ler görüntüleri sınıflandırmak için kullanılır. Benzer şekilde, bir sınıfı tahmin etmek için GNN'ler, grafik yapısını temsil eden piksel ızgarasına uygulanır.
- Yinelenen sinir ağlarını kullanarak metin sınıflandırması. GNN'ler aynı zamanda bir cümledeki her kelimenin bir düğüm olduğu grafik mimarileriyle de kullanılır.
Düğümleri, kenarları veya tam grafikleri tahmin etmek için GNN'ler oluşturmak için sinir ağları kullanılır. Örneğin, düğüm düzeyindeki bir tahmin, spam algılama gibi bir sorunu çözebilir.
Bağlantı tahmini, tavsiye sistemlerindeki tipik bir durumdur ve bir uç-bilge tahmin probleminin bir örneği olabilir.
Grafik Sinir Ağı Türleri
Çok sayıda sinir ağı türü mevcuttur ve bunların çoğunda Evrişimsel Sinir Ağları bulunur. Bu bölümde en çok bilinen GNN'leri öğreneceğiz.
Grafik Evrişimli Ağlar (GCN'ler)
Klasik CNN'lerle karşılaştırılabilirler. Yakındaki düğümlere bakarak özellikler kazanır. Aktivasyon işlevi, düğüm vektörlerini topladıktan ve çıktıyı yoğun katmana gönderdikten sonra doğrusal olmayanlık eklemek için GNN'ler tarafından kullanılır.
Özünde Grafik evrişiminden, doğrusal bir katmandan ve öğrenici olmayan bir etkinleştirme işlevinden oluşur. GCN'ler iki ana çeşitte gelir: Spektral Evrişimsel Ağlar ve Mekansal Evrişimsel Ağlar.
Grafik Otomatik Kodlayıcı Ağları
Grafiklerin nasıl temsil edileceğini öğrenmek için bir kodlayıcı ve giriş grafiklerini yeniden oluşturmaya çalışmak için bir kod çözücü kullanır. Kodlayıcı ve kod çözücüyü birbirine bağlayan bir darboğaz katmanı vardır.
Otomatik kodlayıcılar sınıf dengesini yönetme konusunda mükemmel bir iş çıkardığından, bağlantı tahmininde sıklıkla kullanılırlar.
Tekrarlayan Grafik Sinir Ağları (RGNN'ler)
Tek bir düğümün çok sayıda ilişkiye sahip olduğu çok ilişkisel ağlarda, optimal yayılma modelini öğrenir ve grafikleri yönetebilir. Düzgünlüğü artırmak ve aşırı parametrelendirmeyi azaltmak için, bu grafik sinir ağı biçiminde düzenleyiciler kullanılır.
Daha iyi sonuçlar elde etmek için RGNN'ler daha az işlem gücü gerektirir. Metin oluşturma, konuşma tanıma, makine çevirisi, resim tanımlama, video etiketleme ve metin özetleme için kullanılırlar.
Kapılı Sinir Grafiği Ağları (GGNN'ler)
Uzun vadeli bağımlı görevler söz konusu olduğunda, RGNN'lerden daha iyi performans gösterirler. Kapılı graf sinir ağları, uzun vadeli bağımlılıklara düğüm, kenar ve zamansal kapıları dahil ederek, tekrarlayan graf sinir ağlarını geliştirir.
Kapılar, çeşitli aşamalarda verileri geri çağırmak ve unutmak için kullanıldıkları için Kapılı Tekrarlayan Birimlere (GRU'lar) benzer şekilde çalışır.
Pytorch Kullanarak Grafik Sinir Ağı Uygulaması
Odaklanacağımız belirli konu, ortak bir düğüm kategorizasyonu sorunudur. adında oldukça büyük bir sosyal ağımız var. Musae-githubGitHub geliştiricileri için açık API'den derlenen .
Kenarlar, en az 10 veri havuzunda rol almış geliştiricileri (platform kullanıcıları) temsil eden düğümler arasındaki karşılıklı takipçi ilişkilerini gösterir (mutual kelimesinin yönlendirilmemiş bir ilişkiyi gösterdiğine dikkat edin).
Düğümün konumuna, yıldızlı depolara, işverene ve e-posta adresine göre düğüm özellikleri alınır. GitHub kullanıcısının bir web geliştiricisi mi yoksa bir makine öğrenimi geliştiricisi bizim görevimizdir.
Her kullanıcının iş unvanı, bu hedefleme işlevi için temel teşkil etti.
PyTorch'u Yükleme
Başlamak için önce yüklememiz gerekiyor PyTorch. adresinden makinenize göre yapılandırabilirsiniz. okuyun. İşte benim:
Modülleri içe aktarma
Şimdi gerekli modülleri içe aktarıyoruz.
Verileri içe aktarma ve keşfetme
Sonraki adım, verileri okumak ve etiketler dosyasından ilk beş satırı ve son beş satırı çizmektir.
Dört sütundan yalnızca ikisi - düğümün kimliği (yani kullanıcı) ve ml_target (kullanıcı makine öğrenimi topluluğunun bir üyesiyse 1, aksi takdirde 0) bu durumda bizimle ilgilidir.
Sadece iki sınıf olduğu göz önüne alındığında, artık görevimizin bir ikili sınıflandırma sorunu olduğundan emin olabiliriz.
Önemli sınıf dengesizliklerinin bir sonucu olarak, sınıflandırıcı yeterince temsil edilmeyen sınıfı değerlendirmek yerine hangi sınıfın çoğunluk olduğunu varsayabilir, bu da sınıf dengesini dikkate alınması gereken bir diğer önemli faktör haline getirir.
Histogramın (frekans dağılımı) çizilmesi, diğer sınıflardan daha az makine öğreniminden (etiket=1) daha az sınıf olduğu için bazı dengesizlikleri ortaya çıkarır.
Özellik Kodlaması
Düğümlerin özellikleri, bize her bir düğümle ilişkili özellik hakkında bilgi verir. Verileri kodlama yöntemimizi uygulayarak, bu özellikleri anında kodlayabiliriz.
Bu yöntemi, ağın küçük bir bölümünü (örneğin 60 düğümü) görüntülenmek üzere kapsüllemek için kullanmak istiyoruz. Kod burada listelenmiştir.
Grafikleri tasarlama ve görüntüleme
Meşale geometrik kullanacağız. grafiğimizi oluşturmak için veriler.
Farklı (isteğe bağlı) özelliklere sahip tek bir grafiği modellemek için basit bir Python nesnesi olan veriler kullanılır. Bu sınıfı ve tümü meşale tensörleri olan aşağıdaki öznitelikleri kullanarak, grafik nesnemizi oluşturacağız.
Kodlanmış düğüm özelliklerine tahsis edilecek olan x değerinin formu [düğüm sayısı, özellik sayısı] şeklindedir.
Y'nin şekli [düğüm sayısı] ve düğüm etiketlerine uygulanacaktır.
kenar indeksi: Yönsüz bir grafiği tanımlamak için, aynı iki düğümü birbirine bağlayan, ancak zıt yönlere işaret eden iki farklı yönlendirilmiş kenarın varlığına izin vermek için orijinal kenar indekslerini genişletmemiz gerekir.
Örneğin, 100 ve 200 düğümleri arasında, biri 200'den 100'e ve diğeri 100'den 200'e kadar olan bir çift kenar gereklidir. Kenar endeksleri sağlanırsa, yönsüz grafik bu şekilde temsil edilebilir. [2,2*orijinal kenar sayısı] tensör formu olacaktır.
Bir grafiği görüntülemek için grafik çiz yöntemimizi oluşturuyoruz. İlk adım, homojen ağımızı NetworkX.draw kullanılarak çizilebilecek bir NetworkX grafiğine dönüştürmektir.
GNN modelimizi yapın ve eğitin
Tüm veri kümesini kodlayarak verileri ışık=Yanlış ile kodlayarak ve ardından tüm grafiği oluşturmak için yapı grafiğini ışık=Yanlış ile çağırarak başlıyoruz. Bu büyük grafiği çizmeye çalışmayacağız çünkü sınırlı kaynaklara sahip yerel bir makine kullandığınızı varsayıyorum.
0 ve 1 rakamlarını kullanarak her bir belirli maskeye hangi düğümlerin ait olduğunu belirleyen ikili vektörler olan maskeler, eğitim aşamasına eğitim sırasında hangi düğümlerin dahil edilmesi gerektiğini bildirmek ve çıkarım aşamasına hangi düğümlerin test verileri olduğunu söylemek için kullanılabilir. Meşale geometrik.dönüşümler.
AddTrainValTestMask sınıfının eğitim maskesi, val maskesi ve test maskesi özellikleri kullanılarak düğüm düzeyinde bir bölme eklenebilir; bu, bir grafik almak ve maskelerimizin nasıl oluşturulmasını istediğimizi belirtmemizi sağlamak için kullanılabilir.
Biz sadece %10'unu eğitim için kullanıyoruz ve verilerin %60'ını test seti olarak kullanırken %30'unu doğrulama seti olarak kullanıyoruz.
Şimdi iki GCNConv katmanını yığacağız; bunlardan ilki, girdi özellikleri olarak grafiğimizdeki öznitelik sayısına eşit bir çıktı özelliği sayısına sahiptir.
Sınıflarımızın sayısına eşit çıktı düğümleri içeren ikinci katmanda, bir relu aktivasyon fonksiyonu uygularız ve gizli özellikleri sağlarız.
Kenar indeksi ve kenar ağırlığı, GCNConv'un ileri fonksiyonda kabul edebileceği birçok x seçeneğinden ikisidir, ancak bizim durumumuzda sadece ilk iki değişkene ihtiyacımız var.
Modelimiz grafikteki her düğümün sınıfını tahmin edebilecek olmasına rağmen, yine de faza bağlı olarak her bir küme için doğruluğunu ve kaybını ayrı ayrı belirlememiz gerekiyor.
Örneğin, eğitim sırasında eğitim setini sadece doğruluğu ve eğitim kaybını belirlemek için kullanmak istiyoruz ve bu nedenle maskelerimizin kullanışlı olduğu yer burası.
Uygun kayıp ve doğruluğu hesaplamak için maskelenmiş kayıp ve maskelenmiş doğruluk fonksiyonlarını tanımlayacağız.
Modelin eğitimi
Artık torcun kullanılacağı eğitim amacını tanımladık. Adam bir ana optimize edicidir.
Doğrulama doğruluğunu göz önünde bulundurarak eğitimi belirli sayıda dönem için yürüteceğiz.
Ayrıca, farklı dönemlerde eğitimin kayıplarını ve doğruluklarını da çiziyoruz.
Grafik Sinir Ağının Dezavantajları
GNN'leri kullanmanın birkaç dezavantajı vardır. GNNa'nın ne zaman kullanılacağı ve makine öğrenimi modellerimizin performansının nasıl artırılacağı, onları daha iyi anladıktan sonra bize netleşecektir.
- GNN'ler genellikle üç katmanlı sığ ağlar olsa da, çoğu sinir ağı performansı artırmak için derinlere inebilir. Bu sınırlama nedeniyle büyük veri kümelerinde en üst düzeyde performans gösteremiyoruz.
- Yapısal dinamikleri dinamik olduğu için grafikler üzerinde bir model eğitmek daha zordur.
- Bu ağların yüksek hesaplama maliyetleri nedeniyle, modeli üretim için ölçeklendirmek zorluklar ortaya çıkarmaktadır. Grafik yapınız çok büyük ve karmaşıksa, GNN'leri üretim için ölçeklendirmek zor olacaktır.
Sonuç
Geçtiğimiz birkaç yıl içinde GNN'ler, grafik alanındaki makine öğrenimi sorunları için güçlü ve etkili araçlar haline geldi. Bu makalede, grafik sinir ağlarına temel bir genel bakış verilmektedir.
Bundan sonra, modeli eğitmek ve test etmek için kullanılacak veri kümesini oluşturmaya başlayabilirsiniz. Nasıl çalıştığını ve neler yapabileceğini anlamak için çok daha ileri gidebilir ve farklı türde bir veri kümesi kullanarak onu eğitebilirsiniz.
Mutlu Kodlama!
Yorum bırak