เอกสารนี้อธิบายความหมายของการออกอากาศของ 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 รายการที่ดัชนีมิติข้อมูลทุกรายการ
ตัวอย่าง
- (2,1) และ (2,3) จะออกอากาศไปยัง (2,3)
- (1,2,5) และ (7,2,5) จะออกอากาศไปยัง (7,2,5)
- (7,2,5) และ (7,1,5) จะออกอากาศไปยัง (7,2,5)
- (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