Wie ChatGPT mit Hilfe von Reinforcement Learning optimiert wird


Thanh Long Phan


Ende 2022 veröffentlichte OpenAI ChatGPT (ein auf Transformer basierendes Sprachmodell) für die Öffentlichkeit. Obwohl es auf dem bereits viel diskutierten GPT-3 basiert, löste es einen beispiellosen Boom in Sachen generativer KI aus.

Es ist in der Lage, menschenähnlichen Text zu generieren, und bietet eine breite Palette von Anwendungen, darunter Sprachübersetzung, Sprachmodellierung und die Generierung von Text für Anwendungen wie Chatbots. Lesen Sie sich dazu gerne unsere Einführung zu LLMs durch.

ChatGPT scheint so leistungsfähig zu sein, dass es von vielen als ein wesentlicher Schritt in Richtung künstliche allgemeine Intelligenz angesehen wird.

Der Hauptgrund für die jüngsten Erfolge von Sprachmodellen wie ChatGPT liegt in ihrer Größe (gemessen an den trainierbaren Parametern). Doch indem man Sprachmodelle größer macht, werden sie nicht automatisch besser darin, die Absichten des Benutzers zu verfolgen. Ein größeres Modell kann auch toxischer werden und eher zu "Halluzinationen" neigen. Eine Möglichkeit, diese Probleme zu entschärfen und die Modelle allgemeiner an die Absichten der Benutzer anzupassen, ist die Anwendung von Reinforcement Learning.

In diesem Blogbeitrag geben wir einen Überblick über den Trainingsprozess von ChatGPT und werfen einen genaueren Blick auf die Verwendung von Reinforcement Learning bei der Sprachmodellierung. Auch interessant: Unser aggregierte Sammlung an LLM Inhalten.


Was ist ein Sprachmodell?


Ein Sprachmodell ist eine Wahrscheinlichkeitsverteilung über Wortfolgen. Durch die Analyse eines großen Textkorpus ist das Modell in der Lage, Sprache in einem mathematischen Sinne zu verstehen. Bei einer Folge von Wörtern der Länge $$m$$ ordnet ein Sprachmodell der gesamten Folge eine Wahrscheinlichkeit $$P(w_0,...,w_{m-1})$$ zu. Um also einen Text als Antwort auf eine Eingabeaufforderung zu generieren, erzeugt das Modell das nächste Wort-Token in Abhängigkeit von seiner Wahrscheinlichkeit in Bezug auf die vorherigen Wörter:

$$P(w_m|w_0,...,w_{m-1},x),$$

wobei $$w_i$$ das Token an Position $$i$$ in der Sequenz und $$x$$ die Eingabeaufforderung ist. Das Modell weist also für jedes Wort eine Wahrscheinlichkeit zu, dass es als nächstes kommt.

Wie erzeugt ein Sprachmodell aus derselben Eingabe unterschiedliche Ausgaben?

Um dies zu erreichen, wurden verschiedene Strategien entwickelt. Eine gängige Strategie ist TOP-K. Angenommen, das Modell sagt die Wahrscheinlichkeit für das nächste Wort voraus, dann wählt es die k Token mit den höchsten Wahrscheinlichkeiten aus und zieht daraus Stichproben. So kann das Modell jedes Mal einen anderen Text erzeugen.


Ein Überblick über Reinforcement Learning


Im Vergleich zum überwachten Lernen ist das Reinforcement Learning eine Art des Lernens, die auf der Interaktion eines Agenten mit der Umwelt basiert. Das Ziel des KI-Agenten ist es, einen einzelnen Skalar, die Belohnung, zu maximieren, wenn er einer Strategie $$\pi$$ folgt.

Wie bei jedem anderen maschinellen Lernverfahren definieren wir eine Reihe von Parametern $$\theta$$, die die Gewichte und Biases eines neuronalen Netzwerks darstellen, um die Strategie $$\pi$$ zu parametrisieren. Mathematisch gesehen besteht das Ziel des Reinforcement Learning darin, die erwartete Belohnung zu maximieren, indem man einer parametrisierten Strategie $$\pi$$ folgt:

