2 คะแนน โดย GN⁺ 2024-12-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การสร้างโคลน ChatGPT

    • โปรแกรมนี้เป็นอิมพลีเมนเทชันของ GPT-2 ที่ไม่พึ่งพา dependency ภายนอก
    • โหลดเมทริกซ์น้ำหนักจากไฟล์ TensorFlow และไฟล์ BPE แล้วทำโทเคไนซ์อินพุตด้วย byte pair encoder แบบเรียบง่าย
    • อิมพลีเมนต์แพ็กเกจพีชคณิตเชิงเส้นพื้นฐาน กำหนดสถาปัตยกรรมทรานส์ฟอร์เมอร์ รันการอนุมานของทรานส์ฟอร์เมอร์ และแปลงผลลัพธ์กลับจากโทเคนด้วย BPE decoder
    • เขียนด้วยภาษา C เพียงประมาณ 3000 ไบต์
    • ปรับแต่งประสิทธิภาพมาอย่างดีจนโมเดล GPT-2 Small สามารถตอบสนองบนอุปกรณ์สมัยใหม่ได้ภายในไม่กี่วินาที
    • อิมพลีเมนต์ KV caching และอัลกอริทึมการคูณเมทริกซ์ที่มีประสิทธิภาพ
  • โครงสร้างโปรแกรม

    • ไลบรารีเมทริกซ์คณิตศาสตร์พื้นฐาน (700 ไบต์)
    • การคูณเมทริกซ์แบบเร็ว (300 ไบต์)
    • เลเยอร์โครงข่ายประสาท (300 ไบต์)
    • โมเดลทรานส์ฟอร์เมอร์ (600 ไบต์)
    • byte pair encoding (400 ไบต์)
    • อินพุต/เอาต์พุต (200 ไบต์)
    • การโหลดน้ำหนัก (300 ไบต์)
    • การโหลด byte pair encoding (300 ไบต์)
  • พื้นหลังของ ChatGPT และทรานส์ฟอร์เมอร์

    • ChatGPT คือแอปพลิเคชันที่ให้ผู้ใช้สนทนากับ language model ได้
    • GPT-4 เป็นโมเดลรุ่นใหม่ที่น่าประทับใจอย่างมาก
    • โปรแกรม C นี้จำลองการทำงานของ ChatGPT โดยใช้ GPT-2 ซึ่งเป็นโมเดลที่อ่อนกว่าจากปี 2019
    • GPT-2 คือทรานส์ฟอร์เมอร์ที่รับลำดับคำขนาดคงที่เป็นอินพุตและทำนายคำถัดไป
  • คำอธิบายโค้ด C

    • เริ่มต้นกับคณิตศาสตร์เมทริกซ์ (700 ไบต์)

      • โครงข่ายประสาทประกอบขึ้นจากการดำเนินการกับเมทริกซ์
      • สร้างไลบรารีเมทริกซ์โดยใช้การนิยามเมทริกซ์แบบมินิมอล
      • ใช้แมโครเพื่อดึงลอจิกที่ใช้ร่วมกันออกมาเป็นเมตารูทีน
    • การคูณเมทริกซ์แบบเร็ว (300 ไบต์)

      • การคูณเมทริกซ์พื้นฐานถูกอิมพลีเมนต์ด้วยลูปสามชั้น
      • ด้วยลักษณะการทำงานของหน่วยความจำและแคช การอ่านและเขียนหน่วยความจำเดิมซ้ำ ๆ จะเร็วกว่า
    • เลเยอร์โครงข่ายประสาท (300 ไบต์)

      • เพื่อเขียนทรานส์ฟอร์เมอร์ จึงกำหนดเลเยอร์โครงข่ายประสาทแบบพิเศษบางอย่างขึ้นมา
      • อิมพลีเมนต์ฟังก์ชันกระตุ้น GELU และฟังก์ชันตั้งค่า subdiagonal ที่จำเป็นสำหรับ causal attention เป็นต้น
    • สถาปัตยกรรมทรานส์ฟอร์เมอร์ (600 ไบต์)

      • อิมพลีเมนต์ทรานส์ฟอร์เมอร์ภายใน 600 ไบต์
      • ในแต่ละเลเยอร์จะคำนวณ key, query, value สร้าง attention matrix และรวมผลลัพธ์เข้าด้วยกัน
    • byte pair encoding (400 ไบต์)

      • เนื่องจาก language model ต้องการอินพุตขนาดคงที่ จึงใช้ชิ้นส่วนของคำเพื่อสร้างโทเคน
      • แยกคำที่กำหนดออกเป็นอักขระเดี่ยว แล้วรวมคู่โทเคนที่อยู่ติดกัน
    • การโหลดน้ำหนัก (300 ไบต์)

      • โหลดน้ำหนักของโครงข่ายประสาทจากดิสก์
      • น้ำหนักถูกซีเรียลไลซ์เป็นเลขทศนิยมลอยตัว 32 บิต
    • การโหลด byte pair encoding (300 ไบต์)

      • โหลด vocabulary ของ byte pair encoding จากดิสก์
      • รูปแบบไฟล์ประกอบด้วยรายการ byte pair encoding
  • บทสรุป

    • ความก้าวหน้าด้านแมชชีนเลิร์นนิงที่สั่งสมมาหลายทศวรรษสามารถบีบอัดลงในไม่กี่พันไบต์ได้
    • เป็นตัวอย่างของโครงข่ายประสาทแบบเรียบง่ายที่รวมทุกอย่างไว้ ยกเว้นน้ำหนักของโมเดลจริง

