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

เอกสารนี้อธิบายความหมายการออกอากาศของ 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 การดำเนินการนี้เรียกว่า broadcasting

หลักการ

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

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

การเผยแพร่อาร์เรย์อันดับต่ำกว่าไปยังอาร์เรย์ที่มีอันดับสูงกว่า

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

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

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

ลองดูตัวอย่างก่อนหน้านี้ แทนที่จะเพิ่มสเกลาร์ในเมทริกซ์ (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|

มิติข้อมูลการออกอากาศอาจเป็น Tuple ที่อธิบายว่ารูปร่างอันดับที่เล็กกว่าออกอากาศเป็นรูปร่างอันดับที่ใหญ่ขึ้นได้อย่างไร เช่น สำหรับลูกบาศก์ขนาด 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...

ลำดับของมิติข้อมูลใน Tuple ที่กระจายจะต้องเป็นลำดับที่คาดว่ามิติข้อมูลของอาร์เรย์อันดับต่ำกว่าจะตรงกับมิติข้อมูลของอาร์เรย์อันดับที่สูงกว่า องค์ประกอบแรกใน Tuple ระบุว่ามิติข้อมูลใดในอาร์เรย์อันดับสูงกว่าที่ต้องตรงกับมิติข้อมูล 0 ในอาร์เรย์อันดับต่ำ องค์ประกอบที่สองใน Tuple จะระบุว่ามิติข้อมูลใดในอาร์เรย์อันดับสูงกว่าที่ต้องตรงกับมิติข้อมูล 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 (เมทริกซ์) โดยใช้มิติข้อมูลการออกอากาศ ค่าเดี่ยว (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