top of page

איך SDR עובד ומה עושים ב NuPIC כדי שהמעבדים של אינטל יעבדו ביעילות?

  • Writer: shlomoyona
    shlomoyona
  • Apr 26
  • 5 min read

כתבתי על Numenta ועל הגישה של ג'ף הוקינס ופרוייקט אלף המוחות. טכנולוגיית HTM שממומשת בספריית NuPIC מתבססת על מבני נתונים מסוג Sparse Distributed Representations. בייצוג זה אחוז זעיר ממרכיבי המערך פעיל והשאר אפסים. המנגנון נמנע משמירת מטריצה מלאה ושומר אך ורק את האינדקסים של הביטים הפעילים. במערך נתון מערכת NuPIC תאחסן רשימה מצומצמת של מספרים שלמים שמייצגים את מיקום הפעילות בלבד. התהליך מתחיל בזיהוי ביטים אלו בקלט, ממשיך בעדכון סינפסות פוטנציאליות המקושרות אליהם ישירות ומסתיים בשימוש במבני נתונים ייעודיים כגון Compressed Sparse Row לניהול הקשרים באופן חסכוני.


ננסה להסביר שלב אחרי שלב איך זה עובד ולמה זה עובד. למעוניינים בסרטונים מעולים בנושא כדאי לצפות ב- HTM School באתר Numenta.


יצירת Sparse Distributed Representation


תהליך המרת קלט לייצוג SDR מורכב משלבים עוקבים המתרגמים מידע רציף או קטגוריאלי לתבנית דלילה במרחב רב ממדי.


שלב Encoding


בשלב זה ממירים נתוני קלט גולמיים למערך ביטים ראשוני במטרה לייצג ערכים סמנטיים קרובים באמצעות תבניות ביטים בעלות חפיפה גבוהה. עבור קלט סקלרי רציף מוגדר טווח ערכים אפשרי. נסמן את וקטור הקלט המקודד באות X באורך m. מספר הביטים הפעילים מוגדר מראש כקבוע w. כאשר מתקבל ערך קלט, אלגוריתם הקידוד קובע רצף של w ביטים שיידלקו במערך X. המיקום של רצף זה נע לאורך המערך בהתאמה למיקום הערך ביחס לטווח המלא. ככל ששני ערכי קלט קרובים יותר, כך גדל מספר הביטים הזהים שנדלקים בוקטור X.


הערך m נבחר כך שיהיה גדול מספיק למנוע התנגשויות בין קלטים שונים, והערך w מוגדר כאחוז קטן מתוכו. הקלט מקודד בשיטת קידוד חופף ולא בשיטת One Hot Encoding המקצה ביט בודד לכל ערך. קידוד חופף מאפשר לרשת לזהות אוטומטית שערכים קרובים זהים כמעט לחלוטין במשמעותם ומשליך למידה שבוצעה על ערך מסוים גם על סביבתו הקרובה.


ניתן להתייחס לייצוג SDR כסוג של Embedding בעל דרישות מבניות ייחודיות. בניגוד לרשתות עצביות קלאסיות בהן המידע מבוזר על פני ערכים רציפים וכל ממד חסר פרשנות בפני עצמו, בייצוג SDR לכל ביט פעיל יש משמעות סמנטית ברורה המייצגת תכונה במרחב המקורי. כאשר נדרשים לקודד קלט המורכב ממספר מאפיינים, יוצרים לכל מאפיין וקטור ייחודי עם פרמטרים משלו, ולאחר מכן משרשרים את כלל הוקטורים לווקטור קלט מאוחד וארוך. תהליך זה מרחיב את m ומאפשר למערכת ללמוד הקשרים בין ממדים שונים תוך שמירה על גודל פלט אחיד בשלבים הבאים.


שלב Encoding
שלב Encoding

שלב Overlap Calculation


המערך X מועבר לשכבת Spatial Pooler המורכבת מ n עמודות, כאשר n חייב להיות גדול משמעותית מ m. כל עמודה מקבלת חיבור למדגם אקראי של ביטים מתוך המערך X. המנגנון מחשב עבור כל עמודה את כמות הביטים הפעילים בקלט התואמים לחיבורים הפעילים שלה.


מבחינה מתמטית נגדיר מטריצת קשרים פוטנציאליים בה לכל קשר בין עמודה i לביט j בקלט מוצמד ערך קביעות Pᵢⱼ בטווח שבין 0 ל 1. קשר נחשב לסינפסה פעילה רק אם Pᵢⱼ גדול מסף קבוע θ. הקשרים הפעילים מיוצגים במטריצה בינארית W בגודל n × m, בה איבר Wᵢⱼ מקבל ערך 1 אם הסינפסה פעילה וערך 0 אחרת. חישוב החפיפה cᵢ עבור כל עמודה i מבוצע על ידי מכפלה סקלרית cᵢ = Σ (Wᵢⱼ ∙ Xⱼ) עבור j=1 עד m.


