Поясненне тонкага налаштавання GRPO: Навчанне локальнага LLM разважаць.
GRPO адыяе крытыка PPO і вучыцца на адналожэннях з групамі. Разбор пяці основных велічын, функцый награды і короткага скрыпту трэніравання Unsloth і TRL.
Модэлі, які фокусуюцца на логічных выводах, такія як DeepSeek-R1, прывернулі веліку увагу, і зараз багато людзей хочаць такое ж падчыненне ў маленькай модэлі, яюя можаць запускаць самі. Часта ўпамінаемая тут тэхніка — градуальная наладканне GRPO. Наладканне пад наглядам (SFT) выучае модэль наследаваць шаблоны з прыкладоў. Групавая оптымізацыя страцэгій (GRPO) выкарыстоўвае навчанне з падкрэпленням, каб спрабаваць направіць модэль да рашэнняў, якія дзейсна работаюць, што ёсць бліжэй да навучэння яе думаць, чым проста гаварыць.
У этай статыце расказваецца пра месца GRPO сярод методаў RLHF, што значаюць яе пяць основных параметраў, і як з іх ствараюцца калькі дзесятка рэядоў коду для навчання.
Месца GRPO сярод методаў наладкання пад прыязні
RLHF – підсілення навчання на основі зворотного зв’язку ад людэй – найкрашчэ розглядаты як загальній тэрмін. PPO, GRPO і DPO – гэта рызні оптымізаторы, спрамовані на досягнення одніеі меты: прыведэння мадэлі у відповіднісць із тым, што бажаюць корыстувачы.
Для параўнання можна вікорыстаты кулінарыю. RLHF – гэта ідэя вдосконалення страві шляхом пробування і корэкціі. PPO – гэта старышый, більш об’емній підхід, які потрэбуе другоі мадэлі (крытыка) і велікоі колькасці памяці GPU. GRPO – гэта новішый, більш ефектывній підхід, які вікорыстовуе параўнання адказаў для економіі памяці і усувае необхіднісць у крытыку.
Цыкл навчання з підсіленням
У загальному віпадку навчання з підсіленням відбуваецца у цыклі: агент бачыць стан, обірае дыю, серэдовішчэ змінюецца, надходыць вінагорода і формуецца новій стан. Колі метод PPO (Proximal Policy Optimization) застосовувався до мовніх мадэляў, сама мовна мадэль ставала агентом, а працэс включав тры компоненты:
- Палітыка генеравання, яяя якім ёсць модэль, якая ў настоўчы час трэнуецца
- Палітыка-аспэкт, якая ўособлівае первісную модэль, залучаную у стан замарожання
- Модэль значэння, якая ацэнюе сярэдню награду
Модэль награды оцэнюе выходы, а трэнаванне стараецца падняць гэтыя балы.
PPO выкорыстоўвае падход актар-крытык, што значыць, што трэнуюцца два аддзельныя сеткі. Актарам ёсць сама LLM. Крытыкам ёсць сетка значэння падобнага розмеру, якая прагнозуе награду, яку павінен зарабіць адпаведны адпаведзень. Нявіскаць оба значна падваічвае патрэбную памяць падчас трэнавання.
У GRPO няма крытыка. З-за ўсунення яго вікорыстоўвання памяці зменшваецца прыблізна удвое. Для базовага варыянта GRPO генеруе групу адпаведзенняў на адной і той жа запіт, оцэнюе кожнае з іх і выкарыстоўвае сярэднюе значэння групы як аспэкт для адлічэння, якія адпаведзення былі лепшыя чы рэжэйшыя за іншыя.
DeepSeek прэдставіў метод GRPO у сваій статты DeepSeekMath 2024 года, а пазней гэты метод быў включаны ў DeepSeek-R1.
Пяць элементаў, якія лежачы за GRPO
Метод складаецца з пяці ідэй. Для кожной з іх мета — паспяшыць разумець, што яна мерыць і чаму была спраектавана так.
1. Спявазанне політык: насколькі змінілася думка мадэлі?
Гэта спявазанне паўставляе ў спалох верыгоднасць, якія апошней мадэль надае паводлу якой-небудзь адпаведzi, у пораўнанні з верыгоднасцямі, якія надавала паканальная мадэль: новая верыгоднасць адпаведzi y для запіту x, дзеленыя на старую.
Якшчо адмахнуцца ад сімвалів, гэта пытанне значыць: насколькі больш або меньш верагоднае ў тэперашні час мадэль даць гэтую адпаведзь, чым перад гэтым крокам навчання.
Уявіце сабе учню перад і пасля ночы павторэння. Дзеяныя адпаведзі цяпер здаюцца болей очвічнымі, а іншыя — менш. Гэта спявазанне фіксуе гэты зменшыць у впэўненасці.
- Значэнне большэе 1 значыць, што мадэль болей впэўнена ў сваёй адказе, чым раней.
- Значэнне меньшэе 1 значыць, што впэўненасць знізілася і мадэль пачынае адхіляцца ад гэтага адказу.
- Значэнне роўнае 1 значыць, што апдэйт нічога не змяніў для гэтага адказу.
Чаму гэта важна? У класычнай навучэнні пад керуванням падкрэпленням можна сказаць, што адказ з высокай наградой заслуговае на значны падых у верыгоднасці. Але гэта рызыкавана, каліж тычка занадта сільная можа заставіць мадэль рэзкаа змяніцца і пазбавіцься хорашага стылю працы толькі таму, што адзін адказ павезла. Гэты калячак функцыонуе як ліміт швайнасці. GRPO обмежвае велікія змяны, таму мадэль змінюецца паступова, а не хаотычна.
2. Серэдняя награда: які быў сярэжны бал для гэтага набору?
Серэдняя — гэта сума наград за групу з G адказоў, дазеленая на G. G — гэта колькасць адказоў, выбраных для аднаго запытання, і кожны адказ отрымае бал за дапамой модэлі наград.
Спадзяйце, вы прасіце мадэль рашыць матэматычную задачу і выбіраеце пяць адпаведзей з певным ступенем абэрантнасці. Аднай з яных ўсё правільна (награда 1,0), іншай — часткова правільна (0,5), а трэцяй — цалкам неправільная (0,0). Серэбра паказвае, насколькі добра мадэль справляецца з гэтай задачай у даны момент.
Саме роль, яку ўжоўвае GRPO, і робіць гэты метод прыемным. Для PPO быў неабходны крытык — другая сетка, чыя ўсё заведамства заключалася у прагнозаванні адначаковай награды, а ўчэнне яе было дорогім, вімагало много памяці і супакоўвалася багатымі памылкамі. GRPO запытаецца: чаму прагнозаваць сярэбра, калі яго можна вылічыць? Выбіранне групы і сярэднічае вылічэнне рэальных наград дае базовы показнік безкоштовна, без дадатковай сеткі і без марнавання памяці. Гэта і ёсць «група» у назве гэтага методу.
3. Стандартная дывергэнція: насколькі розпыленыя ўсе показнікі?
Стандартная адвякцыя паказывае, на які расстоек кожны рэндуванне знаходзіцца ад сярэжкі, вылучаючы квадратны коран сярэжкаванага квадратовага расстою. Калі сярэжка опісвае тыповую працёздатнасць, то гэта показывае адносовую стабільнасць.
Высокая значэнне означае, што рэспансы ўсюды: якіясь выключныя, а якіясь жахлівыя. Нізкая значэнне означае, што мадэль ўсё час дастае адпаведнага калітэта адказы.
Разглянем двух учняў. Учнік А павышае 90, 10, 95, 5 і 88, сярэжка — 57,6, з вельмі большым распрадам: чыстая нестабільнасць. Учнік Б павышае 58, 56, 60, 57 і 59, сярэжка — 58, з мінімальным распрадам: стабільная посерэднісць.
У GRPO адвякцыя выступае як нормалізатор. Калі рэспансы сільна разніцяюцца, разлікі между рэндуваннямі несу рэальную інфармацыю і прабачаюць большыя абнаўленні. Калі мадэль ужо стабільная, маленькія разлікі рэндуванняў можаць быць шумам, таму абнаўленні павінны быць абераглівыя.
4. Адвантаўга, залежная ад групы: чы рашэнне перамагае сярэдзіну групы?
Гэта ўсё сутнасць методу. Адвантаўга для рашэння i вырахоўваецца як разліка межа ўзнагароды для гэтага рашэння і сярэдньяга значэння групы, дзелёная стандартным адхіленнем групы. Гэта ператварае первасныя значэння узнагарод на стосункавы бал, які спрыяе навчанню.
Разліка паказвае, насколькі рашэнне крашчае або горшае за сярэднюе. Дзеленне паводлівае за ступенем распакоўкі значэнняў, таму балы можна пораўняваць між разнымі запітаннямі і на разных этапах навчання.
Уявіце оцэнку вельмі складнага экзамена, дзе сярэдняя оцэнка класу становіць 40 з 100. Учнік атрымуе 60 балоў. Як первасная оцэнка гэта здаецца сярэдняя, але стосова класу гэта на 20 балоў вышэ за сярэднюе, што ёсць чымалая успех. Адвантаўга працюе аднойчы, ігнаруючы абсалютныя значэння узнагарод і пераканваючыся, чы рашэнне перамагае тое, што мадэль зазвычай выдае для данага запіту.
Тры якосты робяць гэты метод корыстным.
- Няма крытыка. Адчыннае працэўніцтва PPO залежала ад таго, каб крытык оцаніў ачакваную награду. GRPO заменяе гаданні на эмпірычны сярэднік у межах групы.
- Самакалібраванне. Калі модэль награды ўперадзе і оцінюе все занадта высока або занадто нізка, ступеневая формула скасовывае гэты уперадак. Значыць толькі рангаванне ўнутрь групы мае значэння.
- Стабільнасць. З-за нормалізацыі швальць навучэння адраджваецца. Калі модэль актывна дакледзяе, абнаўленні ўсё суворыя. Калі яна прагледваецца, яны стаюць мякшымі.
5. Канштат класыфікацыйнай дзвінкосці: застаўцеся впісным сабой
Гэта захадні каламутак. Хоча GRPO спрыяе тому, што мадэль дае адказы з высокай наградай, тэрмін KL давяе у працоўны кіраванне і радзіць не ставаць каму-іншым. Ён пароўнае чырвоную мадэль з зафіксаванай модэлью-рэферэнсам, якая зазвычай ўжо ёст канцэптуальная мадэль з перыяду да пачатку працы з RL. Разлік KL — гэта мера таго, насколькі разныя два распады верыятнасцей. Формула, паказаная ў іншым адказе, — гэта часта вжываемая оцэнка на адзін токен, якая вырахоўвана на адносе верыятнасцей рэферэнса да чырвоных.
Уявіце сабе канцэптуальную мадэль як хораша абучанага універсаліста, які можа пісаць песні, дыбагаваць код і ствараць падсумкі новасей. Тады вы запускаеце працу з RL, каб ператворыць яго на мастака матэматыкі. Без тэрміна KL ён можа так захапіцца матэматычнымі наградамі, што забудзе пра все іншае, нават ствараючы безсэнсовыя адказы з матэматычным колорам для некалякіх запітоў.
Нізкія значэння KL адзначаюць, што мадэль яшчэ прымае відпаведна сваёй первоначальнай версіі форму. Высокія значэння KL адзначаюць, што мадэль далека ад свайго перваснага стану, можа, занадта прыстосавалася да мадэлі наград або пазбірала загальныя способнасці.
Мадэлі наград не ідэальныя і ў магчымасці аб’ектывацыі. Мадэль без пункту KL можа з’явіць, што початак працы фразай «Дазвольце мне думаць пасля крока» прыносіць дадатковую награду, нават калі гэта нічога не дадае. Апоўненне рэферэнснымі данымі спрыяе такой аб’ектывацыі. У практыцы пункт KL уключаецца ў функцію збытку з малым коефіцыентам, ад 0,01 да 0,04. Ён не прызначаны для зупінкі прогрэсу, а толькі для падтрымкі балансу прогрэсу.
Пূранейшыя абнаўленні простымі словамі
- Створыць групу адказоў на аднае запітанне.
- Оцэніць кожны з іх за дапамою мадэлі наград.
- Расчысліць сярэднюе значэнне і стандартную дывергенцію гэтых оцэнак.
- Вырачыць перадачу кожнага адказу, тое ўскількі ён вышэй або ніжэй за сярэднюе.
Рэзультатам ёсць мадэль, якая выучаецца рассуждаць не праз запамятовванне правільных адпаведзей, а праз выяўленне тых шаблонаў мышлення, якія рэгулярна перамагаюць ўсерэдненне яе сопраўодзіць.
З уравненняў да trainer.train()
Калі матэматыка ўжо розглянута, прыводзім код, які ўпрабоўвае гэта на практыцы. Ён выкарыстоўвае Unsloth для завантажэння 4-бітной мадэлі Llama 3.2 3B Instruct з адметай vLLM, прыўязвае адаптары LoRA, прымусоўвае фармат рассуждэння за дапамою сістэмнага прапанавання і стварае набор для трэніравання з GSM8K. vLLM неабходны, таму што GRPO павінен быстра гэнераваць многа завершэнняў на кожнае прапанованне.
from unsloth import FastLanguageModel
from datasets import load_dataset
import re
# 1. Load 4-bit model with vLLM backend for fast group generation
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Llama-3.2-3B-Instruct",
max_seq_length=1024,
load_in_4bit=True,
fast_inference=True,
max_lora_rank=32,
gpu_memory_utilization=0.6,
)
# 2. Attach LoRA adapters
model = FastLanguageModel.get_peft_model(
model,
r=32,
target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"],
lora_alpha=64,
use_gradient_checkpointing="unsloth",
)
# 3. Enforcing reasoning format - GRPO needs structure to reward
SYSTEM_PROMPT = "Respond in the following format:\n<reasoning>\n...\n</reasoning>\n<answer>\n...\n</answer>"
# 4. Load GSM8K and wrap prompts
dataset = load_dataset("openai/gsm8k", "main")["train"]
dataset = dataset.map(lambda x: {
"prompt": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": x["question"]}
],
"answer": x["answer"].split("####")[1].strip()
})
#vLLM is used in GRPO because GRPO requires the AI to generate a ma
Функцыі наград
Дзеянне з наградамі ўскладнейшая частка тонкай налаадкі GRPO. Калі ўсё зробіць неправільна, мадэль научыцца адмахватыся ад правіл расчытку балоў уместо таго, каб разумаваць. Адзінкавыя балы сумуюцца ў первісную награду, якая вжываецца для расчытку перадносці. У наведанай ніжэй лісты ёсць пяць функцый, кожная з якіх мае свою прычыну існавання.
- correctness_reward — галоўны сігнал. Ён выкарыстоўвае тэкст унутры тагаў з адпаведзямі і даёт 2,0 за падпараджэнне правдзівай адпаведзі, інакш — 0,0. Вага ція навмысна веліка, таму правільнае адпаведзенне завжды мае перавагу над адпаведнай фарматаванням.
- int_reward — гэта меры безпекі. На пачатку навчання практычна все ўскладнена, таму яна даёт 0,5 проста за тое, што была выдана правільная цыфра, чым падтрымлівае сігнал для навчання, пакуль мадэль не пачне рашаць задачы.
Кожна з эйных функцый сама па сабе простая. Але калі ўсе яны разам, правільнае выканання, правільны фармат і дэталі самі сабе контролююць.
def extract_xml_answer(text: str) -> str:
return text.split("<answer>")[-1].split("</answer>")[0].strip()
# Primary signal: is the final answer correct?
def correctness_reward(prompts, completions, answer, **kwargs):
responses = [c[0]["content"] for c in completions]
extracted = [extract_xml_answer(r) for r in responses]
return [2.0 if r == a else 0.0 for r, a in zip(extracted, answer)]
# Dense shaping rewards - keep learning signal alive even when answers are wrong
def int_reward(completions, **kwargs):
return [0.5 if extract_xml_answer(c[0]["content"]).isdigit() else 0.0 for c in completions]
def strict_format_reward(completions, **kwargs):
pattern = r"^<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>\nquot;
return [0.5 if re.match(pattern, c[0]["content"]) else 0.0 for c in completions]
def soft_format_reward(completions, **kwargs):
pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>"
return [0.5 if re.match(pattern, c[0]["content"]) else 0.0 for c in completions]
def xmlcount_reward(completions, **kwargs):
def score(text):
count = 0.0
if text.count("<reasoning>\n") == 1: count += 0.125
if text.count("\n</reasoning>\n") == 1: count += 0.125
if text.count("\n<answer>\n") == 1:
count += 0.125
count -= len(text.split("\n</answer>\n")[-1]) * 0.001
if text.count("\n</answer>") == 1:
count += 0.125
count -= (len(text.split("\n</answer>")[-1]) - 1) * 0.001
return count
return [score(c[0]["content"]) for c in completions]pyt
Трэнер
from trl import GRPOConfig, GRPOTrainer
trainer = GRPOTrainer(
model=model,
processing_class=tokenizer,
reward_funcs=[
xmlcount_reward, # tag quality
soft_format_reward, # structure (forgiving)
strict_format_reward, # structure (exact)
int_reward, # partial credit
correctness_reward, # ground-truth match
],
args=GRPOConfig(
learning_rate=5e-6,
per_device_train_batch_size=1,
gradient_accumulation_steps=1,
num_generations=8, # G = group size
max_prompt_length=256,
max_completion_length=200,
max_steps=250,
warmup_ratio=0.1,
max_grad_norm=0.1,
output_dir="outputs",
),
train_dataset=dataset,
)
trainer.train()
На кожным кроку GRPOTrainer выконвае пяць вышэй опісаных расчыткаў.
Чаму DPO страждае з розумовымі выкладкамі
DPO ўзяты за прыклад таму, што ён абходзіць падтрымкаванае навчанне цэлым. Ён перакладае задачу у фармат класіфікацыі: за дадзенай прыемлі і двух адпаведзяў трэба навучыцца выбіраць лепшы варыянт. Гэта добра працуе, калі меткі прабярок ёсць точнымі.
Аднак розумовыя выкладкі на самай справе не ўжо ёсць проблемай прабярок. Гэта проблема пошуку.
Падазроўваючы, што вы хочаце, каб мадэль даказвала тэяму геаметрыі. DPO патрэбна людзь чы аднавышаная мадэль, каб і сказала, які з двух даказаў ёсць лепшым. А што, як оба будуць некорэктнымі? А што, як правільны даказ выкалічваецца за 12 крокаў і ніколі не будзе выбраны? DPO можа вучыцца толькі на парах, якія ёй даюць, і не можа адкрыць новую стратэгію розумовых выкладкаў.
GRPO стварае групу адказоў на той самы запіт, оцінюе кожны з іх і выявляе, які перавышае сярэднюе значэнне. Гэта значыць, што ён дакледзе новыя падходы. Ён можа знайсці незвычную лінію разумовання, добра яе оцаніць і зміцніць, пры чым ніхто раней не запісаў такога падходу.
Проста кажучы, DPO ўжоць цэкавей у эксплуатацыі, але обмежвае мадэль якасцю ўзятых дадзенняў. GRPO коштуе больш за кожны крок, але можа выйсці за межы дадзенняў, пазначаных людзьмі, і апрацаваць справжна новыя способы разумовання.
Заключныя мыслі
GRPO навучае мадэль разумоваць, вівчаючы, якія з ёё сопных адказоў перавышаюце сярэднюе значэнне. Адключэнне функцыі крытыкавання зменшае вікорыстоўванне памяці, заставаючы пры тым сігналы для навучэння мэтавымі, а за дапамогай розумных функцый награды і выбору з групы можна паспрыяць павышэнню якосці разумовання локальной мадэлі на аднай GPU. Награджваюце тое паведанне, якое насправды хочаце, трывожыце мадэль у ўсталенай пазіцыі і сачыце за значэннем KL.