Speculative decoding: ให้ตัวเล็กเดา ตัวใหญ่ตรวจ
Advanced · ให้เห็นภาพรวม ข้ามได้ ไม่นับเป็นเงื่อนไขจบบท ข้ามไปหน้าถัดไป →
หน้าเสริม ข้ามได้
การเดาล่วงหน้าแล้วตรวจ (speculative decoding)เทคนิคให้โมเดลเล็กร่างคำตอบล่วงหน้าหลายคำ แล้วให้โมเดลใหญ่ตรวจรวดเดียว ได้ผลที่มีการแจกแจงแบบเดียวกับให้โมเดลใหญ่เขียนเอง แต่เร็วขึ้นดูคำศัพท์ทั้งหมด อาศัย 2 เรื่อง: ตรวจหลาย token พร้อมกันคือ prefill ย่อมๆ (หน้า 2) และ ขั้นเขียนคำตอบ (decode, decoding phase)ช่วงที่โมเดลเขียนคำตอบทีละ token แต่ละก้าวต้องรันโมเดลหนึ่งรอบ จึงช้ากว่าขั้นอ่าน prompt เมื่อคิดต่อ tokenดูคำศัพท์ทั้งหมด ติดที่การอ่านน้ำหนัก (หน้า 6) ตรวจ 1 หรือ 5 token จึงใช้เวลาพอๆ กัน (ยกเว้นชุดใหญ่จนการคำนวณเป็นคอขวด)
ตัวอย่าง greedy (T = 0) ต่อ "แมวชอบกิน" จากบทที่ 1
ขั้น 1 — ร่าง โมเดลเล็กเดาต่อ 4 คำ: ปลา · ทู · ทอด · ทุก
ขั้น 2 — ตรวจ โมเดลใหญ่รันรอบเดียว ได้คำอันดับ 1 ทุกตำแหน่ง
ขั้น 3 — รับส่วนที่ตรง + 1 token "ปลา" ✔ "ทู" ✔ แต่ "ทอด" ✘ โมเดลใหญ่เลือก "มาก" แทน ส่วน "ทุก" ถูกทิ้ง
ได้ 3 token จากโมเดลใหญ่รอบเดียว: "แมวชอบกินปลาทูมาก"
คาดว่าได้กี่ token () ต่อรอบของโมเดลใหญ่? ถ้าร่าง k คำ แต่ละคำผ่านด้วยโอกาส α (สมมติว่าอิสระต่อกัน)
ที่ α = 0.8 และ k = 4:
| ผ่านกี่คำ | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| โอกาส | 20.0% | 16.0% | 12.8% | 10.2% | 41.0% |
| ได้ token | 1 | 2 | 3 | 4 | 5 |
ค่าเฉลี่ย = (1 − 0.8⁵) ÷ (1 − 0.8) ≈ 3.36 token ต่อรอบ เร็วขึ้นจริงไม่ถึง 3.36 เท่า เพราะการร่างก็ใช้เวลา
ทำไมผลไม่เพี้ยน? ตอนสุ่ม (T > 0) รับคำร่างด้วยโอกาส ถ้าไม่รับ สุ่มคำใหม่จาก ที่ปรับให้รวม 100% ผลจึงมีการแจกแจงตรงกับโมเดลใหญ่ (Leviathan และคณะ, 2023; Chen และคณะ, 2023)
speculative decoding ให้โมเดลเล็กเดาล่วงหน้าหลายคำ โมเดลใหญ่ตรวจรวดเดียว ได้การแจกแจงเดียวกับโมเดลใหญ่เขียนเอง แต่เร็วขึ้น

มังคุด
ถ้าโมเดลเล็กเดาผิดตลอด จะช้ากว่าไม่ใช้มั้ย?