בשלב זה מופעל סינון באמצעות סף גירוי מינימלי. אם ערך cᵢ קטן מהסף, ציונה של אותה עמודה יאופס, מתוך הנחה שחפיפה נמוכה נובעת מרעש סטטיסטי ואינה משקפת משמעות סמנטית אמיתית. לאחר מכן מבוצע שקלול הומאוסטטי הנקרא Boosting. לכל עמודה מותאם מקדם bᵢ המחושב לפי יחס תדירות הפעילות שלה מול תדירות הפעילות של שכנותיה. הציון הסופי המועבר הלאה oᵢ מחושב כ oᵢ = cᵢ ∙ bᵢ. פעולה זו מעניקה עדיפות מתמטית לעמודות שלא השתתפו מספיק בייצוג ובכך מבטיחה ניצול מלא של כלל n העמודות במרחב.


שלב Overlap Calculation
שלב Overlap Calculation

שלב Inhibition


בשלב האחרון מיישמים מנגנון תחרותי מסוג k-Winner-Take-All כדי לייצר את הייצוג הסופי S באורך n. המטרה היא לברור אך ורק את העמודות שהגיבו בעוצמה הגבוהה ביותר לכדי רמת דלילות קבועה d, העומדת לרוב על 0.02.


מספר העמודות הפעילות k מחושב באופן קבוע כ k = n ∙ d. המערכת ממיינת את ערכי העירור המחוזקים oᵢ ומאתרת ערך סף דינמי θ_k שהוא ערך העירור של העמודה הממוקמת במקום ה k במערך הממוין. איבר Sᵢ יקבל ערך 1 אם ורק אם oᵢ ≥ θ_k, ובכל מקרה אחר יקבל 0.


מנגנון דיכוי גלובלי זה מבטיח כי רק התכונות הבולטות והמשמעותיות ביותר בקלט המקורי יזכו לייצוג. קביעת מספר קבוע של תאים פעילים k מייצרת ייצוג סטנדרטי המאפשר השוואה כמותית ולוגית בין וקטורים שונים. תכונה זו מהווה בסיס יציב לשלבי העיבוד הבאים ומונעת חפיפה מקרית בין מושגים במרחב הזיכרון.


שלב הדיכוי מתבצע מיד לאחר חישוב החפיפה ולפני שלב הלמידה. מטרת שלב זה היא לסנן את פעילות הרשת ולהגדיר אילו עמודות ייצגו את הקלט הנוכחי. רק העמודות שהשיגו את ציון העירור הגבוה ביותר מוגדרות כעמודות פעילות ומורשות להמשיך לשלב הבא.


שלב Inhibition
שלב Inhibition


מנגנון העדכון הסינפטי


מנגנון העדכון מתרחש בשלב הלמידה ומופעל בלעדית על העמודות המנצחות שעברו את שלב הדיכוי. המנגנון מתבסס על עקרונות כלל הב ומטרתו להתאים את רגישות העמודה לתבנית הקלט שאותה היא הרגע ייצגה.


עבור כל עמודה מנצחת i, המערכת סורקת את כלל הקשרים הפוטנציאליים שלה לוקטור הקלט X ומעדכנת את ערך הקביעות Pᵢⱼ של כל קשר פוטנציאלי בהתאם למצב ביט הקלט אליו הוא מחובר:


כאשר ביט הקלט Xⱼ פעיל, ערך הקביעות Pᵢⱼ מוגדל בשיעור קבוע שנקרא Permanence Increment. פעולה זו מחזקת את הקשר לביטים שתרמו להפעלת העמודה ומעלה את הסבירות שהעמודה תגיב לאותה תבנית בעתיד.


כאשר ביט הקלט Xⱼ כבוי, ערך הקביעות Pᵢⱼ מוקטן בשיעור קבוע הנקרא Permanence Decrement. פעולה זו מחלישה את הקשר לביטים שלא תאמו את תבנית הפעילות ומונעת מהעמודה להיות מושפעת מנתוני רקע לא רלוונטיים.


ערכי Pᵢⱼ נשמרים תמיד בטווח שתחום בין 0 ל 1. בעקבות העדכון הרציף, ערכי הקביעות של קשרים פוטנציאליים מסוימים עשויים לחצות כלפי מעלה את סף הקישוריות θ ולהפוך לסינפסות פעילות המשפיעות על חישובי החפיפה העתידיים. לחלופין, ערכים עשויים לרדת מתחת לסף ולהפוך לסינפסות מנותקות דוממות. התהליך כולו מבטיח התמחות מבנית של כל עמודה בזיהוי תבניות קלט סטטיסטיות שחוזרות על עצמן לאורך זמן.


