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