Dari Base Model ke Assistant: SFT, RLHF, DPO, dan GRPO
Base model hanya melanjutkan teks. Lihat bagaimana SFT, reward model, DPO, dan GRPO mengubahnya menjadi assistant.
Di halaman ini
Minta GPT-2 — model bahasa yang pretrained dengan cukup baik — menulis haiku tentang laut:
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.Model itu tidak bingung, dan tidak gagal melakukan tugasnya. Ia melakukan persis apa yang dilatih oleh Bab 10: diberi sebagian teks, lalu menghasilkan kelanjutan teks yang masuk akal. Di internet, baris seperti Write a haiku about the sea. sering diikuti prosa tentang laut, dan kalimat yang baru saja muncul punya peluang yang tidak biasa tinggi untuk muncul lagi. Model ini adalah prediktor next-token yang luar biasa dan assistant yang tidak berguna.
Sekarang berikan permintaan yang sama ke model yang dibangun dengan cara yang sama — Qwen2.5, setengah miliar parameter, empat kali ukuran GPT-2 di atas dan masih sangat kecil menurut standar 2026 mana pun — setelah tahap training yang menjadi topik bab ini:
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.Parameter empat kali lebih banyak tidak mengajari model untuk berhenti bicara. Jarak antara dua output itu bukan scale, bukan arsitektur, dan bukan volume data. Itu adalah post-training: fase kedua, jauh lebih kecil daripada pretraining, yang mengambil prediktor teks dan mengubahnya menjadi sesuatu yang menjawab.
Tahap satu: menunjukkan seperti apa jawaban itu
Tautan ke bagian: Tahap satu: menunjukkan seperti apa jawaban ituLangkah pertama adalah yang paling tidak glamor dan justru mengerjakan sebagian besar pekerjaan. Kumpulkan contoh instruksi yang dipasangkan dengan respons yang baik, lalu lanjutkan training pada contoh-contoh itu dengan loss yang persis sama dari Bab 8 — memprediksi token berikutnya — tetapi hanya pada bagian respons. Ini adalah supervised fine-tuning, atau SFT.
Tidak ada hal baru yang diajarkan tentang bahasa. Yang diajarkan adalah sebuah format: bahwa teks dengan bentuk ini diikuti oleh teks dengan bentuk itu, lalu ia berhenti. Lihat lagi kegagalan base model tadi. Ia menjawab pertanyaan pada kalimat pertama lalu tidak bisa berhenti, karena tidak ada apa pun dalam training-nya yang pernah menandai akhir sebuah respons. Berhenti adalah perilaku yang dipelajari.
Itu juga alasan model perlu diberi tahu di mana batas-batasnya, dan itulah fungsi 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|> dan <|im_end|> itu adalah token nyata di vocabulary, ditambahkan sebelum fine-tuning, dan model melihat jutaan token itu persis di posisi-posisi ini. Dari situlah ia tahu giliran siapa yang sedang berlangsung dan di mana sebuah giliran berakhir.
Lewati template dan berikan pertanyaan polos ke model, maka kamu memberinya sequence yang tidak pernah ia lihat saat training. Diukur, model yang sama, pertanyaan yang sama, greedy decoding yang sama:
Tanpa template — string mentah 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]Dengan template:
The capital of France is Paris.Jawabannya benar di keduanya, tetapi tanpa marker model mulai melenceng menulis Python untuk memeriksa dirinya sendiri, karena prompt yang diterimanya tidak mirip dengan apa pun yang digunakan untuk fine-tuning. Ini penyebab paling umum dari “model jadi lebih bodoh saat saya memanggilnya langsung”: template bukan dekorasi di sekitar model, template adalah bagian dari model, dan template yang salah adalah degradasi diam-diam tanpa error yang menyertainya.
Tahap dua, dan masalah yang ingin diselesaikannya
Tautan ke bagian: Tahap dua, dan masalah yang ingin diselesaikannyaSFT punya batas, dan batasnya adalah data. Untuk melakukan fine-tuning pada sebuah demonstrasi, kamu perlu seseorang menulis respons ideal — dan untuk sebagian besar pertanyaan menarik, menulis jawaban yang bagus itu sulit, lambat, mahal, dan menghasilkan tepat satu jawaban yang kualitasnya tidak bisa kamu verifikasi.
Yang dikuasai manusia adalah perbandingan. Diberi dua respons, seorang anotator bisa dengan andal mengatakan mana yang lebih baik dalam beberapa detik, tanpa mampu menghasilkan salah satunya. Fakta inilah yang menjadi dasar seluruh tahap kedua, dan inilah bagian yang paling sering dijelaskan terbalik:
Manusia tidak menulis jawaban. Mereka memberi peringkat pada pasangan.
Jadi datanya berupa pasangan — sebuah prompt, dua respons, dan mana yang menang. Itu tidak bisa dimasukkan ke next-token loss, karena tidak ada sequence target. Ia membutuhkan mesin yang berbeda.
Reward model, dan apa yang sebenarnya dipelajarinya
Tautan ke bagian: Reward model, dan apa yang sebenarnya dipelajarinyaKamu tidak bisa meminta manusia memberi skor pada setiap respons selama training — itu berarti jutaan penilaian. Jadi kamu melatih model untuk meniru manusia: sebuah reward model yang menerima respons dan mengembalikan skalar.
Melatihnya dari perbandingan memakai hasil dari tahun 1952. Model Bradley–Terry2 mengatakan bahwa jika dua item punya kekuatan laten, probabilitas salah satunya mengalahkan yang lain adalah fungsi logistik dari selisihnya. Balikkan itu dan ia menjadi loss: jika manusia lebih menyukai daripada , maksimalkan
yang dalam kode adalah seluruh loop training:
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean() Perhatikan apa yang tidak pernah dilihat model: skor absolut. Ia hanya pernah mempelajari selisih, persis seperti isi datanya.
Sekarang bagian yang layak diukur. Reward model mempelajari apa yang diberi reward oleh anotator, dan anotator adalah manusia. Berikut simulasi di mana kualitas sebenarnya dari sebuah respons hanya bergantung pada apakah ia berguna dan benar — panjang tidak bernilai apa pun — tetapi anotator simulasi punya preferensi ringan pada jawaban yang lebih panjang saat semua hal lain berdekatan, sebuah bias manusia yang terdokumentasi dengan baik. Latih reward model pada 2.000 perbandingan dan baca bobotnya:
| bias panjang dari anotator | bobot yang dipelajari pada berguna | pada benar | pada panjang |
|---|---|---|---|
| 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 bekerja dengan sempurna. Ia dengan setia mempelajari preferensi yang ditunjukkan kepadanya — termasuk bagian dari preferensi itu yang tidak ada hubungannya dengan kualitas. Reward model bukan ukuran kebaikan; ia adalah ukuran dari apa yang dipilih anotator, dan setiap bias dalam kumpulan anotasi sekarang menjadi koefisien dalam fungsi terdiferensiasi yang sebentar lagi akan dioptimalkan oleh model yang jauh lebih besar.
Reward hacking, diukur
Tautan ke bagian: Reward hacking, diukurIni membawa kita ke apa yang terjadi saat kamu mengoptimalkannya. Beri policy anggaran upaya tetap untuk dibelanjakan di seluruh properti respons, dengan asimetri yang realistis: menjadi berguna dan benar itu mahal, dan menjadi lebih panjang itu murah — kamu cukup terus menulis.
Reward per unit upaya, untuk model yang dilatih di atas: berguna 8,26, benar 8,31, panjang 31,70. Panjang membayar hampir empat kali lebih baik daripada kebenaran, bukan karena reward model rusak, tetapi karena panjang itu murah.
Optimalkan terhadap reward itu dan perhatikan kedua angkanya:
| skor reward model | kualitas sebenarnya | panjang yang dihasilkan | |
|---|---|---|---|
| policy awal | 12,588 | 0,974 | 3,365 |
| setelah optimisasi | 31,696 | 0,000 | 12,497 |
Reward naik 2,5 kali lipat. Hal yang seharusnya diukur oleh reward turun menjadi nol. Policy menemukan bahwa ia bisa mendapat skor sangat tinggi dengan menulis panjang lebar tanpa mengatakan apa pun, dan tidak ada bagian dari loop training yang punya cara untuk menyadarinya, karena reward model adalah definisi baik di dalam loop.
Inilah reward hacking, dan jika kamu pernah bertanya-tanya mengapa chat model begitu bertele-tele, tabel ini adalah bagian besar dari jawabannya.
Apa yang sebenarnya dibeli oleh penalti KL
Tautan ke bagian: Apa yang sebenarnya dibeli oleh penalti KLPertahanan standar adalah memberi penalti pada policy karena bergerak terlalu jauh dari titik awalnya, mengukur jarak dengan divergensi KL dari Bab 4:
Referensi adalah model SFT — policy sebelum tahap reinforcement. Klaimnya, ini mencegah model mengembara ke perilaku degeneratif. Mari kita lihat seberapa banyak klaim itu bertahan saat diukur. Setup yang sama, dengan sweep :
| reward | kualitas sebenarnya | panjang | 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 |
| model referensi saja | 9,162 | 1,791 | 0,687 | 0 |
Baca baris terakhir dibandingkan dengan sisanya. Pada dan , penalti tidak melakukan apa pun: reward bernilai jauh lebih besar daripada KL sehingga optimiser membayar denda dan tetap melakukan hacking. Antara 5 dan 15, perilakunya berayun. Dan pada , kualitas sebenarnya naik kembali ke 1,769 — yang masih di bawah 1,791 milik model referensi sebelum semua ini dimulai.
Satu catatan sebelum angka itu dikutip di mana pun: 1,791 pada baris terakhir dan 0,974 yang diberikan tabel pertama kepada policy awal adalah dua pengukuran berbeda dari model pra-RL yang sama, diambil oleh dua eksperimen secara terpisah. Bandingkan baris dalam satu tabel, jangan pernah lintas tabel — kesimpulan tiap tabel berdiri pada barisnya sendiri, dan tidak satu pun bergantung pada baseline tabel lain.
Jadi ringkasan yang jujur bukan “penalti KL mencegah reward hacking”. Melainkan:
Penalti KL tidak mencegah reward hacking. Ia membatasi seberapa jauh policy bisa bergerak dari referensi — dan karena kegagalannya membutuhkan pergerakan, itu membantu. Tetapi ia adalah tali kekang, bukan korektif: pada rendah, tali itu putus, dan pada tinggi, kamu mendapatkan kembali model referensi dan seluruh tahap mahal itu tidak membeli apa-apa.
Rentang yang berguna sempit, lokasinya bergantung pada reward model, dan tidak ada cara untuk menemukannya selain melihat. Itulah mengapa model referensi harus bagus — KL adalah lantai pada kualitas referensi, bukan plafon atas kegagalan — dan ini adalah bagian besar dari alasan tahap ini sulit dalam praktik, bukan dalam prinsip.
PPO, dan mengapa DPO memakannya
Tautan ke bagian: PPO, dan mengapa DPO memakannyaAlgoritme yang membuat ini bekerja pada scale adalah Proximal Policy Optimization.3 Dalam satu paragraf: ia memperkirakan advantage dari tiap respons, memperbarui policy untuk meningkatkan probabilitas respons di atas baseline, dan membatasi ukuran setiap update tunggal agar estimasi advantage yang besar tidak menghancurkan policy dalam satu langkah. Diterapkan pada model bahasa4, ini berarti menjaga empat model aktif sekaligus — policy, referensi, reward model, dan critic — dengan policy yang terus menghasilkan sampel baru sepanjang training.
Ia bekerja, menghasilkan InstructGPT dan semua turunannya, dan benar-benar sulit: empat model di memori, sampling di dalam loop training, dan reputasi instabilitas yang memang pantas. Berpura-pura kamu bisa mengimplementasikannya dalam satu posting blog akan tidak jujur, jadi bab ini tidak melakukannya.
Penggantinya untuk sebagian besar tujuan lahir dari satu pengamatan. Objective yang diregularisasi KL di atas punya policy optimal berbentuk closed-form, dan ekspresi itu bisa dibalik: reward bisa ditulis dalam bentuk policy optimal dan referensi. Mensubstitusikannya kembali ke loss Bradley–Terry membuat reward model menghilang sepenuhnya. Yang tersisa adalah supervised loss pada pasangan preferensi — tanpa sampling, tanpa critic, tanpa reward model, dua model di memori alih-alih empat.
Itulah Direct Preference Optimization,5 dan ia dua baris:
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) Baca apa yang dikatakannya. Kuantitas yang didorong naik adalah seberapa lebih policy menyukai pemenang dibandingkan referensi, dikurangi seberapa lebih ia menyukai pecundang. Referensi bukan penalti yang ditempel belakangan — ia ada di dalam loss, itulah sebabnya DPO tidak membutuhkan term KL terpisah.
Properti yang paling penting ada pada gradien. Evaluasi loss dan gradiennya pada pasangan yang sama dalam lima state policy berbeda:
| state policy | loss | magnitudo gradien |
|---|---|---|
| sudah sangat menyukai pemenang | 0,5130 | 0,0401 |
| sudah menyukainya, lemah | 0,6685 | 0,0488 |
| identik dengan referensi | 0,6931 | 0,0500 |
| menyukai pecundang | 0,7981 | 0,0550 |
| sangat menyukai pecundang | 1,0055 | 0,0634 |
Gradien membesar saat policy semakin salah. Pasangan yang sudah ditangani model hampir tidak berkontribusi; pasangan yang dipahami terbalik mendominasi update. DPO membobotkan setiap contoh berdasarkan seberapa salah policy saat ini, secara otomatis, tanpa scheduling — dan self-weighting itulah mekanisme yang mengerjakan pekerjaan yang sebelumnya dilakukan estimasi advantage dan critic pada PPO. (Loss pada baris ketiga persis , yaitu jangkar untuk memeriksa implementasi apa pun: policy yang identik dengan referensinya belum mempelajari apa pun dan seharusnya berada di .)
GRPO6 mengambil jalur berbeda keluar dari masalah yang sama. Ia mempertahankan loop sampling tetapi menghapus critic: alih-alih melatih model untuk memprediksi baseline, ia mengambil sampel satu grup respons untuk prompt yang sama dan langsung memakai mean reward grup itu sebagai baseline. Advantage sebuah respons adalah seberapa jauh ia lebih baik daripada saudara-saudaranya. Ini menukar satu model utuh dengan batch yang lebih besar, dan itulah yang membuat training dengan reward yang dapat diverifikasi — topik Bab 12 — menjadi praktis.
Tampilkan detail
Tiga bagian lain dari lanskap post-training, secara singkat.
RLAIF dan Constitutional AI.7 Anotator tidak harus manusia. Beri model satu set prinsip tertulis dan minta ia mengkritik serta merevisi output-nya sendiri, atau memilih di antara dua kandidat, dan kamu punya dataset preferensi yang diproduksi dengan kecepatan dan biaya mesin. Keberatan yang jelas — model sedang menilai PR-nya sendiri — nyata, dan jawaban jujurnya adalah bahwa ini bekerja lebih baik daripada kedengarannya karena menilai lebih mudah daripada menghasilkan, asimetri yang sama yang menjadi sandaran seluruh bab ini.
LIMA, dan betapa sedikitnya data yang dibutuhkan.8 Seribu demonstrasi yang dikurasi dengan cermat menghasilkan assistant yang kompetitif. Penjelasan yang diajukan adalah bahwa pretraining sudah memasang pengetahuan dan formatnya, dan post-training hanya perlu memilih perilaku model yang sudah ada untuk dimunculkan. Jika itu benar, kualitas data post-training mengalahkan kuantitas — dan perilaku bidang ini sejak saat itu menunjukkan orang-orang mempercayainya.
LoRA dan QLoRA.910 Fine-tuning setiap bobot dari model besar membutuhkan memori untuk bobot, gradiennya, dan state optimiser — enam belas byte per parameter dari Bab 10, di atas dua rata-rata yang dibangun manual oleh Bab 6 — pada scale yang membutuhkan cluster. LoRA membekukan bobot asli dan melatih sepasang matriks low-rank di sampingnya, memangkas parameter yang dapat dilatih beberapa order magnitudo; QLoRA juga menguantisasi base yang dibekukan ke 4 bit. Keduanya dibahas di sini sebagai teknik. Apakah fine-tuning adalah hal yang tepat untuk menghabiskan uang sama sekali adalah pertanyaan berbeda, dan itu milik Bab 20.
Alignment tax, dan pertanyaan yang belum dijawab siapa pun
Tautan ke bagian: Alignment tax, dan pertanyaan yang belum dijawab siapa punDua hal untuk dibawa ke depan.
Yang pertama adalah bahwa tahap ini punya biaya, dan biaya itu muncul sebagai kapabilitas. Model sering kali menjadi lebih buruk secara terukur pada beberapa tugas benchmark setelah alignment training — alignment tax — karena objective berubah: respons yang aman, berhati-hati, dan diformat dengan baik tidak selalu respons yang memaksimalkan akurasi. Sebagian celah itu sudah direkayasa hingga hilang, dan sebagian lainnya adalah trade-off nyata, bukan bug yang harus diperbaiki.
Yang kedua adalah pertanyaan yang disembunyikan oleh kata aligned. Selaras dengan siapa? Rantainya adalah: sebuah perusahaan menulis pedoman, kontraktor menafsirkannya, perbandingan mereka melatih reward model, reward model membentuk policy, dan policy menjawab pertanyaan dari seseorang yang tidak melihat semua itu. Setiap mata rantai adalah pilihan yang dibuat oleh orang-orang tertentu, dan tidak ada algoritme dalam bab ini yang punya pendapat tentang apakah pilihan-pilihan itu baik.
Itu bukan hiasan retoris. Itu alasan konkret mengapa dua frontier model menolak permintaan yang berbeda, mengapa model yang sama berubah pikiran di antara versi, dan mengapa “aligned” adalah deskripsi atas sebuah proses, bukan properti dari sebuah artefak. Matematika dalam bab ini sudah mapan. Bagian itu belum.
Ke mana ini berikutnya
Tautan ke bagian: Ke mana ini berikutnyaPost-training mengajari model untuk menjawab. Ia tidak mengajari model untuk berpikir sebelum menjawab, dan keduanya berbeda dengan cara yang ternyata bisa dilatih.
Bab 12 membahas apa yang terjadi ketika kamu membiarkan model menghabiskan lebih banyak komputasi pada pertanyaan sulit saat waktu menjawab, bukan saat waktu training — chain of thought, reinforcement learning dari reward yang dapat diverifikasi, dan alasan model yang menunjukkan pekerjaannya bukan sekadar menjelaskan dirinya, melainkan menghitung dengan cara berbeda. Bab itu juga melunasi utang dari bab ini: GRPO muncul di dalamnya, mengerjakan tugas yang dulu dilakukan critic PPO, pada reward yang tidak membutuhkan anotator sama sekali karena sebuah proof bisa diperiksa atau tidak.
Sumber dan metode
Tautan ke bagian: Sumber dan metodeGenerasi di atas berasal dari gpt2 dan Qwen/Qwen2.5-0.5B-Instruct dengan greedy decoding, jadi hasilnya bereproduksi persis. Bab 11 dari Hugging Face LLM Course menjelaskan SFT dan DPO dengan trl dan peft jika kamu ingin menjalankan hal nyata alih-alih simulasi; bab 7 dari Build a Large Language Model (From Scratch) karya Sebastian Raschka mengimplementasikan instruction fine-tuning dari awal hingga akhir tanpa library.
Referensi
Tautan ke bagian: Referensi-
Sutton, R. S. dan Barto, A. G. Reinforcement Learning: An Introduction, edisi ke-2 (MIT Press, 2018). Delegasi ini disengaja: kotak kosakata di atas adalah subset terkecil yang bisa dipakai, dan topik aslinya adalah sebuah buku. ↩
-
Bradley, R. A. dan Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), hlm. 324–345 (1952). Model perbandingan berpasangan di balik setiap reward model yang digunakan hari ini. ↩
-
Schulman, J., Wolski, F., Dhariwal, P., Radford, A. dan Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017). ↩
-
Ouyang, L. dkk. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — paper yang membuat resep tiga tahap menjadi standar. Didahului oleh Christiano dkk. (arXiv:1706.03741), yang memperkenalkan pembelajaran reward model dari perbandingan manusia, dan Stiennon dkk. (arXiv:2009.01325), yang menerapkannya pada peringkasan. ↩
-
Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D. dan Finn, C. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290 (2023). Derivasi yang menghapus reward model ada di bagian 4 dan layak dibaca utuh; ia lebih pendek daripada reputasinya. ↩
-
Shao, Z. dkk. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). Memperkenalkan GRPO di bagian 4.1. ↩
-
Bai, Y. dkk. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022). ↩
-
Zhou, C. dkk. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). ↩
-
Hu, E. J. dkk. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021). ↩
-
Dettmers, T., Pagnoni, A., Holtzman, A. dan Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314 (2023). ↩