$$J{\theta} = E_\pi [r(\tau)],$$

wobei $$\tau$$ eine Folge von (Zustands-, Aktions-) Paaren eines Agenten in der Umgebung ist und $$r(\tau)$$ die Gesamtbelohnung der Trajektorie $$\tau$$ ist. Wie bei jedem Problem des maschinellen Lernens gilt: Wenn wir den Parameter $$\hat{\theta}$$ so finden können, dass

$$\hat{\theta}=\mathrm{argmax}_{\theta} J(\theta),$$

dann haben wir ein Modell, das in der Lage ist, die Aufgabe zu lösen. Ein Standardansatz zur Lösung dieses Maximierungsproblems ist die Verwendung des Gradientenaufstiegs, d.h. ähnlich wie beim Gradientenabstieg aktualisieren wir die Parameter durch:

$$\theta_{t+1} = \theta_t + \alpha \nabla J(\theta_t),$$

wobei $$\alpha$$ eine geeignete Lernrate ist.

Ein Problem beim Reinforcement Learning ist die Erstellung einer Belohnungsfunktion. Es ist immer noch ein Problem, zu wissen, wie viel Belohnung der Agent nach jeder Aktion erhalten soll. Daher ist die Entwicklung einer Belohnungsfunktion oft ein Versuch-und-Irrtum-Verfahren.

Warum verwenden wir Reinforcement Learning bei der Sprachmodellierung?

Mit einem Sprachmodell können wir aus menschlichen Eingaben beeindruckende Texte erzeugen. Aber wie definieren wir eine Antwort des Sprachmodells als "gut"? Außerdem wollen wir nicht, dass unsere Modelle Menschen imitieren, sondern dass sie qualitativ hochwertige Antworten produzieren, so dass der generierte Text beispielsweise weniger toxisch ist.

Eine Verlustfunktion zu schreiben, die diese Eigenschaften erfasst, scheint unlösbar zu sein. Daher können wir stattdessen das menschliche Feedback für den generierten Text als Leistungsmaßstab verwenden, der dann zur Optimierung des Modells herangezogen wird. Diese Idee wird als Reinforcement Learning from human Feedback (RLHF) bezeichnet.


Der Trainingsprozess von ChatGPT


OpenAI stellt den Trainingsprozess eines Sprachmodells mit Hilfe von Reinforcement Learning in drei Schritten vor (siehe auch entsprechende Veröffentlichung):

Schritt 1: Sammeln von Beispieldaten und Trainieren einer überwachten Strategie.

Prompt: Serendipität bedeutet das Auftreten und die Entwicklung von Ereignissen durch Zufall auf eine glückliche oder vorteilhafte Weise. Verwenden Sie das Wort in einem Satz.

Labeler: Die Begegnung mit Margaret und die Bekanntschaft mit Tom war eine Serendipität.

In einem ersten Schritt müssen wir Daten sammeln und eine überwachte Strategie trainieren.

Menschliche Trainer bieten Gespräche an, in denen sie beide Seiten spielen: Sie übernehmen sowohl die Rolle des idealen KI-Assistenten als auch die Rolle des Nutzers. Außerdem haben sie Zugang zu den vom Modell vorgeschlagenen Antworten, so dass sie ihre Antworten selbst verfassen können. Anschließend wird ein vortrainiertes transformatorbasiertes Modell auf diesem Datensatz in Kombination mit dem alten Datensatz, der in ein Dialogformat umgewandelt wird, optimiert.

Die Trainingsaufgaben stammen aus zwei Quellen:

  • einem Datensatz von Prompts, die von den Labelern geschrieben wurden,

  • ein Datensatz von Prompts, die an frühe Versionen der Modelle über die API übermittelt wurden.

