Modelltrainingsleitfaden 5: DPO-Trainingsleitfaden
Der Kern von DPO (Direct Preference Optimization) besteht nicht darin, dem Modell das „Sprechen“ beizubringen, sondern dem Modell das „Auswählen“ beizubringen.
Wird gerendert...
Da Sie bereits PT (Knowledge Injection) und SFT (Supervised Fine-Tuning) abgeschlossen haben, ist **DPO (Direct Preference Optimization)** Ihr letzter Skalpell. Seine Kernfunktion besteht nicht darin, das Modell das "Sprechen" beizubringen, sondern ihm beizubringen, zu **"wählen"**. In Szenarien mit begleitender KI wird DPO speziell verwendet, um Antworten zu "eliminieren", die "korrekt, aber bedeutungslos" sind, und das Modell dazu zu zwingen, zwischen zwei Antworten diejenige auszuwählen, die "menschlicher" ist.
## Datenvorbereitung für DPO
Dies ist der wichtigste Schritt. Das DPO-Training benötigt keine Standardantworten, sondern **"Entweder-Oder"-Vergleichspaare**.
**Datenformat:** Jede Datensatz enthält drei Teile:
1. **Prompt (Eingabeaufforderung):** Die Eingabe des Benutzers.
2. **Chosen (Ausgewählte gute Antwort):** Eine warme, empathische, umgangssprachliche Antwort.
3. **Rejected (Abgelehnte schlechte Antwort):** Eine mechanische, kalte, kundenorientierte Antwort, die gerne predigt.
**JSONL-Beispiel:**
```JSON
{
"prompt": "Ich bin so müde, ich habe das Gefühl, jeden Tag sinnlos zu überarbeiten.",
"chosen": "Ich umarme dich, diese Müdigkeit, die man auf einen Blick nicht überblicken kann, ist am zermürbendsten. Wenn es geht, denk heute Abend an nichts und ruh dich gut aus, okay?",
"rejected": "Überstunden sind ein übliches Phänomen in der modernen Arbeitswelt. Es wird empfohlen, Ihre Zeit vernünftig zu planen oder die Arbeitsbelastung mit Ihrem Vorgesetzten zu besprechen. Eine positive Einstellung hilft, Stress abzubauen."
}
```
## Betriebsschritte für zwei Schemata
### 1. LLaMA-Factory
LLaMA-Factory bietet eine sehr ausgereifte Unterstützung für DPO, die mit wenigen Konfigurationszeilen ausgeführt werden kann.
**Ablauf:**
1. **Daten registrieren:** Konfigurieren Sie Ihren Präferenzdatensatz in `dataset_info.json`.
2. **`dpo.yaml` schreiben:**
```YAML
stage: dpo # DPO-Phase angeben
model_name_or_path: ./sft_output # Muss der Pfad zu Ihrem SFT-Modell sein
create_new_adapter: true # Eine LoRA-Schicht über SFT legen
dataset: my_dpo_data
template: qwen
finetuning_type: lora # DPO-spezifische Hyperparameter
pref_beta: 0.1 # Typischer Beta-Wert
dpo_ft_loss: sigmoid # Verlustfunktionstyp
learning_rate: 1e-6 # Die DPO-Lernrate sollte um eine Größenordnung niedriger sein als die von SFT
num_train_epochs: 2.0
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
```
3. **Startbefehl:**
```Bash
llamafactory-cli train dpo.yaml
```
### 2. Code selbst schreiben
Die `TRL`-Bibliothek von HuggingFace bietet `DPOTrainer`, der für eine tiefe Anpassung geeignet ist.
**Code-Kernstück:**
```Python
from trl import DPOTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer
# 1. SFT-Modell als Policy Model laden
# 2. Auch ein Referenzmodell benötigt, normalerweise eine Kopie desselben Modells, um die KL-Divergenz zu berechnen und zu verhindern, dass das Modell abweicht
model = AutoModelForCausalLM.from_pretrained("./sft_model")
ref_model = AutoModelForCausalLM.from_pretrained("./sft_model")
dpo_trainer = DPOTrainer(
model,
ref_model=ref_model, # DPO-spezifisches Referenzmodell
beta=0.1, # Anpassen des Trainings
train_dataset=train_dataset,
tokenizer=tokenizer,
args=DPOConfig(
output_dir="./dpo_model",
per_device_train_batch_size=1,
learning_rate=1e-6,
remove_unused_columns=False # DPO muss die Felder prompt/chosen/rejected beibehalten
),
)
dpo_trainer.train()
```
## Zu beachtende Fallstricke
1. **Sie müssen zuerst SFT und dann DPO durchführen:** Wenn Sie direkt das ursprüngliche Modell für DPO verwenden, erzeugt das Modell aufgrund des fehlenden Lernens des Dialogformats eine große Menge an Unsinn.
2. **Die Mystik des Beta-Parameters:** Je größer $\beta$, desto "gehorsamer" das Modell, d. h. desto stärker die Tendenz zur Chosen-Antwort; wenn es jedoch zu groß ist, verliert das Modell seine Vielfalt und wiederholt sich sogar. 0,1 ist ein guter Ausgangspunkt.
3. **Speicherbelastung:** Das DPO-Training erfordert normalerweise das gleichzeitige Laden von zwei Modellen (das aktuell optimierte Modell und das Referenzmodell), wodurch der Speicherbedarf fast **doppelt** so hoch ist wie bei SFT. Wenn der Speicher nicht ausreicht, aktivieren Sie unbedingt `load_in_4bit=True` oder verwenden Sie LoRA.
4. **Verhindern Sie die Verschlechterung des Modells:** DPO kann dazu führen, dass das Modell in seiner logischen Schlussfähigkeit (z. B. Arithmetik) abnimmt. Wenn Ihre begleitende KI den Benutzern auch bei der Berechnung helfen muss, denken Sie daran, einige allgemeine logische Ausrichtungsdaten in den DPO-Datensatz einzubauen.
## Zusammenfassung
- **PT:** Lösen des Problems "Wissen oder nicht wissen" (Branchenhintergrund, Fachwissen).
- **SFT:** Lösen des Problems "Regeln verstehen oder nicht verstehen" (Dialogformat, Persönlichkeitspositionierung).
- **DPO:** Lösen des Problems "Gut oder nicht gut klingen" (emotionale Wahrnehmung, KI-Geschmack entfernen).
**Damit wurden die drei großen Axtschläge des Modelltrainings vollständig vorgestellt.**Kommentar
Melde dich an, um Kommentare anzuzeigen und zu veröffentlichen
Zur Anmeldung