ما هي الشبكات العصبونية البيانية (GNNs)؟
الشبكات العصبونية البيانية (GNNs) هي فئة قوية من الشبكات العصبونية المصممة خصيصًا لإجراء التعلم الآلي على البيانات المهيكلة على شكل رسوم بيانية. على عكس أنواع البيانات التقليدية مثل الصور (شبكات من البكسلات) أو النصوص (سلاسل من الكلمات)، فإن الكثير من بيانات العالم مترابطة، من الشبكات الاجتماعية والمعاملات المالية إلى الهياكل الجزيئية وأنظمة النقل. تتفوق الشبكات العصبونية البيانية في حل المشكلات على هذه البيانات العلائقية من خلال التعلم مباشرة من الاتصالات والعلاقات بين الكيانات.
الفكرة الأساسية وراء الشبكات العصبونية البيانية هي تمرير الرسائل، حيث تتبادل العقد في الرسم البياني المعلومات بشكل متكرر مع جيرانها. تسمح هذه العملية لكل عقدة ببناء فهم غني وسياقي لموقعها داخل الرسم البياني. بعد عدة جولات من تمرير الرسائل، يمكن استخدام تمثيلات العقد الناتجة لمهام مختلفة مثل التنبؤ بخصائص العقد (على سبيل المثال، تحديد اهتمامات المستخدم)، أو التنبؤ بالروابط (على سبيل المثال، التوصية بصديق جديد)، أو تصنيف الرسم البياني بأكمله (على سبيل المثال، تحديد ما إذا كان الجزيء سامًا). مكتبات مثل PyTorch Geometric (PyG) تجعل بناء وتدريب هذه النماذج المعقدة في متناول المطورين.
الميزات الرئيسية
- التعلم العلائقي: تم تصميم الشبكات العصبونية البيانية بطبيعتها لنمذجة والتعلم من العلاقات والهيكل داخل البيانات البيانية، وهو أمر تجد النماذج التقليدية صعوبة فيه.
- ثبات التبديل: يكون ناتج الشبكة العصبونية البيانية مستقلاً عن ترتيب معالجة العقد، وهي خاصية طبيعية للبيانات البيانية.
- التدريب من البداية إلى النهاية: يمكن تدريب الشبكات العصبونية البيانية من البداية إلى النهاية لمهام مختلفة قائمة على الرسوم البيانية، بما في ذلك تصنيف العقد وتصنيف الرسوم البيانية وتوقع الروابط.
- التركيبية: يمكن تكديس طبقات GNN لإنشاء نماذج عميقة، مما يسمح لها بالتقاط المعلومات من جوارات أكبر بشكل متزايد حول كل عقدة.
- قابلية التوسع: أطر عمل GNN الحديثة مثل PyTorch Geometric محسّنة للغاية ويمكن أن تتوسع لتشمل رسومًا بيانية تحتوي على ملايين أو حتى مليارات العقد والحواف.
حالات الاستخدام
- تحليل الشبكات الاجتماعية: تحديد المجتمعات، واكتشاف المستخدمين المؤثرين، والتنبؤ بالاتصالات أو الصداقات الجديدة.
- أنظمة التوصية: تشغيل محركات التوصية (على سبيل المثال، للمنتجات أو الأفلام أو الموسيقى) عن طريق نمذجة العلاقات بين المستخدمين والعناصر.
- اكتشاف الأدوية والكيمياء: التنبؤ بالخصائص الجزيئية، واكتشاف مرشحين جدد للأدوية، وفهم تفاعلات البروتين عن طريق التعامل مع الجزيئات كرسوم بيانية.
- كشف الاحتيال: تحديد الأنشطة الاحتيالية المعقدة في شبكات المعاملات المالية عن طريق رصد الأنماط والاتصالات الشاذة.
- توقع حركة المرور: التنبؤ بتدفق حركة المرور وأوقات السفر عن طريق نمذجة شبكات الطرق كرسوم بيانية ذات ميزات ديناميكية.
البدء
إليك مثال “أهلاً بالعالم” للشبكات العصبونية البيانية باستخدام مكتبة PyTorch Geometric الشهيرة. يقوم هذا الرمز بتدريب شبكة تلافيفية بيانية (GCN) بسيطة لإجراء تصنيف للعقد على مجموعة بيانات Cora، وهي معيار قياسي لشبكات الاستشهاد.
أولاً، تأكد من تثبيت PyTorch و PyG: ```bash
قم بتثبيت PyTorch أولاً
pip install torch
قم بتثبيت PyTorch Geometric
pip install torch-geometric
الآن، يمكنك تعريف وتدريب نموذج GNN الخاص بك: ```python import torch import torch.nn.functional as F from torch_geometric.datasets import Planetoid from torch_geometric.nn import GCNConv
تحميل مجموعة بيانات Cora
dataset = Planetoid(root=’/tmp/Cora’, name=’Cora’) data = dataset[0]
تعريف نموذج GCN بسيط
class GCN(torch.nn.Module): def init(self): super().init() # طبقة GCN الأولى: ميزات الإدخال -> 16 ميزة مخفية self.conv1 = GCNConv(dataset.num_node_features, 16) # طبقة GCN الثانية: 16 ميزة مخفية -> عدد الفئات self.conv2 = GCNConv(16, dataset.num_classes)
def forward(self, data):
x, edge_index = data.x, data.edge_index
x = self.conv1(x, edge_index)
x = F.relu(x)
x = F.dropout(x, training=self.training)
x = self.conv2(x, edge_index)
return F.log_softmax(x, dim=1)
إعداد للتدريب
device = torch.device(‘cuda’ if torch.cuda.is_available() else ‘cpu’) model = GCN().to(device) data = data.to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
حلقة التدريب
model.train() for epoch in range(200): optimizer.zero_grad() out = model(data) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() if epoch % 20 == 0: print(f’الحقبة {epoch}, الخسارة: {loss.item():.4f}’)
تقييم النموذج
model.eval() pred = model(data).argmax(dim=1) correct = (pred[data.test_mask] == data.y[data.test_mask]).sum() acc = int(correct) / int(data.test_mask.sum()) print(f’الدقة على مجموعة الاختبار: {acc:.4f}’)
التسعير
الشبكات العصبونية البيانية هي بنية نموذج مفتوحة المصدر. التكلفة الأساسية المرتبطة باستخدامها هي الموارد الحاسوبية (CPU/GPU) المطلوبة للتدريب والاستدلال، خاصة على الرسوم البيانية الكبيرة جدًا. مكتبات مثل PyTorch Geometric و DGL و Spektral مجانية للاستخدام بموجب تراخيص مفتوحة المصدر متساهلة مثل ترخيص MIT.