กำลังออกอากาศ

เอกสารนี้อธิบายความหมายของการออกอากาศของ XLA

การออกอากาศคืออะไร

การออกอากาศคือกระบวนการที่ทำให้อาร์เรย์ที่มีรูปร่างต่างกันมีรูปร่างที่เข้ากันได้สำหรับการดำเนินการทางคณิตศาสตร์ คำศัพท์นี้ยืมมาจาก การออกอากาศของ NumPy

การออกอากาศอาจจำเป็นสำหรับการดำเนินการระหว่างอาร์เรย์หลายมิติที่มี อันดับต่างกัน หรือระหว่างอาร์เรย์หลายมิติที่มีรูปร่างต่างกันแต่ เข้ากันได้ พิจารณาการบวก X+v โดยที่ X คือเมทริกซ์ (อาร์เรย์ที่มี 2 มิติ) และ v คือเวกเตอร์ (อาร์เรย์ที่มี 1 มิติ) หากต้องการดำเนินการบวกแบบทีละองค์ประกอบ XLA ต้อง "ออกอากาศ" เวกเตอร์ v ให้มีจำนวนมิติข้อมูลเท่ากับเมทริกซ์ X โดยการทำซ้ำ v จำนวนครั้งที่แน่นอน ความยาวของเวกเตอร์ต้องตรงกับมิติข้อมูลอย่างน้อย 1 รายการของเมทริกซ์

เช่น

|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|

ใน NumPy การดำเนินการนี้เรียกว่า การออกอากาศ

AI

ภาษา XLA มีความเข้มงวดและชัดเจนมากที่สุดเท่าที่จะเป็นไปได้ โดยหลีกเลี่ยงฟีเจอร์ "มหัศจรรย์" ที่ไม่ชัดเจน ฟีเจอร์ดังกล่าวอาจช่วยให้การคำนวณบางอย่างกำหนดได้ง่ายขึ้นเล็กน้อย แต่ต้องแลกมาด้วยการฝังสมมติฐานเพิ่มเติมลงในโค้ดของผู้ใช้ ซึ่งจะ เปลี่ยนแปลงได้ยากในระยะยาว หากจำเป็น คุณจะเพิ่มฟีเจอร์ที่น่าทึ่งโดยนัย ได้ใน Wrapper ระดับไคลเอ็นต์

ในส่วนของการออกอากาศ XLA กำหนดให้ต้องมีข้อกำหนดการออกอากาศที่ชัดเจน ในการดำเนินการระหว่างอาร์เรย์ที่มีอันดับต่างกัน ซึ่งแตกต่างจาก NumPy ที่อนุมานข้อกำหนดเมื่อเป็นไปได้

การออกอากาศอาร์เรย์ที่มีมิติต่ำกว่าไปยังอาร์เรย์ที่มีมิติสูงกว่า

สเกลาร์สามารถออกอากาศผ่านอาร์เรย์ได้เสมอโดยไม่ต้องระบุ มิติการออกอากาศอย่างชัดเจน การดำเนินการไบนารีแบบทีละองค์ประกอบระหว่างสเกลาร์ กับอาร์เรย์หมายถึงการใช้การดำเนินการกับสเกลาร์กับแต่ละองค์ประกอบในอาร์เรย์ ตัวอย่างเช่น การเพิ่มสเกลาร์ลงในเมทริกซ์หมายถึงการสร้างเมทริกซ์ที่แต่ละองค์ประกอบเป็นผลรวมของสเกลาร์และองค์ประกอบที่สอดคล้องกันของเมทริกซ์อินพุต

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

ความต้องการในการออกอากาศส่วนใหญ่สามารถบันทึกได้โดยใช้ทูเพิลของมิติข้อมูลในการดำเนินการไบนารี เมื่ออินพุตของการดำเนินการมีอันดับต่างกัน ทูเปิลการออกอากาศนี้จะระบุมิติข้อมูลในอาร์เรย์หลายมิติ ที่จะจับคู่กับอาร์เรย์มิติต่ำกว่า

