ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ลองจินตนาการดูว่า หากเราสามารถนำเทคโนโลยีโมเดลขนาดใหญ่ (Large Model) ที่กำลังเป็นที่นิยมในปัจจุบัน กลับไปยังยุคปี 1970 จะเกิดภาพอะไรขึ้น?

ในยุคสมัยนั้น ไม่มี GPU, ไม่มี CUDA, ไม่มีหน่วยประมวลผลเลขทศนิยม (FPU) และไม่มีเฟรมเวิร์กการเรียนรู้เชิงลึกใดๆ ทั้งสิ้น มีเพียงคอมพิวเตอร์มินิ PDP-11 และภาษาการเขียนโปรแกรมที่เกือบจะหายไปจากประวัติศาสตร์แล้ว นั่นคือภาษาแอสเซมบลี

เมื่อไม่นานมานี้ นักพัฒนาคนหนึ่งได้ให้คำตอบของเขา เขาได้จำลองสภาพแวดล้อมทางเทคนิคในยุคนั้นขึ้นมาใหม่ และใช้ภาษาแอสเซมบลีของ PDP-11 จากยุค 1970 ในการสร้างและฝึกฝนโมเดล Transformer สำเร็จ โครงการนี้มีชื่อว่า ATTN-11

โดยเฉพาะเจาะจงแล้ว โครงการนี้มีเป้าหมายที่จะใช้ภาษาแอสเซมบลีล้วนๆ ในการสร้างโมเดล Transformer แบบชั้นเดียว (Single-layer) และหัวเดียว (Single-head) บนคอมพิวเตอร์มินิ PDP-11 และทำภารกิจ “การกลับลำดับข้อมูล” (Sequence Reversal) — โดยป้อนข้อมูลเป็นชุดตัวเลขเข้าไป แล้วโมเดลต้องส่งออกผลลัพธ์ที่เป็นลำดับย้อนกลับ

ตัวอย่างเช่น ป้อนข้อมูล: 4 7 4 9 6 3 6 5 ผลลัพธ์ที่ควรได้คือ: 5 6 3 6 9 4 7 4

ภารกิจดูเหมือนง่าย แต่ประเด็นสำคัญคือ โมเดลไม่สามารถทำสำเร็จได้ด้วยการ “จำเนื้อหา” แต่ต้องเข้าใจ “ความสัมพันธ์ในการจับคู่ระหว่างตำแหน่ง” และนี่คือความสามารถหลักของกลไก Self-Attention

ผลลัพธ์ของโครงการแสดงให้เห็นว่า บนคอมพิวเตอร์ยุค 1970 นี้ Transformer ที่มีพารามิเตอร์เพียง 1,216 ตัวเท่านั้น หลังจากฝึกฝนไปประมาณ 350 ขั้นตอน ก็สามารถทำความแม่นยำได้ถึง 100% โดยกระบวนการฝึกฝนทั้งหมดใช้เวลาเพียงประมาณ 5 นาทีเท่านั้น

ที่น่าสนใจคือ เนื่องจากสื่อจัดเก็บหลักในยุค PDP-11 คือกระดาษเจาะรู (Punched Paper Tape) นักพัฒนาจึงเรียกโครงการนี้เล่นๆ ว่า “Paper Tape is All You Need”

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

โครงการนี้เมื่อเผยแพร่ออกมา ก็ได้ก่อให้เกิดการอภิปรายอย่างกว้างขวาง

ในปัจจุบัน การพัฒนาโมเดลขนาดใหญ่มุ่งเน้นไปที่ “กฎการขยายขนาด” (Scaling Law) โดยไล่ตามพารามิเตอร์ที่มากขึ้น ข้อมูลที่ใหญ่ขึ้น และพลังการคำนวณที่ทรงพลังขึ้น แต่ ATTN-11 กลับสามารถบรรลุการทำงานแบบครบวงจรได้สำเร็จภายใต้ทรัพยากรที่ต่ำมากและโครงสร้างที่เรียบง่ายมาก สิ่งนี้ทำให้เราต้องฉุกคิด: Transformer จริงๆ แล้วต้องการอะไรกันแน่?

