"prompt tuning" กับ "fine-tuning" ต่างกันตรงไหน
เกริ่นนำ: คำเดียวกันแต่ชี้ไปที่สองสิ่งที่ต่างกัน
นี่คือคำถามพื้น ๆ ข้อแรกที่ผมเจอ ตอนก้าวเข้าสู่โลกของ generative AI
“prompt tuning” กับ “fine-tuning” สุดท้ายแล้วต่างกันตรงไหน?
ยิ่งหาข้อมูลยิ่งสับสน เหตุผลเพิ่งมากระจ่างทีหลัง: ตัวคำว่า “prompt tuning” เองนั่นแหละ ที่ชี้ไปยังสิ่งตรงข้ามกันขึ้นอยู่กับว่าคุณเห็นมันที่ไหน “prompt tuning” ที่อยู่ในประกาศรับสมัครงาน กับ “Prompt Tuning” ที่อยู่ในเปเปอร์วิชาการ ขัดกันในจุดที่สำคัญที่สุด — คุณเทรน weights ของโมเดลหรือไม่ ถ้าเก็บข้อมูลไปโดยไม่รู้ตัวเรื่องนี้ เส้นในหัวก็จะไม่เชื่อมต่อกันเสียที
ในบทความนี้ ผมจะเรียงคำที่ดูกระจัดกระจายเหล่านี้ใหม่ บนแกนเดียว: แตะ weights ของโมเดล หรือไม่แตะ? ขอสรุปก่อนเลยว่า แกนนี้คือสิ่งเดียวที่ต้องจำ พอ buzzword ตัวใหม่ลอยมา คุณจะรู้ทันทีว่าต้องวางมันไว้ตรงไหน
สรุปก่อน: แกนคือ “แตะ weights หรือไม่แตะ”
แก่นแท้ของ LLM คือกลุ่มของตัวเลขหลายพันล้านตัว (weights) ค่าของตัวเลขเหล่านี้นี่แหละคือ “ความฉลาด นิสัย และความรู้” ของโมเดล ดังนั้นความต่างของแต่ละวิธีจึงกลั่นเหลือเพียงข้อเดียว: คุณเปลี่ยนตัวเลขเหล่านั้น หรือปล่อยไว้เฉย ๆ?
| แตะ weights? | ครอบคลุมอะไร | |
|---|---|---|
| ช่วยจากภายนอก | ✕ ไม่แตะ | prompt engineering (“prompt tuning” แบบภาษาพูด) / RAG |
| เขียนข้างในใหม่ | ⭕ แตะ | fine-tuning (full / LoRA, QLoRA, soft prompt) |
แค่นี้เอง ที่เหลือคือกิ่งก้าน เมื่อทำเป็นภาพหนึ่งภาพ จะได้แบบนี้
An LLM = billions of weights
(behavior lives in those numbers)
│
┌───────────────┴────────────────┐
▼ ▼
Don't touch the weights Touch the weights = Fine-tuning
(help from outside) (rewrite the model itself)
│ │
┌─────┴──────┐ ┌──────────┴───────────┐
▼ ▼ ▼ ▼
Prompt Eng. RAG Full fine-tuning PEFT (train a small part)
LoRA / QLoRA / Soft-prompt
อุปมา: จะดึงศักยภาพพนักงานใหม่มือดีออกมาอย่างไร
เพราะมันนามธรรม ลองนึกถึงพนักงานใหม่ที่หัวไว
- ปรับวิธีการสั่งงาน → prompt engineering
- ยื่นเอกสารให้ก่อนแล้วค่อยให้ตอบ → RAG
- ส่งไปอบรมเพื่อให้เขาเติบโต → fine-tuning
จุดสำคัญ: มีแต่ fine-tuning เท่านั้นที่เขียนสิ่งที่อยู่ในหัวของพนักงานใหม่ (= weights) ขึ้นใหม่ ทั้ง prompt engineering และ RAG ต่างปล่อยให้ตัวบุคคลเหมือนเดิม แล้วยื่นมือช่วยจากภายนอก ไม่ใช่เรื่องว่าอันไหนเหนือกว่า แต่มันมีจุดประสงค์ต่างกัน
กับดักศัพท์: สองความหมายของ “prompt tuning”
นี่คือจุดศูนย์กลางของความสับสน ขอตรึงไว้ในตารางตรงนี้
| คำ | ทำอะไร | แตะ weights? | แท้จริงคืออะไร |
|---|---|---|---|
| prompt tuning (ภาษาพูด) | ออกแบบและปรับปรุงคำสั่ง ตัวอย่าง และผลลัพธ์ | ✕ | สิ่งเดียวกับ prompt engineering |
| Prompt Tuning (วิชาการ) | เทรนเฉพาะ “ลำดับเวกเตอร์ที่เรียนรู้ได้” ที่เติมไว้หน้า input | ⭕ (เทรนแบบเบา) | สมาชิกในตระกูล fine-tuning (PEFT) |
คำว่า “prompt tuning” คำเดียวกัน หมายถึง “การออกแบบคำสั่ง” ในภาษาพูดของคนทำงาน แต่หมายถึง “วิธีเทรน weights” ในเปเปอร์ เวลาที่บทสนทนารู้สึกไม่เชื่อมกัน สาเหตุส่วนใหญ่คือความเหลื่อมนี้ พอมองออกแล้ว มันจะไม่หลอกคุณอีก
แต่ละอย่างคืออะไร (เอาแต่แก่น)
1. Prompt engineering (weights ไม่เปลี่ยน)
ออกแบบคำสั่งและตัวอย่าง few-shot ตรวจผลลัพธ์ แล้วแก้ — วนซ้ำ อาวุธที่ดีที่สุดของมันคือ เร็ว ถูก และทิ้งง่าย ด้านกลับกัน คุณต้องคอยอธิบายในพรอมป์ทุกครั้ง และมันไม่ถนัดในการให้ “พฤติกรรมเดิมเสมอ” อย่างมีเสถียรภาพ
2. RAG (weights ไม่เปลี่ยน)
ทุกครั้งที่มีคำถาม จะค้นเอกสารภายนอกแล้ว ยื่นให้เป็น context จุดแข็งคือ ความสดของความรู้ — สะท้อนข้อมูลล่าสุดหรือเอกสารในมือได้โดยไม่ต้องเทรนใหม่ แต่ตัวโมเดลเองไม่ได้ฉลาดขึ้น คุณภาพถูกกำหนดด้วยการออกแบบการค้น (“จะหยิบอะไร และหยิบอย่างไร”)
3. Fine-tuning (เทรน weights)
แสดงตัวอย่าง “input → output ที่อยากได้” จำนวนมาก อัปเดต weights ทีละนิด แล้วเผาพฤติกรรมนั้นลงไปในโมเดล กล่าวให้ชัดคือ วนซ้ำไม่หยุด “ทำนาย (forward) → ผิดไปเท่าไร (loss) → ต้องขยับ weight ตัวไหนอย่างไร (gradient/backprop) → ขยับนิดหน่อย (update)” — คือลูปในภาพด้านล่าง
┌──────────────┐ predict ┌──────────────┐
│ 1. Forward │ ───────────► │ 2. Loss │
│ (predict) │ │ (how wrong) │
└──────────────┘ └──────────────┘
▲ │
update │ │ gradient
│ ▼
┌──────────────┐ nudge weights ┌──────────────┐
│ 4. Update │ ◄──────────── │ 3. Backprop │
└──────────────┘ └──────────────┘
repeat over data → loss goes down → behavior is learned
- Full fine-tuning: อัปเดต weight ทุกตัว แสดงออกได้สูง แต่หนักมากและต้องใช้ GPU ใหญ่
- PEFT (สายเบา): แช่แข็งตัวฐานไว้ เทรนเฉพาะส่วนเล็ก ๆ ที่เพิ่มเข้ามา คุ้มค่า และเป็นตัวเลือกที่สมจริงสำหรับคนทำคนเดียวในตอนนี้
- LoRA / QLoRA: เพิ่มเมทริกซ์ adapter เล็ก ๆ แล้วเทรนตรงนั้น (QLoRA ยังบีบตัวฐานเป็น 4-bit เพื่อประหยัดหน่วยความจำยิ่งขึ้น)
- Soft prompt (= “Prompt Tuning” เชิงวิชาการ) / Prefix / P-Tuning: เทรนเฉพาะเวกเตอร์ที่เรียนรู้ได้ซึ่งเติมไว้หน้า input
จุดแข็งของ fine-tuning คือการผลิต รูปแบบ น้ำเสียง หรือการจำแนกที่ตายตัว ออกมาอย่างเสถียรและราคาถูก ด้วยคำสั่งสั้น ๆ คุณสร้างโมเดลเล็กเฉพาะทางได้ ต้นทุนคือ ต้องมี ข้อมูลที่มี label และ GPU และเมื่อโลกเปลี่ยน คุณต้องเทรนใหม่
สิ่งที่สำคัญที่สุดคือ “การเลือก”
การจำชื่อเครื่องมือสำคัญน้อยกว่า การเลือกอันที่ใช่สำหรับปัญหาตรงหน้า นั่นคือฝีมือจริง
| สิ่งที่อยากทำ | เลือกก่อน | ทำไม |
|---|---|---|
| ตอบด้วยข้อเท็จจริงล่าสุดหรือความรู้ภายในองค์กร / เนื้อหาเปลี่ยนบ่อย | RAG | สะท้อนทันทีโดยไม่ต้องเทรน แข็งเรื่องความสด |
| แค่อยากลอง / ความต้องการยังไม่นิ่ง | prompt engineering | เร็ว ถูก ทิ้งง่าย |
| ผลิตรูปแบบ การจำแนก หรือน้ำเสียงที่ตายตัวอย่างเสถียร | fine-tuning (เริ่มที่ LoRA/QLoRA) | เผาพฤติกรรมลงใน weights |
| สร้างโมเดลยักษ์ขึ้นใหม่ทั้งตัว | full fine-tuning | แต่ต้องมี GPU ใหญ่; ส่วนใหญ่ PEFT ก็พอ |
สูตรมาตรฐานในทางปฏิบัติคือ “1) prompt → ถ้าไม่พอ 2) RAG → ถ้ายังไม่พอ 3) fine-tuning” การกระโดดไปที่ 3 เลย มักเป็นทางอ้อม
หมายเหตุ: ข้อ 3 สะดุดที่ “สภาพแวดล้อม” ไม่ใช่ “โค้ด”
อีกเรื่องหนึ่งจากประสบการณ์จริง กับ fine-tuning (ข้อ 3) ส่วนที่ยากไม่ใช่อัลกอริทึม แต่คือ การตั้งค่าสภาพแวดล้อม ขั้นตอนมีอยู่ในเอกสารทางการ แต่พอรันบนเครื่องตัวเอง กำแพงระดับพื้นก็โผล่มาทีละอัน: เวอร์ชันไลบรารีที่ไม่เข้ากัน, character encoding, ความต่างระหว่างรุ่นของ GPU คุณคัดลอกโค้ดได้ แต่ คุณคัดลอก “การตัดสินใจว่าติดตรงไหน และทำไมจึงแก้แบบนั้น” ไม่ได้ คุณค่าจึงเหลืออยู่ตรงนั้นเสมอ
ฝั่ง “ลองทำจริง” — บันทึกการสะดุดทั้งหมดตอนทำ fine-tuning แบบ local บน GPU รุ่น Turing ตัวเดียว (RTX 2070) — อยู่ในอีกบทความหนึ่ง
🔗 ฉบับลงมือทำ: ลองทำ local QLoRA fine-tuning ด้วย GPU รุ่น Turing ตัวเดียว RTX 2070 (กำลังดำเนินการ)
สรุป (ในที่เดียว)
- แกนของความต่างมีเพียงหนึ่ง: แตะ weights หรือไม่แตะ
- ไม่แตะ … prompt engineering (“prompt tuning” แบบภาษาพูด) / RAG
- แตะ … fine-tuning (full / PEFT: LoRA, QLoRA, soft prompt)
- “prompt tuning” เป็น คนละสิ่งระหว่างภาษาพูดกับวิชาการ เป็นสาเหตุอันดับหนึ่งที่บทสนทนาไม่เชื่อมกัน
- และ — มากกว่าการท่องชื่อ การตัดสินใจได้ว่า “ปัญหานี้ควรเลือกอันไหน” คือฝีมือที่แท้จริง
อ้างอิง (ที่มาของศัพท์)
- Prompt Tuning สาย soft-prompt (Lester et al., 2021) / Prefix Tuning / P-Tuning
- QLoRA (4-bit quantization + LoRA, Dettmers et al., 2023)
อภิธานศัพท์ (คำที่ใช้ในบทความนี้)
| คำ | ความหมาย |
|---|---|
| prompt tuning (สองความหมาย: ภาษาพูด / วิชาการ) | หัวข้อของบทความนี้ ในภาษาพูดหมายถึง “prompt engineering”; ในวิชาการหมายถึง “Prompt Tuning” ของ PEFT (คนละสิ่ง) |
| weights | ชุดตัวเลขมหาศาลในโมเดล สาระของความฉลาดและความรู้ |
| prompt engineering | ออกแบบคำสั่งและตัวอย่าง few-shot เพื่อจัดรูปผลลัพธ์ (weights ไม่เปลี่ยน) |
| few-shot (ตัวอย่าง) | ใส่ตัวอย่างที่ถูกต้องไม่กี่อันในพรอมป์ เพื่อชี้นำผลลัพธ์ |
| RAG | ค้นเอกสารที่เกี่ยวข้องตอนถาม แล้วส่งให้เป็น context (weights ไม่เปลี่ยน) |
| fine-tuning | อัปเดต weights ด้วยตัวอย่าง เพื่อเผาพฤติกรรมลงในโมเดล |
| full fine-tuning | วิธีหนักที่อัปเดต weight ทุกตัว |
| PEFT | คำรวมของวิธีแบบเบาที่แช่แข็งตัวฐานและเทรนเพียงบางส่วน |
| LoRA / QLoRA | เพิ่มเมทริกซ์ adapter เล็ก ๆ แล้วเทรนตรงนั้น (QLoRA quantize ตัวฐานเป็น 4-bit เพื่อประหยัดหน่วยความจำ) |
| soft prompt (Prompt Tuning เชิงวิชาการ) / Prefix / P-Tuning | ตระกูล PEFT ที่เทรนเฉพาะเวกเตอร์ที่เรียนรู้ได้ซึ่งเติมหน้า input |
| forward (ทำนาย) / loss / backprop / update | สี่ขั้นตอนของลูปการเทรน |
| gradient | ปริมาณที่บอกว่าต้องขยับ weight แต่ละตัวไปทางไหนและเท่าไรเพื่อลด loss |