ลองดูตัวอย่างก่อนหน้า แทนที่จะเพิ่มสเกลาร์ลงในเมทริกซ์ (2,3) ให้เพิ่มเวกเตอร์ที่มีมิติข้อมูล (3) ลงในเมทริกซ์ที่มีมิติข้อมูล (2,3) การดำเนินการนี้ไม่ถูกต้องหากไม่ได้ระบุ การออกอากาศ หากต้องการขอการบวกเมทริกซ์กับเวกเตอร์อย่างถูกต้อง ให้ระบุขนาดการออกอากาศเป็น (1) ซึ่งหมายความว่าขนาดของเวกเตอร์จะตรงกับขนาด 1 ของเมทริกซ์ ใน 2 มิติ หากมิติข้อมูล 0 แสดงแถวและมิติข้อมูล 1 แสดงคอลัมน์ หมายความว่าแต่ละองค์ประกอบ ของเวกเตอร์จะกลายเป็นคอลัมน์ที่มีขนาดตรงกับจำนวนแถวใน เมทริกซ์

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

ตัวอย่างที่ซับซ้อนกว่านี้คือการเพิ่มเวกเตอร์ 3 องค์ประกอบ (มิติข้อมูล (3)) ลงใน เมทริกซ์ 3x3 (มิติข้อมูล (3,3)) การออกอากาศในตัวอย่างนี้ทำได้ 2 วิธี ดังนี้

(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::Add ในซอร์สโค้ด 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 ในอาร์เรย์ที่มีมิติข้อมูลต่ำกว่า องค์ประกอบที่ 2 ในทูเพิลจะระบุว่ามิติใดในอาร์เรย์ที่มีมิติสูงกว่าต้องตรงกับมิติที่ 1 ในอาร์เรย์ที่มีมิติต่ำกว่า และอื่นๆ ลำดับของมิติข้อมูลการออกอากาศต้องเพิ่มขึ้นอย่างเคร่งครัด ตัวอย่างเช่น ในตัวอย่างก่อนหน้า การจับคู่ V กับ N และ T กับ P ถือว่าผิดกฎหมาย นอกจากนี้ การจับคู่ V กับทั้ง P และ N ก็ถือว่าผิดกฎหมายเช่นกัน

การออกอากาศอาร์เรย์ที่มีมิติข้อมูลคล้ายกันด้วยมิติข้อมูลที่ลดทอน

ปัญหาที่เกี่ยวข้องคือการออกอากาศอาร์เรย์ 2 รายการที่มีจำนวนมิติข้อมูลเท่ากันแต่มีขนาดมิติข้อมูลต่างกัน เช่นเดียวกับ NumPy การดำเนินการนี้จะทำได้ก็ต่อเมื่ออาร์เรย์เข้ากันได้เท่านั้น อาร์เรย์ 2 รายการจะใช้ร่วมกันได้เมื่อมิติข้อมูลทั้งหมดของอาร์เรย์ใช้ร่วมกันได้ มิติข้อมูล 2 รายการจะเข้ากันได้ในกรณีต่อไปนี้

  • เท่ากัน หรือ
  • โดยมี 1 มิติ ("มิติที่เสื่อม")

เมื่อพบอาร์เรย์ที่เข้ากันได้ 2 รายการ รูปร่างผลลัพธ์จะมีค่าสูงสุดของอินพุตทั้ง 2 รายการที่ดัชนีมิติข้อมูลทุกรายการ

ตัวอย่าง

  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) ดูตัวอย่างเพิ่มเติมได้ในเอกสารประกอบของ NumPy เกี่ยวกับการออกอากาศ

องค์ประกอบของการออกอากาศ

การออกอากาศอาร์เรย์ที่มีมิติต่ำกว่าไปยังอาร์เรย์ที่มีมิติสูงกว่าและ การออกอากาศโดยใช้มิติที่ลดทอนสามารถทำได้ในการดำเนินการไบนารีเดียวกัน ตัวอย่างเช่น เวกเตอร์ขนาด 4 และเมทริกซ์ขนาด 1x2 สามารถ บวกกันได้โดยใช้มิติข้อมูลการออกอากาศที่มีค่า (0) ดังนี้

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

ก่อนอื่น ระบบจะออกอากาศเวกเตอร์สูงสุด 2 มิติ (เมทริกซ์) โดยใช้ broadcast dimensions ค่าเดียว (0) ในมิติข้อมูลการออกอากาศระบุว่า มิติข้อมูลที่ 0 ของเวกเตอร์ตรงกับมิติข้อมูลที่ 0 ของเมทริกซ์ ซึ่งจะสร้างเมทริกซ์ขนาด 4xM โดยเลือกค่า M ให้ตรงกับขนาดมิติข้อมูลที่เกี่ยวข้องในอาร์เรย์ 1x2 ดังนั้นจึงได้เมทริกซ์ 4x2 ดังนี้

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

จากนั้น "การออกอากาศมิติข้อมูลที่เสื่อม" จะออกอากาศมิติข้อมูล 0 ของเมทริกซ์ 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