דף זה תורגם על ידי Cloud Translation API.
Switch to English

סמנטיקה משדרת

מסמך זה מתאר כיצד פועלות סמנטיות השידור ב- XLA.

מה משדר?

שידור הוא התהליך של יצירת מערכים עם צורות שונות עם צורות תואמות לפעולות חשבון. המינוח שאול numpy שידור .

שידור עשוי להידרש לפעולות בין מערכים רב מימדיים בדרגות שונות, או בין מערכים רב מימדיים בעלי צורות שונות אך תואמות. שקול את התוספת X+v שבה X הוא מטריקס (מערך של דרגה 2) ו- v הוא וקטור (מערך של דרגה 1). כדי לבצע תוספת חכמה, XLA צריך "לשדר" את הווקטור v לאותה דרגה כמו ה- matrix X , על ידי שכפול v מספר מסוים של פעמים. אורך הווקטור צריך להתאים לפחות לאחד ממדי המטריצה.

לדוגמה:

 |1 2 3| + |7 8 9|
|4 5 6|
 

הממדים של המטריצה ​​הם (2,3), הווקטור הוא (3). הווקטור משודר על ידי שכפולו בשורות כדי לקבל:

 |1 2 3| + |7 8 9| = |8  10 12|
|4 5 6|   |7 8 9|   |11 13 15|
 

בנופי זה נקרא שידור .

עקרונות

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

לגבי שידור, יש צורך במפרט שידור מפורש על פעולות בין מערכים בדרגות שונות. זה שונה מ- Numpy, שמעביר את המפרט במידת האפשר.

שידור מערך בדרגה נמוכה יותר למערך בדרגה גבוהה יותר

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

 |1 2 3| + 7 = |8  9  10|
|4 5 6|       |11 12 13|
 

ניתן לצלם את מרבית צרכי השידור באמצעות כף מידה בפעולה בינארית. כאשר לתשומות לפעולה יש דרגות שונות, כותרת השידור הזו מציינת אילו ממדים (ים) במערך הדרג הגבוה יותר שיתאים למערך בדרגה הנמוכה .

קחו למשל את הדוגמה הקודמת, במקום להוסיף סקלר למטריצה ​​(2,3), הוסף וקטור של ממד (3) למטריצה ​​של ממדים (2,3). מבלי לציין שידור, פעולה זו אינה תקפה. לבקשה נכונה של הוספת וקטור מטריצה, ציין את מימד השידור להיות (1), כלומר, ממד הווקטור מותאם לממד 1 של המטריצה. ב- 2D, אם ממד 0 נחשב כשורות ובממד 1 כעמודות, פירוש הדבר שכל רכיב של הווקטור הופך לעמודה בגודל המתאים למספר השורות במטריקס:

 |7 8 9| ==> |7 8 9|
            |7 8 9|
 

כדוגמה מורכבת יותר, שקול להוסיף וקטור 3 אלמנטים (ממד (3)) למטריצה ​​3x3 (מידות (3,3)). ישנן שתי דרכים בהן שידור יכול לקרות למשל:

(1) ניתן להשתמש בממד שידור של 1. כל אלמנט וקטורי הופך לטור והווקטור משוכפל עבור כל שורה במטריקס.

 |7 8 9| ==> |7 8 9|
            |7 8 9|
            |7 8 9|
 

(2) ניתן להשתמש בממד שידור של 0. כל אלמנט וקטורי הופך לשורה והווקטור משוכפל עבור כל עמודה במטריקס.

  |7| ==> |7 7 7|
 |8|     |8 8 8|
 |9|     |9 9 9|
 

מידות השידור יכולות להיות צורה המתארת ​​כיצד משודרת צורת דרגה קטנה יותר לצורת דרגה גדולה יותר. לדוגמא, בהינתן מטען 2x3x4 קובויד ומטריצה ​​3x4, טפל משדר (1,2) פירושו התאמת המטריצה ​​לממדים 1 ו -2 של הקובויד.

סוג זה של שידור משמש באופציות הבינאריות ב- XlaBuilder , אם ניתנת טיעון broadcast_dimensions . לדוגמה, ראה XlaBuilder :: הוסף . בקוד המקור של XLA, שידור מסוג זה נקרא לעיתים שידור "InDim".

הגדרה רשמית

תכונת השידור מאפשרת התאמת מערך בדרגה נמוכה יותר למערך בדרגה גבוהה יותר, על ידי ציון אילו ממדים של מערך הדרגה הגבוהה ביותר להתאים. לדוגמה, עבור מערך עם ממדים MxNxPxQ, ניתן להתאים וקטור עם ממד T באופן הבא:

           MxNxPxQ

