MoE: โมเดลใหญ่ที่ใช้แค่บางส่วน
บทที่ 3: ทุกชั้นมี attention กับ เครือข่ายป้อนไปข้างหน้า (MLP, feed-forward network)ส่วนในแต่ละชั้นที่ประมวลผลเวกเตอร์ของ token ทีละตัว โดยขยาย ผ่านฟังก์ชันโค้งอย่าง ReLU แล้วย่อกลับ เป็นที่อยู่ของพารามิเตอร์ส่วนใหญ่ในแต่ละชั้น (ราว 2 ใน 3 ในดีไซน์มาตรฐาน และมากกว่านั้นในหลายโมเดลใหม่)ดูคำศัพท์ทั้งหมด ทุก token ใช้น้ำหนักทุกตัว
โมเดลแบบรวมผู้เชี่ยวชาญ (Mixture of Experts, MoE)โมเดลที่มีส่วนย่อย (ผู้เชี่ยวชาญ) หลายชุดในแต่ละชั้น และให้ตัวเลือกเส้นทางเลือกใช้แค่บางชุดต่อ token จึงคำนวณน้อยกว่าขนาดรวม แต่ยังต้องเก็บทุกชุดไว้ในหน่วยความจำดูคำศัพท์ทั้งหมด เปลี่ยน MLP เป็นหลายชุด เรียกว่า "ผู้เชี่ยวชาญ" (expert) แล้วให้ตัวเลือกเส้นทาง (router) เลือกชุดให้แต่ละ token
router ทำ 4 ขั้น:
- ให้คะแนน — dot product (บทที่ 2) ของเวกเตอร์ token ณ ชั้นนั้น กับเวกเตอร์ของผู้เชี่ยวชาญ 8 ชุด ได้ logit 8 ตัว
- ซอฟต์แมกซ์ (softmax)สูตรที่เปลี่ยนคะแนนดิบเป็นความน่าจะเป็นที่รวมกันได้ 100% โดยยก e กำลังคะแนนแล้วหารด้วยผลรวมดูคำศัพท์ทั้งหมด — เปลี่ยนเป็นเปอร์เซ็นต์ (บทที่ 1)
- เลือก 2 อันดับแรก (top-k) — แบ่งใหม่ให้รวม 100% คล้าย top-p แต่เก็บจำนวนคงที่
- รวมผล ของ 2 ชุดตามน้ำหนัก
แรกสุด E1 (39.3%) กับ E4 (23.8%) ได้รับเลือก แบ่งใหม่เป็น 62.2% กับ 37.8% ลองเพิ่ม E7 เป็น 2.5 จะได้ E7 กับ E1 แทน แต่แบ่งเท่าเดิม เพราะคะแนนยังห่าง 0.5
ขนาดสมมติ: ส่วนที่ทุก token ใช้ร่วม (attention, embedding) 2B + ผู้เชี่ยวชาญ 8 ชุด × ชุดละ 4B = 34B แต่ token หนึ่งใช้ 2B + 2 × 4B = 10B (29.4%)
- งานคำนวณ ต่อ token ≈ 2 × 10B = 20 พันล้านครั้ง ไม่ใช่ 68 พันล้านของโมเดลทั่วไป 34B
- หน่วยความจำ ต้องเก็บครบ 34B = 68.0 GB ที่ 16 บิต
router เลือกใหม่ทุก token ทุกชั้น decode ติดที่การอ่านน้ำหนัก (หน้า 6) ตอนใช้คนเดียวการ์ดอ่านแค่ชุดที่ถูกเลือก จึงเร็วขึ้นด้วย แต่ถ้าเสิร์ฟหลายคน มักมีคนเรียกเกือบทุกชุด
MoE มีผู้เชี่ยวชาญหลายชุด แต่ละ token ใช้แค่บางชุด จึงคำนวณน้อยกว่าขนาดจริงมาก แต่ต้องเก็บทุกชุดไว้ในหน่วยความจำ

มังคุด
ผู้เชี่ยวชาญแต่ละตัวถนัดคนละเรื่อง แบบอาหารกับกีฬาเลยเหรอ?