Tech Blog

"prompt tuning" กับ "fine-tuning" ต่างกันตรงไหน

LLM Fine-tuning Prompt-Engineering RAG AI

เกริ่นนำ: คำเดียวกันแต่ชี้ไปที่สองสิ่งที่ต่างกัน

นี่คือคำถามพื้น ๆ ข้อแรกที่ผมเจอ ตอนก้าวเข้าสู่โลกของ 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

ส่งข้อความได้ตามสบาย

กรุณาส่งข้อความ หากมีความคิดเห็น หรือคำถาม