מנגנון העדכון הסינפטי
מנגנון העדכון הסינפטי

ניצול ארכיטקטורת CPU מול GPU


הבחירה לבצע חישובים אלו על גבי מעבדי CPU ולא על מעבדי GPU נובעת מאופי המבנה החישובי. מעבדי GPU מתוכננים לפעולות Dense Linear Algebra שדורשות חישובים מקביליים על בלוקים רציפים של זיכרון. לעומת זאת הפעולות בטכנולוגיית HTM הן דלילות ואינן רציפות במרחב הזיכרון. אלגוריתם הלמידה דורש לוגיקת תנאים מורכבת עבור כל סינפסה המייצרת סעיפי החלטה רבים. מעבדי CPU מבצעים משימות אלו ביעילות גבוהה הודות למנגנוני חיזוי הסתעפויות. בנוסף היררכיית זיכרון המטמון במעבדי אינטל מאפשרת גישה אקראית ומהירה לאינדקסים מפוזרים. ארכיטקטורת אינטל מספקת גם פקודות Bit Manipulation כדוגמת סט פקודות AVX שמאפשרות עיבוד לוגי וקטורי של ביטים במקביל.


ניצול ארכיטקטורת CPU מול GPU
ניצול ארכיטקטורת CPU מול GPU

ניתוח של החיסכון בזיכרון ובמשאבי חישוב


החיסכון בזיכרון ובמשאבי חישוב ניתן להדגמה. נסמן ב n את גודל המערך הכולל וב w את מספר הביטים הפעילים. צפיפות המערך מוגדרת כיחס w/n ועומדת לרוב על ערכים קטנים מאוד. בייצוג של מטריצה מלאה נדרשות n סיביות עבור אחסון הקלט. בייצוג דליל נדרשות w ∙ log₂(n) סיביות בלבד לאחסון האינדקסים. החיסכון בזיכרון הולך וגדל ככל ש n גדל והצפיפות קטנה.


מבחינה חישובית בדיקת חפיפה בין שני וקטורים מצריכה בשיטה המסורתית מכפלה סקלרית שדורשת n פעולות, כלומר סיבוכיות של O(n). בשיטת הייצוג הדליל הפעולה מומרת לחיתוך בין שתי רשימות אינדקסים ממוינות. סיבוכיות החישוב יורדת ל O(w₁ + w₂) כאשר המשתנים w₁ ו w₂ מייצגים את כמות הביטים הפעילים בכל וקטור בהתאמה. מכיוון ש w קטן משמעותית מ n מתקבלת הפחתה ניכרת במספר פעולות העיבוד הנדרשות בכל מחזור חישוב.


ניתוח מתמטי של החיסכון בזיכרון ובמשאבי חישוב
ניתוח מתמטי של החיסכון בזיכרון ובמשאבי חישוב

לסיום


הבנת המנגנונים המתמטיים והאלגוריתמיים מאחורי הקידוד הדליל, הייצוג הדליל SDR והעדכון הסינפטי ב-NuPIC, מדגימה כיצד ניתן לתרגם את תובנות אלף המוחות למערכת חישובית יעילה. הגישה של Numenta, ששמה דגש על צפיפות נמוכה וייצוג מבוזר, מציעה פתרון לחסמים של יעילות אנרגטית וגישה לזיכרון ביישומי למידת מכונה, ומהווה נדבך מרכזי בבניית בינה מלאכותית ששואבת השראה אמיתית מהביולוגיה.


איך SDR עובד ומה עושים ב NuPIC כדי שהמעבדים של אינטל יעבדו ביעילות?
איך SDR עובד ומה עושים ב NuPIC כדי שהמעבדים של אינטל יעבדו ביעילות?

זקוקים לשותף טכנולוגי עתיר ניסיון שיודע לספק שירותי מחקר ופיתוח Hands-on, מארגוני אנטרפרייז ועד סטארט-אפים, על מנת להוציא חזון אלגוריתמי שלכם מהכוח אל הפועל? הבה נדבר!


שלמה יונה,

מייסד ומדען ראשי, 

מתמטיקאי מחקר ופיתוח בע"מ

053-7326360


פודקאסט על החברה ועליי, שלמה יונה, ואופן העבודה שלנו ואיתנו:






 
 
 

Comments


  • Facebook Social Icon
  • LinkedIn Social Icon

© 2010-2026 mathematic.ai

bottom of page