- Je onderscheidt menselijke voorkeuren, een geleerd rewardmodel en het generatiebeleid.
- Je berekent de afweging tussen verwachte reward en afwijking van een referentiebeleid.
Twee antwoorden kunnen allebei vloeiend klinken, terwijl een beoordelaar het ene duidelijk behulpzamer vindt. Hoe maak je van zo’n vergelijking een leersignaal? Bij reinforcement learning from human feedback (RLHF) leert een scoremodel voorkeuren benaderen, waarna het generatiebeleid wordt aangepast.
Een gebruikelijke route begint met SFT, leert daarna een rewardmodel uit vergelijkingen en optimaliseert vervolgens het beleid, bijvoorbeeld met PPO. Een geleerde voorkeursscore is geen universele menselijke waarde of garantie op waarheid. Hier rekenen we een eindig speelgoedprobleem exact uit; we bouwen geen volledige PPO-trainingslus.
1. Leer een relatief scoreverschil
Stel dat een beoordelaar antwoord A kiest boven B. In het Bradley-Terry-model voorspelt sigmoid(rA−rB) hoe waarschijnlijk die keuze is. Alleen het verschil telt: dezelfde constante bij beide scores optellen verandert niets.
Neem rA=log(3) en rB=0. De kans wordt 3/(1+3)=.75, dus de negatieve logkans is −log(.75)=.287682. Gradient descent moet de gekozen score verhogen en de afgewezen score verlagen.
chosen = np.array([np.log(3)])
rejected = np.array([0.])
loss,gc,gr = preference_loss(
chosen,rejected)
print(round(loss,4)) # .2877
print(gc,gr) # [-.25] [.25]
Maak preference_loss met een gemiddelde over de voorkeurparen. Bereken de loss stabiel met softplus, bijvoorbeeld via logaddexp. De twee scoregradiënten hebben tegengesteld teken; absolute scores zijn uit alleen één vergelijking niet vastgelegd.
In echte voorkeurdata kunnen beoordelaars het oneens zijn. Bewaar beoordelingsinstructies en informatie over de verzamelde populatie. Anders leert een technisch correct rewardmodel misschien een ander criterium dan je bedoelt.
012. Geef afwijken van de referentie een prijs
Een beleid π geeft kansen aan mogelijke antwoorden. We willen een hoge verwachte reward, maar begrenzen verandering met een KL-term ten opzichte van een vaste referentie ρ. Dit is een zachte prijs, geen harde inhoudelijke beveiligingsgrens.
r is de rewardvector, i een antwoord en β>0 de prijs van verschuiving. We schrijven π als softmax van logits. J wordt gemaximaliseerd: voor zijn logitgradiënt gebruik je gradient ascent, of je minimaliseert −J.
Bereken eerst de hulpgrootheid g per antwoord. De softmax-kettingregel trekt daarna het policygewogen gemiddelde van g af. z zijn de logits; j doorloopt alle antwoorden in de som.
Neem referentie [.5,.5], rewards [0,log(3)] en β=1. Met gelijke logits is π gelijk aan de referentie, KL nul en J=.5log(3)=.549306. De logitgradiënt is ongeveer [−.274653,.274653].
ref = np.array([.5,.5])
rewards = np.array([0.,np.log(3)])
j,gradient,p = policy_objective(
np.zeros(2),rewards,ref,1.)
print(round(j,4)) # .5493
print(np.round(gradient,4))
# [-.2747 .2747]
Maak policy_objective met de opgegeven positieve referentiekansen. De gradiënten sommeren tot nul: dezelfde constante bij alle logits verandert softmax niet. Controleer J en de afgeleide met een onafhankelijk handvoorbeeld, naast numerieke verschillen.
Drie verzonnen antwoordopties en scores. Exact optimum van E[reward] − β KL(π || πref).
| Antwoord | Reward | Referentie | Optimum |
|---|---|---|---|
| Kort antwoord | 1.0 | 40% | 30.07% |
| Uitgebreid antwoord | 0.0 | 40% | 7.21% |
| Antwoord uitstellen | 2.0 | 20% | 62.73% |
De referentie heeft kansen 40%, 40%, 20%. Een fout in de reward wordt meegeoptimaliseerd; dit is geen beoordeling van echte antwoordkwaliteit.
3. Reken het eindige optimum uit
Voor dit probleem is de optimale kans evenredig met ρi×exp(ri/β). Ons voorbeeld krijgt ongenormaliseerde gewichten [.5,1.5], dus optimum [.25,.75]. Gelijke rewards zouden juist de oorspronkelijke referentie behouden, niet vanzelf een uniforme policy maken.
best = optimal_policy(rewards,ref,1.)
print(best) # [.25 .75]
j,gradient,_ = policy_objective(
np.log(best),rewards,ref,1.)
print(round(j,4)) # .6931
print(np.allclose(gradient,0.)) # True
Bij dit optimum is de verwachte reward ongeveer .823959 en KL ongeveer .130812; het verschil is .693147. Maak optimal_policy in logruimte. Een grote β houdt de policy dichter bij de referentie; een kleine β geeft reward meer invloed.
Een veelgemaakte fout is een hoge reward verwarren met goede inhoud. Een scoremodel dat lengte te sterk waardeert kan steeds langere antwoorden uitlokken. Houd menselijke en taakgerichte evaluaties apart; ons exact oplosbare somvoorbeeld vervangt die niet.
03Wat neem je mee?
- Een voorkeurspaar leert een relatief scoreverschil.
- Het beleidsdoel weegt reward af tegen afwijking van een referentie.
- De juistheid van de berekening garandeert niet de kwaliteit van de beloning.
Hierna optimaliseer je voorkeuren direct vanuit responslogkansen met DPO.