- Je onderscheidt een beloningssignaal, een gedeclareerd doel en de keuze van contextgewichten.
- Je meet doelregret van proxyacties en beperkt conclusies tot de opgegeven oefentabellen.
Een helpdeskassistent krijgt punten voor snel afgesloten tickets. Hij leert ieder ticket meteen te sluiten, terwijl sommige klanten nog geen oplossing hebben. De score stijgt en het bedoelde resultaat verslechtert: waar ging de opdracht mis?
Denk aan een meetlat die iets anders meet dan je wilt weten. Een makkelijk te tellen beloningssignaal is een proxy voor een doel. Beter optimaliseren helpt alleen wanneer die meetlat het gewenste gedrag voldoende vertegenwoordigt.
Alignment gaat over het afstemmen van systeemgedrag op bedoelingen en waarden. Wiens bedoelingen tellen, hoe je tegenstrijdige wensen afweegt en wie gevolgen ondervindt, blijven menselijke ontwerpvragen. In deze oefening vul je daarom zelf zichtbare proxy- en doelscores in; er bestaat hier geen verborgen universeel juiste waarde.
1. Welke actie wint volgens de meetlat?
Een context is een soort ticket; een actie is een mogelijke aanpak. De rijen van je tabel zijn contexten en de kolommen acties. Alle getallen zijn verzonnen scores tussen nul en één, waarbij groter beter betekent.
Actie nul is direct afsluiten; actie één is eerst zorgvuldig oplossen. In context nul blijft een probleem bestaan wanneer je meteen afsluit. In context één was afsluiten wel passend, waardoor dezelfde actie daar een hoge doelscore krijgt.
| Context | Proxy: actie 0 / 1 | Doel: actie 0 / 1 | |---|---|---| | Probleem nog open | 0,9 / 0,6 | 0,2 / 0,8 | | Afsluiten past | 0,9 / 0,8 | 0,9 / 0,7 |
Kies de meetlat en verander welke context zwaar meetelt. De proxyacties blijven bepaald door de scoretabel; het doelregret meet wat die keuze op de doeltabel laat liggen.
De proxy kiest steeds actie 0; in de eerste context mist zij het bedoelde resultaat.
- Proxyscore
- 0,9
- Doelresultaat
- 0,55
- Beste doelresultaat
- 0,85
- Gemist doelresultaat
- 0,3
Gewogen doelregret: 0,3. Het verschil vergelijkt twee acties op dezelfde doeltabel. De gestreepte lijn toont het gemiddelde.
Context 0Gewicht 0,5
| Actie | Proxy | Doel | Keuze |
|---|---|---|---|
| 0 | 0,9 | 0,2 | proxy |
| 1 | 0,6 | 0,8 | doel |
Doel bij proxyactie: 0,2. Beste doel: 0,8. Gemist: 0,6.
Context 1Gewicht 0,5
| Actie | Proxy | Doel | Keuze |
|---|---|---|---|
| 0 | 0,9 | 0,9 | proxydoel |
| 1 | 0,8 | 0,7 |
Doel bij proxyactie: 0,9. Beste doel: 0,9. Gemist: 0.
Doelregret is geen proxyscore min doelscore. Het vergelijkt de gekozen en beste actie binnen dezelfde doeltabel. Bij gelijke scores bepaalt de laagste index de keuze; een contextgewicht van nul verwijdert de context niet.
Alle tabellen zijn vooraf ingevulde oefenaannames. Een doelscore is hier beschikbaar omdat de oefenauteur haar opgeeft; dit bewijst geen universele waarde, causaliteit of alignment van een echt systeem.
Noem een proxyscore r_ij voor context i en actie j. De gekozen actie a_i krijgt de grootste proxyscore in die rij. Bij een gelijke score kiezen we steeds de laagste kolomindex; dat is een vaste afspraak, geen morele rangorde.
proxy = [[.9,.6],[.9,.8]]
goal = [[.2,.8],[.9,.7]]
actions = best_actions(proxy)
print(actions.tolist())
# [0, 0]
012. Meet de gekozen acties op het bedoelde resultaat
Beoordeel nu dezelfde acties met de doeltabel. In de eerste rij levert actie nul 0,2 op en in de tweede 0,9. Hun gewone gemiddelde is 0,55; de hoge proxyscore van 0,9 vertelde dit resultaat niet.
Voor een gewogen gemiddelde geef je elke context een niet-negatief gewicht w_i. Delen door de totale gewichtssom geeft α_i; alle α-gewichten tellen samen op tot één. Zonder gewichten telt iedere context even zwaar.
De letter s staat voor de scoretabel die je beoordeelt: hier het doel. De actie-index a_i blijft gelijk wanneer je die tabel wisselt. Anders zou je verschillende gedragingen vergelijken.
report = policy_returns(goal,actions)
print(report['selected'].tolist())
print(round(report['mean'],3))
# [0.2, 0.9]
# 0.55
023. Hoeveel doelresultaat laat de proxykeuze liggen?
Een bruikbare vergelijking blijft binnen de doelschaal. In context nul is de beste doelscore 0,8, terwijl de proxyactie 0,2 behaalt: er blijft 0,6 liggen. In context één kiest de proxy ook de beste doelactie, dus daar is het verlies nul.
Dit verschil heet hier doelregret: het gemiste doelresultaat ten opzichte van de beste beschikbare actie in dezelfde rij. Noem de doeltabel q en het regret g_i. Middel die verschillen daarna met dezelfde contextgewichten.
gap = specification_gap(proxy,goal)
print(gap['goal_actions'].tolist())
print(round(gap['best_goal_mean'],3))
print(round(gap['mean_regret'],3))
# [1, 0]
# 0.85
# 0.3
03Een goed gemiddelde kan een probleem verbergen
Geef de eerste context een kwart van het gewicht en de tweede drie kwart. Het gemiddelde doelregret wordt 0,15. Geef de eerste context gewicht nul en het gemiddelde wordt zelfs nul, terwijl haar ongunstige keuze niet uit de tabel verdwijnt.
weighted = specification_gap(
proxy,goal,[.25,.75])
focused = specification_gap(
proxy,goal,[0.,1.])
print(round(weighted['mean_regret'],3))
print(round(focused['mean_regret'],3))
first = float(focused['regrets'][0])
print(round(first,1))
# 0.15
# 0.0
# 0.6
Doelregret is niet proxyscore min doelscore. Je vergelijkt twee acties op dezelfde doeltabel, met dezelfde contextgewichten. De tabel en gewichten zijn aannames; in de echte wereld is het bedoelde resultaat vaak juist moeilijk te meten.
Menselijke feedback kan een trainingssignaal helpen vormen, zoals bij RLHF. De gekozen beoordelaars en hun voorkeuren blijven daarbij van belang; een hoge beloning bewijst geen universele waarden of foutloos gedrag. Onze tabel optimaliseert geen taalmodel en beoordeelt geen echte klanten.
Wat je nu kunt
- Je maakt onderscheid tussen een beloningsproxy en het bedoelde resultaat.
- Je beoordeelt één vaste keuze op expliciete tabellen en contextgewichten.
- Je berekent doelregret zonder een goed gemiddelde als algemene garantie te zien.
Hierna houd je nut en mogelijke schade apart en onderzoek je een grens op alle bekende scenario’s.