- Simple Self-Distillation (SSD) คือวิธีที่ช่วยเพิ่มประสิทธิภาพของโมเดลภาษาขนาดใหญ่ด้วยการนำโค้ดที่โมเดลสร้างขึ้นเองกลับมาใช้ฝึกอีกครั้ง โดยไม่ต้องใช้โมเดลครูหรือการเรียนรู้แบบเสริมกำลัง
- เพิ่มคะแนน pass@1 ของโมเดล Qwen3-30B-Instruct บน LiveCodeBench v6 จาก 42.4% เป็น 55.3% และปรับปรุงได้เด่นชัดเป็นพิเศษใน ช่วงโจทย์ยากที่ +15.3pp
- SSD ช่วย บรรเทาความขัดแย้งระหว่างความแม่นยำกับการสำรวจ ระหว่างการสร้างโค้ด โดย กดความน่าจะเป็นส่วนหางตามบริบทและคงความหลากหลายที่มีประโยชน์ไว้
- ไม่สามารถทำซ้ำผลลัพธ์แบบเดียวกันได้ด้วยการปรับอุณหภูมิหรือเปลี่ยนนโยบายการถอดรหัสอย่างเดียว เพราะ SSD ปรับโครงสร้างการกระจายภายในของโมเดลโดยตรง
- เป็น ขั้นตอนการฝึกหลังการประมวลผลที่เรียบง่าย ซึ่งนำไปใช้ได้โดยไม่ต้องมีข้อมูลภายนอกหรือการตรวจสอบ และเสนอ ทางเลือกที่ใช้งานได้จริงในการยกระดับคุณภาพการสร้างโค้ดของ LLM
การกลั่นตัวเองแบบเรียบง่าย (Simple Self-Distillation, SSD)
- SSD (Simple Self-Distillation) คือวิธีที่ทำให้โมเดลภาษาขนาดใหญ่ (LLM) มีประสิทธิภาพดีขึ้นด้วยการใช้ผลลัพธ์โค้ดที่โมเดลสร้างขึ้นเอง โดยไม่ต้องมีโมเดลครู ตัวตรวจสอบ หรือการเรียนรู้แบบเสริมกำลัง
- โมเดลจะสร้างตัวอย่างด้วยการตั้งค่า temperature และ truncation ที่กำหนดไว้ แล้วนำผลลัพธ์นั้นกลับมาฝึกใหม่ด้วย supervised fine-tuning (SFT) แบบมาตรฐาน
- ไม่ต้องใช้ข้อมูลที่มีป้ายกำกับจากภายนอก โมเดลรางวัล หรือสภาพแวดล้อมสำหรับรันโค้ดเลย
- เพิ่มคะแนน pass@1 ของ Qwen3-30B-Instruct บน LiveCodeBench v6 จาก 42.4% → 55.3% (+12.9pp, เพิ่มขึ้นเชิงสัมพัทธ์ +30%)
- โดยเฉพาะใน โจทย์ยาก (hard split) ที่ปรับปรุงได้มากที่สุด (+15.3pp)
- ใช้ได้ครอบคลุมกับโมเดลตระกูล Qwen และ Llama ขนาด 4B, 8B, 30B
- SSD ทำงานด้วยการบรรเทา ความขัดแย้งระหว่างความแม่นยำกับการสำรวจ (precision-exploration conflict)
- ระหว่างการสร้างโค้ด บางโทเคนต้องการความแม่นยำสูง (“lock”) ขณะที่บางโทเคนต้องการการสำรวจอย่างหลากหลาย (“fork”)
- SSD ช่วย กดการกระจายส่วนหางที่ไม่จำเป็น ตามบริบท ขณะเดียวกันก็ รักษาความหลากหลายที่มีประโยชน์ไว้
1. ภูมิหลังของงานวิจัย
- การขาดสัญญาณกำกับดูแลคุณภาพสูง (เช่น โค้ดที่มนุษย์เขียน) ทำให้เกิด ข้อจำกัดในการยกระดับประสิทธิภาพการสร้างโค้ดของ LLM
- ข้อจำกัดของแนวทางเดิม
- การกลั่นด้วยโมเดลครู: สืบทอดข้อจำกัดด้านประสิทธิภาพของโมเดลครู
- การเรียนรู้แบบเสริมกำลัง (RL): ต้องมีโมเดลรางวัลและการตรวจสอบบนฐานการรันจริง อีกทั้งยังไม่เสถียร
- ทางเลือกแบบไม่กำกับดูแล (เช่น majority voting, entropy minimization): มีความเสี่ยงต่อการพังทลายเมื่อฝึกระยะยาว
- SSD แสดงให้เห็นว่าสามารถปรับปรุงได้ด้วยผลลัพธ์ของโมเดลเอง โดยไม่ต้องใช้ข้อมูลภายนอกหรือการตรวจสอบ
2. วิธีการของ SSD
-
การสังเคราะห์ข้อมูล
- สำหรับชุดพรอมป์โจทย์ที่กำหนด X จะสุ่มตัวอย่างจากโมเดล pθ ด้วย อุณหภูมิ Ttrain และ การตั้งค่า truncation ρtrain (top-k, top-p)
- เอาต์พุตที่สร้างขึ้น (y) จะถูกนำไปใช้เป็นข้อมูลฝึก DSSD ทันที โดยไม่ผ่านการตรวจสอบ
- ในกรณีส่วนใหญ่ N=1 (หนึ่งตัวอย่างต่อหนึ่งโจทย์) ก็เพียงพอ
-
การฝึก
- ทำ supervised fine-tuning ด้วย cross-entropy loss แบบมาตรฐาน
- L(θ) = −E(x,y)∼DSSD Σ log pθ(yt | x, y<t)
-
การอนุมาน
- ถอดรหัสโมเดลที่ฝึกแล้ว pθ* ด้วย อุณหภูมิสำหรับประเมิน Teval และการตั้งค่า truncation ρeval
3. การทดลอง
-
การตั้งค่าโมเดล
- ใช้ 5 โมเดล ได้แก่ Llama-3.1-8B-Instruct, Qwen3-4B/30B (Instruct, Thinking) เป็นต้น
- ครอบคลุม 2 ตระกูล (Llama, Qwen), 3 ขนาด (4B, 8B, 30B), และ 2 สไตล์การให้เหตุผล (Instruct, Thinking)
-
ข้อมูล
- ใช้โจทย์ competitive programming ราว 10K ข้อจากชุดข้อมูล rSTARcoder
- ใช้เพียงการกรองไวยากรณ์อย่างง่าย โดยไม่ตรวจสอบคำตอบ
-
การตั้งค่าการฝึก
- อิงบน Megatron-LM ใช้ GPU 8×B200
- ใช้ตัวเพิ่มประสิทธิภาพ AdamW, ความยาวลำดับสูงสุด 65,536
- โมเดล Instruct ฝึก 2,500 step, โมเดล Thinking ฝึก 300 step
-
การประเมิน
- ใช้ LiveCodeBench v6 (LCB v6) เป็นเบนช์มาร์กหลัก
- ประเมินแบบแยกย่อยด้วย pass@1, pass@5 และตามระดับความยาก (Easy/Medium/Hard)
4. ผลลัพธ์สำคัญ
-
ประสิทธิภาพโดยรวมดีขึ้น
- Qwen3-30B-Instruct: 42.4% → 55.3% pass@1 (+12.9pp)
- Qwen3-4B-Instruct: +7.5pp, Llama-8B: +3.5pp
- โมเดล Thinking ก็ดีขึ้น +2~3pp เช่นกัน
-
การปรับปรุงตามระดับความยาก
- Qwen3-30B-Instruct: Easy +6.5pp / Medium +14.2pp / Hard +15.3pp
- โมเดล Thinking ก็ปรับดีขึ้นมากที่สุดในช่วง Hard เช่นกัน
-
การคงความหลากหลาย
- การเพิ่มขึ้นของ pass@5 มากกว่า pass@1 → คงและเพิ่มความหลากหลายในการสร้างได้
- ตัวอย่าง: Qwen3-30B-Instruct pass@5 +18.1pp (Hard +23.0pp)
-
การทั่วไปข้ามโดเมน
- นอกเหนือจาก competitive programming ยัง คงประสิทธิภาพได้ ในงานคณิตศาสตร์ โค้ดทั่วไป และงานด้านความเข้าใจ
5. การเปรียบเทียบนโยบายการถอดรหัส
-
การปรับอุณหภูมิอย่างเดียวไม่สามารถทำซ้ำผลของ SSD ได้
- ผลการไล่ค่าอุณหภูมิของโมเดลฐาน: การเปลี่ยนแปลงของ pass@1 อยู่ราว 1.5–3.0pp
- แต่ SSD ทำให้ดีขึ้นถึง +11.8pp ภายใต้เงื่อนไขเดียวกัน (Qwen3-30B-Instruct)
- โดยเฉพาะใน โจทย์ Hard และ pass@5 ช่องว่างยิ่งชัดเจนที่สุด
- SSD เปลี่ยนการกระจายภายในของโมเดลเอง จึงไม่สามารถแทนที่ได้ด้วยการปรับการถอดรหัสอย่างเดียว
6. ปฏิสัมพันธ์ของไฮเปอร์พารามิเตอร์
- อุณหภูมิระหว่างฝึก (Ttrain) และ อุณหภูมิระหว่างประเมิน (Teval) มีผลต่อประสิทธิภาพผ่านผลคูณ Teff = Ttrain × Teval
- ประสิทธิภาพดีที่สุดอยู่แถว ๆ Teff ≈ 1.2
- ยิ่ง Ttrain สูง ก็ยิ่งไวต่อการเปลี่ยนแปลงของ Teval
- เมื่อเพิ่ม truncation จะช่วยยกระดับเพดานประสิทธิภาพ
- ค่าที่เหมาะที่สุด: Ttrain=2.0, Teval=1.1, top-k=10 → pass@1 49.7% (+7.3pp)
- truncation ให้การปรับปรุงเพิ่มขึ้นผ่านการตัดส่วนหางที่มีความน่าจะเป็นต่ำออก
7. กลไกการทำงานของ SSD
-
ความขัดแย้งระหว่างความแม่นยำกับการสำรวจ (Precision–Exploration)
- Lock: ตำแหน่งที่คำตอบเชิงไวยากรณ์แทบจะตายตัว → ต้องใช้อุณหภูมิต่ำ
- Fork: ตำแหน่งที่มีวิธีแก้ได้หลายแบบ → ต้องใช้อุณหภูมิสูง
- การใช้อุณหภูมิเดียวทำให้ตอบโจทย์ทั้งสองแบบพร้อมกันได้ยาก
-
บทบาทของ SSD
- ใน Lock จะกดความน่าจะเป็นส่วนหางเพื่อเพิ่มความแม่นยำ
- ใน Fork จะทำให้ความน่าจะเป็นของตัวเลือกชั้นบนแบนลงเพื่อรักษาความหลากหลายของการสำรวจ
- ผลลัพธ์คือเกิด การปรับโครงสร้างการกระจายแบบขึ้นกับบริบท
8. การตรวจสอบเชิงทดลอง
-
การทดลองในสภาพแวดล้อมจำลอง
- ใช้สภาพแวดล้อมอย่างง่ายที่มีโครงสร้าง Fork 1 ครั้ง + Lock 3 ครั้ง แล้วนำ SSD ไปใช้
- หลังใช้ SSD ความน่าจะเป็นของความสำเร็จเพิ่มขึ้น และช่วงอุณหภูมิที่เหมาะสมก็กว้างขึ้น
- ยืนยันได้ว่าการฝึกและการถอดรหัสนั้น เกื้อหนุนกัน
-
การวิเคราะห์โมเดลจริง
- หลังใช้ SSD พบว่า ความน่าจะเป็นสะสมของโทเคนชั้นบนเพิ่มขึ้น และความน่าจะเป็นส่วนหางลดลง
- แม้ที่ Teval สูง ก็ยังพบว่า จำนวนตัวเลือกชั้นบนที่ใช้ได้จริงเพิ่มขึ้น และ entropy สูงขึ้น
- กล่าวคือ SSD สามารถ ตัดส่วนหางออกและขยายการกระจายของตัวเลือกชั้นบนได้พร้อมกัน
9. การวิเคราะห์เชิงทฤษฎี
- loss ระหว่างการฝึกของ SSD สามารถแยกออกเป็น 3 องค์ประกอบ
- Support Compression: ตัดความน่าจะเป็นส่วนหางออก
- Within-Support Reshaping: ปรับโครงสร้างการกระจายในส่วนของตัวเลือกหลัก
- Alignment to Base Model: คงการจัดแนวกับโมเดลเดิมไว้
- ใน Lock องค์ประกอบแรกมีอิทธิพลเด่น → ตัดส่วนหาง
- ใน Fork องค์ประกอบที่สองทำงาน → ทำให้การกระจายของตัวเลือกหลักแบนลง
- entropy โดยรวมลดลง แต่ entropy ของการสำรวจที่มีประโยชน์ยังคงอยู่
- การปรับการถอดรหัสแบบง่าย ๆ ไม่สามารถทำการปรับโครงสร้างตามบริบทเช่นนี้ได้
10. การทดลองกับข้อมูลผิดปกติ
- ในกรณี Ttrain=2.0, ไม่มี truncation ข้อมูลที่สร้างขึ้น 62% เป็น สัญญาณรบกวนไร้ความหมาย (gibberish)
- ถึงอย่างนั้น หลังใช้ SSD ก็ยังพบว่า
- pass@1: 42.4% → 48.1% (+5.7pp)
- pass@5: 53.5% → 64.0% (+10.5pp)
- โจทย์ Hard ดีขึ้น +7.3pp / +13.8pp
- สิ่งนี้แสดงให้เห็นว่า SSD สามารถนำไปสู่การปรับปรุงได้ผ่าน การเรียนรู้โครงสร้างของการกระจาย ไม่ใช่เพียงคุณภาพความถูกต้องของคำตอบ
บทสรุป
- Simple Self-Distillation (SSD)
- ยกระดับประสิทธิภาพการสร้างโค้ดได้ด้วย ผลลัพธ์ที่โมเดลสร้างเอง โดยไม่ต้องมีโมเดลครูภายนอกหรือการตรวจสอบ
- บรรเทาความขัดแย้งระหว่างความแม่นยำกับการสำรวจ และทำให้เกิดการปรับปรุงที่ทั่วไปได้ผ่าน การปรับโครงสร้างการกระจาย
- SSD เป็นวิธีที่เรียบง่ายแต่ทรงพลังซึ่งนำไปใช้ได้ในขั้น post-training และเสนอ ทางเลือกที่ใช้งานได้จริงในการยกระดับคุณภาพการสร้างโค้ดของ LLM
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เหตุผลที่งานวิจัยนี้น่าสนใจคือมันนำแนวคิด context-aware decoding มาทำให้เกิดขึ้นจริง
มันอธิบายว่าในกระบวนการสร้างโค้ด จะมีจุด ‘fork’ (จุดแตกแขนงเชิงสร้างสรรค์ที่ตีความได้หลายแบบ) และจุด ‘lock’ (การตัดสินใจเชิงไวยากรณ์ที่ต้องการความถูกต้อง) สลับกันไป
สิ่งที่น่าประทับใจคือเทคนิค SSD (Simple Self-Distillation) ช่วยปรับอันดับโทเคนที่เหมาะสมที่สุดให้ดีขึ้นในทั้งสองสถานการณ์ ทำให้โมเดลทำงานได้ สร้างสรรค์ มากขึ้นตอนที่ต้องสำรวจ และ แม่นยำ มากขึ้นตอนที่ต้องถูกต้อง
แม้แต่สมองมนุษย์เองก็ถูกศึกษามาหลายพันปี แต่ก็ยังมีส่วนที่เข้าใจไม่ได้อีกมาก
แม้กระทั่ง emergent behavior ของการไหลของการจราจร เองก็เพิ่งเริ่มเข้าใจกันชัดเจนไม่นานนี้
ดังนั้นการค้นพบคุณสมบัติใหม่ของ LLM อย่างต่อเนื่องจึงเป็นเรื่องธรรมชาติ
ถ้าใช้การสุ่มตัวอย่างตามไวยากรณ์หรือ grammar-aware decoding ก็สามารถแทรกโทเคนที่มีได้เพียงตัวเดียวตามหลักไวยากรณ์เข้าไปตรง ๆ โดยไม่ต้องเรียกโมเดลเลยก็ได้
แต่ในระบบที่ใช้งานกันแพร่หลายในปัจจุบันกลับแทบไม่ถูกนำมาใช้
เลยสงสัยว่าจะมีแนวทางแบบทั่วไปที่ใช้ การคำนวณมากขึ้นกับตัวเลือกสำคัญ และใช้น้อยลงกับโทเคนที่ชัดเจนอยู่แล้วได้หรือไม่
ตอนนี้กำลังคิดอยู่ว่าควรใช้วิธีเดียวกันตอนอนุมานด้วยหรือไม่
ในโค้ดเพียงแค่โครงสร้างชัดเจนกว่า แต่กลไก fork/lock ใช้ได้กับโดเมนปัญหาหลากหลาย
Self-Distillation ดูเหมือนจะเป็นทิศทางหลักของการพัฒนา LLM
งานวิจัย Self-Distillation Fine-Tuning(SDFT) จากทีม MIT และ ETH ก็แสดงให้เห็นประสิทธิภาพสูงไว้แล้ว
SSD (Simple Self-Distillation) ในงานนี้จริง ๆ ก็แทบจะเป็นภาคต่อของแนวทางนั้น ต่างกันแค่ชื่อ
การใช้ชื่อ SSD ยังทำให้งงได้ เพราะไปซ้ำกับ SSD (solid-state drive)
อยากให้มีการ ยอมรับที่มาและสายสืบทอดของแนวคิด จากงาน SDFT ต้นฉบับให้ชัดกว่านี้
ไม่นานมานี้ฉันเห็นวิดีโอที่รัน Gemma 4 บนเครื่องโลคัลได้ที่ความเร็ว 50 โทเคนต่อวินาที
มันแสดงความสามารถได้ในระดับ Sonnet 3x~4 แล้ว
ถ้าเสริมด้วยเทคนิคอย่าง SSD เข้าไปอีก ก็ดูเหมือนว่าภายในปี 2028 โมเดลโค้ดที่ถูกและทรงพลัง จะกลายเป็นของแพร่หลาย
นักพัฒนาที่ชำนาญมีแนวโน้มจะรันโมเดลของตัวเองในฐานะ ทรานสไพเลอร์แบบไม่กำหนดแน่ชัด ที่แปลงภาษาธรรมชาติเป็นโค้ด
ตอนนี้มันให้ความรู้สึกเหมือน ‘สร้างบ้านบนตะปู’
สมมติฐานหลักของ SSD เรื่อง ความขัดแย้งระหว่าง precision–exploration คล้ายกับปัญหาที่ Adaptive Decoding พยายามแก้
มันดูชัดเจนมากว่า ระหว่างการอนุมาน ช่วงที่ต้องใช้การคิดอย่างสร้างสรรค์ควรใช้ temperature สูง และช่วงที่ต้องการความถูกต้องทางไวยากรณ์ควรใช้ temperature ต่ำ
แค่ถามซ้ำ ๆ ว่า “นี่คือ วิธีแก้ที่สง่างามที่สุด หรือเปล่า?” ก็ช่วยให้ผลลัพธ์จาก LLM ดีขึ้นอย่างเห็นได้ชัดแล้ว
ถ้าโมเดลสามารถหาคำตอบที่ดีกว่าได้ง่ายขนาดนั้น ก็อดสงสัยไม่ได้ว่าทำไมมันไม่ทำแบบนั้นตั้งแต่แรก
มักต้องทำวิธีที่ใช้ได้ให้เสร็จก่อน แล้วค่อยขัดเกลาหลายรอบจึงจะกระชับขึ้น
บางคนใช้เวลาครึ่งวันคิดก่อนเขียนโค้ด ขณะที่บางคนลงมือทำคำตอบแรกทันที
LLM ปัจจุบันใกล้กับแบบหลังมากกว่า
งานวิจัยนี้มีโอกาสสูงที่จะนำไปสู่ โมเดลสร้างโค้ดที่ดีกว่าเดิม
แต่เราก็ยังไม่เข้าใจดีพอว่าเกิดอะไรขึ้นในปริภูมิหลายมิติระดับสูงนั้น
สุดท้ายเราจึงยังคงสำรวจด้วยวิธีแบบ ‘ลองโยนดูแล้วดูว่ามันติดไหม’
ความก้าวหน้าครั้งใหญ่ในแมชชีนเลิร์นนิงมักดูเรียบง่ายเมื่อมองจากภายนอก
Transformer ก็เป็นแบบนั้น และ SSD ครั้งนี้ก็เช่นกัน
อาจเป็นเพราะเรายังไม่มี รากฐานทางทฤษฎีที่ลึกพอ
ความซับซ้อนมักเป็นสัญญาณว่าเรายังเข้าใจไม่พอ
จากประสบการณ์การเขียนโปรแกรมของฉัน นี่เป็นกฎที่เชื่อถือได้พอสมควร
เป็นเรื่องน่าขันที่ Apple ยังคงเผยแพร่งานวิจัย AI ขณะที่ OpenAI ไม่ทำแบบนั้น
มีคนหนึ่งสรุปงานวิจัยนี้ว่าเป็น “โมเดลที่ฟाइनจูนมาเพื่อให้ทำผลลัพธ์บนโค้ด benchmark ได้ดี” แต่จริง ๆ แล้วไม่ใช่แบบนั้น
หลังจากนั้นโมเดลที่ปรับ การตั้งค่าการถอดรหัส (temp, top-k) ก็ให้ผลลัพธ์ดีกว่าต้นฉบับ
กล่าวคือมันไม่ใช่แค่การฟাইনจูนให้เข้ากับ benchmark แต่เป็น การเพิ่มประสิทธิภาพจากผลลัพธ์ของตัวเอง
งานวิจัยนี้เปรียบได้กับ การฝึกกอล์ฟ
หลังจากตีลูกหลายพันครั้งจน ทำให้วงสวิงพื้นฐานเป็นอัตโนมัติ แล้ว เวลาลงสนามจริงก็จะกล้าลองช็อตที่สร้างสรรค์และเสี่ยงมากขึ้นอย่างมั่นใจ
SSD ก็เป็นแนวทางแบบเดียวกัน คือ เสริมความแข็งแรงให้แพตเทิร์นพื้นฐาน เพื่อเปิดพื้นที่ให้กับการเลือกเชิงสร้างสรรค์