ความหมายของการออกอากาศ

เอกสารนี้อธิบายวิธีการทำงานของความหมายของการกระจายเสียงใน XLA

กำลังออกอากาศอะไร?

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

อาจจำเป็นต้องมีการออกอากาศสำหรับการดำเนินการระหว่างอาร์เรย์หลายมิติที่มีระดับต่างกัน หรือระหว่างอาร์เรย์หลายมิติที่มีรูปร่างต่างกันแต่เข้ากันได้ พิจารณานอกจาก X+v ที่ X เป็นเมทริกซ์ (อาร์เรย์ของอันดับ 2) และ v เป็นเวกเตอร์ (อาร์เรย์ของการจัดอันดับ 1) เพื่อดำเนินการนอกจากนี้องค์ประกอบฉลาด XLA ต้องการที่จะ "ออกอากาศ" เวกเตอร์ v ยศเช่นเดียวกับเมทริกซ์ 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|

ใน Numpy นี้เรียกว่า การแพร่ภาพ

หลักการ

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

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

การแพร่ภาพอาร์เรย์ระดับล่างไปยังอาร์เรย์ที่สูงกว่า

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

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

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

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

การแพร่ภาพอาร์เรย์ที่มีอันดับใกล้เคียงกันด้วยมิติที่เสื่อมลง

ปัญหาการออกอากาศที่เกี่ยวข้องคือการแพร่ภาพสองอาร์เรย์ที่มีอันดับเท่ากันแต่มีขนาดมิติต่างกัน ในทำนองเดียวกันกับกฎระเบียบของ Numpy นี้เป็นไปได้เฉพาะเมื่ออาร์เรย์ที่เข้ากันได้ สองอาร์เรย์จะเข้ากันได้เมื่อมิติข้อมูลทั้งหมดเข้ากันได้ สองมิติเข้ากันได้หาก:

  • เท่ากันหรือ
  • หนึ่งในนั้นคือ 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) สำหรับตัวอย่างเพิ่มเติมปรึกษา เอกสาร Numpy ออกอากาศ

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

ออกอากาศของที่ต่ำกว่าอันดับอาร์เรย์ที่มียศสูงที่หลากหลายและการแพร่ภาพโดยใช้มิติเลวทั้งสองจะสามารถดำเนินการในการดำเนินการทวิภาคเดียวกัน ตัวอย่างเช่น สามารถเพิ่มเวกเตอร์ขนาด 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