เอกสารนี้อธิบายความหมายของการแพร่สัญญาณของ 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 ระดับลูกค้า
สำหรับการออกอากาศ XLA ต้องการข้อกำหนดเฉพาะสำหรับการออกอากาศ ในการดำเนินการระหว่างอาร์เรย์ของอันดับต่างๆ ซึ่งแตกต่างจาก NumPy ซึ่งอนุมานข้อกำหนดในกรณีที่เป็นไปได้
การเผยแพร่อาร์เรย์ที่มีอันดับต่ำกว่าไปยังอาร์เรย์ที่มีอันดับสูงกว่า
Scalars สามารถออกอากาศผ่านอาร์เรย์ได้เสมอโดยไม่มีข้อกำหนดอย่างชัดแจ้ง สำหรับขนาดการออกอากาศ การดำเนินการไบนารีเชิงองค์ประกอบระหว่างสเกลาร์ และอาร์เรย์หมายถึงการนำการดำเนินการที่มีสเกลาร์ไปใช้กับแต่ละองค์ประกอบใน อาร์เรย์ เช่น การเพิ่มสเกลาร์ลงในเมทริกซ์จะหมายถึงการสร้างเมทริกซ์ใน ซึ่งแต่ละองค์ประกอบคือผลรวมของสเกลาร์และองค์ประกอบที่สัมพันธ์กันของ เมทริกซ์อินพุต
|1 2 3| + 7 = |8 9 10|
|4 5 6| |11 12 13|
ความต้องการในการออกอากาศส่วนใหญ่สามารถบันทึกได้โดยใช้ 2 ขนาดบน การดำเนินการไบนารี เมื่ออินพุตของการดำเนินการมีอันดับที่แตกต่างกัน การออกอากาศ 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 ของลูกบาศก์
การออกอากาศประเภทนี้จะใช้ในไบนารี 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) ใช้ร่วมกันไม่ได้และไม่สามารถออกอากาศได้
จะมีกรณีพิเศษเกิดขึ้น และรองรับเช่นกันเมื่ออาร์เรย์อินพุตแต่ละรายการมี มิติข้อมูลที่มีการลดระดับที่ดัชนีอื่น ในกรณีนี้ ผลลัพธ์คือ "outer Operations": (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