Diese Prompts sind sehr vielfältig und umfassen die Erstellung, Beantwortung von Fragen, Dialoge, Zusammenfassungen, Extraktionen und andere natürlichsprachliche Aufgaben. Für jeden Prompt wird die Aufgabe meist direkt durch eine natürlichsprachliche Anweisung spezifiziert, kann aber auch indirekt durch wenige Beispiele oder implizite Kommunikation erfolgen. In jedem Fall werden die Labeler gebeten, ihr Bestes zu geben, um die Absicht des Benutzers, der den Prompt geschrieben hat, zu erschließen und die Eingaben, bei denen die Aufgabe sehr unklar ist, zu überspringen. Darüber hinaus berücksichtigen die Labeler auch die impliziten Absichten wie den Wahrheitsgehalt der Antwort und potenziell gefährliche Outputs.

Die Gruppe der Labeler wurde sorgfältig ausgewählt, sie waren sensibel für die Präferenzen der verschiedenen demografischen Gruppen und sie waren gut darin, potenziell schädliche Ausgaben zu identifizieren.

Schritt 2: Sammeln von Vergleichsdaten und Trainieren eines Belohnungsmodells.

Wie wir bereits erwähnt haben, ist die Belohnungsfunktion schwer zu entwerfen. Das eigentliche Ziel des zweiten Schritts ist es, ein Modell zu erhalten, das ein Paar (Prompt, Text) aufnimmt und eine skalare Belohnung zurückgibt, die die menschliche Präferenz numerisch darstellen sollte. Dieses Modell ist eine Annäherung an die tatsächliche Belohnungsfunktion.

Wir nehmen das feinabgestimmte Modell aus dem ersten Schritt und dieses Modell generiert $$k$$ Textproben zu einem gegebenen Eingabeprompt. Dann wird ein menschlicher Labeler die generierten Beispiele vom besten zum schlechtesten bewerten. Man könnte meinen, dass Menschen eine skalare Punktzahl direkt auf jedes Textstück anwenden sollten, aber dies ist ein schwieriges Problem, da jeder Labeler unterschiedliche Präferenzen haben kann. Wenn man $$k$$ Antworten bewertet, erhält man $$\binom{k}{2}$$ Paare, die verglichen werden können. Da die Vergleiche innerhalb jeder Label-Aufgabe stark korreliert sind, würde ein einziger Durchlauf über den Datensatz zu einer Überanpassung des Reward-Modells führen, wenn wir die Vergleiche einfach in einen Datensatz mischen würden. Stattdessen wird das Reward-Modell auf allen $$\binom{k}{2}$$-Vergleichen aus jedem Prompt als ein einziges Batch-Element trainiert. Dies ist wesentlich recheneffizienter, da es nur einen einzigen Vorwärtsdurchlauf des Reward-Modells erfordert. Und da das Modell nicht mehr überangepasst ist, erreicht es eine verbesserte Validierungsgenauigkeit und einen besseren log-Verlust.

Wir definieren die Verlustfunktion für das Reward-Modell:

$$L (\theta) = -\frac{1}{\binom{k}{2}}E_{(x,y_w,yl)\sim D}[log(\sigma(r_\theta(x,y_w) - r_\theta(x,y_l)))]$$

wobei $$r\theta(x,y)$$ die skalare Ausgabe des Belohnungsmodells für den Prompt $$x$$ und die Vervollständigung $$y$$ ist, $$y_w$$ die bevorzugte Vervollständigung aus dem Paar $$y_w$$ und $$y_l$$ ist und $$D$$ der Datensatz der menschlichen Vergleiche ist. $$\sigma$$ bezeichnet die Sigmoidfunktion. Wenn also die Belohnung für den Abschluss $$y_w$$ höher ist als die Belohnung für $$y_l$$, dann ist der Verlust "klein".

Das überwacht feinabgestimmte Modell, bei dem die letzte nicht einbettende Schicht ersetzt wird, nimmt einen Prompt und eine Antwort auf und gibt eine skalare Belohnung aus. Es kann als Belohnungsmodell trainiert werden.

