เอกสารนี้อธิบายความหมายการออกอากาศของ 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 รายการในทุกดัชนีมิติข้อมูล
ตัวอย่าง
- (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