# Preference Optimization > Alinea un modelo ya afinado con datos de preferencia usando DPO, ORPO, KTO o SimPO; para cuando existen pares de preferencia o feedback, o hay que elegir método o depurar un run de DPO. Fuente: https://skillsagentes.com/skills/wshobson/agents/preference-optimization Markdown: https://skillsagentes.com/skills/wshobson/agents/preference-optimization.md Repositorio: https://github.com/wshobson/agents Autor: wshobson Licencia: MIT Actualizado: hace 2 meses Coste de contexto: 62 tok instalada, 2k tok al activarse, 3.6k tok con todos los archivos del bundle Bundle: 2 archivos, 14 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add wshobson/agents --skill preference-optimization --agent claude-code # Cursor npx -y skills add wshobson/agents --skill preference-optimization --agent cursor # Codex npx -y skills add wshobson/agents --skill preference-optimization --agent codex # Gemini CLI npx -y skills add wshobson/agents --skill preference-optimization --agent gemini # Windsurf npx -y skills add wshobson/agents --skill preference-optimization --agent windsurf # Cline npx -y skills add wshobson/agents --skill preference-optimization --agent cline ``` ## Qué hace - Elige entre DPO, ORPO, KTO o SimPO según la forma de los datos de preferencia disponibles - Da hiperparámetros concretos (β, LR, épocas) por método en references/method-configs.md - Describe el patrón de producción de DPO iterativo y on-policy con reentrenamiento por rondas - Explica cómo construir pares chosen/rejected usando selección μ−2σ en vez del mínimo absoluto ## Cuándo usarla - Existen pares de preferencia o feedback de pulgar arriba/abajo sin emparejar - Hay que elegir entre métodos de optimización de preferencias - Un entrenamiento DPO necesita hiperparámetros o depuración ## Cuándo no - El dato disponible son demostraciones, no preferencias (usar lora-qlora-recipes) - Existe una señal de recompensa verificable (usar grpo-rlvr-training) ## Qué la activa - "Tengo pares de preferencia y un checkpoint SFT, ¿uso DPO u ORPO?" - "Los revisores marcan thumbs-up/down sin pares, ¿qué método uso?" - "Mi modelo con DPO favorece respuestas largas, quiero corregir el sesgo de longitud" - "Necesito los hiperparámetros correctos para un run de DPO" ## Antes de instalar - Requiere que finetuning-method-selection ya haya enrutado hacia aquí y que existan pares de preferencia o feedback sin emparejar, normalmente desde un checkpoint SFT. ## Archivos - SKILL.md — 8 KB - references/method-configs.md — 6 KB ## SKILL.md Reproducido tal cual desde wshobson/agents bajo MIT. Esta sección es el documento original y está en inglés. # Preference Optimization This skill assumes `finetuning-method-selection` already routed here because the data shape is preference pairs or unpaired thumbs-up/down feedback, not demonstrations (that's `lora-qlora-recipes`) or a verifiable reward signal (that's `grpo-rlvr-training`). What follows is method selection among the DPO family, the evidence for how much that selection actually matters, the production training pattern, and how to build the pairs in the first place. **Input:** a routing decision (preference optimization) plus preference pairs or unpaired feedback, usually from an SFT checkpoint. **Output format:** a validated method choice plus a config — the kwarg values in `references/method-configs.md`, not free-form advice — that `llm-finetuning-training-engineer` consumes directly. ## Method Selection | Data shape | Method | Key parameters | |---|---|---| | Preference pairs, default case | **DPO** | β=0.1, LR 5e-7–1e-6, 1–2 epochs | | Memory-bound or no SFT checkpoint | **ORPO** | reference-free, fused SFT+preference in one loss | | Unpaired thumbs-up/down | **KTO** | binary label per example, no pairing needed | | Length bias observed, sweep budget available | **SimPO** | reference-free; see sweep grid below | - **DPO is the safe default.** Use β=0.1 and a learning rate of 5e-7 to 1e-6 for 1–2 epochs. This LR is *lower* than the SFT LR that produced the checkpoint being aligned — porting an SFT- scale LR into a DPO run is the most common misconfiguration here, not an edge case. - **ORPO** routes in when memory is the constraint, or when there's no separate SFT checkpoint to start from — it's reference-free and fuses the SFT and preference objectives into one loss, skipping the separate SFT pass and the reference-model memory cost DPO carries. - **KTO** routes in when feedback is unpaired binary signal (thumbs-up/down) rather than matched preference pairs — don't force unpaired feedback into synthetic pairs to use DPO instead. - **SimPO** fixes DPO's length bias but only pays off with disciplined sweeping — its published gains are a ceiling reported under a tuned sweep, not a baseline any single config will reproduce. Route here only when there's sweep budget; use DPO instead if there isn't. - **Classic RLHF (reward model + PPO) is retired** outside frontier labs. Don't reach for it in a production pipeline — every method above is cheaper and better-supported for the same data shapes. ### Worked Examples - *"We have an SFT checkpoint and clean paired preference data, no length-bias complaints yet."* → default case → **DPO** at β=0.1. - *"Reviewers click thumbs-up/down per response; nothing is paired."* → unpaired signal → **KTO**, not DPO — don't synthesize pairs to force DPO onto unpaired data. - *"GPU budget doesn't cover a separate SFT pass plus a DPO reference model."* → memory-bound, no separate checkpoint → **ORPO**. - *"DPO output favors longer answers regardless of quality, and there's time to run a sweep."* → length bias plus sweep budget → **SimPO**. Skip it if the sweep budget isn't actually there. ## The Low-Leverage Truth A 2026 240-H100-run study (arXiv 2603.19335) is the load-bearing evidence behind the table above: **loss-function choice is worth roughly 1 percentage point of leverage, model scale is worth roughly 50.** Zero of 20 DPO variants tested beat vanilla DPO. Rankings also **invert with scale** — a variant that wins in a small pilot can lose at deployment size. Two practical consequences: - Don't spend a routing decision agonizing over DPO-variant bake-offs. The table above is sufficient; deeper variant selection is low-leverage compared to data quality and scale. - **Validate at deployment scale before trusting a ranking.** A method comparison run on a small pilot model doesn't transfer to the production size class — re-check the winner once scale changes. This is also why the Method Selection table above is deliberately short: it encodes the ~1pp lever, not a ranking of DPO variants that the same study shows doesn't hold up across scale. Treat any variant-selection advice that isn't in that table — including advice that claims a specific variant "wins" — as unproven until it's been validated at the target deployment size. ## Production Pattern: Iterative On-Policy DPO A single offline DPO pass on a static preference dataset is a starting point, not the production pattern. The policy drifts away from the distribution the pairs were sampled from as training proceeds, and a static dataset goes stale against that drift. Production pipelines run DPO iteratively and on-policy instead: 1. Sample completions from the current policy checkpoint. 2. Score or rank the completions (reward model, judge, or task grader). 3. Run a DPO pass using the current checkpoint as the reference model. 4. The resulting checkpoint becomes both the new policy *and* the new reference for the next round. Repeat. Each round's reference model is the prior round's output, not a fixed initial checkpoint — that's what keeps the preference signal on-policy instead of scoring against an increasingly stale distribution. A single-pass DPO run is still a reasonable first iteration — it just isn't the whole pipeline. Plan for at least one more round once the first checkpoint exists, rather than treating pass one as the finished artifact. ## Pair Construction Build DPO/ORPO pairs from **same-task passing-vs-failing trajectories** — two attempts at the same underlying task, not unrelated best-and-worst examples pulled from different tasks. Within that trajectory set, select the rejected member at **μ−2σ of the reward distribution, never the minimum**. Naive best-vs-worst pair construction (max reward vs. absolute minimum) degrades as scale increases; the μ−2σ selection is more robust to the same scale sensitivity the low-leverage study surfaced above. ``` sorted_by_reward = sort(trajectories, key=reward) chosen = sorted_by_reward[-1] # highest reward mu, sigma = mean(rewards), stdev(rewards) rejected = closest(sorted_by_reward, mu - 2 * sigma) # NOT sorted_by_reward[0] — the absolute minimum # is the naive best-vs-worst construction that # degrades as scale increases. ``` For the mechanics of turning graded traces into these pairs — including rejection sampling and judge-scored delta selection — see `trace-to-training-data`. ## References Complete TRL config blocks per method — `DPOConfig`, `ORPOConfig`, `KTOConfig`, and the SimPO sweep grid — plus Unsloth wrappers and a catastrophic-forgetting note live in `references/method-configs.md`. Those configs use the same current-TRL API conventions established in `lora-qlora-recipes`'s `references/unsloth-trl-mapping.md` (`processing_class`, not `tokenizer=`). `references/method-configs.md` also carries the catastrophic-forgetting note: a too-high learning rate is the usual cause when a preference-tuned checkpoint loses general capability, and the fix is almost always to drop the LR toward the low end of the range in the Method Selection table above before reaching for any other remediation. Related skills: `finetuning-method-selection` routes here once preference pairs or unpaired feedback exist; `lora-qlora-recipes` produces the SFT checkpoint DPO/KTO/SimPO align (ORPO's fused path can skip it); `trace-to-training-data` converts passing/failing trajectories into the pairs this skill's Pair Construction section consumes. ## Dónde encaja - Categoría: [Aprendizaje](https://skillsagentes.com/categorias/aprendizaje.md) — Explicaciones, tutorías y flujos de estudio estructurado. - Creador: [wshobson](https://skillsagentes.com/creators/wshobson.md) — 183 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Hermes Tweet](https://skillsagentes.com/skills/wshobson/agents/hermes-tweet.md): Instala y opera Hermes Tweet, un plugin de Hermes Agent para investigar X/Twitter, leer timelines, analizar tweets y ejecutar operaciones privadas o de cambio de estado con aprobación previa. - [Superself](https://skillsagentes.com/skills/wshobson/agents/superself.md): Úsalo cuando un proyecto guarda su estado en Superself: lee `self context` al iniciar sesión, vincula el trabajo a una work unit, reporta con evidencia y registra decisiones confirmadas. - [Grounded Vault](https://skillsagentes.com/skills/wshobson/agents/grounded-vault.md): Úsalo para mantener un almacén Markdown de conocimiento donde cada afirmación compilada se rastrea hasta una fuente inmutable y el drift se detecta con git diff sin gastar tokens. - [Postgresql Table Design](https://skillsagentes.com/skills/wshobson/agents/postgresql-table-design.md): Úsalo al diseñar o revisar un esquema específico de PostgreSQL: buenas prácticas, tipos de datos, indexación, restricciones, patrones de rendimiento y funciones avanzadas. - [Prompt Engineering Patterns](https://skillsagentes.com/skills/wshobson/agents/prompt-engineering-patterns.md): Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)