فهرست مندرجات[پنهان شدن][نمایش]
تکنیکهای یادگیری عمیق به نام «شبکههای عصبی گراف» (GNN) در حوزه گراف عمل میکنند. این شبکهها اخیراً در زمینههای مختلفی از جمله بینایی رایانه، سیستمهای توصیهگر و بهینهسازی ترکیبی استفاده شدهاند.
علاوه بر این، این شبکهها میتوانند برای نمایش سیستمهای پیچیده، از جمله شبکههای اجتماعی، شبکههای تعامل پروتئین-پروتئین، نمودارهای دانش و موارد دیگر در چندین زمینه مورد استفاده قرار گیرند.
فضای غیر اقلیدسی جایی است که دادههای گراف در آن کار میکنند، برخلاف دیگر انواع دادهها مانند تصاویر. به منظور طبقه بندی گره ها، پیش بینی پیوندها و داده های خوشه ای، از تجزیه و تحلیل گراف استفاده می شود.
در این مقاله به بررسی نمودار می پردازیم شبکه عصبی به تفصیل، انواع آن، و همچنین ارائه مثال های عملی با استفاده از PyTorch.
بنابراین، گراف چیست؟
گراف نوعی ساختار داده است که از گره ها و رئوس تشکیل شده است. اتصالات بین گره های مختلف توسط رئوس تعیین می شود. اگر جهت در گره ها نشان داده شده باشد، گراف جهت دار گفته می شود. در غیر این صورت، بی جهت است.
یک کاربرد خوب نمودارها مدلسازی روابط بین افراد مختلف در یک است شبکه های اجتماعی. هنگام برخورد با شرایط پیچیده، مانند پیوندها و تبادلات، نمودارها بسیار مفید هستند.
آنها توسط سیستم های توصیه، تحلیل معنایی، تجزیه و تحلیل شبکه های اجتماعی و تشخیص الگو به کار گرفته می شوند
. ایجاد راه حل های مبتنی بر نمودار یک زمینه کاملاً جدید است که درک روشنی از داده های پیچیده و مرتبط ارائه می دهد.
شبکه عصبی گراف
شبکههای عصبی گراف، انواع شبکههای عصبی تخصصی هستند که میتوانند در قالب دادههای نموداری کار کنند. تعبیه گراف و شبکه های عصبی کانولوشنال (CNN) تأثیر قابل توجهی بر آنها دارند.
شبکههای عصبی گراف در کارهایی که شامل پیشبینی گرهها، لبهها و نمودارها میشود، استفاده میشوند.
- CNN برای طبقه بندی تصاویر استفاده می شود. به طور مشابه، برای پیش بینی یک کلاس، GNN ها به شبکه پیکسلی که ساختار نمودار را نشان می دهد اعمال می شود.
- دسته بندی متن با استفاده از شبکه های عصبی بازگشتی GNN ها همچنین با معماری گراف استفاده می شوند که در آن هر کلمه در یک عبارت یک گره است.
به منظور پیشبینی گرهها، لبهها یا نمودارهای کامل، از شبکههای عصبی برای ایجاد GNN استفاده میشود. برای مثال، یک پیشبینی در سطح گره میتواند مشکلی مانند تشخیص هرزنامه را حل کند.
پیشبینی پیوند یک مورد معمول در سیستمهای توصیهگر است و ممکن است نمونهای از یک مشکل پیشبینی لبه باشد.
انواع شبکه های عصبی نموداری
انواع شبکه های عصبی متعددی وجود دارد و شبکه های عصبی کانولوشنال در اکثر آنها وجود دارد. در این قسمت با شناخته شده ترین GNN ها آشنا می شویم.
گراف شبکه های کانولوشنال (GCN)
آنها با CNN های کلاسیک قابل مقایسه هستند. با نگاه کردن به گرههای مجاور ویژگیها را به دست میآورد. تابع فعال سازی توسط GNN ها برای اضافه کردن غیر خطی بودن پس از تجمیع بردارهای گره و ارسال خروجی به لایه متراکم استفاده می شود.
در اصل از پیچیدگی نمودار، یک لایه خطی و یک تابع فعال سازی غیر یادگیرنده تشکیل شده است. GCN ها در دو نوع اصلی وجود دارند: شبکه های کانولوشن طیفی و شبکه های کانولوشن فضایی.
گراف شبکه های رمزگذار خودکار
از یک رمزگذار برای یادگیری نحوه نمایش نمودارها و یک رمزگشا برای بازسازی نمودارهای ورودی استفاده می کند. یک لایه گلوگاه وجود دارد که رمزگذار و رمزگشا را به هم متصل می کند.
از آنجایی که رمزگذارهای خودکار کار بسیار خوبی در مدیریت تعادل کلاس انجام می دهند، اغلب در پیش بینی پیوند استفاده می شوند.
شبکههای عصبی نمودار تکراری (RGNN)
در شبکههای چند رابطهای، جایی که یک گره دارای روابط متعدد است، الگوی انتشار بهینه را میآموزد و میتواند نمودارها را مدیریت کند. به منظور افزایش صافی و کاهش پارامترهای بیش از حد، از تنظیم کننده ها در این شکل از شبکه عصبی گراف استفاده می شود.
به منظور دستیابی به نتایج بهتر، RGNN ها به قدرت پردازش کمتری نیاز دارند. آنها برای تولید متن، تشخیص گفتار، ترجمه ماشینی، توضیحات تصویر، برچسب گذاری ویدئو و خلاصه سازی متن استفاده می شوند.
شبکههای گراف عصبی دروازهای (GGNN)
وقتی صحبت از وظایف وابسته بلندمدت می شود، آنها از RGNN ها بهتر عمل می کنند. شبکههای عصبی گراف دروازهای با گنجاندن دروازههای گره، لبه و زمانی در وابستگیهای بلندمدت، شبکههای عصبی گراف بازگشتی را تقویت میکنند.
عملکرد گیت ها مشابه واحدهای بازگشتی دروازه ای (GRU) است، زیرا برای فراخوانی و فراموش کردن داده ها در مراحل مختلف استفاده می شود.
پیاده سازی شبکه عصبی گراف با استفاده از Pytorch
موضوع خاصی که ما روی آن تمرکز خواهیم کرد، موضوع طبقه بندی گره های رایج است. ما یک شبکه اجتماعی قابل توجه به نام داریم موزای گیتوب، که از API باز برای توسعه دهندگان GitHub کامپایل شده است.
لبه ها روابط متقابل فالوور بین گره ها را نشان می دهد، که نشان دهنده توسعه دهندگان (کاربران پلتفرم) هستند که حداقل در 10 مخزن ستاره کرده اند (توجه داشته باشید که کلمه متقابل نشان دهنده یک رابطه غیر جهت دار است).
بر اساس مکان گره، مخازن ستاره دار، کارفرما و آدرس ایمیل، ویژگی های گره بازیابی می شوند. پیش بینی اینکه آیا یک کاربر GitHub یک توسعه دهنده وب است یا یک توسعه دهنده یادگیری ماشین وظیفه ماست
عنوان شغلی هر کاربر به عنوان مبنایی برای این تابع هدف قرار می گیرد.
در حال نصب PyTorch
برای شروع، ابتدا باید نصب کنیم PyTorch. شما می توانید آن را با توجه به دستگاه خود پیکربندی کنید اینجا کلیک نمایید. اینجا مال من است:
وارد کردن ماژول ها
اکنون ماژول های لازم را وارد می کنیم
وارد کردن و کاوش داده ها
مرحله زیر این است که داده ها را بخوانید و پنج سطر اول و پنج سطر آخر را از فایل برچسب ها رسم کنید.
تنها دو ستون از چهار ستون - شناسه گره (یعنی کاربر) و ml_target، که اگر کاربر عضوی از جامعه یادگیری ماشین باشد، 1 است و در غیر این صورت 0 است - در این شرایط به ما مربوط است.
با توجه به اینکه فقط دو کلاس وجود دارد، اکنون می توانیم مطمئن باشیم که وظیفه ما یک موضوع طبقه بندی باینری است.
در نتیجه عدم تعادل طبقاتی قابل توجه، طبقهبندیکننده میتواند به جای ارزیابی طبقه کمنمایش، فرض کند که کدام طبقه اکثریت است، و تعادل کلاس را عامل مهم دیگری برای در نظر گرفتن میکند.
ترسیم هیستوگرام (توزیع فرکانس) مقداری عدم تعادل را نشان می دهد زیرا کلاس های کمتری از یادگیری ماشین (برچسب=1) نسبت به کلاس های دیگر وجود دارد.
رمزگذاری ویژگی
ویژگیهای گرهها ما را از ویژگی مرتبط با هر گره آگاه میکند. با پیاده سازی روش خود برای رمزگذاری داده ها، می توانیم فوراً آن ویژگی ها را رمزگذاری کنیم.
ما می خواهیم از این روش برای کپسوله کردن بخش کوچکی از شبکه (مثلا 60 گره) برای نمایش استفاده کنیم. کد در اینجا ذکر شده است.
طراحی و نمایش نمودارها
ما از هندسی مشعل استفاده خواهیم کرد. داده ها برای ساخت نمودار ما.
برای مدلسازی یک گراف با ویژگیهای مختلف (اختیاری)، از دادههایی استفاده میشود که یک شی ساده پایتون هستند. با استفاده از این کلاس و ویژگی های زیر - که همگی تانسورهای مشعل هستند - شی گراف خود را ایجاد می کنیم.
شکل مقدار x که به ویژگیهای گره کدگذاری شده اختصاص مییابد، [تعداد گرهها، تعداد ویژگیها] است.
شکل y [تعداد گرهها] است و روی برچسبهای گره اعمال میشود.
اندیس لبه: برای توصیف یک گراف بدون جهت، باید شاخص های لبه اصلی را گسترش دهیم تا امکان وجود دو یال جهت دار مجزا را فراهم کنیم که همان دو گره را به هم مرتبط می کنند اما در جهت مخالف هستند.
یک جفت یال، که یکی از گره 100 به 200 و دیگری از 200 به 100 اشاره می کند، برای مثال، بین گره های 100 و 200 مورد نیاز است. اگر شاخص های لبه ارائه شده باشند، اینگونه می توان نمودار غیر جهت دار را نشان داد. [2,2،XNUMX*تعداد لبه های اصلی] شکل تانسور خواهد بود.
ما روش رسم گراف خود را برای نمایش یک نمودار ایجاد می کنیم. اولین گام این است که شبکه همگن خود را به یک نمودار NetworkX تبدیل کنیم، که سپس می توان با استفاده از NetworkX.draw رسم کرد.
مدل GNN ما را بسازید و آن را آموزش دهید
ما با کدگذاری کل مجموعه داده ها با اجرای کدهای داده با light=False و سپس فراخوانی construct graph با light=False شروع می کنیم تا کل نمودار را بسازیم. ما تلاشی برای ترسیم این نمودار بزرگ نخواهیم کرد زیرا فرض میکنم شما از یک ماشین محلی استفاده میکنید که منابع محدودی دارد.
ماسکها که بردارهای دودویی هستند که با استفاده از ارقام 0 و 1 مشخص میکنند که کدام گرهها به هر ماسک خاص تعلق دارند، میتوانند برای اطلاع دادن به مرحله آموزش که کدام گرهها باید در طول آموزش گنجانده شوند و به فاز استنتاج بگوییم که کدام گرهها دادههای آزمایشی هستند. مشعل هندسی.تبدیل می شود.
یک تقسیم در سطح گره را می توان با استفاده از ویژگی های Training mask، val mask و test mask کلاس AddTrainValTestMask اضافه کرد که می تواند برای گرفتن یک نمودار استفاده شود و ما را قادر می سازد تا مشخص کنیم که ماسک هایمان چگونه ساخته شوند.
ما فقط از 10٪ برای آموزش استفاده می کنیم و 60٪ از داده ها را به عنوان مجموعه آزمایشی استفاده می کنیم در حالی که از 30٪ به عنوان مجموعه اعتبار سنجی استفاده می کنیم.
اکنون، دو لایه GCNConv را روی هم قرار می دهیم که اولین لایه دارای تعداد ویژگی های خروجی است که برابر با تعداد ویژگی های نمودار ما به عنوان ویژگی های ورودی است.
در لایه دوم که شامل گرههای خروجی برابر با تعداد کلاسهای ما است، تابع فعالسازی relu را اعمال میکنیم و ویژگیهای پنهان را تامین میکنیم.
اندیس لبه و وزن لبه دو گزینه از گزینههای x زیادی هستند که GCNConv میتواند در تابع فوروارد بپذیرد، اما در شرایط ما فقط به دو متغیر اول نیاز داریم.
با وجود این واقعیت که مدل ما قادر خواهد بود کلاس هر گره را در نمودار پیش بینی کند، هنوز باید دقت و افت را برای هر مجموعه به طور جداگانه بسته به فاز تعیین کنیم.
به عنوان مثال، در طول تمرین، ما فقط میخواهیم از مجموعه آموزشی برای تعیین دقت و از دست دادن تمرین استفاده کنیم و بنابراین اینجاست که ماسکهای ما به کار میآیند.
برای محاسبه تلفات و دقت مناسب، توابع تلفات ماسک شده و دقت پوشانده شده را تعریف می کنیم.
آموزش مدل
اکنون که هدف تمرینی برای استفاده از مشعل را مشخص کردیم. آدام یک استاد بهینه ساز است.
ما آموزش را برای تعداد معینی از دوره ها اجرا می کنیم و در عین حال دقت اعتبارسنجی را زیر نظر داریم.
ما همچنین تلفات و دقت آموزش را در دوره های مختلف ترسیم می کنیم.
معایب شبکه عصبی گراف
استفاده از GNN دارای معایبی است. زمان استفاده از GNNa و نحوه افزایش عملکرد مدلهای یادگیری ماشینی هر دو پس از درک بهتر آنها برای ما روشن میشود.
- در حالی که GNN ها شبکه های کم عمقی هستند، معمولا با سه لایه، اکثر شبکه های عصبی می توانند برای بهبود عملکرد عمیق تر شوند. به دلیل این محدودیت، نمیتوانیم روی مجموعه دادههای بزرگ عملکردی پیشرفته داشته باشیم.
- آموزش یک مدل بر روی نمودارها دشوارتر است، زیرا دینامیک ساختاری آنها پویا است.
- با توجه به هزینه های محاسباتی بالای این شبکه ها، مقیاس بندی مدل برای تولید چالش هایی را به همراه دارد. اگر ساختار گراف شما بزرگ و پیچیده باشد، مقیاس گذاری GNN ها برای تولید چالش برانگیز خواهد بود.
نتیجه
در چند سال گذشته، GNN ها به ابزارهای قدرتمند و موثری برای مسائل یادگیری ماشین در حوزه گراف تبدیل شده اند. یک نمای کلی از شبکه های عصبی گراف در این مقاله ارائه شده است.
پس از آن، می توانید شروع به ایجاد مجموعه داده ای کنید که برای آموزش و آزمایش مدل استفاده می شود. برای درک نحوه عملکرد و توانایی آن، میتوانید بسیار دورتر بروید و با استفاده از یک مجموعه داده متفاوت، آن را آموزش دهید.
برنامه نویسی مبارک!
پاسخ دهید