Daftar Isi[Bersembunyi][Menunjukkan]
Teknik pembelajaran mendalam yang dikenal sebagai "jaringan saraf grafik" (GNNs) beroperasi dalam domain grafik. Jaringan ini akhir-akhir ini digunakan dalam berbagai bidang, termasuk visi komputer, sistem rekomendasi, dan optimasi kombinatorial, untuk beberapa nama.
Selain itu, jaringan ini dapat digunakan untuk mewakili sistem yang kompleks, termasuk jaringan sosial, jaringan interaksi protein-protein, grafik pengetahuan, dan lain-lain dalam beberapa bidang studi.
Ruang non-euclidean adalah tempat data grafik beroperasi, berbeda dengan jenis data lain seperti gambar. Untuk mengklasifikasikan node, memprediksi link, dan data cluster, analisis grafik digunakan.
Pada artikel ini, kita akan memeriksa Grafik Jaringan syaraf secara detail, jenisnya, serta memberikan contoh praktis menggunakan PyTorch.
Jadi, apa itu Grafik?
Graf adalah jenis struktur data yang terdiri dari simpul dan simpul. Koneksi antara berbagai node ditentukan oleh simpul. Jika arah ditunjukkan dalam simpul, grafik dikatakan berarah; jika tidak, itu tidak terarah.
Aplikasi grafik yang baik adalah memodelkan hubungan di antara berbagai individu dalam a jaringan sosial. Ketika berhadapan dengan keadaan yang kompleks, seperti tautan dan pertukaran, grafik sangat membantu.
Mereka digunakan oleh sistem rekomendasi, analisis semantik, analisis jaringan sosial, dan pengenalan pola
. Membuat solusi berbasis grafik adalah bidang baru yang menawarkan pemahaman mendalam tentang data yang kompleks dan saling terkait.
Jaringan Saraf Grafik
Jaringan saraf graf adalah jenis jaringan saraf khusus yang dapat beroperasi pada format data grafik. Penyematan grafik dan jaringan saraf convolutional (CNNs) memiliki dampak yang signifikan pada mereka.
Graph Neural Networks digunakan dalam tugas-tugas yang mencakup memprediksi node, tepi, dan grafik.
- CNN digunakan untuk mengklasifikasikan gambar. Demikian pula, untuk memprediksi kelas, GNN diterapkan pada kisi piksel yang mewakili struktur grafik.
- Kategorisasi teks menggunakan jaringan saraf perulangan. GNN juga digunakan dengan arsitektur grafik di mana setiap kata dalam frasa adalah simpul.
Untuk meramalkan node, edge, atau grafik lengkap, jaringan saraf digunakan untuk membuat GNN. Prediksi di tingkat node, misalnya, dapat menyelesaikan masalah seperti deteksi spam.
Prediksi tautan adalah kasus tipikal dalam sistem rekomendasi dan mungkin menjadi contoh masalah prediksi tepi-bijaksana.
Jenis Jaringan Saraf Grafik
Banyak jenis jaringan saraf ada, dan Jaringan Saraf Konvolusi hadir di sebagian besar dari mereka. Kita akan belajar tentang GNN yang paling terkenal di bagian ini.
Grafik Jaringan Konvolusional (GCN)
Mereka sebanding dengan CNN klasik. Ini memperoleh karakteristik dengan melihat node terdekat. Fungsi aktivasi digunakan oleh GNN untuk menambahkan non-linearitas setelah menggabungkan vektor simpul dan mengirimkan output ke lapisan padat.
Ini terdiri dari konvolusi Grafik, lapisan linier, dan fungsi aktivasi non-pelajar, pada dasarnya. GCN datang dalam dua varietas utama: Jaringan Konvolusi Spektral dan Jaringan Konvolusi Spasial.
Jaringan Auto-Encoder Grafik
Ini menggunakan encoder untuk mempelajari cara merepresentasikan grafik dan decoder untuk mencoba merekonstruksi grafik input. Ada lapisan bottleneck yang menghubungkan encoder dan decoder.
Karena penyandi otomatis melakukan pekerjaan yang sangat baik dalam menangani keseimbangan kelas, mereka sering digunakan dalam prediksi tautan.
Jaringan Saraf Graf Berulang (RGNNs)
Dalam jaringan multi-relasional, di mana satu node memiliki banyak hubungan, ia mempelajari pola difusi yang optimal dan dapat mengelola grafik. Untuk meningkatkan kelancaran dan mengurangi parameterisasi berlebih, regularizer digunakan dalam bentuk jaringan saraf graf ini.
Untuk mendapatkan hasil yang lebih baik, RGNN membutuhkan daya pemrosesan yang lebih sedikit. Mereka digunakan untuk pembuatan teks, pengenalan suara, terjemahan mesin, deskripsi gambar, penandaan video, dan peringkasan teks.
Jaringan Grafik Neural Berpagar (GGNN)
Dalam hal tugas ketergantungan jangka panjang, mereka mengungguli RGNN. Dengan memasukkan simpul, tepi, dan gerbang temporal pada dependensi jangka panjang, jaringan saraf graf berpagar meningkatkan jaringan saraf graf berulang.
Gerbang berfungsi mirip dengan Gated Recurrent Units (GRU) karena digunakan untuk memanggil dan melupakan data dalam berbagai tahap.
Menerapkan Graph Neural Network menggunakan Pytorch
Masalah spesifik yang akan kami fokuskan adalah masalah kategorisasi node yang umum. Kami memiliki jejaring sosial yang cukup besar bernama musa-github, yang dikompilasi dari API terbuka, untuk pengembang GitHub.
Tepi menunjukkan hubungan pengikut timbal balik antara node, yang mewakili pengembang (pengguna platform) yang telah membintangi setidaknya 10 repositori (perhatikan bahwa kata mutual menunjukkan hubungan yang tidak diarahkan).
Berdasarkan lokasi node, repositori berbintang, majikan, dan alamat email, karakteristik node diambil. Memprediksi apakah pengguna GitHub adalah pengembang web atau pengembang pembelajaran mesin adalah tugas kita.
Jabatan setiap pengguna menjadi dasar untuk fungsi penargetan ini.
Menginstal PyTorch
Untuk memulai, pertama-tama kita harus menginstal PyTorch. Anda dapat mengonfigurasinya sesuai dengan mesin Anda dari di sini. Ini milikku:
Mengimpor modul
Sekarang, kami mengimpor modul yang diperlukan
Mengimpor dan Menjelajahi data
Langkah selanjutnya adalah membaca data dan memplot lima baris pertama dan lima baris terakhir dari file label.
Hanya dua dari empat kolom—id node (yaitu, pengguna) dan ml_target, yaitu 1 jika pengguna adalah anggota komunitas pembelajaran mesin dan 0 jika tidak—yang relevan bagi kami dalam situasi ini.
Mengingat hanya ada dua kelas, sekarang kita dapat yakin bahwa tugas kita adalah masalah klasifikasi biner.
Sebagai hasil dari ketidakseimbangan kelas yang signifikan, pengklasifikasi hanya dapat mengasumsikan kelas mana yang merupakan mayoritas daripada mengevaluasi kelas yang kurang terwakili, menjadikan keseimbangan kelas sebagai faktor penting lainnya untuk dipertimbangkan.
Memplot histogram (distribusi frekuensi) mengungkapkan beberapa ketidakseimbangan karena ada lebih sedikit kelas dari pembelajaran mesin (label=1) daripada dari kelas lain.
Pengkodean Fitur
Karakteristik node menginformasikan kepada kita tentang fitur yang terkait dengan setiap node. Dengan menerapkan metode kami untuk mengkodekan data, kami dapat langsung mengkodekan karakteristik tersebut.
Kami ingin menggunakan metode ini untuk merangkum sebagian kecil jaringan (misalnya, 60 node) untuk ditampilkan. Kode tercantum di sini.
Merancang dan menampilkan grafik
Kami akan menggunakan geometris obor. data untuk membangun grafik kami.
Untuk memodelkan grafik tunggal dengan properti (opsional) yang berbeda, data yang merupakan objek Python sederhana digunakan. Dengan memanfaatkan kelas ini dan atribut berikut—semuanya adalah tensor obor—kita akan membuat objek grafik kita.
Bentuk nilai x, yang akan dialokasikan ke fitur node yang dikodekan, adalah [jumlah node, jumlah fitur].
Bentuk y adalah [jumlah node], dan itu akan diterapkan pada label node.
indeks tepi: Untuk menggambarkan grafik tidak berarah, kita perlu memperluas indeks tepi asli untuk memungkinkan keberadaan dua tepi berarah berbeda yang menghubungkan dua simpul yang sama tetapi menunjuk ke arah yang berlawanan.
Sepasang tepi, satu menunjuk dari simpul 100 ke 200 dan yang lain dari 200 ke 100, diperlukan, misalnya, antara simpul 100 dan 200. Jika indeks tepi disediakan, maka ini adalah bagaimana grafik tidak berarah dapat direpresentasikan. [2,2*jumlah tepi asli] akan menjadi bentuk tensor.
Kami membuat metode grafik menggambar kami untuk menampilkan grafik. Langkah pertama adalah mengubah jaringan homogen kita menjadi grafik NetworkX, yang kemudian dapat digambar menggunakan NetworkX.draw.
Buat model GNN kami dan latih
Kita mulai dengan mengkodekan seluruh kumpulan data dengan mengeksekusi encode data dengan light=False dan kemudian memanggil grafik konstruksi dengan light=False untuk membangun seluruh grafik. Kami tidak akan mencoba menggambar grafik besar ini karena saya menganggap Anda menggunakan mesin lokal yang memiliki sumber daya terbatas.
Mask, yang merupakan vektor biner yang mengidentifikasi node mana yang dimiliki oleh masing-masing mask tertentu menggunakan angka 0 dan 1, dapat digunakan untuk memberi tahu fase pelatihan node mana yang harus disertakan selama pelatihan dan untuk memberi tahu fase inferensi node mana yang merupakan data pengujian. Geometris obor.transforms.
Pemisahan tingkat simpul dapat ditambahkan menggunakan topeng pelatihan, topeng val, dan properti topeng uji dari kelas AddTrainValTestMask, yang dapat digunakan untuk mengambil grafik dan memungkinkan kita untuk menentukan bagaimana kita ingin topeng kita dibangun.
Kami hanya menggunakan 10% untuk pelatihan dan menggunakan 60% data sebagai set pengujian sementara menggunakan 30% sebagai set validasi.
Sekarang, kita akan menumpuk dua lapisan GCNConv, yang pertama memiliki jumlah fitur keluaran yang sama dengan jumlah fitur dalam grafik kita sebagai fitur masukan.
Di lapisan kedua, yang berisi simpul keluaran yang sama dengan jumlah kelas kami, kami menerapkan fungsi aktivasi relu dan menyediakan fitur laten.
Indeks tepi dan bobot tepi adalah dua dari banyak opsi x yang dapat diterima GCNConv dalam fungsi maju, tetapi dalam situasi kita, kita hanya memerlukan dua variabel pertama.
Terlepas dari kenyataan bahwa model kami akan dapat memprediksi kelas setiap node dalam grafik, kami masih perlu menentukan akurasi dan kerugian untuk setiap set secara terpisah tergantung pada fase.
Misalnya, selama pelatihan, kami hanya ingin menggunakan set pelatihan untuk menentukan akurasi dan kehilangan pelatihan, dan oleh karena itu, di sinilah topeng kami berguna.
Untuk menghitung kerugian dan akurasi yang sesuai, kita akan mendefinisikan fungsi dari masked loss dan masked akurasi.
Pelatihan model
Sekarang kita telah menentukan tujuan pelatihan yang akan menggunakan obor. Adam adalah pengoptimal utama.
Kami akan melakukan pelatihan untuk sejumlah epoch tertentu sambil tetap memperhatikan akurasi validasi.
Kami juga merencanakan kerugian dan akurasi pelatihan di seluruh zaman yang berbeda.
Kekurangan Graph Neural Network
Menggunakan GNN memiliki beberapa kelemahan. Kapan menggunakan GNNa dan bagaimana meningkatkan kinerja model pembelajaran mesin kami akan dijelaskan kepada kami setelah kami memahaminya dengan lebih baik.
- Sementara GNN adalah jaringan dangkal, biasanya dengan tiga lapisan, sebagian besar jaringan saraf dapat masuk lebih dalam untuk meningkatkan kinerja. Kami tidak dapat tampil di ujung tombak pada kumpulan data besar karena keterbatasan ini.
- Lebih sulit untuk melatih model pada grafik, karena dinamika strukturalnya dinamis.
- Karena tingginya biaya komputasi jaringan ini, penskalaan model untuk produksi menghadirkan tantangan. Menskalakan GNN untuk produksi akan menjadi tantangan jika struktur grafik Anda besar dan rumit.
Kesimpulan
Selama beberapa tahun terakhir, GNN telah berkembang menjadi alat yang kuat dan efektif untuk masalah pembelajaran mesin dalam domain grafik. Tinjauan mendasar dari jaringan saraf graf diberikan dalam artikel ini.
Setelah itu, Anda dapat mulai membuat dataset yang akan digunakan untuk melatih dan menguji model. Untuk memahami bagaimana fungsinya dan kemampuannya, Anda juga dapat melangkah lebih jauh dan melatihnya menggunakan jenis dataset yang berbeda.
Selamat Coding!
Tinggalkan Balasan