ผู้ใช้อินเทอร์เน็ตคนหนึ่งแสดงความประหลาดใจกับ “การฝึกฝนบน PDP-11 ใช้เวลาเพียง 5 นาที” และสิ่งที่ทำให้เขาตื่นตะลึงยิ่งกว่านั้นคือ สิ่งนี้ดูเหมือนจะบอกเป็นนัยว่า “ที่จริงแล้วเรามีความสามารถที่จะทำสิ่งเหล่านี้มาตลอดเลยหรือ?”

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ผู้ใช้อินเทอร์เน็ตอีกคนเห็นว่าไม่จำเป็นต้องประหลาดใจ เพราะความจริงก็เป็นเช่นนั้น เขาชี้ให้เห็นว่า: “ซูเปอร์คอมพิวเตอร์ Cray ในยุค 1980 มีประสิทธิภาพสูงมากอยู่แล้ว โดยเฉพาะในด้านการคูณเมทริกซ์ ตัวอย่างเช่น Cray X-MP แบบสี่คอร์ในปี 1984 สามารถให้พลังการคำนวณต่อเนื่องที่ 800 MFLOPS ถึง 1 GFLOPS หากติดตั้ง SSD ขนาด 1GB พลังการคำนวณและแบนด์วิธของมันก็เพียงพอที่จะฝึกโมเดลภาษาที่มีพารามิเตอร์ 7 ถึง 10 ล้านตัวภายในครึ่งปี และทำการอนุมาน (Inference) ด้วยความเร็ว 18 ถึง 25 โทเค็นต่อวินาที เมื่อถึงกลางทศวรรษ 1990 พลังการคำนวณของ Cray T3E หนึ่งเครื่องก็สามารถรองรับโมเดลขนาดเท่ากับ GPT-2 ได้ ซึ่งเร็วกว่า OpenAI ถึง 24 ปี ส่วนตัวผมเคยใช้คอมพิวเตอร์การ์ดเจาะรูจากปี 1965 เรียนรู้การคำนวณ XOR ผ่าน Backpropagation มาแล้ว จุดคอขวดที่แท้จริงไม่เคยเป็นฮาร์ดแวร์ แต่เป็นความคิดต่างหาก”

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ผู้ใช้อินเทอร์เน็ตอีกคนเสริมด้วยตัวอย่างจากวิทยาการเข้ารหัสลับ: แผนการเข้ารหัสลับแบบแลตทิซ (Lattice-based Cryptography) ถูกเสนอขึ้นตั้งแต่ทศวรรษ 1990 แล้ว แต่การก้าวไปสู่ระดับอุตสาหกรรมใช้เวลาหลายสิบปี สิ่งกีดขวางสำคัญไม่ใช่ทฤษฎีคณิตศาสตร์ที่ไม่成熟หรือฮาร์ดแวร์ที่ไม่เพียงพอ แต่เป็นแนวคิดสำคัญที่จะทำให้ทฤษฎีเหล่านี้ “ทำงานได้” ซึ่งยังไม่เกิดขึ้นในเวลานั้น

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ต่อไป เรามาดูรายละเอียดการนำไปใช้ของโครงการนี้กัน

นักพัฒนาระบุว่า โครงการนี้เป็น “ภาคต่อทางจิตวิญญาณ” ของโครงการ Xortran โดย Xortran เป็นโครงข่ายประสาทเทียมที่ใช้ Fortran IV ในการสร้าง Backpropagation เพื่อเรียนรู้การคำนวณ XOR บน IBM 1130 และ PDP-11/20 ดังนั้น ขั้นตอนต่อไปตามธรรมชาติก็คือการสำรวจว่าเครื่องเหล่านี้สามารถฝึก Transformer ขนาดเล็กให้สำเร็จภายในเวลาที่ยอมรับได้หรือไม่

จากมุมมองของสถาปัตยกรรม Transformer โดยพื้นฐานแล้วเป็นเพียงการขยายโครงข่ายประสาทเทียมพื้นฐานในระดับปานกลาง องค์ประกอบการสร้างต่างๆ เช่น การคูณเมทริกซ์ Backpropagation Stochastic Gradient Descent และ Cross-Entropy Loss มีอยู่แล้ว ส่วนหลักที่เพิ่มเข้ามาใหม่มีสามส่วนหลัก:
* Self-Attention: การคำนวณคะแนนดอทโปรดัคระหว่างคิวรีและคีย์ที่ถูกแมปแล้ว
* Positional Encoding: เอมเบดดิ้งตำแหน่งที่เรียนรู้ได้ ซึ่งจะถูกบวกเข้ากับอินพุต
* Softmax: การแปลงคะแนนให้เป็นการกระจายความน่าจะเป็น

