विषय - सूची[छिपाना][प्रदर्शन]
"ग्राफ न्यूरल नेटवर्क" (जीएनएन) के रूप में जानी जाने वाली गहरी सीखने की तकनीक ग्राफ डोमेन में काम करती है। इन नेटवर्कों ने हाल ही में कई क्षेत्रों में उपयोग पाया है, जिनमें कुछ नाम रखने के लिए कंप्यूटर विज़न, सिफ़ारिश सिस्टम और कॉम्बीनेटरियल ऑप्टिमाइज़ेशन शामिल हैं।
इसके अलावा, इन नेटवर्कों का उपयोग अध्ययन के कई क्षेत्रों में सामाजिक नेटवर्क, प्रोटीन-प्रोटीन इंटरैक्शन नेटवर्क, ज्ञान ग्राफ और अन्य सहित जटिल प्रणालियों का प्रतिनिधित्व करने के लिए किया जा सकता है।
अन्य प्रकार के डेटा जैसे चित्रों के विपरीत, गैर-यूक्लिडियन स्थान वह जगह है जहां ग्राफ़ डेटा संचालित होता है। नोड्स को वर्गीकृत करने, लिंक की भविष्यवाणी करने और क्लस्टर डेटा के लिए, ग्राफ विश्लेषण का उपयोग किया जाता है।
इस लेख में, हम ग्राफ की जांच करेंगे तंत्रिका नेटवर्क विस्तार से, इसके प्रकार, साथ ही साथ PyTorch का उपयोग करके व्यावहारिक उदाहरण प्रदान करते हैं।
तो, ग्राफ क्या है?
ग्राफ एक प्रकार की डेटा संरचना है जो नोड्स और वर्टिस से बनी होती है। विभिन्न नोड्स के बीच संबंध शिखर द्वारा निर्धारित किए जाते हैं। यदि दिशा नोड्स में इंगित की जाती है, तो ग्राफ को निर्देशित कहा जाता है; अन्यथा, यह अप्रत्यक्ष है।
ग्राफ का एक अच्छा अनुप्रयोग विभिन्न व्यक्तियों के बीच संबंधों को मॉडलिंग कर रहा है: सामाजिक नेटवर्क. लिंक और एक्सचेंज जैसी जटिल परिस्थितियों से निपटने के दौरान, ग्राफ़ बहुत मददगार होते हैं।
वे अनुशंसा प्रणाली, सिमेंटिक विश्लेषण, सामाजिक नेटवर्क विश्लेषण और पैटर्न पहचान द्वारा नियोजित हैं
. ग्राफ-आधारित समाधान बनाना एक बिल्कुल नया क्षेत्र है जो जटिल और परस्पर संबंधित डेटा की एक व्यावहारिक समझ प्रदान करता है।
ग्राफ तंत्रिका नेटवर्क
ग्राफ़ तंत्रिका नेटवर्क विशिष्ट तंत्रिका नेटवर्क प्रकार हैं जो ग्राफ़ डेटा प्रारूप पर काम कर सकते हैं। ग्राफ एम्बेडिंग और कन्वेन्शनल न्यूरल नेटवर्क (CNN) का उन पर महत्वपूर्ण प्रभाव पड़ता है।
ग्राफ़ न्यूरल नेटवर्क उन कार्यों में नियोजित होते हैं जिनमें नोड्स, किनारों और ग्राफ़ की भविष्यवाणी करना शामिल होता है।
- छवियों को वर्गीकृत करने के लिए सीएनएन का उपयोग किया जाता है। इसी तरह, एक वर्ग की भविष्यवाणी करने के लिए, GNN को पिक्सेल ग्रिड पर लागू किया जाता है जो ग्राफ़ संरचना का प्रतिनिधित्व करता है।
- पुनरावृत्ति तंत्रिका नेटवर्क का उपयोग करके पाठ वर्गीकरण। जीएनएन का उपयोग ग्राफ आर्किटेक्चर के साथ भी किया जाता है जहां वाक्यांश में प्रत्येक शब्द एक नोड होता है।
नोड्स, किनारों या पूर्ण ग्राफ़ का पूर्वानुमान लगाने के लिए, GNN बनाने के लिए तंत्रिका नेटवर्क का उपयोग किया जाता है। उदाहरण के लिए, नोड स्तर पर एक भविष्यवाणी स्पैम का पता लगाने जैसी समस्या का समाधान कर सकती है।
लिंक भविष्यवाणी अनुशंसा प्रणाली में एक विशिष्ट मामला है और यह किनारे-वार भविष्यवाणी समस्या का एक उदाहरण हो सकता है।
ग्राफ़ तंत्रिका नेटवर्क प्रकार
कई प्रकार के तंत्रिका नेटवर्क मौजूद हैं, और उनमें से अधिकांश में कनवल्शनल न्यूरल नेटवर्क मौजूद हैं। हम इस भाग में सबसे प्रसिद्ध GNN के बारे में जानेंगे।
ग्राफ संवैधानिक नेटवर्क (GCNs)
वे क्लासिक सीएनएन के बराबर हैं। यह आस-पास के नोड्स को देखकर विशेषताओं को प्राप्त करता है। सक्रियण फ़ंक्शन का उपयोग जीएनएन द्वारा नोड वैक्टर को एकत्र करने और घने परत पर आउटपुट भेजने के बाद गैर-रैखिकता जोड़ने के लिए किया जाता है।
यह संक्षेप में ग्राफ़ कनवल्शन, एक लीनियर लेयर और एक नॉन-लर्नर एक्टिवेशन फंक्शन से बना है। GCNs दो मुख्य किस्मों में आते हैं: स्पेक्ट्रल कनवल्शनल नेटवर्क्स और स्पैटियल कनवल्शनल नेटवर्क्स।
ग्राफ ऑटो-एनकोडर नेटवर्क
यह ग्राफ़ का प्रतिनिधित्व करने का तरीका जानने के लिए एक एन्कोडर का उपयोग करता है और इनपुट ग्राफ़ को फिर से बनाने का प्रयास करने के लिए एक डिकोडर का उपयोग करता है। एन्कोडर और डिकोडर को जोड़ने वाली एक अड़चन परत है।
चूंकि ऑटो-एनकोडर वर्ग संतुलन को संभालने का एक उत्कृष्ट काम करते हैं, इसलिए उन्हें अक्सर लिंक भविष्यवाणी में उपयोग किया जाता है।
आवर्तक ग्राफ तंत्रिका नेटवर्क (आरजीएनएन)
मल्टी-रिलेशनल नेटवर्क में, जहां एक नोड में कई संबंध होते हैं, यह इष्टतम प्रसार पैटर्न सीखता है और ग्राफ़ का प्रबंधन कर सकता है। चिकनाई बढ़ाने और अति-पैरामीटरीकरण को कम करने के लिए, ग्राफ़ न्यूरल नेटवर्क के इस रूप में रेगुलराइज़र का उपयोग किया जाता है।
बेहतर परिणाम प्राप्त करने के लिए, RGNN को कम प्रसंस्करण शक्ति की आवश्यकता होती है। उनका उपयोग टेक्स्ट जनरेशन, स्पीच रिकग्निशन, मशीन ट्रांसलेशन, पिक्चर डिस्क्रिप्शन, वीडियो टैगिंग और टेक्स्ट सारांश के लिए किया जाता है।
गेटेड न्यूरल ग्राफ नेटवर्क (जीजीएनएन)
जब दीर्घकालिक निर्भर कार्यों की बात आती है, तो वे RGNN से बेहतर प्रदर्शन करते हैं। लंबी अवधि की निर्भरता पर नोड, एज और टेम्पोरल गेट्स को शामिल करके, गेटेड ग्राफ न्यूरल नेटवर्क आवर्तक ग्राफ न्यूरल नेटवर्क को बढ़ाते हैं।
गेट गेटेड रिकरंट यूनिट्स (जीआरयू) के समान कार्य करते हैं, जिसमें उनका उपयोग विभिन्न चरणों में डेटा को वापस बुलाने और भूलने के लिए किया जाता है।
Pytorch का उपयोग करके ग्राफ़ न्यूरल नेटवर्क को लागू करना
जिस विशिष्ट मुद्दे पर हम ध्यान केंद्रित करेंगे, वह एक सामान्य नोड वर्गीकरण समस्या है। हमारे पास एक बड़ा सामाजिक नेटवर्क है जिसे कहा जाता है मुसे-गीथब, जिसे गिटहब डेवलपर्स के लिए ओपन एपीआई से संकलित किया गया था।
किनारे नोड्स के बीच पारस्परिक अनुयायी संबंध दिखाते हैं, जो डेवलपर्स (प्लेटफ़ॉर्म उपयोगकर्ता) का प्रतिनिधित्व करते हैं जिन्होंने कम से कम 10 रिपॉजिटरी में तारांकित किया है (ध्यान दें कि पारस्परिक शब्द एक अप्रत्यक्ष संबंध इंगित करता है)।
नोड के स्थान, तारांकित रिपॉजिटरी, नियोक्ता और ईमेल पते के आधार पर, नोड विशेषताओं को पुनः प्राप्त किया जाता है। भविष्यवाणी करना कि क्या GitHub उपयोगकर्ता एक वेब डेवलपर है या a मशीन लर्निंग डेवलपर हमारा कार्य है।
प्रत्येक उपयोगकर्ता का कार्य शीर्षक इस लक्ष्यीकरण फ़ंक्शन के आधार के रूप में कार्य करता है।
PyTorch स्थापित करना
शुरू करने के लिए, हमें सबसे पहले इंस्टॉल करना होगा पायटॉर्च. आप इसे अपनी मशीन के अनुसार कॉन्फ़िगर कर सकते हैं यहाँ उत्पन्न करें. यह रहा मेरा:
मॉड्यूल आयात करना
अब, हम आवश्यक मॉड्यूल आयात करते हैं
डेटा आयात और एक्सप्लोर करें
निम्न चरण डेटा को पढ़ना और लेबल फ़ाइल से पहली पाँच पंक्तियों और अंतिम पाँच पंक्तियों को प्लॉट करना है।
चार में से केवल दो कॉलम- नोड की आईडी (यानी, उपयोगकर्ता) और ml_target, जो 1 है यदि उपयोगकर्ता मशीन लर्निंग समुदाय का सदस्य है और 0 अन्यथा- इस स्थिति में हमारे लिए प्रासंगिक हैं।
यह देखते हुए कि केवल दो वर्ग हैं, अब हम निश्चित हो सकते हैं कि हमारा कार्य एक द्विआधारी वर्गीकरण मुद्दा है।
महत्वपूर्ण वर्ग असंतुलन के परिणामस्वरूप, क्लासिफायरियर केवल यह मान सकता है कि कम प्रतिनिधित्व वाले वर्ग का मूल्यांकन करने के बजाय कौन सा वर्ग बहुसंख्यक है, जिससे वर्ग संतुलन पर विचार करने के लिए एक और महत्वपूर्ण कारक बन जाता है।
हिस्टोग्राम (आवृत्ति वितरण) को प्लॉट करने से कुछ असंतुलन का पता चलता है क्योंकि अन्य कक्षाओं की तुलना में मशीन लर्निंग (लेबल = 1) से कम कक्षाएं होती हैं।
फ़ीचर एन्कोडिंग
नोड्स की विशेषताएं हमें उस सुविधा के बारे में सूचित करती हैं जो प्रत्येक नोड से जुड़ी होती है। डेटा को एन्कोड करने की हमारी विधि को लागू करके, हम तुरंत उन विशेषताओं को एन्कोड कर सकते हैं।
हम प्रदर्शन के लिए नेटवर्क के एक छोटे से हिस्से (जैसे, 60 नोड्स) को इनकैप्सुलेट करने के लिए इस पद्धति का उपयोग करना चाहते हैं। कोड यहां सूचीबद्ध है।
रेखांकन डिजाइन करना और प्रदर्शित करना
हम मशाल ज्यामितीय का उपयोग करेंगे। हमारे ग्राफ का निर्माण करने के लिए डेटा।
अलग-अलग (वैकल्पिक) गुणों वाले एकल ग्राफ़ को मॉडल करने के लिए, डेटा जो एक साधारण पायथन ऑब्जेक्ट है, का उपयोग किया जाता है। इस वर्ग और निम्नलिखित विशेषताओं का उपयोग करके - ये सभी टार्च टेंसर हैं - हम अपना ग्राफ ऑब्जेक्ट बनाएंगे।
मान x का रूप, जो एन्कोडेड नोड सुविधाओं को आवंटित किया जाएगा, [नोड्स की संख्या, सुविधाओं की संख्या] है।
y का आकार [नोड्स की संख्या] है, और इसे नोड लेबल पर लागू किया जाएगा।
एज इंडेक्स: एक अप्रत्यक्ष ग्राफ का वर्णन करने के लिए, हमें दो अलग-अलग निर्देशित किनारों के अस्तित्व की अनुमति देने के लिए मूल एज इंडेक्स का विस्तार करने की आवश्यकता है जो समान दो नोड्स को जोड़ते हैं लेकिन विपरीत दिशाओं में इंगित करते हैं।
किनारों की एक जोड़ी, एक नोड 100 से 200 तक और दूसरी 200 से 100 तक, की आवश्यकता होती है, उदाहरण के लिए, नोड्स 100 और 200 के बीच। यदि किनारे सूचकांक प्रदान किए जाते हैं, तो इस तरह से अप्रत्यक्ष ग्राफ का प्रतिनिधित्व किया जा सकता है। [2,2*मूल किनारों की संख्या] टेंसर रूप होगा।
हम ग्राफ़ प्रदर्शित करने के लिए अपनी ड्रा ग्राफ़ विधि बनाते हैं। पहला कदम हमारे सजातीय नेटवर्क को नेटवर्कएक्स ग्राफ में बदलना है, जिसे बाद में NetworkX.draw का उपयोग करके खींचा जा सकता है।
हमारा GNN मॉडल बनाएं और उसे प्रशिक्षित करें
हम डेटा के पूरे सेट को प्रकाश = गलत के साथ एन्कोड डेटा निष्पादित करके एन्कोड करके शुरू करते हैं और फिर पूरे ग्राफ को बनाने के लिए प्रकाश = गलत के साथ निर्माण ग्राफ को कॉल करते हैं। हम इस बड़े ग्राफ को खींचने का प्रयास नहीं करेंगे क्योंकि मुझे लगता है कि आप एक स्थानीय मशीन का उपयोग कर रहे हैं जिसके पास सीमित संसाधन हैं।
मास्क, जो बाइनरी वैक्टर हैं जो पहचानते हैं कि कौन से नोड्स प्रत्येक विशिष्ट मास्क से संबंधित हैं, जो अंक 0 और 1 का उपयोग करते हैं, प्रशिक्षण चरण को सूचित करने के लिए उपयोग किया जा सकता है कि प्रशिक्षण के दौरान कौन से नोड्स शामिल किए जाने चाहिए और अनुमान चरण को बताने के लिए कि कौन से नोड परीक्षण डेटा हैं। मशाल ज्यामितीय.रूपांतरण।
AddTrainValTestMask वर्ग के प्रशिक्षण मास्क, वैल मास्क और टेस्ट मास्क गुणों का उपयोग करके एक नोड-स्तरीय विभाजन जोड़ा जा सकता है, जिसका उपयोग ग्राफ़ लेने के लिए किया जा सकता है और हमें यह निर्दिष्ट करने में सक्षम बनाता है कि हम अपने मास्क का निर्माण कैसे करना चाहते हैं।
हम प्रशिक्षण के लिए केवल 10% का उपयोग करते हैं और 60% डेटा का उपयोग परीक्षण सेट के रूप में करते हैं जबकि 30% सत्यापन सेट के रूप में उपयोग करते हैं।
अब, हम दो GCNConv लेयर्स को स्टैक करेंगे, जिनमें से पहली की आउटपुट फीचर काउंट इनपुट फीचर के रूप में हमारे ग्राफ़ में सुविधाओं की संख्या के बराबर है।
दूसरी परत में, जिसमें हमारी कक्षाओं की संख्या के बराबर आउटपुट नोड्स होते हैं, हम एक रिले सक्रियण फ़ंक्शन लागू करते हैं और अव्यक्त सुविधाओं की आपूर्ति करते हैं।
एज इंडेक्स और एज वेट कई विकल्पों में से दो हैं x जिसे GCConv फॉरवर्ड फ़ंक्शन में स्वीकार कर सकता है, लेकिन हमारी स्थिति में, हमें केवल पहले दो चर की आवश्यकता है।
इस तथ्य के बावजूद कि हमारा मॉडल ग्राफ़ में प्रत्येक नोड के वर्ग की भविष्यवाणी करने में सक्षम होगा, हमें अभी भी चरण के आधार पर प्रत्येक सेट के लिए सटीकता और हानि को अलग से निर्धारित करने की आवश्यकता है।
उदाहरण के लिए, प्रशिक्षण के दौरान, हम केवल सटीकता और प्रशिक्षण हानि को निर्धारित करने के लिए प्रशिक्षण सेट का उपयोग करना चाहते हैं, और इसलिए यह वह जगह है जहाँ हमारे मुखौटे काम आते हैं।
उचित नुकसान और सटीकता की गणना करने के लिए, हम नकाबपोश नुकसान और नकाबपोश सटीकता के कार्यों को परिभाषित करेंगे।
मॉडल को प्रशिक्षित करना
अब जब हमने उस प्रशिक्षण उद्देश्य को परिभाषित कर लिया है जिसके लिए मशाल का उपयोग किया जाएगा। एडम एक मास्टर ऑप्टिमाइज़र है।
हम सत्यापन सटीकता पर नज़र रखते हुए एक निश्चित संख्या में युगों के लिए प्रशिक्षण आयोजित करेंगे।
हम विभिन्न युगों में प्रशिक्षण के नुकसान और सटीकता की भी साजिश रचते हैं।
ग्राफ न्यूरल नेटवर्क के नुकसान
GNN का उपयोग करने के कुछ नुकसान हैं। जीएनएन को कब नियोजित किया जाए और हमारे मशीन लर्निंग मॉडल के प्रदर्शन को कैसे बढ़ाया जाए, यह दोनों ही हमें तब स्पष्ट किए जाएंगे जब हमें उनकी बेहतर समझ होगी।
- जबकि जीएनएन उथले नेटवर्क हैं, आमतौर पर तीन परतों के साथ, अधिकांश तंत्रिका नेटवर्क प्रदर्शन को बेहतर बनाने के लिए गहराई तक जा सकते हैं। हम इस सीमा के कारण बड़े डेटासेट पर अत्याधुनिक प्रदर्शन करने में असमर्थ हैं।
- किसी मॉडल को ग्राफ़ पर प्रशिक्षित करना अधिक कठिन होता है, क्योंकि उनकी संरचनात्मक गतिकी गतिशील होती है।
- इन नेटवर्कों की उच्च कम्प्यूटेशनल लागत के कारण, उत्पादन के लिए मॉडल का विस्तार करना चुनौतियां प्रस्तुत करता है। यदि आपकी ग्राफ़ संरचना विशाल और जटिल है, तो उत्पादन के लिए GNN को स्केल करना चुनौतीपूर्ण होगा।
निष्कर्ष
पिछले कुछ वर्षों में, जीएनएन ग्राफ डोमेन में मशीन सीखने के मुद्दों के लिए शक्तिशाली और प्रभावी उपकरण के रूप में विकसित हुए हैं। इस आलेख में ग्राफ तंत्रिका नेटवर्क का एक मौलिक अवलोकन दिया गया है।
उसके बाद, आप डेटासेट बनाना शुरू कर सकते हैं जिसका उपयोग मॉडल को प्रशिक्षित और परीक्षण करने के लिए किया जाएगा। यह समझने के लिए कि यह कैसे कार्य करता है और यह क्या करने में सक्षम है, आप बहुत आगे जा सकते हैं और एक अलग प्रकार के डेटासेट का उपयोग करके इसे प्रशिक्षित कर सकते हैं।
हैप्पी कोडिंग!
एक जवाब लिखें