Schritt 3: Optimierung einer Strategie anhand des Belohnungsmodells mit einem PPO-Algorithmus für Reinforcement Learning.

Mit Hilfe der Belohnungsfunktion $$r_\theta$$ aus dem zweiten Schritt definieren wir dann das Ziel für den dritten Schritt:

$$J(\phi) = E_{(x,y)\sim D_{\pi_\phi^{RL}}}[r\theta(x,y)-\beta \log (\frac{\pi_\phi^{RL}(y|x)}{\pi^{SFT}(y|x)})]+\gamma E_{x\sim D_{pretrain}}[\log(\pi^{RL}_\phi(x))]$$

wobei $$\pi\phi^{RL}$$ die gelernte RL-Politik und $$\pi^{SFT}$$ das überwacht feinabgestimmte Modell aus dem ersten Schritt ist. Der Kullback-Leibner (KL) Belohnungskoeffizient $$\beta$$ steuert die Stärke der KL-Strafe. Wir können uns den zweiten Term mit $$\beta$$ als Regularisierer vorstellen, er erreicht, dass $$\pi\phi^{RL}$$ nahe an $$\pi^{SFT}$$ bleibt. Und $$\gamma$$ ist der Pretraining-Verlustkoeffizient, der die Stärke der KL-Strafe bzw. der Pretraining-Gradienten steuert. $$D_{pretrain}$$ bezeichnet den überwachten Datensatz, der zum Trainieren des SFT-Modells verwendet wird, und $$D_{\pi\phi^{RL}}$$ bezeichnet den PPO-Datensatz, der keine menschlichen Labels enthält, dieser Datensatz enthält die Prompts der Labeler. Wir können uns $$D_{\pi_\phi^{RL}}$$ als die Umgebung vorstellen, die unser Agent frei erkunden und lernen soll.

Das Ziel dieses Schrittes ist, Folgendes zu finden:

$$\hat{\phi}=\mathrm{argmax}_{\phi} J(\phi).$$

Das Modell wird dann mit Hilfe von Gradient Ascent in mehreren Iterationen dieses Prozesses aktualisiert. Die Schritte 2 und 3 können fortlaufend wiederholt werden, wobei weitere Vergleichsdaten über die derzeit beste Strategie gesammelt werden, die zum Trainieren eines neuen Belohnungsmodells und dann einer neuen Strategie verwendet werden.


Resultate


Nach der Feinabstimmung von GPT-3 mit Proximal Policy Optimization (PPO) nannte OpenAI es InstructGPT. Die Ergebnisse von InstructGPT werden von den Labelern viel besser bewertet als die Ergebnisse von GPT-3, obwohl es 100 Mal weniger Parameter als GPT-3 hat:

Im Vergleich zu GPT-3 zeigen die InstructGPT-Modelle eine Verbesserung der Wahrhaftigkeit und auch eine leichte Verbesserung der Toxizität gegenüber GPT-3:

Es hat sich gezeigt, dass die Feinabstimmung von Sprachmodellen mit Menschen in der Schleife zu zuverlässigeren Sprachmodellen führt. Dieser Ansatz wurde auch für die Entwicklung von GPT-4 benutzt.

Für weitere Informationen über zuverlässige Sprachmodelle empfehle ich einen unserer Blogbeiträge über Ethik in der natürlichen Sprachverarbeitung.

Finetuning von LLMs mithilfe von Reinforcement Learning ist nicht trivial, weshalb es unter Umständen sinnvoll sein kann, das Gespräch zu einem KI-Unternehmen, wie dida zu suchen, sollten Sie in Erwägung ziehen eigene Modelle im Hinblick auf Ihr Unternehmen zu individualisieren.

An dieser Stelle wollen wir letztlich noch auf unsere Kontaktmöglichkeiten verweisen, innerhalb dieser wir gerne über LLM-Themen beraten.