4

จากรายการตัวเลือกสู่กราฟการคำนวณแบบเทนเซอร์

AI999第4课:现代计算底座与张量化并行演化
00:00

ในการคำนวณเชิงวิวัฒนาการ ความหลากหลายเป็นเงื่อนไขสำคัญที่ทำให้อัลกอริทึมทำงานได้อย่างมีประสิทธิผล เพราะเมื่อมีคำตอบตัวเลือกมากเพียงพอ แรงกดดันในการคัดเลือกจะไม่ผลักประชากรเข้าสู่ค่าที่ดีที่สุดเฉพาะถิ่นเร็วเกินไป แต่ความหลากหลายก็มาพร้อมกับภาระการคำนวณมหาศาล การรันหนึ่งครั้งมักต้องประเมินคำตอบตัวเลือกหลายหมื่น乃至หลายล้านตัว เมื่อตัวเลือกถูกเขียนเป็นอาร์เรย์ของออบเจ็กต์ธรรมดาและใช้ลูปประเมินทีละรายการ เวลาส่วนใหญ่ของการคำนวณจะถูกใช้ไปกับการจัดลำดับทีละรายการและโฟลว์ควบคุมของภาษาที่ใช้ ไม่ใช่การคำนวณเชิงตัวเลขจริง ๆ ซึ่งนี่คือสาเหตุที่ลูป CPU แบบอนุกรมดั้งเดิมมีประสิทธิภาพต่ำเมื่อต้องประเมินตัวเลือกหลายหมื่นครั้งเป็นเหตุผลพื้นฐาน

จากรายการตัวเลือกสู่กราฟการคำนวณแบบเทนเซอร์การก้าวกระโดดของรูปแบบการแสดงออกรายการตัวเลือก (ประมวลผลทีละรายการ)แต่ละตัวเลือกเป็นออบเจ็กต์อิสระ1ตัวเลือก x₁2ตัวเลือก x₂3ตัวเลือก x₃4ตัวเลือก x₄ทีละตัวเลือก · ลูป CPU แบบอนุกรมมีประสิทธิภาพต่ำเมื่อประเมินหลายหมื่นครั้งค่าใช้จ่ายอยู่ที่การจัดลำดับทีละรายการและโฟลว์ควบคุมเทนเซอร์ตัวเลือกเขียนตัวเลือกทั้งรุ่นพร้อมกัน[ขนาดประชากร, มิติคำตอบ]หนึ่งแถว = หนึ่งคำตอบตัวเลือกกราฟการคำนวณ: การดำเนินการแบบเทนเซอร์การคัดเลือกและการอัปเดตสถานะเข้าสู่กราฟและรับการปรับให้เหมาะสมโดยคอมไพเลอร์การกลายพันธุ์ทำงานกับทั้งประชากรการประเมินได้ผลทั้งรุ่นในครั้งเดียวการคัดเลือกการจัดดัชนีเทนเซอร์การอัปเดตสถานะโหนดรีดิวซ์ทั้งกราฟรับการปรับให้เหมาะสมโดยคอมไพเลอร์: การหลอมรวมโอเปอเรเตอร์ · การจัดตารางแบบขนานรูปร่างเอาต์พุตการประเมิน: [ขนาดประชากร] หรือ [ขนาดประชากร, จำนวนวัตถุประสงค์]การคำนวณโดยรวม: การกลายพันธุ์ การประเมิน การคัดเลือก และการอัปเดตสถานะเข้าสู่กราฟการคำนวณในครั้งเดียว

การก้าวกระโดดของรูปแบบการแสดงออก: จากรายการตัวเลือกสู่กราฟการคำนวณแบบเทนเซอร์

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

  • เทนเซอร์ตัวเลือก: เขียนตัวเลือกทั้งรุ่นเป็นเทนเซอร์ที่มีรูปร่าง [ขนาดประชากร, มิติคำตอบ] ในกรณีนี้ "หนึ่งตัวเลือก" เป็นเพียงหนึ่งแถวในเทนเซอร์ ไม่ใช่ออบเจ็กต์อิสระของภาษาโฮสต์อีกต่อไป
  • โอเปอเรเตอร์แบบกลุ่ม: การดำเนินการเช่นการกลายพันธุ์ทำงานกับทั้งประชากรโดยตรง เรียกใช้เพียงครั้งเดียวก็อัปเดตตัวเลือกทั้งหมดได้ ไม่ต้องเรียกซ้ำ N ครั้ง
  • การประเมินแบบกลุ่ม: ได้ผลการประเมินของทั้งรุ่นในครั้งเดียวในรูปแบบ evaluate(เทนเซอร์ตัวเลือก) หน่วยนับของการประเมินเปลี่ยนจาก "ตัว" เป็น "กลุ่ม"
  • กราฟการคำนวณ: การคัดเลือกและการอัปเดตสถานะไม่ใช่เพียงตรรกะควบคุมแบบอนุกรมอีกต่อไป แต่เป็นโหนดในกราฟ จึงได้รับโอกาสในการปรับให้เหมาะสมโดยคอมไพเลอร์ เช่น การหลอมรวมโอเปอเรเตอร์และการจัดตารางแบบขนาน

การเปรียบเทียบวิธีการเขียนสองแบบ

การเขียนแบบรายการใกล้เคียงกับ: ดึงตัวเลือกทีละตัว ประเมินทีละตัว เปรียบเทียบทีละตัวและอัปเดตสถานะ — ทุกขั้นตอนพึ่งพาลูปของภาษาโฮสต์ ทำให้ยากต่อการปรับให้เหมาะสมโดยรวม ส่วนการเขียนแบบเทนเซอร์คือ: เทนเซอร์ตัวเลือก → การกลายพันธุ์ → การประเมิน → การคัดเลือก → การอัปเดตสถานะ ทั้งสายถูกร้อยเรียงด้วยการดำเนินการแบบเทนเซอร์และแสดงเป็นกราฟการคำนวณหนึ่งกราฟ ซึ่งคอมไพเลอร์สามารถหลอมรวมและจัดตารางอุปกรณ์สำหรับทั้งกราฟได้ โปรดสังเกต: ตรรกะของอัลกอริทึม (การกระจายการกลายพันธุ์ แรงกดดันในการคัดเลือก) ไม่ได้ถูกเขียนใหม่ สิ่งที่ถูกเขียนใหม่คือรูปแบบการแสดงออก

คำศัพท์หลัก
การคำนวณแบบเทนเซอร์ — ใช้เทนเซอร์เป็นหน่วยประมวลผลที่เล็กที่สุด ทำให้การกลายพันธุ์ การประเมิน การคัดเลือก และการอัปเดตสถานะทำงานกับทั้งประชากรในรูปแบบกลุ่ม และอนุญาตให้การดำเนินการแบบกลุ่มเหล่านี้เข้าสู่กราฟการคำนวณเพื่อรับการปรับให้เหมาะสมโดยคอมไพเลอร์ การก้าวกระโดดสำคัญของหน้านี้สรุปได้เป็นประโยคเดียว: จาก "รายการตัวเลือก" สู่ "กราฟการคำนวณแบบเทนเซอร์"