22 คะแนน โดย GN⁺ 2025-12-30 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2025-12-30
ความคิดเห็นจาก Hacker News
  • จังหวะมาสมบูรณ์แบบเลย ฉันใส่ทั้ง VT100 terminal (ไว้รัน coding agent), Z80 emulator และ serial bridge ที่ใช้โปรแกรมเครื่อง CP/M ได้ไว้ในเกม Unreal Engine
    ภาพหน้าจอ
    ไม่คิดเลยว่าจะมีใครโพสต์อะไรที่เข้ากันได้พอดีแบบนี้ มันเป็นเรื่องบังเอิญที่แปลกจริง ๆ แต่ก็น่าทึ่งมาก
    • เหมือนเราสองคนจะ สื่อสารทางจิต กันเลย
      ฉันทำ CP/M emulator และ IDE บนเบราว์เซอร์ไว้: lockboot.github.io/desktop
      เดิมทีตั้งใจจะโพสต์อันนั้น แต่ดันหลงเข้าโพรงกระต่ายตอนตามหา ‘เดโมเจ๋ง ๆ’
    • หนังสือ Connections: Alternative History of Technology ของ James Burke พูดถึง ความเชื่อมโยงแบบบังเอิญ พวกนี้ได้ดีมาก
    • น่าสนใจนะ แต่เสียดายที่ดู imgur ไม่ได้
  • ชอบมาก กด GitHub star ให้ทันทีเลย
    ฉันเคยเขียน MLP ด้วย Fortran IV สำหรับเครื่อง punch card ยุค 60s (โปรเจกต์ Xortran)
    ถึงจะไม่มีกลไก attention และบริบทจำกัดอยู่แค่ trigram ของประโยคสุดท้าย แต่การโต้ตอบก็ใช้ได้ดีทีเดียว
    ถ้าของแบบนี้เป็นไปได้บนฮาร์ดแวร์ยุค 60s จริง โลกของ SF และวิทยาศาสตร์ ในยุคนั้นคงเปลี่ยนไปหมด
    • โปรเจกต์แบบนี้น่าสนใจมาก มันให้ความรู้สึกเหมือนได้เห็น เส้นทางที่หล่นหายไป
      ถ้าจะพูดแบบทฤษฎีสมคบคิดหน่อย หนึ่งในเหตุผลที่บริษัท AI กว้านซื้อ RAM จำนวนมหาศาลอาจเป็นเพื่อไม่ให้คนตระหนักว่าตอนนี้มันคล้ายกับช่วง การปฏิวัติโฮมคอมพิวเตอร์ มาก
      ฉันใช้เครื่อง RAM 1TB และด้วย agent ที่คัสตอมเอง มันทำงานได้ดีกว่าโมเดลเชิงพาณิชย์ ทั้งเป็นส่วนตัว ปลอดภัย และไม่ถูก monetize
  • ฉันก็คิดเรื่องนี้บ่อยเหมือนกัน ว่า ‘LLM ขั้นต่ำที่ใช้งานได้’ จะหน้าตาเป็นยังไง? หมายถึงโมเดลที่คุยง่าย ๆ ได้
    แล้วคำถามถัดไปคือ เราจะสร้างโมเดลเล็กที่ค้นดูข้อมูลภายนอกแล้วเรียนรู้ได้ไหม
    ถ้าสร้างโมเดลจิ๋วที่เรียนรู้แบบเรียลไทม์ได้จริง ก็เท่ากับเราจะมี ผู้ช่วยส่วนตัวแบบโลคัลเต็มรูปแบบ
    • นี่แทบจะตรงกับแนวคิด ‘cognitive core’ ที่ Karpathy พูดถึงเลย
      คือโมเดลเล็กมากที่แทบไม่มีความรู้แบบสารานุกรม แต่มีความสามารถพื้นฐานด้านการให้เหตุผลและการใช้เครื่องมือ
      ทวีตอ้างอิง
    • ถ้าเทคโนโลยีแบบนี้มีมาตั้งแต่ยุค 90s LLM พื้นฐาน อาจถือกำเนิดไปแล้วก็ได้
      ถ้าเป็นแบบนั้น โลกทุกวันนี้คงต่างออกไปโดยสิ้นเชิง
    • RWKV ก็น่าสนใจ: rwkv.com
      มันเป็น กรณีศึกษาเชิงทดลอง ของคำถามว่า ‘ถ้า RNN เหมาะกับ LLM ล่ะจะเป็นอย่างไร’
      เร็วแบบบ้าคลั่งบน CPU
    • มีคนสร้าง LLM ใน Minecraft ที่ใช้ค่าน้ำหนัก 8 บิตจำนวน 5 ล้านตัวเพื่อจัดการบทสนทนาง่าย ๆ
      แต่ก็น่าจะใช้ context window ขนาดใหญ่ได้ไม่ค่อยดีนัก
  • มุกคือบริษัท AI จะกว้านซื้อ ชิป Z80 หมดตลาดแล้วทำให้ราคาพุ่ง
    • สายไปแล้ว หมดสต๊อกตั้งแต่ปีก่อน
  • ถ้าให้โมเดลหนึ่ง เรียนรู้รหัสลับ (passphrase) แล้วให้ผู้ใช้เดามันผ่านการถามคำถาม
    ฉันสงสัยว่าถ้าเข้าถึงค่าน้ำหนักของโมเดลได้ จะย้อนอนุมานรหัสลับนั้นออกมาได้ไหม หรือจะเข้าถึงได้ผ่านการถามเท่านั้น
    • พอเห็นคำถามนี้ก็นึกถึงเปเปอร์นี้เลย: Planting Undetectable Backdoors in Machine Learning Models
      ว่าด้วยวิธีฝัง แบ็กดอร์ที่ตรวจจับไม่ได้ ไว้ข้างใน โดยภายนอกยังทำงานปกติ
    • ยิ่งโมเดลเล็ก ความลับแบบนั้นก็ยิ่ง ดึงออกได้ง่ายจากการวิเคราะห์ค่าน้ำหนัก
      โดยทั่วไปมันอยู่ในปัญหาเรื่อง ‘interpretability
  • ถ้ามีโค้ดและโครงสร้างพื้นฐานสำหรับฝึกที่เหมาะสม ELIZA ก็น่าจะทรงพลังกว่านี้มาก
    • เดิมที ELIZA รันอยู่บนเมนเฟรม IBM 7094 ในยุค 1960s
      มันเป็นโครงสร้าง 32K×36-bit word และไม่รองรับการทำงานระดับไบต์
      ถ้าย้ายไฟล์รัน Z80 ขนาด 40KB ไปตรง ๆ ก็น่าจะค่อนข้างตึง
      แต่ถ้าส่วนใหญ่เป็นค่าน้ำหนัก 2 บิตก็อาจจะพอเป็นไปได้
      และบนฮาร์ดแวร์ถัดมา โดยเฉพาะ Z80 ในปี 1976 ก็จะสบายขึ้นมาก
  • ฉันก็ออกแบบและประกอบ คอมพิวเตอร์ Z80 เองเหมือนกัน ตอนนี้ใส่ 32KB ROM กับ 32KB RAM มาแล้ว
    เวอร์ชันถัดไปจะขยายเพิ่ม ดังนั้นตั้งใจว่าจะลองแน่นอน
    • เดี๋ยวนี้ ราคา RAM แพงเกินไปจริง ๆ
  • ถ้าประมวลผลอินพุตทั้งหมดเป็น embedding ในครั้งเดียว ดูแล้วนี่น่าจะเป็น สถาปัตยกรรม MLP ที่ไม่ใช่ทั้ง Transformer และ RNN
  • ถ้าเกม RPG แบบพิมพ์อิสระ สมัยก่อนมี fuzzy matcher แบบนี้ก็คงดี
    ตอนนั้นจับได้แต่คีย์เวิร์ดตรงตัว เลยดูแข็ง ๆ
    เกมสุดท้ายที่ยังใช้แนวทางนั้นน่าจะเป็น Wizardry 8 ในปี 2001
  • งานเจ๋งมาก แล้วไทม์ไลน์คาดการณ์ไปถึง AGI อยู่ที่เมื่อไร?
    • น่าจะราว ๆ ต้นเดือนเมษายน
    • น่าจะอยู่ เลยมุมไปนิดเดียว
 
crawler 2025-12-30

มันน่าทึ่งมากจริง ๆ ที่สามารถรันเทคโนโลยีล่าสุดบนฮาร์ดแวร์จากอดีตได้

ถ้าในอนาคตมี AGI เกิดขึ้นมา แล้วเรารวบรวมพลังการประมวลผลทั้งหมดที่มีอยู่บนโลกตอนนี้เข้าด้วยกัน จะสามารถรันมันได้ไหม?