เป้าหมายของโครงการนี้คือการฝึก Transformer ให้สามารถกลับลำดับตัวเลข แม้ว่าภารกิจจะง่าย แต่โมเดลต้องเรียนรู้ที่จะกำหนดเส้นทางให้แต่ละโทเค็นตามดัชนีตำแหน่งเท่านั้น ไม่สามารถพึ่งทางลัดที่อิงตามเนื้อหาได้ ปัญหาประเภทนี้ถูกออกแบบมาเพื่อกลไก Self-Attention โดยเฉพาะ และที่จริงแล้วก็เป็นหนึ่งในเกณฑ์มาตรฐานอัลกอริทึมที่รวมอยู่ใน Tensor2Tensor ซึ่งเป็นการอ้างอิงการนำไปใช้ดั้งเดิมของ Transformer จาก Google ในปี 2017

สถาปัตยกรรม

เส้นทางข้อมูลค่อนข้างตรงไปตรงมา: โทเค็นถูกฝัง (Embedded) แล้วผ่านชั้น Self-Attention ที่มีการเชื่อมต่อแบบตกค้าง (Residual Connection) จากนั้นจึงถูกแมปกลับไปยังคำศัพท์ (Vocabulary) และผ่าน Softmax เพื่อทำนาย

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!
ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

นี่คือ Transformer ที่เรียบง่ายที่สุด: ประกอบด้วยชั้น Embedding, ชั้น Self-Attention พร้อมการเชื่อมต่อแบบตกค้าง และชั้น Output Mapping มันเป็น Transformer ที่แท้จริง พร้อมด้วย Self-Attention แต่ไม่ใช่ทั้ง BERT และ GPT: ไม่มี Layer Normalization, ไม่มี Feedforward Network, ไม่มี Decoder สำหรับภารกิจปัจจุบัน ไม่จำเป็นต้องมีการแปลงการแสดงโทเค็นที่ซับซ้อน ดังนั้น Attention และการเชื่อมต่อแบบตกค้างจึงเพียงพอแล้ว Layer Normalization ใช้หลักเพื่อป้องกันการล่องลอยของค่าการกระตุ้น (Activation Drift) ในโครงข่ายลึก ซึ่งไม่จำเป็นในโมเดลชั้นเดียว

การปรับให้เหมาะสมสำหรับฮาร์ดแวร์ยุค 1970

การนำไปใช้ครั้งแรกใช้วิธีเดียวกับ Xortran โดยเขียนด้วย Fortran IV ด้วยอัตราการเรียนรู้ (Learning Rate) แบบเดียวกันที่ 0.01 โมเดลใช้เวลา 25 นาทีในการฝึก 100 ขั้นตอน และต้องใช้ประมาณ 1,500 ขั้นตอนเพื่อให้ได้ความแม่นยำ 100% บนฮาร์ดแวร์จริง นี่เทียบเท่ากับเวลาฝึกประมาณ 6.5 ชั่วโมง และบน IBM 1130 อาจยาวนานถึงหนึ่งสัปดาห์ แม้แต่ในมาตรฐานยุค 1970 สิ่งนี้ก็ยากที่จะยอมรับได้ เพราะคอมพิวเตอร์ในยุคนั้นมักใช้กลไกแบ่งปันเวลา (Time-sharing) และทรัพยากรการคำนวณมีค่ามาก

ดังนั้น การปรับปรุงแรกคือการแทนที่อัตราการเรียนรู้แบบเดียวกันด้วยอัตราการเรียนรู้แบบเป็นชั้น (Per-Layer) ที่ปรับด้วยมือ:

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

น้ำหนัก Attention ที่เข้ารหัส “รูปแบบการกลับลำดับ” เหมาะกับอัตราการเรียนรู้ที่สูงกว่า ในขณะที่ชั้น Output Mapping มาบรรจบกันได้ดีกว่าด้วยอัตราการเรียนรู้ที่ต่ำกว่า ด้วยการปรับเปลี่ยนนี้ จำนวนขั้นตอนการฝึกลดลงเหลือ 600 ขั้นตอน และคาดว่าการฝึกจะใช้เวลาประมาณ 2.5 ชั่วโมง

