จาก Base Model สู่ Assistant: SFT, RLHF, DPO และ GRPO
Base model ไม่ได้ตอบคำถาม แต่มันต่อข้อความต่อไป post-training คือขั้นที่เปลี่ยนตัวทำนาย token ให้เป็น assistant
ในหน้านี้
ลองขอให้ GPT-2 — language model ที่ pretrained มาอย่างใช้ได้ — เขียนไฮกุเกี่ยวกับทะเล:
prompt: Write a haiku about the sea.
The sea is a beautiful place.
The sea is a beautiful place.
The sea is a beautiful place.
The sea is a beautiful place.
The sea is a beautiful place.มันไม่ได้สับสน และไม่ได้ทำงานพลาด มันกำลังทำสิ่งที่ บทที่ 10 ฝึกให้มันทำพอดี: เมื่อได้รับข้อความบางส่วน ให้สร้างข้อความต่อเนื่องที่น่าจะเป็นไปได้ บนอินเทอร์เน็ต บรรทัดอย่าง Write a haiku about the sea. มักตามด้วยร้อยแก้วเกี่ยวกับทะเล และประโยคที่เพิ่งปรากฏไปก็มีโอกาสสูงผิดปกติที่จะปรากฏซ้ำอีก โมเดลนี้เป็นตัวทำนาย next-token ที่ยอดเยี่ยม และเป็น assistant ที่ไร้ประโยชน์
ทีนี้ลองคำขอเดียวกันกับโมเดลที่สร้างมาด้วยวิธีเดียวกัน — Qwen2.5 พารามิเตอร์ครึ่งพันล้าน ใหญ่กว่า GPT-2 ข้างบน สี่เท่า และยังถือว่าเล็กมากเมื่อเทียบกับมาตรฐานปี 2026 — หลังผ่าน training stage ที่บทนี้จะพูดถึง:
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.พารามิเตอร์มากขึ้นสี่เท่าไม่ได้สอนให้โมเดลหยุดพูด ช่องว่างระหว่าง output สองแบบนั้นไม่ใช่เรื่อง scale ไม่ใช่ architecture และไม่ใช่ปริมาณข้อมูล แต่มันคือ post-training: เฟสที่สองซึ่งเล็กกว่า pretraining หลายลำดับขั้น แต่เป็นขั้นที่เปลี่ยนตัวทำนายข้อความให้กลายเป็นสิ่งที่ตอบคำถามได้
ขั้นที่หนึ่ง: แสดงให้เห็นว่าคำตอบหน้าตาเป็นอย่างไร
ลิงก์ไปยังส่วน: ขั้นที่หนึ่ง: แสดงให้เห็นว่าคำตอบหน้าตาเป็นอย่างไรขั้นแรกไม่หวือหวาที่สุด แต่ทำงานส่วนใหญ่ รวบรวมตัวอย่าง instruction ที่จับคู่กับ response ที่ดี แล้วฝึกต่อบนตัวอย่างเหล่านั้นด้วย loss เดิมจาก บทที่ 8 — ทำนาย token ถัดไป — แต่คิดเฉพาะส่วน response เท่านั้น นี่คือ supervised fine-tuning หรือ SFT
ไม่ได้มีการสอนอะไรใหม่เกี่ยวกับภาษา สิ่งที่ถูกสอนคือ รูปแบบ: ข้อความทรงนี้จะตามด้วยข้อความทรงนั้น แล้วจากนั้นมัน หยุด ลองดูความล้มเหลวของ base model อีกครั้ง มันตอบคำถามในประโยคแรกแล้ว แต่หยุดไม่ได้ เพราะไม่มีอะไรในการฝึกของมันที่เคยทำเครื่องหมายจุดจบของ response การหยุดคือพฤติกรรมที่เรียนรู้มา
นี่จึงเป็นเหตุผลที่ต้องบอกโมเดลว่าขอบเขตอยู่ตรงไหน ซึ่งก็คือสิ่งที่ chat template ทำ:
<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>
<|im_start|>user
What is the capital of France?<|im_end|>
<|im_start|>assistantmarker <|im_start|> และ <|im_end|> เหล่านั้นคือ token จริงใน vocabulary ซึ่งถูกเพิ่มก่อน fine-tuning และโมเดลเห็นมันเป็นล้านครั้งในตำแหน่งแบบนี้พอดี มันคือวิธีที่โมเดลรู้ว่าเป็นตาของใคร และ turn หนึ่งจบตรงไหน
ถ้าข้าม template แล้วส่งคำถามเปล่า ๆ ให้โมเดล คุณกำลังป้อน sequence ที่มันไม่เคยเห็นในการฝึก วัดจริง โมเดลเดียวกัน คำถามเดียวกัน greedy decoding เดียวกัน:
ไม่มี template — string ดิบ What is the capital of France?:
The capital of France is Paris.
To verify this, I will use a simple
Python code snippet to confirm that
Paris is indeed the capital city of
France.
[...and then it starts writing a
Python script to check its own answer]มี template:
The capital of France is Paris.คำตอบถูกทั้งคู่ แต่ถ้าไม่มี marker โมเดลจะไหลไปเขียน Python เพื่อตรวจตัวเอง เพราะ prompt ที่มันได้รับไม่เหมือนสิ่งที่มันถูก fine-tuning มาเลย นี่คือสาเหตุที่พบบ่อยที่สุดของอาการ "โมเดลดูโง่ลงเมื่อฉันเรียกใช้มันโดยตรง": template ไม่ใช่ของตกแต่งรอบโมเดล มันเป็นส่วนหนึ่งของโมเดล และ template ที่ผิดคือการเสื่อมคุณภาพแบบเงียบ ๆ โดยไม่มี error บอก
ขั้นที่สอง และปัญหาที่มันมีไว้แก้
ลิงก์ไปยังส่วน: ขั้นที่สอง และปัญหาที่มันมีไว้แก้SFT มีเพดาน และเพดานนั้นคือข้อมูล หากจะ fine-tune บน demonstration คุณต้องให้ใครสักคนเขียน response ในอุดมคติ — และสำหรับคำถามที่น่าสนใจส่วนใหญ่ การเขียนคำตอบที่ดีนั้นยาก ช้า แพง และได้คำตอบเดียวที่คุณตรวจสอบคุณภาพไม่ได้ด้วยซ้ำ
สิ่งที่คนทำได้ดีคือ การเปรียบเทียบ เมื่อเห็น response สองแบบ annotator สามารถบอกได้ค่อนข้างน่าเชื่อถือว่าแบบไหนดีกว่าในไม่กี่วินาที แม้จะไม่สามารถเขียนแบบใดแบบหนึ่งเองได้ นี่คือข้อเท็จจริงที่ทั้งขั้นที่สองสร้างอยู่บนมัน และเป็นส่วนที่คำอธิบายส่วนใหญ่เข้าใจกลับด้าน:
มนุษย์ไม่ได้เขียนคำตอบ พวกเขาจัดอันดับคู่คำตอบ
ดังนั้นข้อมูลคือคู่ — prompt, response สองแบบ และแบบไหนชนะ สิ่งนี้เสียบเข้า next-token loss ไม่ได้ เพราะไม่มี target sequence มันต้องใช้เครื่องจักรอีกแบบหนึ่ง
Reward model และสิ่งที่มันเรียนรู้จริง ๆ
ลิงก์ไปยังส่วน: Reward model และสิ่งที่มันเรียนรู้จริง ๆคุณขอให้มนุษย์ให้คะแนนทุก response ระหว่างการฝึกไม่ได้ — นั่นคือการตัดสินเป็นล้านครั้ง ดังนั้นคุณจึงฝึกโมเดลให้เลียนแบบมนุษย์: reward model ที่รับ response แล้วคืนค่า scalar
การฝึกมันจากการเปรียบเทียบใช้ผลลัพธ์จากปี 1952 โมเดล Bradley–Terry2 บอกว่า ถ้าสองรายการมี strength แฝง ความน่าจะเป็นที่รายการหนึ่งชนะอีกรายการคือ logistic function ของผลต่างของ strength เหล่านั้น กลับด้านความคิดนี้ แล้วมันจะกลายเป็น loss: เมื่อมนุษย์ชอบ มากกว่า ให้ maximise
ซึ่งใน code คือ training loop ทั้งหมด:
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean() สังเกตสิ่งที่โมเดลไม่เคยเห็น: คะแนนสัมบูรณ์ มันเรียนรู้แต่ผลต่างเท่านั้น ซึ่งตรงกับสิ่งที่ข้อมูลมีพอดี
ต่อไปคือส่วนที่ควรวัด reward model เรียนรู้สิ่งที่ annotator ให้รางวัล และ annotator ก็คือคน นี่คือการจำลองที่ คุณภาพจริง ของ response ขึ้นอยู่กับความมีประโยชน์และความถูกต้องเท่านั้น — ความยาวไม่มีค่าอะไร — แต่ annotator จำลองมีความชอบเล็กน้อยต่อคำตอบที่ยาวกว่าเมื่ออย่างอื่นใกล้เคียงกัน ซึ่งเป็น bias ของมนุษย์ที่มีเอกสารรองรับดี ฝึก reward model บนการเปรียบเทียบ 2000 คู่ แล้วอ่าน weight ของมัน:
| bias เรื่องความยาวของ annotator | weight ที่เรียนรู้บน useful | บน correct | บนความยาว |
|---|---|---|---|
| 0.0 | +1.00 | +1.00 | +0.01 |
| 0.3 | +0.98 | +1.00 | +0.15 |
| 0.6 | +0.97 | +1.00 | +0.27 |
| 1.2 | +1.00 | +0.99 | +0.59 |
reward model ทำงานได้สมบูรณ์แบบ มันเรียนรู้ preference ที่ถูกแสดงให้เห็นอย่างซื่อสัตย์ — รวมถึงส่วนของ preference ที่ไม่เกี่ยวกับคุณภาพเลย reward model ไม่ใช่เครื่องวัดความดี แต่มันคือเครื่องวัดสิ่งที่ annotator เลือก และ bias ทุกอย่างในกลุ่ม annotation ตอนนี้กลายเป็น coefficient ในฟังก์ชันที่ differentiable ซึ่งโมเดลที่ใหญ่กว่ามากกำลังจะ optimise ใส่มัน
Reward hacking ที่วัดได้
ลิงก์ไปยังส่วน: Reward hacking ที่วัดได้สิ่งนี้พาเรามาถึงสิ่งที่เกิดขึ้นเมื่อคุณ optimise มัน ให้ policy มีงบความพยายามคงที่เพื่อใช้กับคุณสมบัติต่าง ๆ ของ response โดยมี asymmetry ที่สมจริง: การมีประโยชน์และการถูกต้องนั้นแพง ส่วนการยาวขึ้นนั้นถูก — ก็แค่เขียนต่อไป
reward ต่อหนึ่งหน่วยความพยายาม สำหรับโมเดลที่ฝึกข้างต้น: useful 8.26, correct 8.31, length 31.70 ความยาวให้ผลตอบแทนดีกว่าความถูกต้องเกือบสี่เท่า ไม่ใช่เพราะ reward model พัง แต่เพราะมันถูก
Optimise ใส่ reward นั้น แล้วดูตัวเลขทั้งสอง:
| คะแนนของ reward model | คุณภาพจริง | ความยาวที่สร้าง | |
|---|---|---|---|
| policy เริ่มต้น | 12.588 | 0.974 | 3.365 |
| หลัง optimisation | 31.696 | 0.000 | 12.497 |
reward เพิ่มขึ้น 2.5 เท่า สิ่งที่ reward ควรจะวัดกลายเป็น ศูนย์ policy ค้นพบว่ามันทำคะแนนได้สูงมหาศาลด้วยการเขียนยาว ๆ โดยไม่พูดอะไร และไม่มีส่วนใดของ training loop มีทางสังเกตเห็น เพราะ reward model คือ นิยามของความดีภายใน loop
นี่คือ reward hacking และถ้าคุณเคยสงสัยว่าทำไม chat model ถึงพูดเยิ่นเย้อ ตารางนี้คือคำตอบส่วนใหญ่
KL penalty ซื้ออะไรให้จริง ๆ
ลิงก์ไปยังส่วน: KL penalty ซื้ออะไรให้จริง ๆการป้องกันมาตรฐานคือ penalise policy ไม่ให้ขยับไกลจากจุดเริ่มต้นมากเกินไป โดยวัดระยะด้วย KL divergence จาก บทที่ 4:
reference คือโมเดล SFT — policy ก่อน reinforcement stage ข้อกล่าวอ้างคือสิ่งนี้ป้องกันโมเดลไม่ให้หลุดไปสู่พฤติกรรมเสื่อม ลองดูว่าข้อกล่าวอ้างนั้นเหลืออยู่แค่ไหนเมื่อวัดจริง setup เดิม sweep :
| reward | คุณภาพจริง | ความยาว | KL | |
|---|---|---|---|---|
| 0 | 31.699 | 0.000 | 12.498 | 2.994 |
| 1 | 31.697 | 0.000 | 12.497 | 2.993 |
| 5 | 28.318 | 0.285 | 10.700 | 2.163 |
| 15 | 12.860 | 1.542 | 2.552 | 0.151 |
| 30 | 10.426 | 1.719 | 1.303 | 0.025 |
| 60 | 9.632 | 1.769 | 0.908 | 0.005 |
| reference model อย่างเดียว | 9.162 | 1.791 | 0.687 | 0 |
อ่านแถวสุดท้ายเทียบกับแถวอื่น ที่ และ penalty ไม่ทำอะไรเลย: reward มีค่ามากกว่า KL มากจน optimiser ยอมจ่ายค่าปรับแล้ว hack ต่อไป ระหว่าง 5 ถึง 15 พฤติกรรมแกว่ง และเมื่อถึง คุณภาพจริงไต่กลับมาที่ 1.769 — ซึ่ง ยังต่ำกว่า 1.791 ที่ reference model มีอยู่ก่อนจะเริ่มเรื่องทั้งหมดนี้
มีข้อควรระวังก่อนตัวเลขนั้นจะถูกนำไป quote ที่ไหน: 1.791 ในแถวสุดท้ายและ 0.974 ที่ตารางแรกให้กับ starting policy เป็นการวัดโมเดล pre-RL ตัวเดียวกันสองครั้ง แต่คนละ experiment ให้เปรียบเทียบแถวภายในตารางเดียวกันเท่านั้น อย่าเปรียบเทียบข้ามตาราง — ข้อสรุปของแต่ละตารางยืนอยู่บนแถวของตัวเอง และไม่มีข้อสรุปใดพึ่ง baseline ของอีกตาราง
ดังนั้นสรุปอย่างตรงไปตรงมาไม่ใช่ "KL penalty ป้องกัน reward hacking" แต่คือ:
KL penalty ไม่ได้ป้องกัน reward hacking มันจำกัดว่า policy จะขยับจาก reference ได้ไกลแค่ไหน — และเพราะความล้มเหลวต้องอาศัยการขยับ นั่นจึงช่วยได้ แต่มันคือสายจูง ไม่ใช่ตัวแก้ไข: ที่ ต่ำ สายจูงขาด และที่ สูง คุณก็ได้ reference model กลับมา และ stage แพง ๆ ทั้งหมดก็ไม่ได้ซื้ออะไรเลย
ช่วงที่มีประโยชน์นั้นแคบ ตำแหน่งของมันขึ้นอยู่กับ reward model และไม่มีทางหาได้นอกจากดูด้วยตา นั่นคือเหตุผลที่ reference model ต้องดี — KL เป็นพื้นของคุณภาพที่ reference ไม่ใช่เพดานของความล้มเหลว — และเป็นเหตุผลสำคัญว่าทำไม stage นี้จึงยากในทางปฏิบัติ ไม่ใช่ในทางหลักการ
PPO และทำไม DPO ถึงกินมัน
ลิงก์ไปยังส่วน: PPO และทำไม DPO ถึงกินมันalgorithm ที่ทำให้สิ่งนี้ใช้ได้ใน scale ใหญ่คือ Proximal Policy Optimization3 สรุปในหนึ่งย่อหน้า: มันประเมิน advantage ของแต่ละ response อัปเดต policy เพื่อเพิ่มความน่าจะเป็นของ response ที่อยู่เหนือ baseline และ clip ขนาดของ update เดี่ยว ๆ เพื่อไม่ให้ advantage estimate ขนาดใหญ่ทำลาย policy ในก้าวเดียว เมื่อนำไปใช้กับ language model4 หมายถึงต้องมีโมเดลสี่ตัวทำงานพร้อมกัน — policy, reference, reward model และ critic — โดย policy สร้าง sample ใหม่ตลอดการฝึก
มันใช้ได้ มันสร้าง InstructGPT และทุกอย่างที่สืบทอดจากมัน และมันยากจริง ๆ: โมเดลสี่ตัวใน memory, sampling ใน training loop และชื่อเสียงด้าน instability ที่สมควรแล้ว การแสร้งว่าคุณ implement มันได้ใน blog post คงไม่ซื่อสัตย์ ดังนั้นบทนี้จึงไม่ทำ
สิ่งที่เข้ามาแทนที่สำหรับการใช้งานส่วนใหญ่เริ่มจากการสังเกตบางอย่าง objective ที่ regularize ด้วย KL ข้างบนมี optimal policy แบบ closed-form และนิพจน์นั้นกลับด้านได้: reward เขียนในรูปของ optimal policy และ reference ได้ เมื่อนำกลับไปแทนใน Bradley–Terry loss reward model ก็ หายไปทั้งหมด สิ่งที่เหลือคือ supervised loss บน preference pairs — ไม่มี sampling, ไม่มี critic, ไม่มี reward model, มีโมเดลใน memory สองตัวแทนที่จะเป็นสี่
นั่นคือ Direct Preference Optimization5 และมันมีสองบรรทัด:
def dpo_loss(pi_w, pi_l, ref_w, ref_l, beta=0.1):
"""pi_* and ref_* are summed log-probabilities of a full response."""
logits = beta * ((pi_w - ref_w) - (pi_l - ref_l))
return -F.logsigmoid(logits) อ่านสิ่งที่มันบอก ปริมาณที่ถูกดันขึ้นคือ policy ชอบผู้ชนะ มากกว่า reference แค่ไหน ลบด้วยมันชอบผู้แพ้มากกว่าแค่ไหน reference ไม่ใช่ penalty ที่เอามาแปะทีหลัง — มันอยู่ใน loss ซึ่งเป็นเหตุผลที่ DPO ไม่ต้องใช้ KL term แยก
คุณสมบัติที่สำคัญที่สุดอยู่ใน gradient ลองประเมิน loss และ gradient ของมันบนคู่เดียวกันในห้าสถานะของ policy:
| สถานะของ policy | loss | ขนาด gradient |
|---|---|---|
| ชอบผู้ชนะอย่างแรงอยู่แล้ว | 0.5130 | 0.0401 |
| ชอบอยู่แล้ว แต่ไม่แรง | 0.6685 | 0.0488 |
| เหมือน reference | 0.6931 | 0.0500 |
| ชอบ ผู้แพ้ | 0.7981 | 0.0550 |
| ชอบผู้แพ้อย่างแรง | 1.0055 | 0.0634 |
gradient โตขึ้นเมื่อ policy ผิดมากขึ้น คู่ที่โมเดลจัดการได้อยู่แล้วแทบไม่ส่งผลอะไร คู่ที่มันกลับด้านผิดจะครอบงำ update DPO ถ่วงน้ำหนักทุก example ตามระดับความผิดของ policy ในปัจจุบัน โดยอัตโนมัติ ไม่มี scheduling — และการถ่วงน้ำหนักตัวเองนี้คือกลไกที่ทำงานแทน advantage estimate และ critic ของ PPO (loss ในแถวที่สามคือ พอดี ซึ่งเป็น anchor สำหรับตรวจ implementation ใด ๆ: policy ที่เหมือน reference ยังไม่ได้เรียนรู้อะไร และควรอยู่ที่ )
GRPO6 ใช้เส้นทางต่างออกไปเพื่อออกจากปัญหาเดียวกัน มันยังคง sampling loop ไว้ แต่ลบ critic ออก: แทนที่จะฝึกโมเดลให้ทำนาย baseline มัน sample response เป็น กลุ่ม สำหรับ prompt เดียวกัน แล้วใช้ mean reward ของกลุ่มเป็น baseline โดยตรง advantage ของ response คือมันดีกว่าพี่น้องในกลุ่มแค่ไหน นี่แลกโมเดลทั้งตัวกับ batch ที่ใหญ่ขึ้น และเป็นสิ่งที่ทำให้การฝึกด้วย verifiable reward — หัวข้อของ บทที่ 12 — ใช้งานได้จริง
แสดงรายละเอียด
อีกสามชิ้นของภูมิทัศน์ post-training แบบย่อ
RLAIF และ Constitutional AI7 annotator ไม่จำเป็นต้องเป็นมนุษย์ ให้โมเดลมีชุดหลักการที่เขียนไว้ แล้วขอให้มัน critique และ revise output ของตัวเอง หรือเลือกผู้ชนะระหว่าง candidate สองแบบ คุณก็ได้ preference dataset ที่ผลิตด้วยความเร็วและต้นทุนระดับเครื่องจักร ข้อโต้แย้งที่ชัดเจน — โมเดลกำลังตรวจการบ้านของตัวเอง — เป็นเรื่องจริง และคำตอบอย่างซื่อสัตย์คือมันได้ผลดีกว่าที่ฟังดู เพราะการตัดสินง่ายกว่าการสร้าง ซึ่งเป็น asymmetry เดียวกับที่ทั้งบทนี้ตั้งอยู่
LIMA และข้อมูลที่ต้องใช้น้อยเพียงใด8 demonstration ที่คัดสรรอย่างพิถีพิถันหนึ่งพันรายการสร้าง assistant ที่แข่งขันได้ คำอธิบายที่เสนอคือ pretraining ได้ติดตั้งความรู้และ format ไว้แล้ว และ post-training แค่ต้องเลือกว่าพฤติกรรมใดที่มีอยู่แล้วในโมเดลควรถูกดึงขึ้นมาแสดง ถ้าถูกต้อง คุณภาพของข้อมูล post-training จะสำคัญกว่าปริมาณ — และพฤติกรรมของวงการหลังจากนั้นก็ชี้ว่าผู้คนเชื่อเช่นนั้น
LoRA และ QLoRA910 การ fine-tuning ทุก weight ของโมเดลใหญ่ต้องใช้ memory สำหรับ weight, gradient และ optimiser state — สิบหกไบต์ต่อพารามิเตอร์จากบทที่ 10 เหนือค่าเฉลี่ยสองตัวที่ บทที่ 6 สร้างด้วยมือ — ใน scale ที่ต้องใช้ cluster LoRA freeze weight ดั้งเดิมแล้วฝึก matrix คู่หนึ่งที่มี rank ต่ำควบคู่ไป ทำให้พารามิเตอร์ที่ต้องฝึกลดลงหลายลำดับขั้น; QLoRA ยัง quantize base ที่ถูก freeze เป็น 4 bits เพิ่มเติม ทั้งสองถูกกล่าวถึงที่นี่ในฐานะ technique ส่วน fine-tuning เป็นสิ่งที่ควรใช้เงินทำหรือไม่ เป็นคำถามอีกเรื่องหนึ่ง และเป็นเรื่องของ บทที่ 20
Alignment tax และคำถามที่ยังไม่มีใครตอบ
ลิงก์ไปยังส่วน: Alignment tax และคำถามที่ยังไม่มีใครตอบมีสองเรื่องที่ควรพกต่อไป
เรื่องแรกคือ stage นี้มี ต้นทุน และมันปรากฏในรูป capability โมเดลมักแย่ลงอย่างวัดได้ใน benchmark task บางอย่างหลัง alignment training — หรือ alignment tax — เพราะ objective เปลี่ยนไป: response ที่ปลอดภัย เผื่อคำ และจัดรูปแบบดี ไม่ได้เป็น response ที่ maximise ความแม่นยำเสมอไป ช่องว่างบางส่วนถูกวิศวกรรมให้หายไปแล้ว และบางส่วนเป็น trade-off จริง ไม่ใช่ bug ที่ต้องแก้
เรื่องที่สองคือคำถามที่คำว่า aligned ซ่อนไว้ aligned กับใคร? โซ่คือ: บริษัทหนึ่งเขียน guideline, contractor ตีความ guideline เหล่านั้น, การเปรียบเทียบของพวกเขาฝึก reward model, reward model shaping policy และ policy ตอบคำถามจากคนที่ไม่เคยเห็นทั้งหมดนี้เลย ทุก link คือ choice ที่คนเฉพาะกลุ่มทำขึ้น และไม่มี algorithm ใดในบทนี้มีความเห็นว่าการเลือกเหล่านั้นดีหรือไม่
นี่ไม่ใช่สำนวนเชิงวาทศิลป์ แต่มันคือเหตุผลรูปธรรมว่าทำไม frontier model สองตัวปฏิเสธ request ต่างกัน ทำไมโมเดลเดียวกันเปลี่ยนใจระหว่าง version และทำไม "aligned" จึงเป็นคำอธิบายของ process ไม่ใช่คุณสมบัติของ artefact คณิตศาสตร์ในบทนี้ลงตัวแล้ว ส่วนนี้ยังไม่ลงตัว
ต่อจากนี้ไปที่ไหน
ลิงก์ไปยังส่วน: ต่อจากนี้ไปที่ไหนPost-training สอนให้โมเดลตอบ แต่มันไม่ได้สอนให้โมเดล คิดก่อน ตอบ และสองอย่างนี้ต่างกันในแบบที่ฝึกได้
บทที่ 12 ว่าด้วยสิ่งที่เกิดขึ้นเมื่อคุณให้โมเดลใช้ computation มากขึ้นกับคำถามยาก ๆ ตอนตอบ แทนที่จะใช้ตอนฝึก — chain of thought, reinforcement learning จาก verifiable reward และเหตุผลที่โมเดลที่แสดงวิธีทำไม่ได้เพียงกำลังอธิบายตัวเอง แต่กำลังคำนวณต่างออกไป บทนั้นยังชำระหนี้จากบทนี้ด้วย: GRPO มีอยู่ในนั้น ทำงานแทน critic ที่ PPO เคยทำ บน reward ที่ไม่ต้องใช้ annotator เลย เพราะ proof ตรวจผ่านหรือไม่ผ่านเท่านั้น
Sources and method
ลิงก์ไปยังส่วน: Sources and methodgeneration ข้างบนมาจาก gpt2 และ Qwen/Qwen2.5-0.5B-Instruct ด้วย greedy decoding ดังนั้นจึง reproduce ได้ตรงทุกครั้ง บทที่ 11 ของ Hugging Face LLM Course พาไล่ SFT และ DPO ด้วย trl และ peft หากคุณอยากรันของจริงแทน simulation; บทที่ 7 ของ Build a Large Language Model (From Scratch) โดย Sebastian Raschka implement instruction fine-tuning ตั้งแต่ต้นจนจบโดยไม่ใช้ library
รายการอ้างอิง
ลิงก์ไปยังส่วน: รายการอ้างอิง-
Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). การโยนต่อให้หนังสือเล่มนี้เป็นเรื่องตั้งใจ: กล่องศัพท์ข้างบนคือ subset ที่เล็กที่สุดที่ใช้งานได้ และหัวข้อจริงคือหนังสือทั้งเล่ม ↩
-
Bradley, R. A. and Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), pp. 324–345 (1952). โมเดล pairwise-comparison ที่อยู่ใต้ reward model ทุกตัวที่ใช้กันในปัจจุบัน ↩
-
Schulman, J., Wolski, F., Dhariwal, P., Radford, A. and Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017). ↩
-
Ouyang, L. et al. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — paper ที่ทำให้สูตรสามขั้นกลายเป็นมาตรฐาน ก่อนหน้านั้นมี Christiano et al. (arXiv:1706.03741) ซึ่งแนะนำการเรียน reward model จากการเปรียบเทียบของมนุษย์ และ Stiennon et al. (arXiv:2009.01325) ซึ่งนำไปใช้กับ summarisation ↩
-
Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D. and Finn, C. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290 (2023). derivation ที่ลบ reward model ออกอยู่ใน section 4 และควรอ่านให้ครบ มันสั้นกว่าชื่อเสียงของมัน ↩
-
Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). แนะนำ GRPO ใน section 4.1 ↩
-
Bai, Y. et al. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022). ↩
-
Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). ↩
-
Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021). ↩
-
Dettmers, T., Pagnoni, A., Holtzman, A. and Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314 (2023). ↩