Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

ORPO (Odds Ratio Preference Optimization)

ia

Définition

ORPO (Odds Ratio Preference Optimization) est une methode d'alignement des LLMs publiee par Hong et al. (2024) qui integre simultanement le Supervised Fine-tuning (SFT) et l'alignement sur les preferences humaines en une seule passe d'entrainement. Contrairement a DPO qui necessite un modele de reference (le SFT model), ORPO fusionne ces deux objectifs en une seule loss. La loss ORPO combine deux composantes : une cross-entropy loss standard sur les reponses 'choisies' (comme dans le SFT), et une penalite basee sur le log odds ratio entre les probabilites des reponses 'choisies' et 'rejetees'. Ce ratio encourage le modele a assigner une probabilite plus elevee aux reponses choisies par rapport aux rejetees, sans reference externe. L'avantage majeur d'ORPO est l'absence de modele de reference : dans DPO, il faut maintenir le SFT model en memoire pour calculer les log-probabilites de reference a chaque batch, ce qui double la memoire necessaire. ORPO supprime cette contrainte, permettant d'entrainer sur des GPUs plus limites. ORPO a produit des resultats comparables ou superieurs a DPO sur plusieurs benchmarks (MT-Bench, AlpacaEval 2) notamment pour les modeles de taille moyenne (7B-13B). Des variantes comme SimPO (Simple Preference Optimization) et SPPO (Self-Play Preference Optimization) ont explore des directions similaires. En pratique, ORPO est disponible dans TRL (HuggingFace Transformers Reinforcement Learning) depuis la version 0.8 : une seule classe ORPOTrainer remplace le pipeline SFT + DPO en 2 etapes, simplifiant considerablement le workflow de fine-tuning.

Implementation ORPO avec TRL

from trl import ORPOTrainer, ORPOConfig

orpo_config = ORPOConfig(
    learning_rate=8e-6,
    beta=0.1,              # Poids de la penalite de preference
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    num_train_epochs=1,
    max_length=1024,
    max_prompt_length=512,
    output_dir='./orpo-output'
)

# Dataset format: {prompt, chosen, rejected}
trainer = ORPOTrainer(
    model=model,
    args=orpo_config,
    train_dataset=dataset,  # Format paires preference
    tokenizer=tokenizer
    # PAS de ref_model - c'est l'avantage d'ORPO
)
trainer.train()

Comparatif methodes d'alignement

MethodeEtapesRef modelMemoire
RLHF (PPO)SFT + RM + PPOOui4x params
DPOSFT puis DPOOui2x params
ORPO1 seule passeNon1x params
SimPO1 seule passeNon1x params

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis