- Je implementeert de DPO-loss zonder een apart rewardmodel te trainen.
- Je voorkomt fouten door prompttokens, verkeerde reductie of inconsistente voorkeurparen.
Je hebt voor dezelfde vraag een gekozen en een afgewezen antwoord. Is het gekozen antwoord relatief sterker geworden dan in het vaste referentiemodel? Direct Preference Optimization (DPO) gebruikt precies zo’n vergelijking van responslogkansen.
De oorspronkelijke DPO-doelfunctie heeft geen apart getraind rewardmodel of PPO-lus nodig. Het model blijft wel afhankelijk van de kwaliteit en verdeling van de voorkeurdata. Een fout label wordt niet vanzelf een juiste norm doordat er een loss omheen staat.
1. Tel alle antwoordlogkansen op
De kans van een autoregressief antwoord is het product van conditionele tokenkansen. Logaritmeren maakt daarvan een som. We tellen alleen de antwoordposities, inclusief de afgesproken eindtoken; prompt en padding blijven buiten die som.
Neem twee geselecteerde doelen die ieder kans .75 krijgen. De responskans is .75²=.5625 en de logkans 2log(.75)=−.575364. Een gemiddelde zou −.287682 geven en daarmee een andere doelfunctie maken.
z = np.array([[[np.log(3),0.],
[0.,np.log(3)]]])
targets = np.array([[0,1]])
mask = np.ones((1,2),bool)
total = response_log_probs(
z,targets,mask)
print(np.round(total,4)) # [-.5754]
Maak response_log_probs met één som per batchrij. Targets zijn hier al verschoven: logitrij t voorspelt targets[t]. Behoud niet-uniforme kansen; alleen antwoordlengtes tellen is geen berekening van een modelrespons.
Langere antwoorden hebben meestal negatievere totale logkansen. Begrijp en evalueer dat lengte-effect, maar vervang de reductie niet stilzwijgend door een gemiddelde. Bij een lege antwoordrij weigeren we de batch.
012. Vergelijk met dezelfde vaste referentie
Noem a het verschil tussen gekozen en afgewezen policylogkans. Noem b hetzelfde verschil bij de vaste referentie. Dan meet a−b hoe de relatieve voorkeur verschoven is.
β is een positieve schaal in dit trainingsdoel, geen samplingtemperatuur. De pairloss L wordt klein als z positief groeit. Bereken hem met logaddexp om overloop door rechtstreeks exponentiëren te voorkomen.
Neem policylogkansen chosen=−1 en rejected=−2: a=1. De referentie heeft −2 en −1: b=−1. Bij β=.5 wordt z=.5×(1−(−1))=1 en loss ongeveer .313262.
c = np.array([-1.]);r = np.array([-2.])
rc = np.array([-2.])
rr = np.array([-1.])
loss,gc,gr = dpo_loss(c,r,rc,rr,.5)
print(round(loss,4)) # .3133
print(np.round(gc,4),np.round(gr,4))
# [-.1345] [.1345]
print(round(dpo_loss(
rc,rr,rc,rr,.5)[0],4)) # .6931
Maak dpo_loss met het gemiddelde over de paren. De afgeleide bevat β én de batchnoemer. Wanneer policy en referentie gelijk zijn, is z nul en begint ieder paar bij log(2), ongeacht hun oorspronkelijke kansverhouding.
De gekozen logkans heeft een negatieve lossgradiënt en de afgewezen een positieve. In een gedeeld taalmodel garandeert dat niet dat de absolute kans van ieder gekozen antwoord stijgt. De parameters beïnvloeden immers meer antwoorden tegelijk.
023. Maak herhaling en tegenspraak zichtbaar
Een dubbele voorkeurstriple krijgt bij uniforme training extra gewicht. Twee tegengestelde labels kunnen een fout zijn, maar ook een echt beoordelaarsverschil. Onze audit rapporteert beide en verwijdert niets automatisch.
a = {'prompt':'p','chosen':'a',
'rejected':'b'}
b = {'prompt':'p','chosen':'b',
'rejected':'a'}
c = {**a,'prompt':'q'}
r = audit_preferences([a,a,b,c])
print(r['unique'],r['duplicates'],
r['conflicts']) # 3 1 1
Maak audit_preferences met exacte strings. Een conflict telt één keer per ongeordend antwoordpaar binnen dezelfde prompt; een andere prompt is een andere context. Witruimte en spelling worden hier niet genormaliseerd.
Bewaar in echte data ook beoordelingscriteria en annotatorinformatie. Splits evaluatie op prompts of verwante taakfamilies, zodat bijna dezelfde voorbeelden niet aan beide kanten belanden. Een nette deduplicatie alleen voorkomt geen datalek of voorkeurbias.
03Wat neem je mee?
- Responslogkansen sommeren alleen de afgesproken antwoordtokens.
- DPO vergelijkt een relatieve verschuiving met een vaste referentie.
- β, reductie en data-audit zijn inhoudelijke keuzes in het leerdoel.
Hierna verdeel je een beperkt rekenbudget tussen modelomvang en trainingsdata.