Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Optimierung durch Verstärkung (Reinforcement Fine-Tuning, RFT) ist eine Technik zur Verbesserung von Argumentmodellen, indem Sie sie durch einen belohnungsbasierten Prozess trainieren, anstatt sich nur auf bezeichnete Daten zu verlassen. RFT hilft Modellen, bessere Argumentations- und Problemlösungsfähigkeiten zu entwickeln, insbesondere in Situationen, in denen gelabelte Beispiele begrenzt sind oder komplexe Verhaltensweisen gewünscht werden.
Hinweis
Der Feinabstimmungsservice pausiert RFT-Jobs automatisch, sobald die gesamten Schulungskosten (Training + Bewertung) $5.000 erreichen. Sie können den neuesten Prüfpunkt bereitstellen oder den Schulungsauftrag fortsetzen. Wenn Sie sich entscheiden, den Auftrag fortzusetzen, wird die Abrechnung für den Auftrag ohne weitere kostenbasierte Grenzwerte fortgesetzt.
Modellunterstützung
Verstärkungsoptimierung wird für die folgenden Modelle unterstützt:
| Modell | Version | RFT-Unterstützung | Status |
|---|---|---|---|
o4-mini |
2025-04-16 |
Ja | GA |
gpt-5 |
2025-08-07 |
Ja | Allgemein verfügbar* |
* Die GPT-5-Unterstützung für Reinforcement-Fine-Tuning ist allgemein verfügbar, der Zugriff ist jedoch beschränkt und nur auf Einladung möglich. Wenden Sie sich an Ihr Microsoft-Konto Team, wenn Sie sich für die Registrierung interessieren.
Anforderungen
Verstärkungsoptimierung (RFT) erfordert Schulungs- und Validierungsdaten, die als JSONL formatiert sind und ein messages Array enthalten, das das Chatabschlussformat verwendet.
RFT hat jedoch mehr Anforderungen:
-
Daten
- Weise der letzten „Nachricht“ in den Daten die Rolle
userzu. - Fügen Sie zusätzliche Felder und Werte für die Verwendung durch einen Grader ein.
- Stellen Sie sowohl eine Schulung als auch ein Validierungsdatenset bereit.
- Weise der letzten „Nachricht“ in den Daten die Rolle
-
Grader
- Definieren Sie einen Grader, um die Qualität Ihres fein abgestimmten Modells zu ermitteln und das Lernen zu leiten.
- Geben Sie nur einen Grader an, aber Sie können mehrere Grader mithilfe eines Multigraders kombinieren.
Beispielschulungsdaten
Das folgende Beispiel zeigt, wie Sie dem Modell Prompts bereitstellen und Ground Truth einbeziehen, auf die ein Bewertungsprogramm zugreifen kann.
{
"messages": [
{
"role": "developer",
"content": "Your task is to solve logic puzzles. The user will provide an expression with ?'s as placeholders for arithmetic operations. Replace the ?'s with arithmetic operation signs (+, -, *, /) to obtain a valid equation."
},
{
"role": "user",
"content": "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 = 100"
}
],
"solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100"
}
Hinweis
Dieses Beispiel wird nur für Demonstrationszwecke auf mehrere Zeilen aufgeteilt. Es muss eine einzelne Zeile in Ihrer JSONL-Datei sein.
Grader
Grader bieten die Belohnungsfunktion, die während der Schulung verwendet wird, und haben Zugriff auf alle vom Benutzer bereitgestellten Felder im Dataset. Mehrere Arten von Bewertern sind verfügbar:
- Textvergleich: Bewertung des Antwortinhalts auf Basis des Textes
- Modell: Antworten mithilfe eines Sprachmodells und eines Prompts bewerten
- benutzerdefinierter Code: Bewertungsantworten mit benutzerdefiniertem Code
- Multigrader: Bewertung basierend auf einer Kombination von Bewertungen anderer Bewertungsinstanzen
Die meisten Prüfer vollziehen die Ersetzung von Laufzeitdaten über Vorlagen. Alle Eingabe- oder Referenzeigenschaften können eine variable Ersetzung enthalten, die in doppelte geschweifte Klammern ({{ }}) eingefasst ist und auf eine Variable verweist.
Jeder Vorlagenverweis muss mithilfe eines Musters wie {{ namespace.variable }} namespaced werden. Bei komplexen, geschachtelten Daten wird eine JSON-Pfad-ähnliche Syntax unterstützt.
Die folgenden Namespaces werden unterstützt:
-
sample- Modellausgabe, die abgestuft werden soll, wird unter demsampleNamespace in einem Format angezeigt, das einer Chatabschlussantwort ähnelt. -
item- Optionale zusätzliche Felder, die in Schulungsdaten bereitgestellt werden, werden unter demitemNamespace angezeigt.
Einige Beispiele für die Vorlagenersetzung, die die obigen Namespaces verwenden:
-
{{ sample.output_text }}- Ersetzen der Modellausgabe als Zeichenfolge -
{{ sample.output_json }}– Wenn das Modell strukturierte Ausgaben erzeugt hat, verweisen Sie darauf als JSON -
{{ item.answer }}- Ersetzen des Felds "Antwort" im Dataset -
{{ item.ground_truth.date }}- ersetzen Sie das Feld "Datum" eines im Dataset definierten Objekts "ground_truth".
In den folgenden Abschnitten werden einzelne Grader dokumentiert und ihre JSON-Spezifikation für die Definition über die API bereitgestellt.
Textvergleichsbewerter
Verwenden Sie Bewerter für Textvergleiche, wenn der Anwendungsfall erfordert, dass die Modellausgabe entweder ein eindeutiges Label ist oder einer bekannten Ground-Truth-Antwort entsprechen muss.
Bewerter von Zeichenfolgenüberprüfungen
Bewerter von Zeichenfolgenüberprüfungen wenden einen bestimmten Vorgang auf die Eingabe und einen Verweis für die Rückgabe von 0 oder 1 an und stellen somit eine einfache Funktion für „Erfolgreich/Fehler“ bereit.
{
"type": "string_check",
"name": string,
"operation": "eq" | "ne" | "like" | "ilike",
"input": string,
"reference": string,
}
Operationen:
| Vorgang | Gibt 1 zurück, wenn | Groß-/Kleinschreibung beachten |
|---|---|---|
eq |
Eingabe stimmt mit Referenz überein | Ja |
ne |
Die Eingabe stimmt nicht mit dem Verweis überein. | Ja |
like |
Eingabe enthält eine Referenz | Ja |
ilike |
Eingabe enthält eine Referenz | Nein |
Ähnlichkeit mit Text
Text-Ähnlichkeits-Grader berechnen eine Bewertung basierend auf einem Auswahlalgorithmus zur Quantifizierung der Ähnlichkeit zwischen dem Eingabetext und einem bestimmten Bezugstext.
Spezifikation:
{
"type": "text_similarity",
"name": string,
"input": string,
"reference": string,
"pass_threshold": number,
"evaluation_metric": "fuzzy_match" | "bleu" | "gleu" | "meteor" | "rouge_1" | "rouge_2" | "rouge_3" | "rouge_4" | "rouge_5" | "rouge_l"
}
Auswertungsmetriken:
-
fuzzy_match– unscharfer Zeichenfolgenabgleich, unter Verwendung des RapidFuzz-Algorithmus -
bleu: Berechnet die BLEU-Bewertung (Bilingual Evaluation Understudy) zwischen Zeichenfolgen -
gleu– berechnet den Google BLEU-Score zwischen Zeichenfolgen. -
meteor– berechnet den METEOR-Score zwischen Strings. -
rouge-*- wie durch die Rouge Python-Bibliothek definiert
Modellbewerter
Bewertungsmodelle verwenden einen Prompt für ein Bewertungsmodell, der ihm vorgibt, wie es eine bestimmte Antwort auswerten und mit Score bewerten soll. Diese Flexibilität ermöglicht die schnelle Entwicklung komplexer Bewertungssysteme, die die Begründung für eine bestimmte Bewertung erklären.
Verwenden Sie die folgenden Modelle als Modellebewerter:
| Modell | Kann als Grader verwendet werden |
|---|---|
gpt-4o-2024-08-06 |
Ja |
o3-mini-2025-01-31 |
Ja |
Hinweis
Modellbewerter erfordern keine Modellbereitstellungen in Foundry.
Bewertungsmodell
Bewertungsmodellbewerter geben eine numerische Bewertung basierend auf der entsprechenden Eingabe und dem entsprechenden Prompt aus. Jeder bereitgestellte sampling_params Parameter steuert das Verhalten des Bewertungsmodells und ermöglicht das Anpassen von Elementen wie Temperatur und Denkaufwand.
{
"type": "score_model",
"name": string,
"input": Message[],
"model": string,
"pass_threshold": number,
"range": number[],
"sampling_params": object
}
Codebewerter
Modellbewerter sind flexibel, aber nicht deterministisch. Wenn Sie eine deterministische Bewertung benötigen, verwenden Sie stattdessen automatische Bewertungssysteme für Code.
Python-Bewertungstool
Der Python Grader führt beliebige Python Code aus, um eine Bewertung zu erzeugen.
Der bereitgestellte Code muss eine grade Funktion definieren, die zwei Positionsargumente verwendet: sample und item. Die Funktion muss eine numerische Punktzahl zurückgeben.
{
"type": "python",
"name": string,
"source": "def grade(sample, item):\n return 1.0"
}
Der Python Code wird in einer eingeschränkten Umgebung mit den folgenden Einschränkungen ausgeführt:
| Ressource | Grenzwert |
|---|---|
| Codegröße | 256 KB |
| Netzwerk | Kein Zugriff |
| Speicher | 2 GB |
| Speicherplatz | 1 GB |
| CPU (Zentrale Verarbeitungseinheit) | 1 Kern |
| Laufzeit | 2 Minuten |
Tipp
Ihr Code sollte mögliche Fehler behandeln und immer einen numerischen Wert zurückgeben. Wenn zu viele Ausnahmen während der Ausführung des Bewerters auftreten, ist der Trainingsauftrag nicht erfolgreich.
Innerhalb der Python Laufzeit kann der bereitgestellte Code die folgenden Module und Versionen verwenden:
- numpy==2.2.4
- scipy==1.15.2
- sympy==1.13.3
- Pandas==2.2.3
- rapidfuzz==3.10.1
- scikit-learn==1.6.1
- rouge-score==0.1.2
- deepdiff==8.4.2
- jsonschema==4.23.0
- Pydantik==2.10.6
- pyyaml==6.0.2
- nltk==3.9.1
- sqlparse==0.5.3
- rdkit==2024.9.6
- scikit-bio==0.6.3
- ast-grep-py==0.36.2
Endpunkt-Grader (Vorschau)
Endpunkt-Bewerter rufen über eine HTTP-API einen Remote-Endpunkt auf, um die Modellantwort zu bewerten. Sie eignen sich ideal für Anwendungsfälle, die Zugriff auf Ground-Truth-Daten für eine genaue Bewertung oder die Möglichkeit erfordern, den Grader in einer anderen Sprache als Python zu implementieren.
Während der privaten Vorschauphase ist die API für Endpunktbewerter nicht veröffentlicht.
MultiGrader-Objekt
Ein MultiGrader-Objekt kombiniert die Ausgabe mehrerer Bewerter, um eine einzelne Bewertung basierend auf einem arithmetischen Ausdruck zu erzeugen, der in calculate_output bereitgestellt wird.
{
"type": "multi",
"name": string,
"graders": dict[str, Grader],
"calculate_output": string
}
Wenn ein MultiGrader-Objekt die Bewertung berechnet, verweist der calculate_output-Ausdruck auf die einzelnen Bewertungen im bereitgestellten graders-Element durch den Schlüssel im graders-Objekt.
Operatoren:
| Operator | Beschreibung |
|---|---|
+ |
Zusatz |
- |
Subtraktion |
* |
Multiplikation |
/ |
Abteilung |
^ |
Macht |
Funktionen:
| Funktion | Beschreibung |
|---|---|
min |
Berechnen des Minimalwerts eines Werts |
max |
Berechnen des Maximums eines Werts |
abs |
Berechnen des absoluten Werts |
floor |
Wert abrunden |
ceil |
Wert aufrunden |
exp |
e zur Potenz des angegebenen Werts berechnen |
sqrt |
Nehmen Sie die Quadratwurzel des Werts |
log |
Berechnen des Logarithmus des bereitgestellten Werts |
Ein mit zwei Bewertern („similarity-score“ und „label-checker“) definiertes MultiGrader-Objekt, das den Mittelwert der Ausgaben berechnen muss, könnte wie folgt aussehen:
{
"type": "multi",
"name": "Example multigrader",
"graders": {
"similarity_score": {
"type": "text_similarity",
"name": "similarity grader",
"input": "{{ sample.output_text }}",
"reference": "{{ item.summary }}",
"evaluation_metric": "bleu"
},
"label_checker": {
"type": "string_check",
"name": "label grader",
"input": "{{ sample.output_text }}",
"reference": "{{ item.label }}",
"operation": "eq"
}
},
"calculate_output": "(similarity_score + label_checker) / 2"
}
Antwortformat (optional)
Während der Schulung können Sie das Modell so konfigurieren, dass strukturierte Ausgaben erstellt werden. Diese Struktur kann am beabsichtigten Anwendungsfall des Modells ausgerichtet werden oder die Benotung der Ausgabe vereinfachen.
Die Antwortformatkonfiguration folgt der Spezifikation für Chatvervollständigungen, entweder im Textformat (Standard) oder als JSON. Wenn das Modell JSON ausgeben soll, müssen Sie ein JSON-Schema bereitstellen.
Um mit dem vorherigen Beispiel fortzufahren, muss das Modell die Antwort in einem strukturierten Format ausgeben, z. B.:
{ "solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100" }
Das folgende JSON-Schema beschreibt das Antwortformat:
{
"type": "json_schema",
"name": "puzzles_assistant",
"schema": {
"type" : "object",
"properties": {
"solution": {
"type": "string",
"title": "solution"
}
},
"required": [
"solution",
],
"additionalProperties": false
},
"strict": true
}
Hyperparameterauswahl
Optimierung durch Verstärkung unterstützt dieselben Hyperparameter wie überwachte Optimierung. Darüber hinaus steuern die folgenden Hyperparameter spezielle Funktionen von RFT.
| Hyperparameter-Name | Wert | Standard | Beschreibung |
|---|---|---|---|
eval_interval |
Ganzzahl | auto |
Die Anzahl der Schulungsschritte zwischen den Auswertungsläufen. |
eval_samples |
Ganzzahl | auto |
Die Anzahl der Proben, die während der Auswertung verwendet werden sollen. |
compute_multiplier |
Anzahl | auto |
Der Multiplikator für die Berechnungsmenge für die Erkundung des Bereichs während des Trainings |
reasoning_effort |
low, mediumhigh |
medium |
Der vom Modell während des Trainings verwendete Denkaufwand. |
Hinweis
Der Trainingsdienst ersetzt automatisch Hyperparameter, die auf auto gesetzt sind, durch Standardwerte basierend auf Heuristiken und den bereitgestellten Trainingsdaten.
Interpretieren von Schulungsergebnissen
Verstärkungsoptimierung bietet sowohl automatische Auswertungen des Modells während der Schulung als auch Echtzeitschulungsmetriken.
Schulungsmetriken
Wenn Sie einen laufenden Auftrag überwachen oder einen abgeschlossenen Auftrag prüfen, geben die Metriken reward und reasoning einen Hinweis auf den Trainingserfolg.
Belohnung
Belohnungsmetriken verfolgen die resultierenden Bewertungen des Bewerters nach, der als Belohnungsfunktion fungiert.
-
train_reward_mean: die durchschnittliche Belohnung für den gesamten Batch von Schulungsdaten in einem bestimmten Schritt. Da jeder Batch in verschiedenen Schritten unterschiedlich sein kann, ist der Trend dieser Metrik wichtiger als das Vergleichen von Werten über Schritte hinweg. -
valid_reward_mean: die durchschnittliche Relevanz der Stichproben, die dem Validierungsset in einem gegebenen Schritt entnommen wurden.
Belohnungsmetriken sollten sich im Allgemeinen im Verlauf des Trainingsauftrags erhöhen. Wenn sie erheblich voneinander abweichen, ist dies ein Zeichen dafür, dass das Modell möglicherweise Belohnungshacking betreibt und der Bewerter mehr Engineering erfordert.
Begründungstoken
Jeder Schulungsauftrag verfolgt die Anzahl der vom Modell erstellten Begründungstoken. Metriken für Reasoning-Token erfassen, wie das Modell sein Verhalten im Verlauf der Laufzeit des Trainingsauftrags ändert.
-
train_reasoning_tokens_mean: Die durchschnittliche Anzahl der Begründungstoken, die in einem bestimmten Schritt im Batch der Trainingsdaten generiert werden. -
valid_reasoning_tokens_mean: Die durchschnittliche Anzahl der in einem bestimmten Schritt erstellten Begründungstoken für die Validierungsdaten.
Das Modell kann lernen, weniger Begründungstoken zu verwenden, um dieselbe Belohnung zu erzielen, oder es kann lernen, mehr Begründungstoken zu verwenden, um eine höhere Belohnung zu erzielen. Diese Metriken steigen in der Regel und fallen während des Schulungsauftrags.
Automatische Auswertungen
Das System erstellt automatisch eine Auswertung für jeden RFT-Auftrag. In regelmäßigen, durch den Hyperparameter eval_interval festgelegten Intervallen führt das Trainingssystem einen Auswertungslauf unter Verwendung der Validierungsdaten durch. Sie können die Bewertungen für jede Ausführung in der verknüpften Auswertung einsehen, die Sie über die Benutzeroberfläche von Foundry finden können.
Die Prüfung dieser Auswertungen bietet einen zusätzlichen Datenpunkt für die Entscheidung über frühzeitiges Beenden. Wenn das Modell während der Schulung lernt, sollten sich die Ergebnisse der einzelnen Auswertungen während der Lebensdauer des Auftrags verbessern.
Beispielprojekte und Datasets
Die folgenden Beispieldemos und -datasets bieten Ausgangspunkte für neue Benutzer der Optimierung durch Verstärkung:
- Countdown Demo - End-to-End-Demo für die Verwendung von RFT zur Verbesserung der mathematischen Argumentation.
- MedMCQ - Beispiel-Dataset und Grader für die Beantwortung von Mehrfachauswahlfragen aus der medizinischen Domäne.
- ClauseMatching – Beispiel-Datasets und Grader, die sowohl Zusammenfassungen als auch Inhaltsinterpretationen in der rechtlichen Domäne präsentieren.