ตัวเพิ่มประสิทธิภาพ (Optimizer) ใช้ Stochastic Gradient Descent พื้นฐานที่สุด ตัวเพิ่มประสิทธิภาพเช่น Adam แม้ว่าสามารถปรับขนาดขั้นตอนได้เอง แต่ต้องแลกมาด้วยการบำรุงรักษาสถานะเวกเตอร์เพิ่มเติมสองตัวสำหรับแต่ละพารามิเตอร์ ทำให้การใช้หน่วยความจำเพิ่มขึ้นเป็นสามเท่า และแต่ละการอัปเดตต้องมีการคำนวณรากที่สองและการหาร ซึ่งมีค่าใช้จ่ายสูงบน PDP-11 ในทางตรงกันข้าม อัตราการเรียนรู้แบบเป็นชั้นให้ผลลัพธ์ที่คล้ายกันโดยไม่เพิ่มต้นทุนเพิ่มเติม เนื่องจากโมเดลมีขนาดเล็ก อัตราการเรียนรู้สามชุดสามารถปรับด้วยมือได้ สิ่งนี้ยังทำให้โมเดล Transformer สามารถใส่ลงในหน่วยความจำหลักขนาด 32KB ได้ แทนที่จะเป็น 64KB ซึ่งมีความสำคัญมากในยุค 1970

หมายเหตุเพิ่มเติม: เนื่องจากการนำไปใช้ด้วยภาษาแอสเซมบลีแบบเบเรโทน (Bare-Metal) การใช้หน่วยความจำของ ATTN-11 จึงไม่สูงกว่า Xortran ที่ต้องแบกรับค่าใช้จ่ายของระบบปฏิบัติการและรันไทม์ Fortran ไฟล์ไบนารีสุดท้ายที่สร้างขึ้นค่อนข้างกะทัดรัด มีขนาดเพียง 6,179 ไบต์

NN11

การคำนวณทางคณิตศาสตร์หลักอิงตาม NN11 ซึ่งเป็นสแต็กการคำนวณโครงข่ายประสาทเทียมแบบ Fixed-Point ขนาดเล็กที่สุดที่ออกแบบสำหรับ ATTN-11 และ PDP-11

โครงสร้างของ NN11 คล้ายกับ BLAS แบ่งออกเป็นหลายระดับ: ระดับล่างสุดคือการดำเนินการพื้นฐานแบบสเกลาร์ ถัดขึ้นมาคือการดำเนินการเวกเตอร์ เช่น ดอทโปรดัคและการปรับขนาด ถัดขึ้นไปอีกคือการดำเนินการเมทริกซ์-เวกเตอร์ โดยแต่ละระดับสร้างขึ้นจากระดับล่าง นอกจากนี้ ยังมีโมดูลสองโมดูลที่ขยายสแต็กการคำนวณนี้ไปไกลกว่าพีชคณิตเชิงเส้น: หนึ่งคือฟังก์ชันกระตุ้นและตารางค้นหาของมัน และอีกโมดูลคือการดำเนินการระดับชั้น (Layer Operations) สำหรับรวมการดำเนินการก่อนหน้าเพื่อใช้งานต่างๆ เช่น Embedding, Mapping และ Attention

การคำนวณทางคณิตศาสตร์เหล่านี้จะถูกปรับให้เข้ากับขั้นตอนการคำนวณต่างๆ:

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

บน PDP-11 การคำนวณไปข้างหน้าใช้รูปแบบ Q8 ในขณะที่ Backpropagation ใช้รูปแบบ Q15 การผสมผสานนี้มีประสิทธิภาพมาก การคูณตัวเลข Q8 หนึ่งตัวกับตัวเลข Q15 หนึ่งตัวจะให้ผลลัพธ์ในรูปแบบ Q23 ภายในคู่รีจิสเตอร์ 32 บิต ซึ่งสามารถปรับขนาดกลับเป็นรูปแบบ Q15 ได้ด้วยคำสั่ง ASHC #-8 เพียงครั้งเดียว

