- Z80-μLM คือ โมเดลปัญญาประดิษฐ์สำหรับการสนทนาขนาดจิ๋ว ที่ทำงานบน โปรเซสเซอร์ Z80 (4MHz, RAM 64KB) จากปี 1976
- ใช้ การฝึกแบบรับรู้การควอนไทซ์ (QAT) เพื่อสร้าง ข้อความระดับตัวอักษร ได้ด้วยน้ำหนัก 2 บิตและการคำนวณจำนวนเต็ม 16 บิตเท่านั้น
- ภายในไฟล์รันนามสกุล .COM ขนาดราว 40KB รวมทั้งเอนจินอนุมาน น้ำหนักโมเดล และ UI แชตไว้ครบ
- ใช้ trigram hash encoding แปลงอินพุตเป็น 128 บักเก็ต เพื่อสร้างคำตอบที่ทนต่อคำพิมพ์ผิดและลำดับคำที่เปลี่ยนไป
- แม้จะไม่สามารถเข้าใจบริบทซับซ้อนได้ แต่ก็เป็น โมเดล AI เชิงทดลองที่ทำงานได้แม้ในสภาพแวดล้อม 8 บิตที่มีข้อจำกัด จึงได้รับความสนใจ
ภาพรวมโปรเจกต์
- Z80-μLM คือ โมเดลภาษาขนาดจิ๋วที่สามารถรันได้ในสภาพแวดล้อมเรโทรคอมพิวติง
- ทำงานบน CPU Z80 ที่มี RAM 64KB และสร้าง คำตอบแบบโต้ตอบในระดับตัวอักษร
- ขนาดรวมทั้งหมดซึ่งรวมโมเดล โค้ดอนุมาน และ UI อยู่ที่ประมาณ 40KB
- คำถามหลักของโปรเจกต์คือ “จะทำให้เล็กได้แค่ไหนโดยยังคงเอกลักษณ์ไว้ได้” และยังสามารถ แจกจ่ายแบบ self-hosting ได้ด้วย
- แม้จะ ยังไม่ถึงระดับ Turing Test แต่ก็อยู่ในรูปแบบที่มอบความสนุกให้ผู้ใช้ผ่านการสนทนาแบบง่าย ๆ
มีตัวอย่างให้ 2 แบบ
-
tinychat
- แชตบอตอย่างง่ายที่ฝึกจาก ข้อมูล Q&A ในชีวิตประจำวัน
- ให้คำตอบสั้น ๆ ที่มีบุคลิกสำหรับการทักทาย การแนะนำตัว และบทสนทนาทั่วไป
- ตัวอย่าง: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
-
guess
- โมเดลในรูปแบบเกม 20 Questions
- รู้หัวข้อที่เป็นความลับและตอบด้วย YES/NO/MAYBE
- ถ้าผู้ใช้ทายถูกจะพิมพ์ “WIN”
- ข้อมูลฝึกสามารถสร้างได้ด้วย Ollama หรือ Claude API และมี เครื่องมือปรับสมดุลการกระจายของคลาส รวมมาให้
ฟีเจอร์หลัก
- Trigram hash encoding: แฮชข้อความอินพุตเป็น 128 บักเก็ต รองรับคำพิมพ์ผิดและไม่ขึ้นกับลำดับคำ
- การควอนไทซ์น้ำหนัก 2 บิต: น้ำหนักแต่ละตัวมีค่าเป็น {-2, -1, 0, +1} และเก็บได้ 4 ตัวต่อ 1 ไบต์
- การอนุมานแบบจำนวนเต็ม 16 บิต: ใช้การคำนวณเลขคณิต 16 บิตของ Z80
- ไฟล์ .COM ขนาด ~40KB: เหมาะกับ Transient Program Area (TPA) ของ CP/M
- การสร้างแบบออโตรีเกรสซีฟ: สร้างเอาต์พุตทีละตัวอักษร
- ไม่มีการคำนวณแบบจุดลอยตัว ใช้การสเกลแบบ fixed-point
- รองรับโหมดโต้ตอบ: รันด้วยคำสั่ง
CHAT
วิธีการโต้ตอบ
- โมเดลไม่ได้ ‘เข้าใจ’ อินพุต แต่ตอบสนองโดยอิงจาก รูปทรง (shape) ของอินพุต
- ประโยคอินพุตจะถูกแปลงเป็น 128 trigram bucket เพื่อรักษาความคล้ายคลึงกันเชิงความหมาย
- ตัวอย่าง: “hello there” และ “there hello” จะถูกประมวลผลด้วยโครงสร้างบักเก็ตเดียวกัน
- ประโยคยาวหรือประโยคที่ขึ้นกับลำดับคำจะแยกแยะได้ยาก
-
ความหมายของคำตอบสั้น ๆ
- แม้เป็นคำตอบเพียง 1–2 คำ ก็ยังสามารถ สื่ออารมณ์หรือความนัยได้อย่างคาดไม่ถึง
OK: การยอมรับแบบเป็นกลาง
WHY?: โต้แย้งคำถาม
R U?: ตั้งคำถามถึงการมีอยู่
MAYBE: ความไม่แน่นอน
AM I?: คำถามย้อนกลับเชิงสะท้อน
- คำตอบสั้นลักษณะนี้กระตุ้นให้ผู้ใช้ อนุมานบริบทด้วยตนเอง
จุดเด่นและข้อจำกัด
- จุดเด่น
- ให้คำตอบแบบจำแนกที่สม่ำเสมอกับอินพุตสั้น ๆ
- ทนต่อ คำพิมพ์ผิด การเรียบเรียงใหม่ และการเปลี่ยนลำดับคำ
- แสดงบุคลิกผ่านการเลือกคำศัพท์
- ทำงานได้แม้บน ฮาร์ดแวร์ 8 บิตที่มีข้อจำกัด
- ข้อจำกัด
- ไม่สามารถสร้างประโยคใหม่ได้
- ไม่สามารถติดตามบริบทหลายเทิร์นได้
- ไม่เข้าใจไวยากรณ์
- ยังไม่ถึงระดับปัญญาทั่วไป
สถาปัตยกรรม
- ชั้นอินพุต: 128 query bucket + 128 context bucket
- ชั้นซ่อน: ตัวอย่างคอนฟิก 256 → 192 → 128
- ชั้นเอาต์พุต: 1 นิวรอนต่อ 1 ตัวอักษรในชุดอักขระ
- ฟังก์ชันกระตุ้น: ReLU
-
ข้อจำกัดของการควอนไทซ์
- แม้ Z80 จะเป็น CPU 8 บิต แต่ใช้ คู่รีจิสเตอร์ 16 บิต (HL, DE, BC) สำหรับการสะสมค่าและการกระตุ้น
- น้ำหนักถูก เก็บ 4 ค่าไว้ใน 1 ไบต์ (หน่วยละ 2 บิต)
- ใช้ตัวสะสม 16 บิตเพื่อ ป้องกัน overflow เมื่อรวมอินพุต 256 ค่า
- ด้วยน้ำหนัก 2 บิต ความสามารถในการแทนค่าจึงมีข้อจำกัด และ หากไม่มี QAT อาจเกิดผลการฝึกที่ไม่เสถียร
-
ลูปภายในของ Z80
- หัวใจของการอนุมานคือ ลูปคูณ-สะสม (MAC)
- ทำการ unpack น้ำหนัก แล้วบวกหรือลบเข้าตัวสะสม (ACC) ตามค่า -2~-1~0~+1
- หลังคำนวณแต่ละชั้น จะทำ การเลื่อนบิตขวา 2 บิต เพื่อป้องกัน overflow
- กระบวนการอนุมานทั้งหมดวนคำนวณประมาณ 100,000 ครั้งต่อตัวอักษรหนึ่งตัว
ใบอนุญาต
- เลือกได้ระหว่าง MIT หรือ Apache-2.0
2 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ภาพหน้าจอ
ไม่คิดเลยว่าจะมีใครโพสต์อะไรที่เข้ากันได้พอดีแบบนี้ มันเป็นเรื่องบังเอิญที่แปลกจริง ๆ แต่ก็น่าทึ่งมาก
ฉันทำ CP/M emulator และ IDE บนเบราว์เซอร์ไว้: lockboot.github.io/desktop
เดิมทีตั้งใจจะโพสต์อันนั้น แต่ดันหลงเข้าโพรงกระต่ายตอนตามหา ‘เดโมเจ๋ง ๆ’
ฉันเคยเขียน MLP ด้วย Fortran IV สำหรับเครื่อง punch card ยุค 60s (โปรเจกต์ Xortran)
ถึงจะไม่มีกลไก attention และบริบทจำกัดอยู่แค่ trigram ของประโยคสุดท้าย แต่การโต้ตอบก็ใช้ได้ดีทีเดียว
ถ้าของแบบนี้เป็นไปได้บนฮาร์ดแวร์ยุค 60s จริง โลกของ SF และวิทยาศาสตร์ ในยุคนั้นคงเปลี่ยนไปหมด
ถ้าจะพูดแบบทฤษฎีสมคบคิดหน่อย หนึ่งในเหตุผลที่บริษัท AI กว้านซื้อ RAM จำนวนมหาศาลอาจเป็นเพื่อไม่ให้คนตระหนักว่าตอนนี้มันคล้ายกับช่วง การปฏิวัติโฮมคอมพิวเตอร์ มาก
ฉันใช้เครื่อง RAM 1TB และด้วย agent ที่คัสตอมเอง มันทำงานได้ดีกว่าโมเดลเชิงพาณิชย์ ทั้งเป็นส่วนตัว ปลอดภัย และไม่ถูก monetize
แล้วคำถามถัดไปคือ เราจะสร้างโมเดลเล็กที่ค้นดูข้อมูลภายนอกแล้วเรียนรู้ได้ไหม
ถ้าสร้างโมเดลจิ๋วที่เรียนรู้แบบเรียลไทม์ได้จริง ก็เท่ากับเราจะมี ผู้ช่วยส่วนตัวแบบโลคัลเต็มรูปแบบ
คือโมเดลเล็กมากที่แทบไม่มีความรู้แบบสารานุกรม แต่มีความสามารถพื้นฐานด้านการให้เหตุผลและการใช้เครื่องมือ
ทวีตอ้างอิง
ถ้าเป็นแบบนั้น โลกทุกวันนี้คงต่างออกไปโดยสิ้นเชิง
มันเป็น กรณีศึกษาเชิงทดลอง ของคำถามว่า ‘ถ้า RNN เหมาะกับ LLM ล่ะจะเป็นอย่างไร’
เร็วแบบบ้าคลั่งบน CPU
แต่ก็น่าจะใช้ context window ขนาดใหญ่ได้ไม่ค่อยดีนัก
ฉันสงสัยว่าถ้าเข้าถึงค่าน้ำหนักของโมเดลได้ จะย้อนอนุมานรหัสลับนั้นออกมาได้ไหม หรือจะเข้าถึงได้ผ่านการถามเท่านั้น
ว่าด้วยวิธีฝัง แบ็กดอร์ที่ตรวจจับไม่ได้ ไว้ข้างใน โดยภายนอกยังทำงานปกติ
โดยทั่วไปมันอยู่ในปัญหาเรื่อง ‘interpretability’
มันเป็นโครงสร้าง 32K×36-bit word และไม่รองรับการทำงานระดับไบต์
ถ้าย้ายไฟล์รัน Z80 ขนาด 40KB ไปตรง ๆ ก็น่าจะค่อนข้างตึง
แต่ถ้าส่วนใหญ่เป็นค่าน้ำหนัก 2 บิตก็อาจจะพอเป็นไปได้
และบนฮาร์ดแวร์ถัดมา โดยเฉพาะ Z80 ในปี 1976 ก็จะสบายขึ้นมาก
เวอร์ชันถัดไปจะขยายเพิ่ม ดังนั้นตั้งใจว่าจะลองแน่นอน
ตอนนั้นจับได้แต่คีย์เวิร์ดตรงตัว เลยดูแข็ง ๆ
เกมสุดท้ายที่ยังใช้แนวทางนั้นน่าจะเป็น Wizardry 8 ในปี 2001
มันน่าทึ่งมากจริง ๆ ที่สามารถรันเทคโนโลยีล่าสุดบนฮาร์ดแวร์จากอดีตได้
ถ้าในอนาคตมี AGI เกิดขึ้นมา แล้วเรารวบรวมพลังการประมวลผลทั้งหมดที่มีอยู่บนโลกตอนนี้เข้าด้วยกัน จะสามารถรันมันได้ไหม?