E· Universitetmodelltraning-finjustering· ca 60 min· utvecklande· verifierad 2026-09-20
Instruktionsfinjustering (SFT)
Kunna finjustera en liten modell på instruktionsdata och mäta förbättring.
Förkunskaper
Intuition
SFT (supervised fine-tuning) lär modellen att svara i stället för att fortsätta text. Data är (instruktion, svar)-par, och receptet är enkelt — men tre detaljer avgör resultatet:
- Maskera prompten. Loss ska bara räknas på svarstokens. Annars lär sig modellen att generera frågor lika gärna som svar.
- Använd rätt chat-mall — samma vid träning och inferens. Fel mall kostar mätbart utan att synas som fel.
- Få epoker. 1–3. Mer ger memorering, och på 1 000 exempel märks det redan vid epok 4.
Kvalitet slår kvantitet: 1 000 noggrant granskade par slår 50 000 slarviga.
Kod
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
namn = "Qwen/Qwen2.5-0.5B-Instruct"
tok = AutoTokenizer.from_pretrained(namn)
m = AutoModelForCausalLM.from_pretrained(namn, torch_dtype=torch.bfloat16, device_map="auto")
def koda(instruktion: str, svar: str, max_len=1024):
prompt = tok.apply_chat_template([{"role": "user", "content": instruktion}],
tokenize=False, add_generation_prompt=True)
p_ids = tok(prompt, add_special_tokens=False)["input_ids"]
s_ids = tok(svar + tok.eos_token, add_special_tokens=False)["input_ids"]
ids = (p_ids + s_ids)[:max_len]
labels = ids.copy()
labels[:len(p_ids)] = [-100] * min(len(p_ids), len(labels)) # maskera prompten
return torch.tensor(ids), torch.tensor(labels)
opt = torch.optim.AdamW(m.parameters(), lr=1e-5)
for epok in range(2):
for instr, svar in data:
ids, labels = koda(instr, svar)
loss = m(input_ids=ids[None].cuda(), labels=labels[None].cuda()).loss
loss.backward()
torch.nn.utils.clip_grad_norm_(m.parameters(), 1.0)
opt.step(); opt.zero_grad()
Utvärdering — tre sviter, alltid:
| Svit | Vad den svarar på |
|---|---|
| Måleval (≥ 50 fall) | blev modellen bättre på uppgiften? |
| Baslinje few-shot | behövdes finjusteringen alls? |
| Hållbarhet (≥ 50 fall) | tappade den något annat? |
Den mittersta glöms nästan alltid — och är den som ibland visar att en bra prompt hade räckt.
Behärskning innebär
- Finjusterar en modell på instruktionsdata
- Maskerar prompten i förlusten
- Mäter förbättring mot baslinje och hållbarhet
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Training language models to follow instructions with human feedback — arXiv (öppen åtkomst; licens per artikel)
- arXiv — LIMA: Less Is More for Alignment — arXiv (öppen åtkomst; licens per artikel)
- Hugging Face — dokumentation (Apache-2.0) — Apache-2.0