1 ความคิดเห็น

 
GN⁺ 2024-12-13
ความเห็นจาก Hacker News
  • ตอนที่ใช้ GPT-2 จำลองการคุยกับเพื่อน มันทั้งสนุกและบางครั้งก็แม่นยำจนน่าประหลาดใจ เลยสงสัยว่าการก้าวกระโดดครั้งใหญ่ระหว่าง GPT-2 กับ GPT-3 มาจากโมเดลที่ใหญ่ขึ้น ข้อมูลที่มากขึ้น หรือทั้งสองอย่าง แม้ RLHF จะสร้างความแตกต่างอย่างมาก แต่โมเดล GPT-3 พื้นฐานเองก็มีประโยชน์มากเมื่อมีตัวอย่างให้เพียงพอ

  • เป็นตัวอย่างที่ดีที่แสดงให้เห็นว่าโครงข่ายประสาทแบบง่ายนั้นจริง ๆ แล้วเรียบง่ายแค่ไหน ปัญญาประดิษฐ์คือเวทมนตร์ดำที่เราใช้หาเงิน

  • ยังไม่ได้ลองรันโค้ด แต่ประทับใจกับขนาดที่เล็กมาก โปรแกรม ELISA ยุคแรก ๆ ยังใหญ่กว่านี้ ตลอด 4 ปีที่ผ่านมาเราทำให้สิ่งนี้พอดีได้ในระดับไบต์ หากมีคำใบ้ว่าความมหัศจรรย์อยู่ตรงไหนก็อยากให้ช่วยอธิบาย สงสัยว่าเป็นฟังก์ชัน GELU หรือโมเดลที่ดาวน์โหลดผ่านสคริปต์ bash

  • GPT-2 เขียนนิทานเรื่องโปรดของฉันได้ ลิงก์: The Princess, the Fairy Godmother, and the Chest

  • สงสัยว่า GPT-2 ได้รับการปรับแต่งมาเพื่อใช้แชตจริง ๆ หรือไม่ ถ้าไม่ใช่ ก็คิดว่าการเรียกสิ่งนี้ว่าเป็นโคลนของ ChatGPT อาจจะเกินไป

  • LISP ไม่ได้ดีกว่า C เสมอไป ครั้งนี้ยอมให้ผ่าน ถ้าพลาดลิงก์โค้ดไป นี่คือ: C-Chat-GPT-2

  • สงสัยว่าสามารถรันได้บนฮาร์ดแวร์แบบไหน ใช้น้ำหนักแบบ quantized ของ huggingface ได้หรือไม่ และเหมาะเป็นพิเศษกับปัญหาหรือคำถามประเภทใด

  • ทุกวันนี้สามารถใช้ gptscript เพื่อทำ ChatGPT ของตัวเองได้อย่างง่ายดาย ลิงก์: gptscript

  • ไม่เข้าใจว่า C macro คล้ายกับ regular expression อย่างไร C macro จับคู่คำแล้วแทนที่ด้วยข้อความอื่น ส่วน regular expression ใช้จับคู่ข้อความด้วยแพตเทิร์นที่ค่อนข้างซับซ้อน และตัวมันเองก็ไม่ได้แทนที่ข้อความ

  • สงสัยว่ามีใครลองรันในเครื่องตัวเองแล้วดูหรือยังว่า GP2 นี้สร้างผลลัพธ์ออกมาเป็นอย่างไร