Mundarija[Yashirish][Show]
"Grafik neyron tarmoqlari" (GNN) deb nomlanuvchi chuqur o'rganish usullari grafik domenida ishlaydi. So'nggi paytlarda bu tarmoqlar turli sohalarda, jumladan, kompyuterni ko'rish, tavsiya qiluvchi tizimlar va kombinatsion optimallashtirishda qo'llanilmoqda.
Bundan tashqari, ushbu tarmoqlar murakkab tizimlarni, jumladan, ijtimoiy tarmoqlarni, oqsil-oqsil o'zaro ta'sir tarmoqlarini, bilim grafiklarini va boshqalarni bir nechta o'rganish sohalarida ifodalash uchun ishlatilishi mumkin.
Evklid bo'lmagan makon - bu rasmlar kabi boshqa turdagi ma'lumotlardan farqli o'laroq, grafik ma'lumotlar ishlaydigan joy. Tugunlarni tasniflash, havolalarni bashorat qilish va klaster ma'lumotlari uchun grafik tahlili qo'llaniladi.
Ushbu maqolada biz grafikni ko'rib chiqamiz asab Tarmoq batafsil, uning turlari, shuningdek, PyTorch yordamida amaliy misollar keltiring.
Xo'sh, Grafik nima?
Grafik - bu tugun va cho'qqilardan tashkil topgan ma'lumotlar strukturasining bir turi. Turli tugunlar orasidagi bog'lanishlar cho'qqilar bilan belgilanadi. Agar tugunlarda yo'nalish ko'rsatilgan bo'lsa, grafik yo'naltirilgan deyiladi; aks holda, u yo'naltirilmaydi.
Grafiklarni yaxshi qo'llash - bu turli shaxslar o'rtasidagi munosabatlarni modellashtirishdir ijtimoiy tarmoq. Aloqalar va almashinuvlar kabi murakkab vaziyatlarni hal qilishda grafiklar juda foydali.
Ular tavsiya tizimlari, semantik tahlil, ijtimoiy tarmoq tahlili va naqshni aniqlashda qo'llaniladi
. Grafikga asoslangan yechimlarni yaratish - bu murakkab va o'zaro bog'liq ma'lumotlarni chuqur tushunishni taklif qiluvchi yangi soha.
Grafik neyron tarmog'i
Grafik neyron tarmoqlari - bu grafik ma'lumotlar formatida ishlashi mumkin bo'lgan maxsus neyron tarmoq turlari. Grafiklarni joylashtirish va konvolyutsion neyron tarmoqlari (CNN) ularga sezilarli ta'sir ko'rsatadi.
Grafik neyron tarmoqlari tugunlar, qirralar va grafiklarni bashorat qilishni o'z ichiga olgan vazifalarda qo'llaniladi.
- CNN tasvirlarni tasniflash uchun ishlatiladi. Xuddi shunday, sinfni bashorat qilish uchun GNNlar grafik tuzilishini ifodalovchi piksellar tarmog'iga qo'llaniladi.
- Takroriy neyron tarmoqlari yordamida matnni turkumlash. GNNlar, shuningdek, iboradagi har bir so'z tugun bo'lgan grafik arxitekturalarida ham qo'llaniladi.
Tugunlarni, qirralarni yoki to'liq grafiklarni prognoz qilish uchun neyron tarmoqlari GNN yaratish uchun ishlatiladi. Masalan, tugun darajasidagi bashorat spamni aniqlash kabi muammoni hal qilishi mumkin.
Bog'lanishni bashorat qilish tavsiya qiluvchi tizimlarda odatiy hol bo'lib, u cheksiz bashorat muammosiga misol bo'lishi mumkin.
Grafik neyron tarmoq turlari
Ko'p sonli neyron tarmoqlari mavjud va ularning aksariyatida konvolyutsion neyron tarmoqlar mavjud. Biz ushbu qismda eng mashhur GNNlar haqida bilib olamiz.
Grafik konvolyutsion tarmoqlar (GCNs)
Ularni klassik CNN bilan solishtirish mumkin. U yaqin atrofdagi tugunlarga qarab xususiyatlarni oladi. Faollashtirish funksiyasi GNNlar tomonidan tugun vektorlarini yig'ish va chiqishni zich qatlamga jo'natishdan keyin chiziqli bo'lmaganlikni qo'shish uchun ishlatiladi.
U mohiyatan Grafik konvolyutsiyasi, chiziqli qatlam va o'rganmaydigan faollashtirish funksiyasidan iborat. GCNlar ikkita asosiy turga ega: Spektral konvolyutsion tarmoqlar va fazoviy konvolyutsion tarmoqlar.
Grafik avtomatik kodlovchi tarmoqlari
U grafiklarni qanday ko'rsatishni o'rganish uchun kodlovchidan va kirish grafiklarini qayta tiklashga urinish uchun dekoderdan foydalanadi. Kodlovchi va dekoderni bog'laydigan darboğaz qatlami mavjud.
Avtomatik kodlovchilar sinf balansini boshqarishda juda yaxshi ish qilganligi sababli, ular havolalarni bashorat qilishda tez-tez ishlatiladi.
Takroriy grafik neyron tarmoqlari (RGNN)
Bitta tugun ko'p sonli aloqalarga ega bo'lgan ko'p aloqali tarmoqlarda u optimal diffuziya naqshini o'rganadi va grafiklarni boshqara oladi. Yumshoqlikni oshirish va ortiqcha parametrlashtirishni kamaytirish uchun ushbu grafik neyron tarmog'ida muntazamlashtiruvchilar qo'llaniladi.
Yaxshiroq natijalarga erishish uchun RGNNlar kamroq ishlov berish quvvatini talab qiladi. Ular matn yaratish, nutqni aniqlash, mashina tarjimasi, rasm tavsifi, videoni belgilash va matnni umumlashtirish uchun ishlatiladi.
Gated neyron grafik tarmoqlari (GGNNs)
Uzoq muddatli bog'liq vazifalar haqida gap ketganda, ular RGNN dan ustundir. Uzoq muddatli bog'liqliklarga tugun, chekka va vaqtinchalik shlyuzlarni qo'shish orqali darvozali grafik neyron tarmoqlari takroriy grafik neyron tarmoqlarini yaxshilaydi.
Darvozalar Gated Recurrent Units (GRU) kabi ishlaydi, chunki ular turli bosqichlarda ma'lumotlarni eslab qolish va unutish uchun ishlatiladi.
Pytorch yordamida grafik neyron tarmog'ini amalga oshirish
Biz alohida e'tibor qaratadigan muammo tugunlarni tasniflashning umumiy muammosidir. Bizda katta ijtimoiy tarmoq mavjud musae-github, GitHub ishlab chiquvchilari uchun ochiq API dan tuzilgan.
Qirralar tugunlar orasidagi oʻzaro izdoshlar munosabatlarini koʻrsatadi, ular kamida 10 ta omborda yulduzcha boʻlgan ishlab chiquvchilarni (platforma foydalanuvchilari) ifodalaydi (esda tutingki, oʻzaro soʻz yoʻnaltirilmagan munosabatlarni bildiradi).
Tugunning joylashuvi, yulduzchali omborlar, ish beruvchi va elektron pochta manzili asosida tugun xususiyatlari olinadi. GitHub foydalanuvchisi veb-dasturchi yoki a mashina o'rganish dasturchisi bizning vazifamizdir.
Har bir foydalanuvchining lavozim nomi ushbu maqsadli funksiya uchun asos bo'lib xizmat qildi.
PyTorch o'rnatilmoqda
Boshlash uchun biz avval o'rnatishimiz kerak PyTorch. Siz uni mashinangizga mos ravishda sozlashingiz mumkin Bu yerga. Mana meniki:
Modullarni import qilish
Endi biz kerakli modullarni import qilamiz
Ma'lumotlarni import qilish va o'rganish
Keyingi qadam ma'lumotlarni o'qish va teglar faylidan dastlabki besh qator va oxirgi besh qatorni chizishdir.
To'rtta ustundan faqat ikkitasi — tugun identifikatori (ya'ni, foydalanuvchi) va ml_target, agar foydalanuvchi mashinani o'rganish hamjamiyatining a'zosi bo'lsa, 1 va aks holda 0 - bu vaziyatda biz uchun tegishli.
Faqat ikkita sinf mavjudligini hisobga olsak, endi bizning vazifamiz ikkilik tasniflash masalasi ekanligiga ishonch hosil qilishimiz mumkin.
Muhim sinf nomutanosibliklari natijasida klassifikator kam ifodalangan sinfni baholash o'rniga qaysi sinf ko'pchilik ekanligini taxmin qilishi mumkin, bu esa sinf balansini e'tiborga olish kerak bo'lgan yana bir muhim omilga aylantiradi.
Gistogrammani tuzish (chastota taqsimoti) ba'zi nomutanosiblikni aniqlaydi, chunki boshqa sinflarga qaraganda mashina o'rganishdan kamroq sinflar (yorliq = 1) mavjud.
Funktsiyani kodlash
Tugunlarning xarakteristikalari bizga har bir tugun bilan bog'liq xususiyat haqida ma'lumot beradi. Ma'lumotni kodlash usulini qo'llash orqali biz ushbu xususiyatlarni bir zumda kodlashimiz mumkin.
Biz ushbu usuldan tarmoqning kichik qismini (masalan, 60 ta tugunni) ko'rsatish uchun inkapsulyatsiya qilish uchun foydalanmoqchimiz. Kod bu erda keltirilgan.
Grafiklarni loyihalash va ko'rsatish
Biz geometrik mash'aldan foydalanamiz. bizning grafikimizni yaratish uchun ma'lumotlar.
Turli (ixtiyoriy) xususiyatlarga ega bo'lgan bitta grafikni modellashtirish uchun oddiy Python ob'ekti bo'lgan ma'lumotlardan foydalaniladi. Ushbu sinfdan va quyidagi atributlardan (barchasi mash'al tensorlari) foydalanib, biz grafik ob'ektimizni yaratamiz.
Kodlangan tugun xususiyatlariga ajratiladigan x qiymatining shakli [tugunlar soni, xususiyatlar soni].
Y ning shakli [tugunlar soni] va u tugun belgilariga qo'llaniladi.
chekka indeks: Yo'naltirilmagan grafikni tasvirlash uchun biz bir xil ikkita tugunni bog'laydigan, lekin qarama-qarshi yo'nalishda joylashgan ikkita aniq yo'naltirilgan qirralarning mavjudligiga imkon berish uchun dastlabki chekka indekslarini kengaytirishimiz kerak.
Masalan, 100 va 200 tugunlari o'rtasida, biri 200 dan 100 gacha, ikkinchisi 100 dan 200 gacha bo'lgan bir juft qirralar talab qilinadi. Agar chekka indekslari taqdim etilgan bo'lsa, unda yo'naltirilmagan grafikni shunday ko'rsatish mumkin. [2,2*asl qirralarning soni] tenzor shakli bo'ladi.
Grafikni ko'rsatish uchun biz chizilgan grafik usulimizni yaratamiz. Birinchi qadam, bir hil tarmog'imizni NetworkX grafigiga aylantirishdir, keyin uni NetworkX.draw yordamida chizish mumkin.
Bizning GNN modelimizni yarating va uni o'rgating
Biz butun ma'lumotlar to'plamini kodlashdan boshlaymiz, kodlash ma'lumotlarini light=False bilan bajaramiz va keyin butun grafikni qurish uchun light=False bilan construct graph ni chaqiramiz. Biz bu katta grafikni chizishga urinmaymiz, chunki siz cheklangan resurslarga ega mahalliy mashinadan foydalanyapsiz deb o'ylayman.
0 va 1 raqamlari yordamida har bir maxsus niqobga qaysi tugunlar tegishli ekanligini aniqlaydigan ikkilik vektorlar bo'lgan niqoblar mashg'ulot bosqichiga qaysi tugunlar mashg'ulot vaqtida kiritilishi kerakligini bildirish va xulosa bosqichiga qaysi tugunlar test ma'lumotlari ekanligini aytish uchun ishlatilishi mumkin. Mash'al geometrik. o'zgarishlar.
AddTrainValTestMask sinfining o'quv maskasi, val maskasi va sinov niqobi xususiyatlaridan foydalanib, tugun darajasidagi bo'linish qo'shilishi mumkin, bu grafikni olish va niqoblarimiz qanday tuzilishini belgilashimizga imkon beradi.
Biz faqat 10% ta'lim uchun foydalanamiz va ma'lumotlarning 60% dan test to'plami sifatida foydalanamiz va 30% tekshirish to'plami sifatida foydalanamiz.
Endi biz ikkita GCNConv qatlamini to'playmiz, ularning birinchisida chiqish funksiyalari soni grafikdagi kirish xususiyatlari sifatidagi xususiyatlar soniga teng.
Bizning sinflar soniga teng chiqish tugunlarini o'z ichiga olgan ikkinchi qatlamda biz relu faollashtirish funktsiyasini qo'llaymiz va yashirin xususiyatlarni taqdim etamiz.
Edge indeksi va chekka og'irligi GCNConv oldinga funksiyada qabul qilishi mumkin bo'lgan ko'p variantlardan ikkitasi x, lekin bizning vaziyatimizda bizga faqat birinchi ikkita o'zgaruvchi kerak.
Bizning modelimiz grafikdagi har bir tugunning sinfini taxmin qilish imkoniyatiga ega bo'lishiga qaramay, biz hali ham fazaga qarab har bir to'plam uchun aniqlik va yo'qotishlarni alohida aniqlashimiz kerak.
Misol uchun, mashg'ulot paytida biz faqat mashg'ulotning aniqligi va yo'qotilishini aniqlash uchun o'quv majmuasidan foydalanmoqchimiz, shuning uchun bizning niqoblarimiz bu erda yordam beradi.
Tegishli yo'qotish va aniqlikni hisoblash uchun biz niqoblangan yo'qotish va niqoblangan aniqlik funktsiyalarini aniqlaymiz.
Modelni o'rgatish
Endi biz mash'aldan qanday maqsadda foydalanilishini aniqladik. Adam - usta optimallashtiruvchi.
Tasdiqlashning aniqligini kuzatib, ma'lum davrlar uchun treningni o'tkazamiz.
Shuningdek, biz mashg'ulotlarning turli davrlardagi yo'qotishlari va aniqliklarini chizamiz.
Grafik neyron tarmog'ining kamchiliklari
GNNlardan foydalanish bir qator kamchiliklarga ega. GNNa-ni qachon ishlatish kerak va mashinani o'rganish modellarimiz samaradorligini qanday oshirish kerak, biz ularni yaxshiroq tushunganimizdan so'ng bizga aniq bo'ladi.
- GNNlar odatda uchta qatlamli sayoz tarmoqlar bo'lsa-da, ko'pchilik neyron tarmoqlar ish faoliyatini yaxshilash uchun chuqurlashishi mumkin. Ushbu cheklov tufayli biz katta ma'lumotlar to'plamlarida eng yaxshi natijalarni ko'rsata olmaymiz.
- Grafiklarda modelni o'rgatish qiyinroq, chunki ularning strukturaviy dinamikasi dinamikdir.
- Ushbu tarmoqlarning yuqori hisoblash xarajatlari tufayli ishlab chiqarish uchun modelni miqyoslash qiyinchiliklarni keltirib chiqaradi. Agar sizning grafik tuzilmangiz juda katta va murakkab bo'lsa, ishlab chiqarish uchun GNNni o'lchash qiyin bo'ladi.
Xulosa
So'nggi bir necha yil ichida GNNlar grafik sohasida mashinani o'rganish muammolari uchun kuchli va samarali vositalarga aylandi. Grafik neyron tarmoqlarining asosiy sharhi ushbu maqolada keltirilgan.
Shundan so'ng siz modelni o'rgatish va sinab ko'rish uchun foydalaniladigan ma'lumotlar to'plamini yaratishni boshlashingiz mumkin. Uning qanday ishlashini va nimaga qodirligini tushunish uchun siz uzoqroqqa borib, uni boshqa turdagi ma'lumotlar to'plamidan foydalanib o'rgatishingiz mumkin.
Baxtli kodlash!
Leave a Reply