แนะนำ HN: การคูณเมทริกซ์ที่ลดจำนวนครั้งของการคูณลงครึ่งหนึ่ง
(github.com/trevorpogue)- ที่เก็บนี้เป็นซอร์สโค้ดสำหรับตรวจสอบสถาปัตยกรรม systolic array ที่คำนวณผลลัพธ์การคูณเมทริกซ์แบบเดียวกันได้โดยใช้ทรัพยากรฮาร์ดแวร์หรือเวลาในการรันน้อยลง ใน GEMM และตัวเร่งฮาร์ดแวร์ดีปเลิร์นนิง
- วิธีที่เสนอเปลี่ยนการคูณเมทริกซ์บางส่วนให้เป็น การบวกแบบบิตต่ำ ที่มีต้นทุนถูกกว่า โดยมีเป้าหมายเพื่อลดจำนวน multiplier ที่ต้องใช้สำหรับประสิทธิภาพเท่าเดิมลงครึ่งหนึ่ง หรือเพิ่มประสิทธิภาพต่อหน่วย MAC
- ผลลัพธ์ที่ได้คือ เร่ง CNN inference ได้สูงสุด 3×, มี throughput การคูณต่อ multiplier/clock มากกว่า 2× พร้อมทั้งใช้พื้นที่น้อยและทำงานที่ความถี่สัญญาณนาฬิกาสูง เมื่อเทียบกับตัวเร่งสมัยใหม่บนแพลตฟอร์มคอมพิวต์ใกล้เคียงกัน
- ขอบเขตการใช้งานครอบคลุม dense matrix multiplication และงานที่พึ่งพามันเป็นหลัก เช่น fully-connected layer, CNN, RNN และ attention layer/transformer model โดยส่วนใหญ่ให้เอาต์พุตเหมือนวิธีเดิมในงาน fixed-point และ quantized inference
- สถาปัตยกรรมถูกออกแบบให้คงฟังก์ชันและอินเทอร์เฟซแบบเดียวกับ systolic array เดิม จึงสามารถผสานเข้ากับระบบตัวเร่งเดิมได้ด้วยการแทนที่ MXU โดยไม่ต้องมีขั้นตอน pre-processing หรือ post-processing เพิ่มเติม
เป้าหมายและผลงานของโครงการ
- Algebraic Enhancements for GEMM & AI Accelerators รวบรวมซอร์สโค้ดของระบบ GEMM และตัวเร่งฮาร์ดแวร์ดีปเลิร์นนิง
- ระบบนี้ใช้เพื่อตรวจสอบสถาปัตยกรรม systolic array ที่นำอัลกอริทึมการคูณเมทริกซ์แบบมีประสิทธิภาพซึ่งถูกเสนอไว้หรือยังไม่ได้ถูกสำรวจมากพอ มาทำเป็นฮาร์ดแวร์
- เป้าหมายคือคำนวณเอาต์พุตแบบเดียวกันโดยใช้ทรัพยากรฮาร์ดแวร์น้อยลงหรือใช้เวลารันสั้นลง
- ประสิทธิภาพที่รายงานมีดังนี้
- CNN inference เร็วขึ้นสูงสุด 3× เมื่อเทียบกับตัวเร่งรุ่นใหม่บนแพลตฟอร์มคอมพิวต์ประเภทเดียวกัน
- mults/multiplier/clock cycle มากกว่า 2× ซึ่งเกินขีดจำกัดแบบดั้งเดิมที่ 1
- ใช้พื้นที่น้อยและมีความถี่สัญญาณนาฬิกาสูง
สถาปัตยกรรมที่ตรวจสอบแล้วในงานวิจัยและวิทยานิพนธ์ปริญญาเอก
- Fast Inner-Product Algorithms and Architectures for Deep Neural Network Accelerators
- ลดจำนวน multiplier ที่ต้องใช้ลงครึ่งหนึ่ง เพื่อให้ได้ประสิทธิภาพเท่าเดิมในงานคูณเมทริกซ์และสถาปัตยกรรมฮาร์ดแวร์ดีปเลิร์นนิง
- อัลกอริทึม inner-product แบบทดแทนสลับการคูณครึ่งหนึ่งไปเป็นการบวกแบบบิตต่ำที่มีต้นทุนถูกกว่า
- systolic array ที่เสนอสามารถนำไปเสียบแทนในระบบ systolic array เดิมได้ และเพิ่มประสิทธิภาพต่อหน่วย MAC ได้ 2 เท่า โดยไม่ต้องเปลี่ยนฟังก์ชันหรือดีไซน์ส่วนอื่นของระบบ
- ฉบับเต็มแบบเปิดเผย: https://arxiv.org/abs/2311.12224
- Karatsuba Matrix Multiplication and its Efficient Custom Hardware Implementations
- เสนอ KMM ซึ่งขยาย Karatsuba multiplication ไปสู่ matrix multiplication
- ลดความซับซ้อนของ integer matrix multiplication และนำเสนอการทำฮาร์ดแวร์แบบ custom ที่ช่วยปรับปรุงด้านพื้นที่หรือเวลารันในงานคูณเมทริกซ์และตัวเร่งดีปเลิร์นนิง
- ฉบับเต็มแบบเปิดเผย: https://arxiv.org/abs/2501.08889
- Strassen Multisystolic Array Hardware Architectures
- นำเสนอการทำฮาร์ดแวร์แบบ custom ที่มีประสิทธิภาพชิ้นแรกสำหรับอัลกอริทึม fast matrix multiplication ของ Strassen
- บรรลุประสิทธิภาพระดับแนวหน้าในตัวเร่งดีปเลิร์นนิง
- ฉบับเต็มแบบเปิดเผย: https://arxiv.org/abs/2502.10063
- Algebraic Enhancements for Systolic Arrays วิทยานิพนธ์ปริญญาเอก
- ครอบคลุมสามวิธีข้างต้น, การเร่งดีปเลิร์นนิง, algebraic enhancements, การออกแบบระบบตัวเร่งดีปเลิร์นนิงที่นำเสนอ และงานต่อยอดในอนาคต
- ออนไลน์: https://macsphere.mcmaster.ca/handle/11375/30640
เหตุผลที่ต้องเพิ่มประสิทธิภาพต่อ MAC·multiplier
- งานคำนวณส่วนใหญ่ของโมเดลดีปเลิร์นนิงสามารถแมปเป็น matrix multiplication ได้โดยทั่วไป ซึ่งประกอบด้วยชุดของการดำเนินการ multiply-accumulate
- หากไม่มีนวัตกรรมเชิงพีชคณิตเพิ่มเติม throughput ของตัวเร่งดีปเลิร์นนิงจะถูกจำกัดด้วยจำนวนสูงสุดของการดำเนินการ MAC ที่ทำได้ต่อ clock cycle
- เนื่องจากตัวเร่งดีปเลิร์นนิงมี MAC unit จำนวนมาก multiplier และ MAC unit จึงมักเป็นทรัพยากรคำนวณที่กินพื้นที่ฮาร์ดแวร์อย่างมากใน GEMM และตัวเร่งดีปเลิร์นนิง
- throughput ของตัวเร่งอาจถูกจำกัดโดยตรงด้วย จำนวน multiplier ที่งบประมาณฮาร์ดแวร์รองรับได้
- ในการทำบน FPGA นั้น DSP unit ที่ใช้สร้าง MAC unit อาจหมดก่อน LUT และ register
- โครงการนี้สำรวจการก้าวข้ามข้อจำกัดดังกล่าวด้วยการนำ algebraic enhancement ไปใช้กับอัลกอริทึม matrix multiplication และการทำฮาร์ดแวร์แบบ custom
ขอบเขตการใช้งานและข้อจำกัด
- สถาปัตยกรรมฮาร์ดแวร์ systolic array ที่เสนอช่วยปรับปรุงการเร่ง dense matrix multiplication
- สามารถใช้กับโมเดลและเลเยอร์ DNN ที่แตกออกมาเป็น matrix multiplication เป็นหลัก
- fully-connected layer
- CNN
- RNN
- attention layer และ transformer model
- ผลงานส่วนใหญ่มุ่งที่ fixed-point data type และการอนุมานของโครงข่ายประสาทเทียมแบบ quantized
- แนวคิด fixed-point บางส่วนอาจต่อยอดไปยัง floating point ได้ในอนาคต
- เนื่องจากใช้ fixed-point data type อัลกอริทึมและสถาปัตยกรรมฮาร์ดแวร์ที่นำเสนอจึงสร้างเอาต์พุตแบบเดียวกับอัลกอริทึมและสถาปัตยกรรมเดิม
- ไม่มีการเปลี่ยนแปลงในด้าน numerical stability
- แม้ผลลัพธ์จะตรวจสอบบน FPGA แต่สถาปัตยกรรมที่เสนอมีลักษณะทั่วไป และการปรับปรุงส่วนใหญ่ใช้ได้ทั้งกับ custom integrated circuit และการทำบน FPGA
- สถาปัตยกรรมนี้อิงกับ systolic array
- เป็นรูปแบบดีไซน์ที่มีประสิทธิภาพซึ่งใช้ในงานออกแบบ GEMM และตัวเร่งดีปเลิร์นนิงอย่าง Google TPU
- แนวคิดบางส่วนอาจขยายไปสู่ดีไซน์ non-systolic array ได้ในอนาคต
- ยังคงฟังก์ชันและอินเทอร์เฟซเดียวกับ systolic array เดิม
- algebraic enhancement ถูกบรรจุอยู่ภายใน systolic array อย่างสมบูรณ์ จึงไม่ต้องมีขั้นตอน pre-processing หรือ post-processing เพิ่มเติม
พรีวิวผลลัพธ์ด้านประสิทธิภาพ
- ผลการสังเคราะห์และประสิทธิภาพจากการรวมสถาปัตยกรรมของ [1] และ [3] ทำได้ดังนี้เมื่อเทียบกับตัวเร่งรุ่นใหม่บนแพลตฟอร์มคอมพิวต์ใกล้เคียงกัน
-
CNN inference เร็วขึ้นสูงสุด 3×
-
mults/multiplier/clock cycle สูงขึ้น 2×
- ความถี่สัญญาณนาฬิกา สูงขึ้นมากกว่า 40%
- ดูผลลัพธ์เพิ่มเติมได้ใน งานวิจัย 1, งานวิจัย 2, งานวิจัย 3, วิทยานิพนธ์ปริญญาเอก
-
โครงสร้างระบบตัวเร่ง
- ระบบตัวเร่งดีปเลิร์นนิงที่ทำไว้ในซอร์สโค้ดถูกใช้เพื่อโฮสต์และตรวจสอบ systolic array ที่เสนอใน [1]-[4]
- การทำระบบนี้เน้นสำหรับการอนุมานด้วยอินพุต fixed-point และ quantized ของ non-sparse DNN model
- convolutional layer
- fully-connected layer
- pooling layer
- ทุก DNN layer ถูกเร่งด้วยฮาร์ดแวร์อย่างสมบูรณ์
- ดีไซน์ฮาร์ดแวร์เพียงชุดเดียวสามารถเร่ง ML model ที่มี layer dimensions และ kernel sizes แบบ arbitrary ได้
- input bitwidth และขนาดของ systolic array สามารถกำหนดเป็นพารามิเตอร์ได้
- ยังถูกปรับแต่งอย่างมากให้เป็น GEMM accelerator แบบทั่วไปด้วย
บล็อกหลัก
-
Matrix Multiply Unit / MXU
- มีสถาปัตยกรรม systolic array สำหรับทำการคูณเมทริกซ์
- systolic array/MXU ที่แตกต่างกันจากแต่ละวิธีใน [1]-[4] ถูกสลับมาแทนที่ตำแหน่ง MXU ของระบบ
-
GEMM Unit
- ประกอบด้วย MXU, SRAM และ addition logic
- ทำให้สามารถรัน GEMM ของเมทริกซ์ขนาดใดก็ได้ด้วยการสะสม matrix tile
-
Post-GEMM Unit
- ทำฟังก์ชันเฉพาะของ neural network กับเอาต์พุตจาก matrix multiplication
- รวมถึงการเพิ่ม bias, inter-layer rescaling เพื่อ quantization, activation, padding และ pooling
-
Memory Unit
- มี on-chip SRAM สำหรับเก็บ layer activation และ logic ควบคุมการเข้าถึงหน่วยความจำ
- ใช้อัลกอริทึมฮาร์ดแวร์สำหรับ caching และ memory access ที่มีประสิทธิภาพเพื่อแมป convolution เป็น GEMM แบบ in-place โดยไม่มีการทำข้อมูลซ้ำหรือหน่วงเวลา
- ใช้ memory partitioning scheme ที่รัน SRAM memory และการควบคุมที่อัตรา clock ครึ่งหนึ่งหรือหนึ่งในสี่ แต่ยังปล่อยข้อมูลใหม่ที่อัตรา clock เต็ม เพื่อปรับปรุงความถี่และพลังงานของทั้งระบบ
-
Off-chip DDR DRAM
- ใช้เก็บ weights
-
RxTx Unit
- รับผิดชอบ PCIe interface สำหรับเชื่อมต่อกับ host
-
Instruction Unit
- ถอดรหัส accelerator instruction ที่ส่งมาจาก host
- ทำให้ดีไซน์ฮาร์ดแวร์ชุดเดียวสามารถเร่ง ML model ที่มี layer dimensions และ kernel sizes แบบ arbitrary ได้
องค์ประกอบของซอร์สโค้ด
compiler- compiler ที่แปลง Python ML model description เป็น accelerator instruction
- รวมโค้ดที่เชื่อมต่อกับ PCIe driver เพื่อเริ่มการรันโมเดลบนตัวเร่ง อ่านผลลัพธ์และ performance counter และทดสอบความถูกต้อง
rtl- SystemVerilog accelerator RTL ที่สังเคราะห์ได้
sim- สคริปต์ตั้งค่าสภาพแวดล้อม simulation สำหรับการตรวจสอบ
tests- ซอร์สโค้ด UVM testbench ที่เขียนด้วย Python และ cocotb
utils- Python package เพิ่มเติมและ utility script สำหรับการพัฒนาที่ใช้ในโครงการ
rtl/top/define.svhและrtl/top/pkg.sv- มี configurable parameter หลายตัว
FIP_METHODกำหนดชนิดของ systolic array เช่น baseline, FIP, FFIP [1]SZIและSZJกำหนดความสูงและความกว้างของ systolic arrayLAYERIO_WIDTHและWEIGHT_WIDTHกำหนด input bitwidth
rtl/arith- มี
mxu.svและmac_array.sv - มี RTL ของ baseline และสถาปัตยกรรม systolic array ที่เสนอบางส่วน ได้แก่ FIP, FFIP [1] ตามค่า
FIP_METHOD
- มี
เอกสารเพิ่มเติม
- เอกสารเพิ่มเติมเกี่ยวกับระบบตัวเร่งมีอยู่ใน งานวิจัย 1 และ Chapter 3 ของวิทยานิพนธ์ปริญญาเอก
- รายละเอียดของสถาปัตยกรรม systolic array ที่เสนอและ algebraic enhancement มีอยู่ใน งานวิจัย 1, งานวิจัย 2, งานวิจัย 3, วิทยานิพนธ์ปริญญาเอก, Ph.D. defence slideshow
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูน่าสนใจมาก แล้วจุดที่ต้องระวังคืออะไร? เช่น ทำไมถึงยังไม่ได้ถูกนำไปใช้ในตัวเร่งความเร็วอยู่แล้ว
สงสัยว่ามันเป็นแค่อัลกอริทึมที่ถูกลืมจริง ๆ หรือมีข้อจำกัดที่กระทบกับต้นทุนการสร้างตัวเร่งความเร็วหรือเปล่า
ถ้าจะให้ได้ประโยชน์ ต้องสร้างฮาร์ดแวร์ให้ตรงกับมิติของอัลกอริทึม ซึ่งเป็นการตัดสินใจที่มีต้นทุนสูง
มันอิงกับอัลกอริทึมของ Winograd แล้วบังเอิญว่า Winograd ภายหลังก็เสนออีกอัลกอริทึมหนึ่งที่โด่งดังมากในงานเร่ง CNN ทำให้อัลกอริทึมนี้อาจได้รับความสนใจน้อยกว่า ทั้งหมดนี้ก็เป็นแค่การคาดเดา
มันคือการหาจุดสมดุลระหว่าง ความแม่นยำ, เวลาในการรัน, การขยายขนาด อยู่เสมอ และวิธีนี้อาจให้ความแม่นยำไม่ดีนักเมื่อใช้กับเลขทศนิยมลอยตัว
มันยังหลงเหลืออยู่บ้างใน ตัวพิสูจน์ยืนยันแบบ Wegman-Carter ที่อิงกับ pseudodot product เช่น UMAC ดูพื้นหลังได้ในบทที่ 3 ของ [1]
[1] https://cr.yp.to/antiforgery/pema-20071022.pdf
ถ้าใช้เพื่อจุดประสงค์นั้นก็ดูเพียงพอใช้ได้ไม่ใช่หรือ
ทำให้นึกถึงตอนปี 2018 ที่ผมเคยจะลองทำอะไรคล้าย ๆ กัน แต่สุดท้ายก็เลิกไปเพราะสมัครเรียนปริญญาเอกไม่ติดเลยสักที่
https://github.com/ixaxaar/pytorch-dni
แนวคิดนี้ก้าวไปอีกขั้น โดยพยายามจำลอง backpropagation ด้วยเครือข่ายภายนอก และอ้างว่าสมองจริงอาจทำแบบนั้นอยู่
งานนี้เป็นการเพิ่มประสิทธิภาพระดับล่างของการคูณเมทริกซ์ ส่วนรีโพที่ลิงก์มาดูเหมือนพยายามแทนที่เกรเดียนต์จาก backprop ด้วยค่าประมาณที่ถูกกว่า เลยสงสัยว่าความคล้ายกันของทั้งสองอย่างอยู่ตรงไหน
เวลาที่ประหยัดได้จากการประมาณเกรเดียนต์แบบนี้ น่าจะหายไปเพราะต้องเทรนซ้ำเพิ่มขึ้นจากการสูญเสียความแม่นยำของเกรเดียนต์ ไม่ใช่หรือ?
น่าสนใจมากและคุ้มค่าแก่การอ่าน สำหรับคนที่สับสนจากคอมเมนต์ว่าทำไมมันถึงดีกว่า งานวิจัยนี้พูดถึงการสังเคราะห์ pipeline การคูณเมทริกซ์ บนฮาร์ดแวร์อย่าง FPGA หรือ ASIC
บน CPU หรือ GPU เวลาของการบวกกับการคูณมักใกล้เคียงกันจึงรู้สึกความต่างได้ยาก แต่ยูนิตคูณกินทรานซิสเตอร์มากกว่ามาก ถ้าลดความซับซ้อนของวงจรลงได้ ก็สามารถเพิ่มความเร็วและ throughput แบบขนาน พร้อมทั้งลดพลังงานและความซับซ้อนของการเดินสายได้ วิธีนี้อาจมีประโยชน์เป็นพิเศษกับตัวเร่งการคูณเมทริกซ์แบบ sparse ที่มีประสิทธิภาพ
อีกวิธีเจ๋ง ๆ ในการตัดการคูณออกจากการคูณเมทริกซ์คือใช้ semiring แบบอื่น [1] ตัวอย่างเช่น Tropical Semiring [2] แทนที่การคูณด้วยการบวก และแทนที่การบวกด้วย min หรือ max มันยังคงเป็นการคูณเมทริกซ์อยู่ เพียงแต่เปลี่ยนรูปของตัวดำเนินการทวิภาคเท่านั้น งานวิจัยในสาขาที่ค่อนข้างใหม่อย่าง Tropical Algebra [3] ตอนนี้ค่อนข้างคึกคักและมีเนื้อหามากมาย และถูกนำไปใช้กับปัญหาการหาค่าเหมาะที่สุดหลายแบบรวมถึงงานวิจัยด้านการปรับเหมาะโครงข่ายประสาท [4]
วิธีนี้ก็เหมาะกับการสังเคราะห์ฮาร์ดแวร์เช่นกัน เพราะบล็อกลอจิกที่ตั้งค่าได้ของ FPGA ส่วนใหญ่สามารถทำ add/min/max ได้ในหนึ่งคล็อก ในขณะที่การคูณอย่างมีประสิทธิภาพต้องพึ่งฮาร์ดแวร์ตัวคูณเฉพาะทางบนชิปแบบตายตัว
อีก semiring ที่เกี่ยวข้องกันซึ่งใช้ตัดการคูณออกได้อย่างมีประสิทธิภาพคือ Log Semiring [5] ถ้าต้องคูณความน่าจะเป็นต่อเนื่องกัน เช่น ใน Markov chain ตัวเลขจะเล็กมากอย่างรวดเร็วและทำให้ความแม่นยำของ floating point ลดลง หากนำลอการิทึมมาปรับสเกลก่อน การคูณจะกลายเป็นการบวก และการบวกจะกลายเป็น
x + log1p(exp(y - x))[1] https://en.wikipedia.org/wiki/Semiring
[2] https://en.wikipedia.org/wiki/Tropical_semiring
[3] https://en.wikipedia.org/wiki/Tropical_geometry
[4] https://proceedings.mlr.press/v80/zhang18i/zhang18i.pdf
[5] https://en.wikipedia.org/wiki/Log_semiring
ผมยังเกือบเป็นมือใหม่ในด้านนี้ แต่ดูเหมือนว่ามันแสดงให้เห็นว่า เครือข่าย ReLU เกือบทั้งหมดสามารถแทนได้ด้วย tropical quotient ของพหุนาม tropical สองตัว และจึงสามารถวิเคราะห์ด้วยหลักการเชิงเรขาคณิตอย่างการทำภาพพื้นผิวได้ งานที่ใหม่กว่านี้ก็ยังอ้างอิงมันอยู่: https://scholar.google.com/scholar?cites=1003719112553620451... สงสัยว่ามีความก้าวหน้าที่สำคัญในเรื่องนี้หรือไม่
http://www.cs.toronto.edu/~hehner/UA.pdf
โดยเฉพาะถ้าต้องสนใจผลการปัดเศษที่ถูกต้องด้วย ฮาร์ดแวร์ lookup table ที่ต้องใช้จะมีขนาดค่อนข้างใหญ่
ข้อจำกัดเดียวที่นึกออกคือขนาดของ field
https://ieeexplore.ieee.org/abstract/document/1451721
น่าทึ่งที่มันใช้งานได้จริง
ปกติแล้วต้นทุนในการตรวจว่าควรใช้การคูณหรือการบวก กลับช้ากว่าการคูณไปเลย โดยเฉพาะเมื่อทำงานปริมาณมหาศาลแบบขนานกันยิ่งเป็นแบบนั้น
น่าสนใจที่กระบวนการซึ่งคิดค้นตั้งแต่ปี 1968 ไม่เคยถูกนำมาใช้เพื่อจุดประสงค์นี้มาก่อน
อ้อ จะว่าไป วิทยาการคอมพิวเตอร์เองก็แทบยังไม่มีอยู่เลยจนถึงช่วงกลางศตวรรษที่แล้ว
ถ้าสนใจทฤษฎีคณิตศาสตร์เบื้องหลัง อัลกอริทึมเวลาไม่ถึงกำลังสาม สำหรับการคูณเมทริกซ์ เริ่มจากที่นี่ได้: https://en.wikipedia.org/wiki/Matrix_multiplication_algorith...
มีข้อคาดการณ์ว่าสำหรับจำนวนจริงทุกค่า j > 0 จะมี n บางค่าอยู่ ทำให้เมทริกซ์ขนาด n x n สองตัวใด ๆ สามารถคูณกันได้ใน O(n^(2+j)) ขั้นตอน
ปัจจุบันพิสูจน์ได้ที่ 2+j = w = 2.3728596 กล่าวคือสำหรับ j > 0.3728596
ถ้าเริ่มต้นด้วย “สำหรับทุก j จะมี n บางค่าอยู่” ในประโยคถัดไป n กับ j ก็กลายเป็นค่าคงที่ เท่ากับว่าพูดได้แค่ว่าเมทริกซ์ขนาดคงที่คูณกันได้ในเวลาคงที่ ซึ่งก็ถูกในเชิงเทคนิค แต่ดูเหมือนตั้งใจจะอ้างสิ่งที่แรงกว่านั้น
บางทีอาจไปตันที่ j=1/e ก็ได้ ผมไม่ถึงกับเรียกสิ่งนี้ว่าข้อคาดเดา แต่มันก็เป็นแค่ค่าคงที่ที่หยิบมาได้สะดวกใกล้กับค่าปัจจุบัน ถ้าคณิตศาสตร์เล่นตลกแบบนั้นกับเราก็คงขำดี
ช่วยแชร์ intuition หน่อยได้ไหมว่าทำไมถึงคิดแบบนั้น?
README นี้อธิบายได้แย่มากว่าจุดปรับปรุงคืออะไร และลดจำนวนการคูณลงครึ่งหนึ่งได้อย่างไร
แล้ว เวลาในการทำงานแบบ Big O เป็นเท่าไร? นี่เปลี่ยนขอบเขตที่ดีที่สุดที่รู้กันอยู่หรือเปล่า?
รูปประกอบก็ดูรกรุงรัง และแทบไม่ได้อธิบายเลยว่าทำไมแนวทางนี้ถึงเร็วหรือดีกว่าแบบอื่น เลยทำให้ไม่ค่อยอยากกดไปอ่าน PDF ต่อ
ถ้าอยากเพิ่มความน่าเชื่อถือให้โปรเจกต์ ก็ควรอธิบายอย่างตรงไปตรงมาและชัดเจนว่าจริง ๆ แล้วเกิดอะไรขึ้น และใช้คำอธิบายกับแผนภาพที่ชัดเจน แทนรูปที่เหมือนพยายามดึงคนเข้ามาด้วยการโฆษณาเกินจริง แบบนี้แยกยากว่านี่คือความก้าวหน้าครั้งใหญ่จริง ๆ หรือไม่สำคัญอะไรเลย น่าเสียดายที่มันให้ความรู้สึกเหมือนเป็นการเลือกทำแบบจงใจเพื่ออาศัยกระแส AI ทางเลือกที่อยากเชื่อมากกว่าคือผู้เขียนแค่ต้องแก้ไขและให้บริบทให้ดีขึ้น
ในงานวิจัย(https://arxiv.org/abs/2311.12224) คณิตศาสตร์ที่ใช้ลดจำนวนการคูณลงครึ่งหนึ่งไม่ได้เข้าใจยากนัก แค่อ่านสูตร 2 และสูตร 3~6 ของการคูณเมทริกซ์แบบดั้งเดิมก็พอ
ดูชัดเจนว่าแลกกับการเพิ่มการบวก/การลบจำนวนมากเพื่อให้ลดการคูณลงครึ่งหนึ่งตามที่โฆษณาไว้ หลังจากนั้นก็ทำให้ขั้นตอนวิธีนั้นเวกเตอร์ไรซ์ได้ดีขึ้น ซึ่งงานแบบนี้ก็มักจะซับซ้อนขึ้นอย่างรวดเร็วอยู่แล้ว
ความกังวลหลักคือ เสถียรภาพเชิงตัวเลข
ถ้าถามว่าเป็นความก้าวหน้าครั้งใหญ่ไหม ผมมองว่าเป็นการปรับปรุงด้วยค่าคงที่แบบสวยงามที่นำไปใช้ได้ตรง ๆ กับ ตัวเร่ง fixed-point ที่มีข้อจำกัดด้านพื้นที่บนชิป มันไม่ได้เปลี่ยนทุกอย่างในชั่วข้ามคืน แต่ก็ไม่ใช่ว่าไม่มีความหมายเลย เป็นงานที่ดี
ถ้าคุณไม่เข้าใจสัญกรณ์ Big O มากพอจะรู้ว่า “ลดจำนวนการคูณลงครึ่งหนึ่ง” ไม่ได้เปลี่ยน Big O ก็ไม่เข้าใจว่าทำไมถึงถามเรื่องนั้น