תוכן העניינים[להתחבא][הופעה]
טכניקות הלמידה העמוקה הידועות בשם "רשתות עצביות גרפיות" (GNNs) פועלות בתחום הגרף. רשתות אלו מצאו לאחרונה שימוש במגוון תחומים, כולל ראייה ממוחשבת, מערכות ממליצים ואופטימיזציה קומבינטורית, אם להזכיר כמה.
בנוסף, ניתן להשתמש ברשתות אלו לייצוג מערכות מורכבות, לרבות רשתות חברתיות, רשתות אינטראקציה חלבון-חלבון, גרפי ידע ועוד במספר תחומי לימוד.
המרחב הלא אוקלידי הוא המקום שבו פועלים נתוני גרפים, בניגוד לסוגים אחרים של נתונים כמו תמונות. על מנת לסווג צמתים, לחזות קישורים ונתוני אשכולות, נעשה שימוש בניתוח גרפים.
במאמר זה, נבחן את הגרף רשת נוירונים בפירוט, סוגיו, כמו גם לספק דוגמאות מעשיות באמצעות PyTorch.
אז מה זה גרף?
גרף הוא סוג של מבנה נתונים המורכב מצמתים וקודקודים. הקשרים בין הצמתים השונים נקבעים על ידי הקודקודים. אם הכיוון מצוין בצמתים, אומרים שהגרף מכוון; אחרת, זה לא מכוון.
יישום טוב של גרפים הוא מודל של מערכות היחסים בין אנשים שונים ב רשת חברתית. כאשר מתמודדים עם נסיבות מורכבות, כגון קישורים והחלפות, גרפים עוזרים מאוד.
הם מועסקים על ידי מערכות המלצות, ניתוח סמנטי, ניתוח רשתות חברתיות וזיהוי דפוסים
. יצירת פתרונות מבוססי גרפים היא תחום חדש לגמרי המציע הבנה מעמיקה של נתונים מורכבים וקשורים זה לזה.
גרף רשת עצבית
רשתות עצביות גרפיות הן סוגי רשתות עצביות מיוחדות שיכולות לפעול בפורמט נתוני גרף. להטמעת גרפים ולרשתות עצביות קונבולוציוניות (CNNs) יש השפעה משמעותית עליהן.
רשתות עצביות גרפיות משמשות במשימות הכוללות חיזוי צמתים, קצוות וגרפים.
- משתמשים ב-CNN לסיווג תמונות. באופן דומה, כדי לחזות מחלקה, GNNs מוחלים על רשת הפיקסלים המייצגת את מבנה הגרף.
- סיווג טקסט באמצעות רשתות עצביות חוזרות. GNNs משמשים גם עם ארכיטקטורות גרפים שבהן כל מילה בביטוי היא צומת.
על מנת לחזות צמתים, קצוות או גרפים שלמים, רשתות עצביות משמשות ליצירת GNNs. חיזוי ברמת הצומת, למשל, יכול לפתור בעיה כמו זיהוי דואר זבל.
חיזוי קישור הוא מקרה טיפוסי במערכות ממליצים ויכול להיות דוגמה לבעיית חיזוי קצה.
גרף סוגי רשתות עצביות
קיימים סוגים רבים של רשתות עצביות, ורשתות עצביות Convolutional קיימות ברובן. נלמד על ה-GNNs הידועים ביותר בחלק זה.
רשתות קונבנציונליות גרפיות (GCN)
הם דומים לרשתות CNN קלאסיות. הוא רוכש מאפיינים על ידי התבוננות בצמתים סמוכים. פונקציית ההפעלה משמשת GNNs כדי להוסיף אי-ליניאריות לאחר צבירת וקטורים של צומת ושליחת הפלט לשכבה הצפופה.
הוא מורכב מקונבולוציית גרף, שכבה ליניארית ופונקציית הפעלה שאינה לומדת, בעצם. GCNs מגיעים בשני סוגים עיקריים: Spectral Convolutional Networks ו Spatial Convolutional Networks.
גרף רשתות מקודד אוטומטי
הוא משתמש במקודד כדי ללמוד כיצד לייצג גרפים ומפענח כדי לנסות לשחזר גרפי קלט. ישנה שכבת צוואר בקבוק המחברת את המקודד והמפענח.
מכיוון שמקודדים אוטומטיים עושים עבודה מצוינת בטיפול באיזון כיתות, הם משמשים לעתים קרובות בחיזוי קישורים.
רשתות גרפים עצביות חוזרות (RGNN)
ברשתות רב-יחסיות, שבהן לצומת בודד יש מספר רב של יחסים, הוא לומד את דפוס הדיפוזיה האופטימלי ויכול לנהל את הגרפים. על מנת להגביר את החלקות ולהפחית פרמטריזציה יתר, משתמשים במסדרים בצורה זו של רשת עצבית גרפית.
על מנת להשיג תוצאות טובות יותר, RGNNs דורשים פחות כוח עיבוד. הם משמשים להפקת טקסט, זיהוי דיבור, תרגום מכונה, תיאור תמונה, תיוג וידאו וסיכום טקסט.
רשתות גרפים עצביים מגודרים (GGNNs)
כשמדובר במשימות תלויות לטווח ארוך, הן עולות על RGNNs. על ידי הכללת שערים של צומת, קצה וזמני על תלות ארוכת טווח, רשתות עצביות גרפיות משפרות רשתות עצביות גרפיות חוזרות.
השערים מתפקדים באופן דומה ליחידות חוזרות מוגנות (Gated Recurrent Units) בכך שהם רגילים לאחזור ולשכוח נתונים בשלבים שונים.
יישום Graph Neural Network באמצעות Pytorch
הבעיה הספציפית שבה נתמקד היא בעיית סיווג צמתים נפוצה. יש לנו רשת חברתית גדולה בשם musae-github, אשר הורכב מתוך ה-API הפתוח, עבור מפתחי GitHub.
קצוות מציגים את יחסי העוקבים ההדדיים בין הצמתים, המייצגים מפתחים (משתמשי פלטפורמה) שכיכבו לפחות ב-10 מאגרים (שימו לב שהמילה הדדית מציינת קשר לא מכוון).
בהתבסס על מיקום הצומת, מאגרים המסומנים בכוכב, המעסיק וכתובת האימייל, מאחזרים מאפייני הצומת. חיזוי אם משתמש GitHub הוא מפתח אינטרנט או א מפתח למידת מכונה היא המשימה שלנו.
שם התפקיד של כל משתמש שימש בסיס לפונקציית מיקוד זו.
התקנת PyTorch
כדי להתחיל, תחילה עלינו להתקין PyTorch. אתה יכול להגדיר אותו בהתאם למכשיר שלך מ כאן. הנה שלי:
ייבוא מודולים
כעת, אנו מייבאים את המודולים הדרושים
ייבוא וחקור את הנתונים
השלב הבא הוא לקרוא את הנתונים ולשרטט את חמש השורות הראשונות ואת חמש השורות האחרונות מקובץ התוויות.
רק שתיים מתוך ארבע העמודות - מזהה הצומת (כלומר, משתמש) ו-ml_target, שהוא 1 אם המשתמש חבר בקהילת למידת מכונה ו-0 אחרת - רלוונטיות עבורנו במצב זה.
בהתחשב בכך שיש רק שתי מחלקות, כעת אנו יכולים להיות בטוחים שהמשימה שלנו היא סוגיית סיווג בינארי.
כתוצאה מחוסר איזון מעמדי משמעותי, המסווג יכול פשוט להניח איזו כיתה היא הרוב במקום להעריך את המעמד מיוצג חסר, מה שהופך את האיזון המעמדי לגורם נוסף שחשוב לקחת בחשבון.
שרטוט ההיסטוגרמה (התפלגות התדר) חושפת חוסר איזון מסוים מכיוון שיש פחות מחלקות מלמידת מכונה (תווית=1) מאשר משאר המחלקות.
קידוד תכונה
מאפייני הצמתים מודיעים לנו על התכונה המשויכת לכל צומת. על ידי יישום השיטה שלנו לקידוד נתונים, אנו יכולים לקודד את המאפיינים הללו באופן מיידי.
אנו רוצים להשתמש בשיטה זו כדי להקיף חלק קטן מהרשת (נניח, 60 צמתים) לתצוגה. הקוד מופיע כאן.
עיצוב והצגת גרפים
נשתמש לפיד גיאומטרי. נתונים כדי לבנות את הגרף שלנו.
כדי ליצור מודל של גרף בודד עם מאפיינים שונים (אופציונליים), נעשה שימוש בנתונים שהם אובייקט Python פשוט. על ידי שימוש במחלקה זו ובתכונות הבאות - כולן חותכי לפיד - ניצור את אובייקט הגרף שלנו.
צורת הערך x, אשר יוקצה לתכונות הצומת המקודדות, היא [מספר צמתים, מספר תכונות].
הצורה של y היא [מספר צמתים], והיא תוחל על תוויות הצמתים.
אינדקס קצוות: על מנת לתאר גרף לא מכוון, עלינו להרחיב את מדדי הקצוות המקוריים על מנת לאפשר את קיומם של שני קצוות מכוונים מובהקים המקשרים את אותם שני צמתים אך מצביעים בכיוונים מנוגדים.
זוג קצוות, האחד מצביע מצומת 100 עד 200 והשני מ-200 עד 100, נדרש, למשל, בין צמתים 100 ל-200. אם מסופקים מדדי הקצוות, אז כך ניתן לייצג את הגרף הבלתי מכוון. [2,2*מספר הקצוות המקוריים] תהיה צורת הטנזור.
אנו יוצרים את שיטת גרף הציור שלנו כדי להציג גרף. הצעד הראשון הוא להפוך את הרשת ההומוגנית שלנו לגרף NetworkX, שאותו ניתן לשרטט באמצעות NetworkX.draw.
הכינו את דגם ה-GNN שלנו והכשירו אותו
אנו מתחילים בקידוד כל סט הנתונים על ידי ביצוע נתוני קידוד עם light=False ולאחר מכן קוראים לבנות graph עם light=False כדי לבנות את הגרף כולו. לא ננסה לצייר את הגרף הגדול הזה כי אני מניח שאתה משתמש במכונה מקומית שיש לה משאבים מוגבלים.
ניתן להשתמש במסכות, שהן וקטורים בינאריים המזהים אילו צמתים שייכים לכל מסכה ספציפית באמצעות הספרות 0 ו-1, כדי להודיע לשלב האימון אילו צמתים יש לכלול במהלך האימון ולהגיד לשלב ההסקה אילו צמתים הם נתוני הבדיקה. לפיד גיאומטרי.טרנספורמציות.
ניתן להוסיף פיצול ברמת הצומת באמצעות מאפייני מסכת האימון, מסכת ה-val ומסיכת הבדיקה של מחלקת AddTrainValTestMask, אשר ניתן להשתמש בהם כדי לצלם גרף ולאפשר לנו לציין כיצד אנו רוצים שהמסכות שלנו ייבנו.
אנו פשוט מנצלים 10% לאימון ומשתמשים ב-60% מהנתונים כקבוצת הבדיקות תוך שימוש ב-30% כקבוצת האימות.
כעת, נערם שתי שכבות GCNConv, שלראשונה יש ספירת תכונות פלט של זה שווה למספר התכונות בגרף שלנו כתכונות קלט.
בשכבה השנייה, המכילה צמתי פלט השווים למספר המחלקות שלנו, אנו מיישמים פונקציית הפעלה של relu ומספקים את התכונות הסמויות.
אינדקס קצה ומשקל קצה הם שתיים מהאפשרויות הרבות ש-GCNConv יכול לקבל בפונקציה קדימה, אבל במצב שלנו, אנחנו צריכים רק את שני המשתנים הראשונים.
למרות העובדה שהמודל שלנו יוכל לחזות את המעמד של כל צומת בגרף, אנחנו עדיין צריכים לקבוע את הדיוק וההפסד עבור כל סט בנפרד בהתאם לשלב.
לדוגמה, במהלך האימון, אנו רוצים לנצל רק את ערכת האימונים כדי לקבוע את הדיוק ואובדן האימון, ולכן זה המקום בו המסכות שלנו שימושיות.
כדי לחשב את האובדן והדיוק המתאימים, נגדיר את הפונקציות של אובדן מסכה ודיוק מסכה.
הכשרת המודל
כעת, לאחר שהגדרנו את מטרת האימון שלשמה ישמש הלפיד. אדם הוא מייעל אופטימיזציה.
אנו נבצע את ההדרכה למספר מסוים של תקופות תוך שמירה על דיוק האימות.
אנו גם מתווים את ההפסדים והדיוקים של האימון לאורך תקופות שונות.
החסרונות של Graph Neural Network
לשימוש ב-GNN יש כמה חסרונות. מתי להעסיק את GNNa וכיצד לשפר את הביצועים של מודלים למידת המכונה שלנו, שניהם יתבררו לנו לאחר שנבין אותם טוב יותר.
- בעוד ש-GNNs הם רשתות רדודות, בדרך כלל עם שלוש שכבות, רוב הרשתות העצביות יכולות להגיע לעומק כדי לשפר את הביצועים. אנחנו לא מסוגלים לבצע את הביצועים בחזית במערך נתונים גדולים בגלל מגבלה זו.
- קשה יותר לאמן מודל על גרפים, מכיוון שהדינמיקה המבנית שלהם דינמית.
- בשל העלויות החישוביות הגבוהות של רשתות אלו, קנה המידה של המודל לייצור מהווה אתגרים. קנה המידה של GNNs לייצור יהיה מאתגר אם מבנה הגרף שלך ענק ומסובך.
סיכום
במהלך השנים האחרונות, GNNs התפתחו לכלים חזקים ויעילים לבעיות למידת מכונה בתחום הגרפים. סקירה בסיסית של רשתות עצביות גרפיות ניתנת במאמר זה.
לאחר מכן, תוכל להתחיל ליצור את מערך הנתונים שישמש לאימון ובדיקת המודל. כדי להבין איך הוא מתפקד ולמה הוא מסוגל, אתה יכול גם ללכת הרבה יותר רחוק ולאמן אותו באמצעות מערך נתונים מסוג אחר.
קידוד שמח!
השאירו תגובה