Vertiefende Feinabstimmung

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 user zu.
    • 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.
  • 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 dem sample Namespace in einem Format angezeigt, das einer Chatabschlussantwort ähnelt.
  • item - Optionale zusätzliche Felder, die in Schulungsdaten bereitgestellt werden, werden unter dem item Namespace 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.