От базов модел до асистент: SFT, RLHF, DPO и GRPO
Защо pretrained модел само довършва текст — и как post-training го превръща в асистент чрез SFT, reward models, DPO и GRPO.
На тази страница
Помолете GPT-2 — компетентно 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: при даден текст да произвежда правдоподобно продължение. В интернет ред като Напиши хайку за морето. често е последван от проза за морето, а изречение, което току-що се е появило, е необичайно вероятно да се появи отново. Моделът е великолепен предиктор на следващ token и безполезен асистент.
Сега същата заявка към модел, изграден по същия начин — Qwen2.5, половин милиард параметъра, четири пъти по-голям от GPT-2 по-горе и все още миниатюрен по стандартите на 2026 — след етапите на обучение, за които е тази глава:
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.Четири пъти повече параметри не учат модела да спира да говори. Разликата между тези два резултата не е мащаб, не е архитектура и не е обем данни. Тя е post-training: втори етап, с порядъци по-малък от pretraining, който взема предиктор на текст и го превръща в нещо, което отговаря.
Етап първи: да му покажем как изглежда отговорът
Връзка към раздела: Етап първи: да му покажем как изглежда отговорътПървата стъпка е най-малко бляскава и върши по-голямата част от работата. Събират се примери от инструкции, съчетани с добри отговори, и обучението продължава върху тях със същата загуба от Глава 8 — предсказване на следващия token — но само върху частта с отговора. Това е supervised fine-tuning, или SFT.
Не се преподава нищо ново за езика. Това, което се преподава, е формат: че текст с тази форма е последван от текст с онази форма, а после той спира. Вижте отново провала на базовия модел. Той отговори на въпроса в първото изречение и после не можа да спре, защото нищо в обучението му никога не е маркирало края на отговор. Спирането е научено поведение.
Затова моделът трябва да получи и указание къде са границите — именно това е 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|>assistantТези маркери <|im_start|> и <|im_end|> са реални token в речника, добавени преди fine-tuning, и моделът е видял милиони от тях точно на тези позиции. Така той знае чий ред е и къде свършва един ход.
Пропуснете template и подайте на модела гол въпрос — така му давате последователност, която не е виждал по време на обучение. Измерено, същият модел, същият въпрос, същото greedy decoding:
Без template — суровият низ 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.Отговорът е правилен и в двата случая, но без маркерите моделът се отклонява към писане на Python, за да се провери сам, защото prompt, който е получил, не прилича на нищо, върху което е бил fine-tuned. Това е най-честата причина за „моделът стана по-глупав, когато го извиках директно“: template не е декорация около модела, той е част от модела, а грешен template е тиха деградация без прикачена грешка.
Етап втори и проблемът, който той решава
Връзка към раздела: Етап втори и проблемът, който той решаваSFT има таван, а таванът са данните. За да правите fine-tuning върху демонстрация, някой трябва да напише идеалния отговор — а за повечето интересни въпроси писането на добър отговор е трудно, бавно, скъпо и произвежда точно един отговор, чието качество не можете да проверите.
Това, в което хората са добри, е сравнението. При два показани отговора анотатор може надеждно да каже кой е по-добър за няколко секунди, без да може сам да произведе който и да е от тях. Това е фактът, върху който е изграден целият втори етап, и това е частта, която повечето обяснения обръщат наопаки:
Хората не пишат отговорите. Те класират двойки.
Следователно данните са двойки — prompt, два отговора и кой е спечелил. Това не може да се включи в загуба за следващ token, защото няма целева последователност. Нужна е различна машина.
Reward model и какво всъщност научава
Връзка към раздела: Reward model и какво всъщност научаваНе можете да карате човек да оценява всеки отговор по време на обучение — това са милиони преценки. Затова обучавате модел да имитира хората: reward model, който приема отговор и връща скалар.
Обучението му от сравнения използва резултат от 1952 г. Моделът Bradley–Terry2 казва, че ако два елемента имат латентни сили, вероятността единият да победи другия е логистичната функция на разликата им. Обърнете това и то става загуба: при положение че човек е предпочел пред , максимизирайте
което в код е целият цикъл на обучение:
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean() Забележете какво моделът никога не вижда: абсолютна оценка. Той винаги научава само разлики, което е точно това, което съдържат данните.
Сега частта, която си струва да бъде измерена. Reward model научава какво са възнаграждавали анотаторите, а анотаторите са хора. Ето симулация, в която истинското качество на отговор зависи само от това да е полезен и правилен — дължината не струва нищо — но симулираният анотатор има леко предпочитание към по-дълги отговори, когато всичко друго е близко, което е добре документиран човешки bias. Обучете reward model върху 2000 сравнения и прочетете теглата му:
| bias към дължина на анотатора | научено тегло върху полезен | върху правилен | върху дължина |
|---|---|---|---|
| 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 работи перфектно. Той вярно е научил предпочитанията, които са му били показани — включително онази част от тези предпочитания, която няма нищо общо с качеството. Reward model не е мярка за добро; той е мярка за това какво са избрали анотаторите, а всеки bias в пула от анотации вече е коефициент в диференцируема функция, срещу която много по-голям модел скоро ще оптимизира.
Reward hacking, измерен
Връзка към раздела: Reward hacking, измеренТова ни води до въпроса какво става, когато оптимизирате срещу него. Дайте на политиката фиксиран бюджет от усилие, който да разпредели между свойствата на отговора, с реалистична асиметрия: да бъдеш полезен и правилен е скъпо, а да бъдеш по-дълъг е евтино — просто продължаваш да пишеш.
Награда на единица усилие за модела, обучен по-горе: полезен 8,26, правилен 8,31, дължина 31,70. Дължината плаща почти четири пъти по-добре от правилността не защото reward model е счупен, а защото е евтина.
Оптимизирайте срещу тази награда и наблюдавайте и двете числа:
| оценка на reward model | истинско качество | произведена дължина | |
|---|---|---|---|
| начална политика | 12.588 | 0.974 | 3.365 |
| след оптимизация | 31.696 | 0.000 | 12.497 |
Наградата се повиши с фактор 2,5. Нещото, което наградата трябваше да измерва, падна до нула. Политиката откри, че може да получава огромно високи оценки, като пише надълго и не казва нищо, а никоя част от цикъла на обучение нямаше начин да забележи, защото reward model е дефиницията за добро вътре в цикъла.
Това е reward hacking и ако някога сте се чудили защо chat моделите са толкова многословни, тази таблица е голяма част от отговора.
Какво всъщност купува KL penalty
Връзка към раздела: Какво всъщност купува KL penaltyСтандартната защита е да се наказва политиката, ако се отдалечи твърде много от началната си позиция, като разстоянието се измерва с KL дивергенцията от Глава 4:
Референцията е SFT моделът — политиката преди reinforcement етапа. Твърдението е, че това предотвратява отклоняването на модела към дегенеративно поведение. Нека видим каква част от това твърдение оцелява при измерване. Същата постановка, с обхождане на :
| награда | истинско качество | дължина | 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 |
| само референтният модел | 9.162 | 1.791 | 0.687 | 0 |
Прочетете последния ред спрямо останалите. При и наказанието не прави нищо: наградата струва толкова повече от KL, че оптимизаторът плаща глобата и хаква въпреки това. Между 5 и 15 поведението се преобръща рязко. А при истинското качество се е върнало до 1,769 — което е все още под 1,791, които референтният модел е имал, преди всичко това да започне.
Едно уточнение, преди някой да цитира това число: 1,791 от последния ред и 0,974, което първата таблица дава на началната политика, са две различни измервания на един и същ модел преди RL, направени отделно от двата експеримента. Сравнявайте редове вътре в една таблица, никога между таблици — заключението на всяка таблица стои върху собствените ѝ редове и нито едно не зависи от baseline на другата.
Така че честното обобщение не е „KL penalty предотвратява reward hacking“. То е:
KL penalty не предотвратява reward hacking. Той ограничава колко далеч политиката може да се отмести от референцията — и понеже провалът изисква отместване, това помага. Но това е каишка, не корекция: при ниско каишката се къса, а при високо получавате референтния модел обратно и целият скъп етап не е купил нищо.
Полезната зона е тясна, местоположението ѝ зависи от reward model и няма начин да бъде намерена освен чрез гледане. Затова референтният модел трябва да е добър — KL е под на качеството на референцията, не таван на провала — и това е голяма част от причината този етап да е труден на практика, а не по принцип.
PPO и защо DPO го изяде
Връзка към раздела: PPO и защо DPO го изядеАлгоритъмът, който направи това работещо в мащаб, е Proximal Policy Optimization.3 В един абзац: той оценява advantage на всеки отговор, обновява политиката така, че да увеличи вероятността на отговори над baseline, и ограничава размера на всяко единично обновяване, за да не може голяма оценка на advantage да унищожи политиката с една стъпка. Приложено към езикови модели4, това означава да се държат четири модела в игра едновременно — политиката, референцията, reward model и критик — като политиката генерира нови проби през цялото обучение.
Работи, произведе InstructGPT и всичко, което произлезе от него, и е действително трудно: четири модела в паметта, семплиране в цикъла на обучение и заслужена репутация за нестабилност. Да се преструваме, че може да бъде имплементиран в блог пост, би било нечестно, затова тази глава не го прави.
Това, което го замени за повечето цели, дойде от едно наблюдение. KL-регуляризираната цел по-горе има оптимална политика в затворена форма и този израз може да бъде обърнат: наградата може да бъде записана чрез оптималната политика и референцията. Замяната ѝ обратно в загубата на Bradley–Terry кара reward model да изчезне изцяло. Остава supervised загуба върху двойки предпочитания — без семплиране, без критик, без reward model, два модела в паметта вместо четири.
Това е Direct Preference Optimization,5 и се състои от два реда:
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) Прочетете какво казва. Количеството, което се избутва нагоре, е колко повече политиката предпочита победителя спрямо референцията, минус колко повече предпочита губещия. Референцията не е наказание, завинтено отгоре след това — тя е вътре в загубата, затова DPO не се нуждае от отделен KL член.
Свойството, което има най-голямо значение, е в gradient. Оценете загубата и нейния gradient върху същата двойка в пет различни състояния на политиката:
| състояние на политиката | загуба | големина на gradient |
|---|---|---|
| вече силно предпочита победителя | 0.5130 | 0.0401 |
| вече го предпочита, слабо | 0.6685 | 0.0488 |
| идентична с референцията | 0.6931 | 0.0500 |
| предпочита губещия | 0.7981 | 0.0550 |
| силно предпочита губещия | 1.0055 | 0.0634 |
Gradient расте, когато политиката греши повече. Двойките, с които моделът вече се справя, допринасят почти нищо; двойките, които обръща наопаки, доминират обновяването. DPO претегля всеки пример според това колко грешна е политиката в момента, автоматично, без scheduling — и това самопретегляне е механизмът, който върши работата, която оценката на advantage и критикът вършеха в PPO. (Загубата на третия ред е точно , което е котвата за проверка на всяка имплементация: политика, идентична с референцията си, не е научила нищо и трябва да стои на .)
GRPO6 поема по различен път навън от същия проблем. Той запазва цикъла на семплиране, но изтрива критика: вместо да обучава модел да предсказва baseline, той семплира група от отговори към същия prompt и използва средната награда на групата директно като baseline. Advantage на един отговор е колко по-добър е бил от своите „братя и сестри“. Това заменя цял модел с по-голям batch и именно то направи практично обучението с проверима награда — темата на Глава 12.
Покажи подробности
Още три части от пейзажа на post-training, накратко.
RLAIF и Constitutional AI.7 Анотаторът не е задължително да бъде човек. Дайте на модел писмен набор от принципи и го помолете да критикува и преработва собствените си резултати или да избира между двама кандидати, и имате набор от данни с предпочитания, произведен със скоростта и цената на машина. Очевидното възражение — моделът си оценява собственото домашно — е реално, а честният отговор е, че работи по-добре, отколкото звучи, защото оценяването е по-лесно от генерирането; това е същата асиметрия, върху която стъпва цялата глава.
LIMA и колко малко данни са нужни.8 Хиляда внимателно подбрани демонстрации произведоха конкурентен асистент. Предложеното обяснение е, че pretraining вече е инсталирал знанието и формата, а post-training трябва само да избере кои от съществуващите поведения на модела да изведе на повърхността. Ако това е вярно, качеството на данните за post-training доминира количеството — а поведението на областта оттогава насам подсказва, че хората вярват в това.
LoRA и QLoRA.910 Fine-tuning на всяко тегло на голям модел изисква памет за теглата, техните gradients и състоянието на оптимизатора — шестнадесетте байта на параметър от Глава 10, върху двете средни стойности, които Глава 6 построи на ръка — в мащаб, който изисква клъстер. LoRA замразява оригиналните тегла и обучава нискорангова двойка матрици покрай тях, като намалява обучаемите параметри с порядъци; QLoRA допълнително квантизира замразената база до 4 бита. И двете са разгледани тук като техника. Дали fine-tuning изобщо е правилното нещо, за което да се харчат пари, е друг въпрос, и той е на Глава 20.
Alignment tax и въпросът, на който никой не е отговорил
Връзка към раздела: Alignment tax и въпросът, на който никой не е отговорилДве неща, които да вземете напред.
Първото е, че този етап има цена, и тя се проявява като способност. Моделите често стават измеримо по-лоши на някои benchmark задачи след alignment обучение — alignment tax — защото целта се е променила: отговор, който е безопасен, предпазлив и добре форматиран, не винаги е отговорът, който максимизира точността. Част от тази разлика е инженерно премахната, а част от нея е реален компромис, не бъг за поправяне.
Второто е въпросът, който думата aligned скрива. Подравнен с кого? Веригата е: компания пише насоки, изпълнители ги тълкуват, техните сравнения обучават reward model, reward model оформя политика, а политиката отговаря на въпрос от някого, който не е видял нищо от това. Всяка връзка е избор, направен от конкретни хора, и нито един от алгоритмите в тази глава няма мнение дали тези избори са добри.
Това не е реторична украса. Това е конкретната причина два frontier модела да отказват различни заявки, същият модел да променя мнението си между версии и „aligned“ да бъде описание на процес, а не свойство на артефакт. Математиката в тази глава е установена. Тази част — не.
Накъде отиваме след това
Връзка към раздела: Накъде отиваме след товаPost-training научи модела да отговаря. Не го научи да мисли преди да отговори, а двете са различни по начин, който се оказва обучаем.
Глава 12 е за това какво се случва, когато позволите на модел да изразходва повече изчисление върху труден въпрос по време на отговаряне, а не по време на обучение — chain of thought, reinforcement learning от проверими награди и причината модел, който показва работата си, не просто се обяснява, а изчислява различно. Тя също изплаща дълга от тази глава: GRPO присъства там, вършейки работата, която преди вършеше критикът на PPO, върху награди, които не се нуждаят от никакъв анотатор, защото едно доказателство или се проверява, или не.
Източници и метод
Връзка към раздела: Източници и методГенерациите по-горе идват от gpt2 и Qwen/Qwen2.5-0.5B-Instruct с greedy decoding, затова се възпроизвеждат точно. Глава 11 от Hugging Face LLM Course преминава през SFT и DPO с trl и peft, ако искате да стартирате истинското нещо вместо симулацията; глава 7 от Build a Large Language Model (From Scratch) на Sebastian Raschka имплементира instruction fine-tuning от край до край без библиотека.
Препратки
Връзка към раздела: Препратки-
Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). Делегирането е умишлено: речниковата рамка по-горе е най-малкото използваемо подмножество, а истинската тема е книга. ↩
-
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). Моделът за двойкови сравнения под всеки 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 — статията, която направи триетапната рецепта стандарт. Предшествана от Christiano et al. (arXiv:1706.03741), която въведе обучението на reward model от човешки сравнения, и Stiennon et al. (arXiv:2009.01325), която го приложи към обобщаване. ↩
-
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). Извеждането, което премахва reward model, е в раздел 4 и си струва да се прочете изцяло; по-кратко е от репутацията си. ↩
-
Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). Въвежда GRPO в раздел 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). ↩