کی میز کے مندرجات[چھپائیں][دکھائیں]
گہری سیکھنے کی تکنیک جو "گراف نیورل نیٹ ورکس" (GNNs) کے نام سے مشہور ہیں گراف ڈومین میں کام کرتی ہیں۔ ان نیٹ ورکس نے حال ہی میں مختلف شعبوں میں استعمال پایا ہے، بشمول کمپیوٹر ویژن، تجویز کنندہ سسٹمز، اور کمبینیٹریل آپٹیمائزیشن، چند ایک کے نام۔
اس کے علاوہ، ان نیٹ ورکس کو پیچیدہ نظاموں کی نمائندگی کرنے کے لیے استعمال کیا جا سکتا ہے، بشمول سوشل نیٹ ورکس، پروٹین-پروٹین انٹریکشن نیٹ ورکس، نالج گرافس، اور مطالعہ کے کئی شعبوں میں۔
غیر یوکلیڈین اسپیس وہ جگہ ہے جہاں گراف ڈیٹا کام کرتا ہے، دوسری قسم کے ڈیٹا جیسے تصویروں کے برعکس۔ نوڈس کی درجہ بندی کرنے، لنکس کی پیشن گوئی، اور کلسٹر ڈیٹا کے لیے، گراف تجزیہ استعمال کیا جاتا ہے۔
اس مضمون میں، ہم گراف کا جائزہ لیں گے۔ نیورل نیٹ ورک تفصیل سے، اس کی اقسام کے ساتھ ساتھ PyTorch کا استعمال کرتے ہوئے عملی مثالیں فراہم کرتے ہیں۔
تو، گراف کیا ہے؟
گراف ایک قسم کا ڈیٹا ڈھانچہ ہے جو نوڈس اور چوٹیوں سے بنا ہے۔ مختلف نوڈس کے درمیان کنکشن عمودی کی طرف سے مقرر کیا جاتا ہے. اگر نوڈس میں سمت کی نشاندہی کی جاتی ہے، تو گراف کو کہا جاتا ہے؛ دوسری صورت میں، یہ غیر مستقیم ہے.
گرافس کا ایک اچھا اطلاق a میں مختلف افراد کے درمیان تعلقات کو ماڈل کرنا ہے۔ سوشل نیٹ ورک. جب پیچیدہ حالات، جیسے روابط اور تبادلے سے نمٹنے کے لیے، گراف بہت مددگار ثابت ہوتے ہیں۔
وہ سفارشی نظام، معنوی تجزیہ، سوشل نیٹ ورک تجزیہ، اور پیٹرن کی شناخت کے ذریعہ ملازم ہیں
. گراف پر مبنی حل بنانا ایک بالکل نیا فیلڈ ہے جو پیچیدہ اور باہم منسلک ڈیٹا کی بصیرت افہام و تفہیم پیش کرتا ہے۔
گراف نیورل نیٹ ورک
گراف نیورل نیٹ ورک مخصوص نیورل نیٹ ورک کی قسمیں ہیں جو گراف ڈیٹا فارمیٹ پر کام کر سکتی ہیں۔ گراف ایمبیڈنگ اور کنوولیشنل نیورل نیٹ ورکس (CNNs) کا ان پر نمایاں اثر پڑتا ہے۔
گراف نیورل نیٹ ورک ان کاموں میں کام کرتے ہیں جن میں پیشن گوئی کرنے والے نوڈس، کناروں اور گراف شامل ہوتے ہیں۔
- CNN کا استعمال تصاویر کی درجہ بندی کے لیے کیا جاتا ہے۔ اسی طرح، کلاس کی پیشین گوئی کرنے کے لیے، GNNs کا اطلاق پکسل گرڈ پر کیا جاتا ہے جو گراف کی ساخت کی نمائندگی کرتا ہے۔
- تکراری نیورل نیٹ ورکس کا استعمال کرتے ہوئے متن کی درجہ بندی۔ GNNs کو گراف فن تعمیر کے ساتھ بھی استعمال کیا جاتا ہے جہاں فقرے کا ہر لفظ ایک نوڈ ہوتا ہے۔
نوڈس، کناروں، یا مکمل گراف کی پیشن گوئی کرنے کے لیے، نیورل نیٹ ورکس کو GNN بنانے کے لیے استعمال کیا جاتا ہے۔ مثال کے طور پر نوڈ لیول پر پیشین گوئی سپیم کا پتہ لگانے جیسے مسئلے کو حل کر سکتی ہے۔
لنک کی پیشن گوئی تجویز کنندہ کے نظام میں ایک عام معاملہ ہے اور یہ ایک کنارے کے لحاظ سے پیشین گوئی کے مسئلے کی مثال ہو سکتی ہے۔
گراف نیورل نیٹ ورک کی اقسام
نیورل نیٹ ورک کی بے شمار اقسام موجود ہیں، اور ان میں سے اکثریت میں Convolutional Neural Networks موجود ہیں۔ ہم اس حصے میں سب سے زیادہ معروف GNNs کے بارے میں جانیں گے۔
گراف کنولوشنل نیٹ ورکس (GCNs)
ان کا موازنہ کلاسک CNNs سے کیا جا سکتا ہے۔ یہ قریبی نوڈس کو دیکھ کر خصوصیات حاصل کرتا ہے۔ ایکٹیویشن فنکشن کا استعمال GNNs کے ذریعے نوڈ ویکٹر کو جمع کرنے اور آؤٹ پٹ کو گھنے پرت میں بھیجنے کے بعد غیر خطوطی کو شامل کرنے کے لیے کیا جاتا ہے۔
یہ جوہر میں گراف کنوولوشن، ایک لکیری پرت، اور غیر سیکھنے والے ایکٹیویشن فنکشن سے بنا ہے۔ GCNs دو اہم اقسام میں آتے ہیں: اسپیکٹرل کنولوشنل نیٹ ورکس اور اسپیشل کنوولیشنل نیٹ ورکس۔
گراف آٹو انکوڈر نیٹ ورکس
یہ گراف کی نمائندگی کرنے کا طریقہ سیکھنے کے لیے ایک انکوڈر کا استعمال کرتا ہے اور ان پٹ گرافس کو دوبارہ بنانے کی کوشش کرنے کے لیے ایک ڈیکوڈر کا استعمال کرتا ہے۔ انکوڈر اور ڈیکوڈر کو جوڑنے والی ایک رکاوٹ پرت ہے۔
چونکہ آٹو انکوڈر کلاس بیلنس کو سنبھالنے کا بہترین کام کرتے ہیں، اس لیے ان کا اکثر لنک پیشین گوئی میں استعمال ہوتا ہے۔
ریکرنٹ گراف نیورل نیٹ ورکس (RGNNs)
ملٹی ریلیشنل نیٹ ورکس میں، جہاں ایک نوڈ کے متعدد تعلقات ہوتے ہیں، یہ زیادہ سے زیادہ پھیلاؤ کا نمونہ سیکھتا ہے اور گراف کو منظم کر سکتا ہے۔ ہمواری کو بڑھانے اور اوور پیرامیٹرائزیشن کو کم کرنے کے لیے، گراف نیورل نیٹ ورک کی اس شکل میں ریگولرائزر استعمال کیے جاتے ہیں۔
بہتر نتائج حاصل کرنے کے لیے، RGNNs کو کم پروسیسنگ پاور کی ضرورت ہوتی ہے۔ ان کا استعمال ٹیکسٹ جنریشن، اسپیچ ریکگنیشن، مشین ٹرانسلیشن، تصویر کی تفصیل، ویڈیو ٹیگنگ اور ٹیکسٹ سمریائزیشن کے لیے کیا جاتا ہے۔
گیٹڈ نیورل گراف نیٹ ورکس (GGNNs)
جب طویل مدتی منحصر کاموں کی بات آتی ہے، تو وہ RGNN کو پیچھے چھوڑ دیتے ہیں۔ طویل مدتی انحصار پر نوڈ، ایج، اور عارضی گیٹس کو شامل کرکے، گیٹڈ گراف نیورل نیٹ ورکس بار بار گراف نیورل نیٹ ورکس کو بڑھاتے ہیں۔
گیٹس گیٹڈ ریکرنٹ یونٹس (GRUs) کی طرح کام کرتے ہیں کہ وہ مختلف مراحل میں ڈیٹا کو یاد کرنے اور بھولنے کے عادی ہوتے ہیں۔
Pytorch کا استعمال کرتے ہوئے گراف نیورل نیٹ ورک کو نافذ کرنا
ہم جس مخصوص مسئلے پر توجہ مرکوز کریں گے وہ ایک عام نوڈ کی درجہ بندی کا مسئلہ ہے۔ ہمارے پاس ایک بڑا سوشل نیٹ ورک ہے جسے کہتے ہیں۔ musae-github، جو GitHub ڈویلپرز کے لیے اوپن API سے مرتب کیا گیا تھا۔
کنارے نوڈس کے درمیان باہمی پیروکار کے تعلقات کو ظاہر کرتے ہیں، جو ڈویلپرز (پلیٹ فارم استعمال کرنے والے) کی نمائندگی کرتے ہیں جنہوں نے کم از کم 10 ریپوزٹریوں میں ستارے کیے ہیں (نوٹ کریں کہ لفظ باہمی غیر متعین تعلقات کی نشاندہی کرتا ہے)۔
نوڈ کے مقام، ستارے والے ذخیرے، آجر، اور ای میل ایڈریس کی بنیاد پر، نوڈ کی خصوصیات بازیافت کی جاتی ہیں۔ پیشن گوئی کرنا کہ آیا GitHub صارف ویب ڈویلپر ہے یا a مشین لرننگ ڈویلپر ہمارا کام ہے.
ہر صارف کے جاب ٹائٹل نے اس ٹارگٹنگ فنکشن کی بنیاد کے طور پر کام کیا۔
PyTorch انسٹال کرنا
شروع کرنے کے لیے، ہمیں پہلے انسٹال کرنے کی ضرورت ہے۔ پی ٹورچ. آپ اسے اپنی مشین کے مطابق ترتیب دے سکتے ہیں۔ یہاں. یہ میرا ہے:
ماڈیولز کی درآمد
اب، ہم ضروری ماڈیولز درآمد کرتے ہیں۔
ڈیٹا کو امپورٹ اور ایکسپلور کرنا
درج ذیل مرحلہ ڈیٹا کو پڑھنا اور لیبل فائل سے پہلی پانچ قطاروں اور آخری پانچ قطاروں کو پلاٹ کرنا ہے۔
چار کالموں میں سے صرف دو — نوڈ کی آئی ڈی (یعنی صارف) اور ml_target، جو کہ 1 ہے اگر صارف مشین لرننگ کمیونٹی کا رکن ہے اور 0 دوسری صورت میں — اس صورت حال میں ہمارے لیے متعلقہ ہیں۔
یہ دیکھتے ہوئے کہ صرف دو کلاسیں ہیں، اب ہم یقین کر سکتے ہیں کہ ہمارا کام بائنری درجہ بندی کا مسئلہ ہے۔
نمایاں طبقاتی عدم توازن کے نتیجے میں، درجہ بندی کرنے والا صرف یہ اندازہ لگا سکتا ہے کہ کون سا طبقہ اکثریت میں ہے بجائے اس کے کہ کم نمائندگی والے طبقے کا جائزہ لیا جائے، جس سے طبقاتی توازن کو ایک اور اہم عنصر پر غور کرنا چاہیے۔
ہسٹوگرام (فریکوئنسی ڈسٹری بیوشن) کو پلاٹ کرنا کچھ عدم توازن کو ظاہر کرتا ہے کیونکہ مشین لرننگ (لیبل=1) کی دوسری کلاسوں کی نسبت کم کلاسز ہیں۔
فیچر انکوڈنگ
نوڈس کی خصوصیات ہمیں اس خصوصیت سے آگاہ کرتی ہیں جو ہر نوڈ کے ساتھ وابستہ ہے۔ ڈیٹا کو انکوڈ کرنے کے اپنے طریقہ کار کو نافذ کرنے سے، ہم ان خصوصیات کو فوری طور پر انکوڈ کر سکتے ہیں۔
ہم اس طریقے کو استعمال کرتے ہوئے نیٹ ورک کے ایک چھوٹے سے حصے (کہیں، 60 نوڈس) کو ڈسپلے کے لیے استعمال کرنا چاہتے ہیں۔ کوڈ یہاں درج ہے۔
گراف ڈیزائن اور ڈسپلے کرنا
ہم ٹارچ جیومیٹرک استعمال کریں گے۔ ہمارے گراف کو بنانے کے لیے ڈیٹا۔
مختلف (اختیاری) خصوصیات کے ساتھ سنگل گراف کو ماڈل کرنے کے لیے، ڈیٹا جو ایک سادہ Python آبجیکٹ ہے استعمال کیا جاتا ہے۔ اس طبقے اور درج ذیل صفات کو استعمال کرتے ہوئے - یہ سب ٹارچ ٹینسر ہیں - ہم اپنا گراف آبجیکٹ بنائیں گے۔
قدر x کی شکل، جو انکوڈ شدہ نوڈ فیچرز کے لیے مختص کی جائے گی، ہے [نوڈس کی تعداد، خصوصیات کی تعداد]۔
y کی شکل [نوڈس کی تعداد] ہے، اور اس کا اطلاق نوڈ لیبل پر کیا جائے گا۔
کنارے کا اشاریہ: ایک غیر ہدایت شدہ گراف کی وضاحت کرنے کے لیے، ہمیں اصل کنارے کے اشاریوں کو پھیلانے کی ضرورت ہے تاکہ دو الگ الگ سمت والے کناروں کی موجودگی کی اجازت دی جا سکے جو ایک ہی دو نوڈس کو جوڑتے ہیں لیکن مخالف سمتوں کی طرف اشارہ کرتے ہیں۔
کناروں کا ایک جوڑا، ایک نوڈ 100 سے 200 تک اور دوسرا 200 سے 100 تک، کی ضرورت ہے، مثال کے طور پر، نوڈس 100 اور 200 کے درمیان۔ اگر کنارے کے اشاریے فراہم کیے گئے ہیں، تو اس طرح غیر ہدایت شدہ گراف کی نمائندگی کی جا سکتی ہے۔ [2,2*اصل کناروں کی تعداد] ٹینسر کی شکل ہوگی۔
ہم گراف کو ظاہر کرنے کے لیے اپنا ڈرا گراف طریقہ بناتے ہیں۔ پہلا قدم یہ ہے کہ ہمارے ہم جنس نیٹ ورک کو نیٹ ورک ایکس گراف میں تبدیل کیا جائے، جسے پھر NetworkX.draw کا استعمال کرتے ہوئے تیار کیا جا سکتا ہے۔
ہمارا GNN ماڈل بنائیں اور اسے تربیت دیں۔
ہم ڈیٹا کے پورے سیٹ کو انکوڈ ڈیٹا کو light=False کے ساتھ عمل میں لا کر شروع کرتے ہیں اور پھر پورے گراف کو بنانے کے لیے light=False کے ساتھ construct graph کو کال کرتے ہیں۔ ہم اس بڑے گراف کو کھینچنے کی کوشش نہیں کریں گے کیونکہ میں فرض کر رہا ہوں کہ آپ ایک مقامی مشین استعمال کر رہے ہیں جس کے وسائل محدود ہیں۔
ماسک، جو بائنری ویکٹر ہیں جو 0 اور 1 ہندسوں کا استعمال کرتے ہوئے ہر مخصوص ماسک کے کون سے نوڈس سے تعلق رکھتے ہیں، کا استعمال تربیتی مرحلے کو مطلع کرنے کے لیے کیا جا سکتا ہے کہ کون سے نوڈس کو تربیت کے دوران شامل کیا جانا چاہیے اور یہ بتانے کے لیے کہ کون سے نوڈس ٹیسٹ ڈیٹا ہیں۔ ٹارچ geometric.transforms.
AddTrainValTestMask کلاس کے ٹریننگ ماسک، ویل ماسک، اور ٹیسٹ ماسک کی خصوصیات کا استعمال کرتے ہوئے نوڈ لیول کی تقسیم شامل کی جا سکتی ہے، جس کا استعمال گراف لینے کے لیے کیا جا سکتا ہے اور ہمیں یہ بتانے کے قابل بنایا جا سکتا ہے کہ ہم اپنے ماسک کو کس طرح بنانا چاہتے ہیں۔
ہم صرف 10% کو تربیت کے لیے استعمال کرتے ہیں اور 60% ڈیٹا کو ٹیسٹ سیٹ کے طور پر استعمال کرتے ہیں جبکہ 30% کو توثیق سیٹ کے طور پر استعمال کرتے ہیں۔
اب، ہم دو GCNConv تہوں کو اسٹیک کریں گے، جن میں سے پہلی میں آؤٹ پٹ فیچر کا شمار ہمارے گراف میں ان پٹ فیچرز کے فیچرز کی تعداد کے برابر ہے۔
دوسری تہہ میں، جس میں ہماری کلاسوں کی تعداد کے برابر آؤٹ پٹ نوڈس ہوتے ہیں، ہم ریلو ایکٹیویشن فنکشن کا اطلاق کرتے ہیں اور پوشیدہ خصوصیات فراہم کرتے ہیں۔
Edge index اور edge weight بہت سے اختیارات میں سے دو ہیں x جنہیں GCNConv فارورڈ فنکشن میں قبول کر سکتا ہے، لیکن ہماری صورتحال میں، ہمیں صرف پہلے دو متغیرات کی ضرورت ہے۔
اس حقیقت کے باوجود کہ ہمارا ماڈل گراف میں ہر نوڈ کی کلاس کی پیشین گوئی کرنے کے قابل ہو جائے گا، ہمیں اب بھی مرحلے کے لحاظ سے ہر سیٹ کے لیے الگ الگ درستگی اور نقصان کا تعین کرنے کی ضرورت ہے۔
مثال کے طور پر، تربیت کے دوران، ہم درستگی اور تربیت کے نقصان کا تعین کرنے کے لیے صرف ٹریننگ سیٹ کو استعمال کرنا چاہتے ہیں، اور اسی لیے ہمارے ماسک کام آتے ہیں۔
مناسب نقصان اور درستگی کا حساب لگانے کے لیے، ہم نقاب پوش نقصان اور ماسک شدہ درستگی کے افعال کی وضاحت کریں گے۔
ماڈل کی تربیت
اب جب کہ ہم نے تربیتی مقصد کی وضاحت کر دی ہے جس کے لیے مشعل استعمال کی جائے گی۔ آدم ایک ماہر اصلاح کار ہے۔
ہم توثیق کی درستگی پر نظر رکھتے ہوئے ایک مخصوص تعداد کے لیے تربیت کا انعقاد کریں گے۔
ہم مختلف ادوار میں تربیت کے نقصانات اور درستگیوں کی بھی منصوبہ بندی کرتے ہیں۔
گراف نیورل نیٹ ورک کے نقصانات
GNNs استعمال کرنے کے کچھ نقصانات ہیں۔ GNNa کو کب استعمال کرنا ہے اور ہمارے مشین لرننگ ماڈلز کی کارکردگی کو کس طرح بڑھانا ہے، یہ دونوں ہمیں ان کے بارے میں بہتر طور پر سمجھنے کے بعد واضح ہو جائیں گے۔
- جبکہ GNN اتلی نیٹ ورکس ہیں، عام طور پر تین تہوں کے ساتھ، زیادہ تر عصبی نیٹ ورک کارکردگی کو بہتر بنانے کے لیے گہرائی میں جا سکتے ہیں۔ اس حد کی وجہ سے ہم بڑے ڈیٹا سیٹس پر بہترین کارکردگی کا مظاہرہ کرنے سے قاصر ہیں۔
- گراف پر ماڈل کو تربیت دینا زیادہ مشکل ہے، کیونکہ ان کی ساختی حرکیات متحرک ہیں۔
- ان نیٹ ورکس کے زیادہ کمپیوٹیشنل اخراجات کی وجہ سے، پیداوار کے لیے ماڈل کو پیمانہ کرنا چیلنجز پیش کرتا ہے۔ اگر آپ کا گراف کا ڈھانچہ بہت بڑا اور پیچیدہ ہے تو پیداوار کے لیے GNNs کی پیمائش کرنا مشکل ہو گا۔
نتیجہ
پچھلے کچھ سالوں میں، GNNs نے گراف ڈومین میں مشین لرننگ کے مسائل کے لیے طاقتور اور موثر ٹولز تیار کیے ہیں۔ گراف نیورل نیٹ ورکس کا ایک بنیادی جائزہ اس مضمون میں دیا گیا ہے۔
اس کے بعد، آپ ڈیٹاسیٹ بنانا شروع کر سکتے ہیں جو ماڈل کو تربیت دینے اور جانچنے کے لیے استعمال کیا جائے گا۔ یہ سمجھنے کے لیے کہ یہ کس طرح کام کرتا ہے اور یہ کیا کرنے کی صلاحیت رکھتا ہے، آپ بہت آگے جا سکتے ہیں اور مختلف قسم کے ڈیٹاسیٹ کا استعمال کرتے ہوئے اسے تربیت دے سکتے ہیں۔
کوڈنگ مبارک ہو!
جواب دیجئے