ดังนั้น ค่าใช้จ่ายของการคูณใน Backpropagation จึงไม่สูงกว่าการคำนวณไปข้างหน้า ในขณะเดียวกันยังทำให้ความแม่นยำของเกรเดียนต์สูงกว่าค่าการกระตุ้นถึง 128 เท่า

หลังจากการปรับให้เหมาะสม โมเดลสามารถมาบรรจบกันได้ภายใน 350 ขั้นตอน ทำให้เวลาฝึกทั้งหมดบน PDP-11/34A ของนักพัฒนาลดลงเหลือเพียง 5.5 นาที

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ในโครงการนี้ นักพัฒนาไม่ได้ใช้เครื่องอ่านกระดาษเจาะรูทางกายภาพ แต่เขียนโค้ดเป้าหมายลงในหน่วยความจำผ่านคอนโซลโดยตรง

ต่อไปนี้คือผลลัพธ์หลังจากรัน Transformer นี้:

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

ต้นแบบ

ก่อนที่จะเปลี่ยนไปใช้การนำไปใช้ด้วยภาษาแอสเซมบลีอย่างเป็นทางการ ต้องตรวจสอบความถูกต้องของการออกแบบก่อน ดังนั้น นักพัฒนาจึงสร้างต้นแบบและตรวจสอบเลขคณิตแบบ Floating-Point และ Fixed-Point ใน Sheaf ก่อน Sheaf เป็นเฟรมเวิร์กการเรียนรู้ของเครื่องเชิงฟังก์ชันที่นักพัฒนาสร้างขึ้น ซึ่งมีกลไกการสังเกตการณ์ (Observability) ในตัว

สำหรับงานการเรียนรู้ของเครื่องประเภทนี้ Sheaf มีข้อได้เปรียบหลายประการเมื่อเทียบกับ Python:
* ปริมาณโค้ดลดลงประมาณหนึ่งในสาม
* ความหมายเชิงฟังก์ชันล้วน (Pure Functional Semantics) ให้การรับประกันความถูกต้องที่แข็งแกร่งขึ้น
* สามารถติดตามเทนเซอร์ระดับกลางทุกตัวได้ในตัว รวมถึงรูปร่าง ช่วงตัวเลข และเวลาในการคำนวณ สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อพัฒนาคณิตศาสตร์ Fixed-Point

ตัวอย่างเช่น การตั้งค่าการป้องกันช่วง (Range Guard) บนการดำเนินการ vtmul สามารถตรวจจับปัญหาการลืมการเลื่อนบิต >>8 ได้ทันที:

ย้อนเวลากลับไปปี 1970: ใช้ภาษาแอสเซมบลี PDP-11 ฝึกฝน Transformer สำเร็จใน 5 นาที!

การนำไปใช้ต้นแบบทั้งสองแบบ (Floating-Point และ Fixed-Point) สามารถพบได้ในโฟลเดอร์ proto ของโครงการ พร้อมด้วยเวอร์ชัน Fortran ดั้งเดิม

รายละเอียดการนำไปใช้

เนื่องจากไม่มีหน่วยประมวลผลเลขทศนิยม ฟังก์ชันเหนือระดับ (Transcendental Functions) (เช่น exp, log) จึงถูกแทนที่ด้วยตารางค้นหาที่คำนวณล่วงหน้า บน PDP-11 การค้นหาตารางหนึ่งครั้งต้องการเพียงคำสั่ง MOV เดียว ซึ่งมีค่าใช้จ่ายต่ำกว่าการประมาณด้วยพหุนามหรืออัลกอริทึม CORDIC มาก

Softmax

Softmax ใช้ตารางค้นหาที่มี 256 รายการ (

⚠️ หมายเหตุ: เนื้อหาได้รับการแปลโดย AI และตรวจสอบโดยมนุษย์ หากมีข้อผิดพลาดโปรดแจ้ง

☕ สนับสนุนค่ากาแฟทีมงาน

หากคุณชอบบทความนี้ สามารถสนับสนุนเราได้ผ่าน PromptPay

PromptPay QR
SCAN TO PAY WITH ANY BANK

本文来自网络搜集,不代表คลื่นสร้างอนาคต立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/th/archives/30087

Like (0)
Previous 6 hours ago
Next 6 hours ago

相关推荐