dim 3:          T
dim 2:        T
dim 1:      T
dim 0:    T
 

בכל מקרה, T צריך להיות שווה למימד ההתאמה של המערך בדרגה גבוהה יותר. לאחר מכן משודרים ערכי הווקטור מהממד המתאים לכל המימדים האחרים.

כדי להתאים מטריצת TxV למערך MxNxPxQ, משתמשים בממד מידות שידור:

           MxNxPxQ
dim 2,3:      T V
dim 1,2:    T V
dim 0,3:  T     V
etc...
 

סדר המידות בטופל השידור צריך להיות בסדר בו צפויים מידות המערך בדרגה התחתונה להתאים למידות המערך הגבוה. האלמנט הראשון בכותרת אומר איזה ממד במערך בדרגה גבוהה יותר צריך להתאים לממד 0 במערך בדרגה נמוכה יותר. האלמנט השני לממד 1 וכן הלאה. סדר ממדי השידור צריך להיות מוגבר בקפדנות. לדוגמה, בדוגמה הקודמת לא חוקי להתאים V ל- N ו- T ל- P; זה גם לא חוקי להתאים V גם P וגם N.

משדרים מערכים בדרגה דומה עם ממדים מנווונים

בעיית שידור קשורה היא שידור שני מערכים בעלי דרגה זהה אך בגודל ממדים שונים. בדומה לכללים של נובי, הדבר אפשרי רק כאשר המערכים תואמים . שני מערכים תואמים כאשר כל הממדים שלהם תואמים. שני מידות תואמות אם:

  • הם שווים, או
  • אחד מהם הוא 1 (מימד "מנוון")

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

דוגמאות:

  1. (2,1) ו- (2,3) משודרים ל- (2,3).
  2. (1,2,5) ו- (7,2,5) משודרים ל- (7,2,5)
  3. (7,2,5) ו- (7,1,5) משודרים ל- (7,2,5)
  4. (7,2,5) ו- (7,2,6) אינם תואמים ואינם ניתנים לשידור.

מקרה מיוחד מתעורר, וגם נתמך, כאשר לכל אחד ממערכי הקלט יש ממד מנוון במדד שונה. במקרה זה, התוצאה היא "פעולה חיצונית": (2,1) ו- (1,3) המשודרת ל- (2,3). לקבלת דוגמאות נוספות, עיין בתיעוד נובי על השידור .

קומפוזיציה משודרת

שידור של מערך-דרגה נמוכה למערך גבוהה-דרגה ושידור באמצעות ממדים מנוונים יכול להתבצע הוא באותה פעולה בינארית. לדוגמה, ניתן להוסיף יחד וקטור בגודל 4 ומטריצה ​​בגודל 1x2 בעזרת ערך ממדי השידור של (0):

 |1 2 3 4| + [5 6]    // [5 6] is a 1x2 matrix, not a vector.
 

ראשית, הווקטור משודר עד לדרגה 2 (מטריצה) בעזרת ממדי השידור. הערך הבודד (0) בממדי השידור מצביע על כך שהממד אפס של הווקטור תואם למימד האפס של המטריצה. זה מייצר מטריצה ​​בגודל 4xM בה הערך M נבחר להתאים לגודל הממד המתאים במערך 1x2. לפיכך מיוצר מטריצה ​​4x2:

 |1 1| + [5 6]
|2 2|
|3 3|
|4 4|
 

ואז משדר "שידור ממד מנוון" משדר ממד אפס של המטריקס 1x2 כדי להתאים לגודל הממד המתאים של הצד הימני:

 |1 1| + |5 6|     |6  7|
|2 2| + |5 6|  =  |7  8|
|3 3| + |5 6|     |8  9|
|4 4| + |5 6|     |9 10|
 

דוגמה מורכבת יותר היא מטריצה ​​בגודל 1x2 שנוספה למערך בגודל 4x3x1 בעזרת מידות שידור של (1, 2). ראשית משודרת מטריצת 1x2 עד לדרגה 3 תוך שימוש בממדי השידור כדי לייצר מערך Mx1x2 ביניים בו גודל המימד M נקבע על ידי גודל האופראנד הגדול יותר (מערך 4x3x1) ומפיק מערך ביניים 4x1x2. ה- M נמצא במימד 0 (הממד השמאלי ביותר) מכיוון שהממדים 1 ו -2 ממופים לממדי המטריצה ​​1x2 המקורית שכן ממד השידור הוא (1, 2). ניתן להוסיף מערך ביניים זה למטריצת 4x3x1 באמצעות שידור של ממדים מנווונים כדי לייצר תוצאה של מערך 4x3x2.