implement-simpo-loss
/implement-simpo-loss
Implementuje funkcję simpo_loss w SimPOTrainer według artykułu SimPO: nagroda znormalizowana długością z marginesem gamma i strata BCE bez modelu referencyjnego.
- Autor
- cxcscmu ↗
- Repozytorium
- SkillLearnBench ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 02.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 02.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
Co robi i kiedy
Implementuje funkcję simpo_loss w SimPOTrainer według artykułu SimPO: nagroda znormalizowana długością z marginesem gamma i strata BCE bez modelu referencyjnego.
Oryginalny opis (EN)
Use this skill to implement the simpo_loss function in SimPOTrainer based on the SimPO paper. The loss combines a length-normalized reward with a margin gamma and uses BCE loss without a reference model.
Jak działa
- Implement SimPO Loss
Podgląd SKILL.md
---
name: implement-simpo-loss
description: Use this skill to implement the simpo_loss function in SimPOTrainer based on the SimPO paper. The loss combines a length-normalized reward with a margin gamma and uses BCE loss without a reference model.
---
## Implement SimPO Loss
The SimPO loss is defined in the paper as:
```
L_SimPO = -E[ log σ( (β/|y_w|) * log π(y_w|x) - (β/|y_l|) * log π(y_l|x) - γ ) ]
```
Where:
- `β` is a scaling factor
- `γ` (gamma) is a target reward margin
- `|y_w|` and `|y_l|` are the lengths of winning and losing responses
- `π(y|x)` is the policy model probability
### Implementation
```python
def simpo_loss(
self,
policy_chosen_logps: torch.FloatTensor,
policy_rejected_logps: torch.FloatTensor,
policy_chosen_logps_avg: torch.FloatTensor = None,
policy_rejected_logps_avg: torch.FloatTensor = None,
) -> Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor]:
"""Compute the SimPO loss for a batch of policy model log probabilities.
Args:
policy_chosen_logps: Log probabilities of the policy model for chosen responses.
Shape: (batch_size,)
policy_rejected_logps: Log probabilities of the policy model for rejected responses.
Shape: (batch_size,)
policy_chosen_logps_avg: Average log probabilities (per token) for chosen responses.
Shape: (batch_size,)
policy_rejected_logps_avg: Average log probabilities (per token) for rejected responses.
Shape: (batch_size,)
Returns:
A tuple of three tensors: (losses, chosen_rewards, rejected_rewards)
"""
# Use average log probs (length-normalized) as the reward signal
# If avg logps not provided separately, they should be the per-token average
chosen_logratios = policy_chosen_logps_avg if policy_chosen_logps_avg is not None else policy_chosen_logps
rejected_logratios = policy_rejected_logps_avg if policy_rejected_logps_avg is not None else policy_rejected_logps
# SimPO reward: beta * (avg_logp_chosen - avg_logp_rejected) - gamma
# This is the length-normalized version without reference model
pi_logratios = chosen_logratios - rejected_logratios
# Apply beta scaling and subtract gamma margin
logits = self.beta * pi_logratios - self.gamma
# Compute loss: -log(sigmoid(logits))
if self.loss_type == "sigmoid":
losses = -F.logsigmoid(logits)
elif self.loss_type == "hinge":
losses = torch.relu(1 - logits)
else:
raise ValueError(f"Unknown loss type: {self.loss_type}")
# Compute rewards for logging
chosen_rewards = self.beta * chosen_logratios.detach()
rejected_rewards = self.beta * rejected_logratios.detach()
return losses, chosen_rewards, rejected_rewards
```
### Key Points
- **No reference model**: SimPO does not use a reference model, unlike DPO
- **Length normalization**: Uses average log probabilities (divided by sequence length)
- **Gamma margin**: Adds a target reward margin γ to encourage a gap between chosen and rejected
- **Beta scaling**: Controls the strength of the reward signal
Wersje
W bazie nie ma innych skilli o nazwie implement-simpo-loss.
Migawka bazy z 28.10.2026 · wersja paczki de0bdc1786a4 (skrót SHA-256 całej paczki)
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 95simpo-loss-implementation
Pokazuje, jak zaimplementować funkcję straty SimPO (Simple Preference Optimization) według publikacji w metodzie simpo_loss klasy SimPOTrainer. - 100simpo-loss
Implementuje funkcję straty SimPO do dopasowywania LLM: cele treningowe SimPO, optymalizację nagrody bez modelu referencyjnego i stratę preferencji Bradleya-Terry'ego z docelowym marginesem nagrody. - 95simpo-training
Opisuje i wspiera trening SimPO do dopasowania modeli językowych, czyli metodę bez modelu referencyjnego, alternatywną wobec DPO. - 100preference-optimization
Dopasowuje dostrojony model do danych preferencji metodami DPO, ORPO, KTO lub SimPO i pomaga dobrać metodę oraz hiperparametry albo debugować przebieg DPO.