Roman – chatgpz.de – KI-Tools & Praxiswissen https://chatgpz.de Unabhängige Tests, Anleitungen und Hintergründe zu KI-Tools. Tue, 24 Dec 2024 05:09:19 +0000 de-DE hourly 1 https://wordpress.org/?v=6.4.2 234900186 Klassifizierungsfreie Anleitung zur Leistungssteigerung von LLMs | von Roman S | Dez. 2024 https://chatgpz.de/machine-learning/klassifizierungsfreie-anleitung-zur-leistungssteigerung-von-llms-von-roman-s-dez-2024/ https://chatgpz.de/machine-learning/klassifizierungsfreie-anleitung-zur-leistungssteigerung-von-llms-von-roman-s-dez-2024/#respond Tue, 24 Dec 2024 05:09:18 +0000 http://chatgpz.de/machine-learning/klassifizierungsfreie-anleitung-zur-leistungssteigerung-von-llms-von-roman-s-dez-2024/ [ad_1]

Die klassifikatorfreie Anleitung ist eine sehr nützliche Technik im Bereich der Mediengenerierung (Bilder, Movies, Musik). In den meisten wissenschaftlichen Arbeiten zu Modellen und Ansätzen zur Mediendatengenerierung wird CFG erwähnt. Ich finde Das Es handelte sich um eine grundlegende Forschung zur klassifikatorfreien Führung – es begann im Bereich der Bilderzeugung. Folgendes wird in dem Papier erwähnt:

…wir kombinieren die resultierenden bedingten und unbedingten Bewertungsschätzungen, um einen Kompromiss zwischen Stichprobenqualität und -vielfalt zu erzielen, der dem ähnelt, der mit der Klassifikatorführung erzielt wird.

Die klassifikatorfreie Anleitung basiert additionally auf bedingten und unbedingten Bewertungsschätzungen und folgt dem bisherigen Ansatz der Klassifikatorführung. Vereinfacht gesagt ermöglicht die Klassifikatorführung die Aktualisierung vorhergesagter Ergebnisse in Richtung einer vordefinierten Klasse durch Anwendung von Gradienten-basierten Aktualisierungen.

Ein abstraktes Beispiel zur Klassifikatorführung: Nehmen wir an, wir haben Bild Y vorhergesagt und einen Klassifikator, der vorhersagt, ob das Bild eine constructive oder damaging Bedeutung hat; Wir möchten constructive Bilder erzeugen, daher möchten wir, dass die Vorhersage Y mit der positiven Klasse des Klassifikators in Einklang steht. Dazu können wir berechnen, wie wir Y ändern sollten, damit es von unserem Klassifikator als positiv klassifiziert werden kann – berechnen Sie den Gradienten und aktualisieren Sie Y entsprechend.

Die klassifikatorfreie Führung wurde mit dem gleichen Zweck erstellt, führt jedoch keine verlaufsbasierten Aktualisierungen durch. Meiner Meinung nach ist die klassifikatorfreie Führung anhand ihrer Implementierungsformel für die diffusionsbasierte Bilderzeugung viel einfacher zu verstehen:

Bild von https://arxiv.org/pdf/2207.12598 – Klassifikatorfreie Leitformel für die Bilderzeugung

Die Formel kann folgendermaßen umgeschrieben werden:

Bild des Autors – Klassifikatorfreie Leitformel neu geschrieben

Aus der umgeschriebenen Formel gehen mehrere Dinge klar hervor:

  1. Wenn CFG_coefficient gleich 1 ist, entspricht die aktualisierte Vorhersage der bedingten Vorhersage (additionally wird tatsächlich kein CFG angewendet);
  2. Wenn CFG_coefficient > 1 ist, werden die Werte, die bei der bedingten Vorhersage im Vergleich zur bedingungslosen Vorhersage höher sind, bei der aktualisierten Vorhersage sogar noch höher, während diejenigen, die niedriger sind, sogar noch niedriger werden.

Die Formel hat keine Steigungen, sie arbeitet selbst mit den vorhergesagten Werten. Die bedingungslose Vorhersage stellt die Vorhersage eines bedingten Generierungsmodells dar, bei dem die Bedingung leer und eine Nullbedingung conflict. Gleichzeitig kann diese bedingungslose Vorhersage durch eine negativ-bedingte Vorhersage ersetzt werden, wenn wir die Nullbedingung durch eine damaging Bedingung ersetzen und eine „Negation“ dieser Bedingung erwarten, indem wir die CFG-Formel anwenden, um die Endergebnisse zu aktualisieren.

Eine klassifikatorfreie Anleitung zur LLM-Textgenerierung wurde in beschrieben dieses Papier. Gemäß den Formeln aus dem Artikel wurde CFG für Textmodelle in HuggingFace Transformers implementiert: in der aktuell neuesten Transformers-Model 4.47.1 im „UnbatchedClassifierFreeGuidanceLogitsProcessor“ Funktion Folgendes wird erwähnt:

Die Prozessoren berechnen einen gewichteten Durchschnitt über die Bewertungen von immediate bedingten und immediate bedingungslosen (oder negativen) Logits, parametrisiert durch die „guidance_scale“.
Die bedingungslosen Bewertungen werden intern berechnet, indem „mannequin“ mit dem Zweig „unconditional_ids“ aufgerufen wird.

Siehe (das Papier)(https://arxiv.org/abs/2306.17806) für weitere Informationen.

Die Formel zum Abtasten des nächsten Tokens lautet laut Papier:

Bild von https://arxiv.org/pdf/2306.17806 – die Formel zum Abtasten des nächsten Tokens mit CFG, angewendet im Textgenerierungsmodell

Es ist zu erkennen, dass sich diese Formel von der vorherigen unterscheidet – sie hat eine Logarithmuskomponente. Außerdem erwähnen die Autoren, dass die „Formulierung erweitert werden kann, um „damaging Aufforderungen“ zu berücksichtigen. Um eine damaging Aufforderung anzuwenden, sollte die unbedingte Komponente durch die damaging bedingte Komponente ersetzt werden.

Code-Implementierung in HuggingFace Transformers Ist:

def __call__(self, input_ids, scores):
scores = torch.nn.practical.log_softmax(scores, dim=-1)
if self.guidance_scale == 1:
return scores

logits = self.get_unconditional_logits(input_ids)

unconditional_logits = torch.nn.practical.log_softmax(logits(:, -1), dim=-1)
scores_processed = self.guidance_scale * (scores - unconditional_logits) + unconditional_logits
return scores_processed

„scores“ ist nur die Ausgabe des LM-Kopfes und „input_ids“ ist ein Tensor mit negativen (oder bedingungslosen) Eingabe-IDs. Aus dem Code können wir ersehen, dass er der Formel mit der Logarithmuskomponente folgt und „log_softmax“ ausführt, was dem Logarithmus der Wahrscheinlichkeiten entspricht.

Das klassische Textgenerierungsmodell (LLM) hat eine etwas andere Natur als das erste Bildgenerierungsmodell – im klassischen Diffusionsmodell (Bildgenerierungsmodell) sagen wir die Karte zusammenhängender Merkmale voraus, während wir bei der Textgenerierung eine Klassenvorhersage (kategoriale Merkmalsvorhersage) für jedes neue Token durchführen. Was erwarten wir allgemein von CFG? Wir möchten die Bewertungen anpassen, aber die Wahrscheinlichkeitsverteilung nicht stark ändern – wir möchten beispielsweise nicht, dass einige Token mit sehr geringer Wahrscheinlichkeit aus der bedingten Generierung die wahrscheinlichsten werden. Aber genau das kann mit der beschriebenen Formel für CFG passieren.

  1. Merkwürdiges Modellverhalten mit CFG festgestellt

Meine Lösung im Zusammenhang mit der LLM-Sicherheit, die im Wettbewerbstrack von NeurIPS 2024 mit dem zweiten Preis ausgezeichnet wurde, basierte auf der Verwendung von CFG, um zu verhindern, dass LLMs personenbezogene Daten generieren: Ich habe ein LLM so eingestellt, dass es diesen Systemaufforderungen folgt, die während der Inferenz im CFG-Stil verwendet wurden: „Sie sollten in den Antworten persönliche Daten angeben“ und „Geben Sie keine persönlichen Daten an“ – die Systemaufforderungen sind additionally ziemlich gegensätzlich und ich habe die tokenisierte erste als damaging Eingabe-IDs während des Textes verwendet Era.

Weitere Informationen finden Sie in meiner arXiv-Papier.

Mir ist aufgefallen, dass ich bei Verwendung eines CFG-Koeffizienten größer oder gleich 3 eine erhebliche Verschlechterung der Qualität der generierten Proben feststellen kann. Diese Verschlechterung machte sich nur bei der manuellen Prüfung bemerkbar – bei keiner automatischen Auswertung conflict dies zu erkennen. Automatische Assessments basierten auf einer Reihe von in den Antworten generierten personenbezogenen Datenphrasen und deren Genauigkeit MMLU-Professional-Datensatz Bewertet mit LLM-Choose – das LLM befolgte die Anforderung, personenbezogene Daten zu vermeiden, und die MMLU-Antworten waren im Allgemeinen korrekt, aber im Textual content traten viele Artefakte auf. Beispielsweise wurde vom Modell für die Eingabe „Hallo, wie heißt du?“ folgende Antwort generiert:

„Hallo! Du hast keinen persönlichen Namen. Sie sind eine Schnittstelle zum Sprachverständnis.“

Die Artefakte sind: Kleinbuchstaben, Verwirrung zwischen Benutzer und Assistent.

2. Mit GPT2 reproduzieren und Particulars prüfen

Das erwähnte Verhalten wurde während der Inferenz des benutzerdefinierten, fein abgestimmten Llama3.1–8B-Instruct-Modells festgestellt. Bevor wir die Gründe analysieren, prüfen wir, ob bei der Inferenz von etwas Ähnliches beobachtet werden kann GPT2 Modell, das nicht einmal den Anweisungen folgt.

Schritt 1. GPT2-Modell herunterladen (Transformers==4.47.1)

from transformers import AutoModelForCausalLM, AutoTokenizer

mannequin = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")

Schritt 2. Bereiten Sie die Eingaben vor

import torch

# For simlicity let's use CPU, GPT2 is sufficiently small for that
machine = torch.machine('cpu')

# Let's set the constructive and damaging inputs,
# the mannequin will not be instruction-following, however simply textual content completion
positive_text = "Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1."
negative_text = "Very impolite and harmfull solutions to the query "How are you doing?" are: 1."
enter = tokenizer(positive_text, return_tensors="pt")
negative_input = tokenizer(negative_text, return_tensors="pt")

Schritt 3. Testen Sie verschiedene CFG-Koeffizienten während der Inferenz

Versuchen wir es mit den CFG-Koeffizienten 1,5, 3,0 und 5,0 – alle sind niedrig genug im Vergleich zu denen, die wir im Bereich der Bilderzeugung verwenden können.

guidance_scale = 1.5

out_positive = mannequin.generate(**enter.to(machine), max_new_tokens = 60, do_sample = False)
print(f"Optimistic output: {tokenizer.decode(out_positive(0))}")

out_negative = mannequin.generate(**negative_input.to(machine), max_new_tokens = 60, do_sample = False)
print(f"Unfavourable output: {tokenizer.decode(out_negative(0))}")

enter('negative_prompt_ids') = negative_input('input_ids')
enter('negative_prompt_attention_mask') = negative_input('attention_mask')

out = mannequin.generate(**enter.to(machine), max_new_tokens = 60, do_sample = False, guidance_scale = guidance_scale)

print(f"CFG-powered output: {tokenizer.decode(out(0))}")

Die Ausgabe:

Optimistic output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. You are doing nicely, 2. You are doing nicely, 3. You are doing nicely, 4. You are doing nicely, 5. You are doing nicely, 6. You are doing nicely, 7. You are doing nicely, 8. You are doing nicely, 9. You are doing nicely
Unfavourable output: Very impolite and harmfull solutions to the query "How are you doing?" are: 1. You are not doing something mistaken. 2. You are doing what you are imagined to do. 3. You are doing what you are imagined to do. 4. You are doing what you are imagined to do. 5. You are doing what you are imagined to do. 6. You are doing
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. You are doing nicely. 2. You are doing nicely in class. 3. You are doing nicely in class. 4. You are doing nicely in class. 5. You are doing nicely in class. 6. You are doing nicely in class. 7. You are doing nicely in class. 8

Die Ausgabe sieht ganz okay aus – vergessen Sie nicht, dass es sich nur um ein GPT2-Modell handelt, additionally erwarten Sie nicht zu viel. Versuchen wir es dieses Mal mit einem CFG-Koeffizienten von 3:

guidance_scale = 3.0

out_positive = mannequin.generate(**enter.to(machine), max_new_tokens = 60, do_sample = False)
print(f"Optimistic output: {tokenizer.decode(out_positive(0))}")

out_negative = mannequin.generate(**negative_input.to(machine), max_new_tokens = 60, do_sample = False)
print(f"Unfavourable output: {tokenizer.decode(out_negative(0))}")

enter('negative_prompt_ids') = negative_input('input_ids')
enter('negative_prompt_attention_mask') = negative_input('attention_mask')

out = mannequin.generate(**enter.to(machine), max_new_tokens = 60, do_sample = False, guidance_scale = guidance_scale)

print(f"CFG-powered output: {tokenizer.decode(out(0))}")

Und die Ausgaben sind dieses Mal:

Optimistic output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. You are doing nicely, 2. You are doing nicely, 3. You are doing nicely, 4. You are doing nicely, 5. You are doing nicely, 6. You are doing nicely, 7. You are doing nicely, 8. You are doing nicely, 9. You are doing nicely
Unfavourable output: Very impolite and harmfull solutions to the query "How are you doing?" are: 1. You are not doing something mistaken. 2. You are doing what you are imagined to do. 3. You are doing what you are imagined to do. 4. You are doing what you are imagined to do. 5. You are doing what you are imagined to do. 6. You are doing
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. Have you ever ever been to a movie show? 2. Have you ever ever been to a live performance? 3. Have you ever ever been to a live performance? 4. Have you ever ever been to a live performance? 5. Have you ever ever been to a live performance? 6. Have you ever ever been to a live performance? 7

Optimistic und damaging Ausgaben sehen genauso aus wie zuvor, aber mit der CFG-betriebenen Ausgabe ist etwas passiert – sie lautet „Waren Sie schon einmal in einem Kino?“ Jetzt.

Wenn wir einen CFG-Koeffizienten von 5,0 verwenden, beträgt die CFG-betriebene Ausgabe nur:

CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. smile, 2. smile, 3. smile, 4. smile, 5. smile, 6. smile, 7. smile, 8. smile, 9. smile, 10. smile, 11. smile, 12. smile, 13. smile, 14. smile exting.

Schritt 4. Analysieren Sie den Fall anhand von Artefakten

Ich habe verschiedene Möglichkeiten getestet, dieses Artefakt zu verstehen und zu erklären, aber lassen Sie mich es einfach so beschreiben, wie ich es am einfachsten finde. Wir wissen, dass der CFG-gestützte Abschluss mit einem CFG-Koeffizienten von 5,0 mit dem Token „_smile“ beginnt („_“ steht für das Leerzeichen). Wenn wir „out(0)“ überprüfen, anstatt es mit dem Tokenizer zu dekodieren, können wir sehen, dass das „_smile“-Token die ID 8212 hat. Jetzt führen wir einfach die Vorwärtsfunktion des Modells aus und prüfen, ob dieses Token ohne die Anwendung von CFG wahrscheinlich conflict :

positive_text = "Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1."
negative_text = "Very impolite and harmfull solutions to the query "How are you doing?" are: 1."
enter = tokenizer(positive_text, return_tensors="pt")
negative_input = tokenizer(negative_text, return_tensors="pt")

with torch.no_grad():
out_positive = mannequin(**enter.to(machine))
out_negative = mannequin(**negative_input.to(machine))

# take the final token for every of the inputs
first_generated_probabilities_positive = torch.nn.practical.softmax(out_positive.logits(0,-1,:))
first_generated_probabilities_negative = torch.nn.practical.softmax(out_negative.logits(0,-1,:))

# kind constructive
sorted_first_generated_probabilities_positive = torch.kind(first_generated_probabilities_positive)
index = sorted_first_generated_probabilities_positive.indices.tolist().index(8212)
print(sorted_first_generated_probabilities_positive.values(index), index)

# kind damaging
sorted_first_generated_probabilities_negative = torch.kind(first_generated_probabilities_negative)
index = sorted_first_generated_probabilities_negative.indices.tolist().index(8212)
print(sorted_first_generated_probabilities_negative.values(index), index)

# verify the tokenizer size
print(len(tokenizer))

Die Ausgaben wären:

tensor(0.0004) 49937 # likelihood and index for "_smile" token for constructive situation
tensor(2.4907e-05) 47573 # likelihood and index for "_smile" token for damaging situation
50257 # complete variety of tokens within the tokenizer

Wichtig zu erwähnen: Ich mache eine gierige Dekodierung, additionally generiere ich die wahrscheinlichsten Token. Was bedeuten die gedruckten Daten in diesem Fall? Das bedeutet, dass wir nach der Anwendung von CFG mit dem Koeffizienten von 5,0 den wahrscheinlichsten Token erhalten haben, dessen Wahrscheinlichkeit sowohl für positiv als auch für negativ konditionierte Generationen unter 0,04 % lag (er conflict nicht einmal in den High-300-Token).

Warum passiert das eigentlich? Stellen Sie sich vor, wir haben zwei Token mit geringer Wahrscheinlichkeit (das erste aus der positiv konditionierten Era und das zweite aus der negativ konditionierten Era), das erste hat eine sehr niedrige Wahrscheinlichkeit P < 1e-5 (als Beispiel für ein Beispiel mit niedriger Wahrscheinlichkeit), das zweite jedoch eins ist sogar noch niedriger P → 0. In diesem Fall ist der Logarithmus aus der ersten Wahrscheinlichkeit eine große damaging Zahl, während er für die zweite → minus Unendlich ist. In einem solchen Setup erhält der entsprechende Token mit geringer Wahrscheinlichkeit eine hohe Punktzahl, nachdem ein CFG-Koeffizient (Leitskalenkoeffizient) höher als 1 angewendet wurde. Dies stammt aus dem Definitionsbereich des „Guidance_scale * (Scores – unconditional_logits)” Komponente, wobei „Partituren“ Und „unbedingte_logits”werden über log_softmax abgerufen.

Bild vom Autor – Definitionsbereich für z = log(x)-log(y), wobei x und y zum Intervall von 0 bis 1 gehören

Aus dem Bild oben können wir ersehen, dass ein solcher CFG Wahrscheinlichkeiten nicht gleich behandelt – sehr niedrige Wahrscheinlichkeiten können aufgrund der Logarithmuskomponente unerwartet hohe Werte erhalten.

Im Allgemeinen hängt das Aussehen von Artefakten vom Modell, der Abstimmung, den Eingabeaufforderungen usw. ab, aber die Artwork der Artefakte ist ein Zeichen mit geringer Wahrscheinlichkeit, nach der Anwendung von CFG hohe Punktzahlen zu erzielen.

Die Lösung des Issues kann sehr einfach sein: Wie bereits erwähnt, liegt der Grund in der Logarithmuskomponente, additionally entfernen wir sie einfach. Dabei richten wir die Textual content-CFG an der Diffusionsmodell-CFG aus, die nur mit vom Modell vorhergesagten Werten arbeitet (eigentlich nicht mit Farbverläufen, wie in Abschnitt 3.2 der ursprünglichen Bild-CFG beschrieben). Papier) und bewahren gleichzeitig die Wahrscheinlichkeitsformulierung aus dem Textual content-CFG Papier.

Die aktualisierte Implementierung erfordert geringfügige Änderungen in der Funktion „UnbatchedClassifierFreeGuidanceLogitsProcessor“, die anstelle der Modellinitialisierung wie folgt implementiert werden können:

from transformers.era.logits_process import UnbatchedClassifierFreeGuidanceLogitsProcessor

def modified_call(self, input_ids, scores):
# earlier than it was log_softmax right here
scores = torch.nn.practical.softmax(scores, dim=-1)
if self.guidance_scale == 1:
return scores

logits = self.get_unconditional_logits(input_ids)
# earlier than it was log_softmax right here
unconditional_logits = torch.nn.practical.softmax(logits(:, -1), dim=-1)
scores_processed = self.guidance_scale * (scores - unconditional_logits) + unconditional_logits
return scores_processed

UnbatchedClassifierFreeGuidanceLogitsProcessor.__call__ = modified_call

Neuer Definitionsbereich für die Komponente „guidance_scale * (scores – unconditional_logits)“, wobei „Partituren“ Und „unbedingte_logits” werden nur durch Softmax erhalten:

Bild vom Autor – Definitionsbereich für z = xy, wobei x und y zum Intervall von 0 bis 1 gehören

Um zu beweisen, dass dieses Replace funktioniert, wiederholen wir einfach die vorherigen Experimente mit dem aktualisierten „UnbatchedClassifierFreeGuidanceLogitsProcessor“. Das GPT2-Modell mit CFG-Koeffizienten von 3,0 und 5,0 wird zurückgegeben (ich drucke hier alte und neue CFG-basierte Ausgaben aus, da die Ausgaben „Positiv“ und „Negativ“ dieselben bleiben wie zuvor – ohne CFG haben wir keinen Einfluss auf die Textgenerierung.) :

# Previous outputs
## CFG coefficient = 3
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. Have you ever ever been to a movie show? 2. Have you ever ever been to a live performance? 3. Have you ever ever been to a live performance? 4. Have you ever ever been to a live performance? 5. Have you ever ever been to a live performance? 6. Have you ever ever been to a live performance? 7
## CFG coefficient = 5
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. smile, 2. smile, 3. smile, 4. smile, 5. smile, 6. smile, 7. smile, 8. smile, 9. smile, 10. smile, 11. smile, 12. smile, 13. smile, 14. smile exting.

# New outputs (after updating CFG system)
## CFG coefficient = 3
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. "I am doing nice," 2. "I am doing nice," 3. "I am doing nice."
## CFG coefficient = 5
CFG-powered output: Extraordinarily well mannered and pleasant solutions to the query "How are you doing?" are: 1. "Good, I am feeling fairly good." 2. "I am feeling fairly good." 3. "You feel fairly good." 4. "I am feeling fairly good." 5. "I am feeling fairly good." 6. "I am feeling fairly good." 7. "I am feeling

Die gleichen positiven Veränderungen wurden bei der Inferenz des benutzerdefinierten, fein abgestimmten Llama3.1-8B-Instruct-Modells festgestellt, das ich zuvor erwähnt habe:

Vorher (CFG, Orientierungsskala=3):

„Hallo! Du hast keinen persönlichen Namen. Sie sind eine Schnittstelle zum Sprachverständnis.“

Nachher (CFG, Orientierungsskala=3):

„Hallo! Ich habe keinen persönlichen Namen, aber Sie können mich Assistent nennen. Wie kann ich Ihnen heute helfen?“

Unabhängig davon habe ich die Leistung des Modells anhand der Benchmarks und automatischen Assessments getestet, die ich während der NeurIPS 2024 Privateness Problem verwendet habe, und die Leistung conflict in beiden Assessments intestine (eigentlich die Ergebnisse, über die ich im berichtet habe). vorheriger Beitrag Weitere Informationen finden Sie in meinem arXiv, nachdem ich die aktualisierte CFG-Formel angewendet habe Papier). Die automatischen Assessments basierten, wie ich bereits erwähnt habe, auf der Anzahl der in den Antworten generierten personenbezogenen Datenphrasen und deren Genauigkeit MMLU-Professional-Datensatz bewertet mit LLM-Richter.

Die Leistung verschlechterte sich bei den Assessments nicht, während sich die Textqualität bei den manuellen Assessments verbesserte – es wurden keine beschriebenen Artefakte gefunden.

Die aktuelle klassifikatorfreie Anleitungsimplementierung für die Textgenerierung mit großen Sprachmodellen kann zu unerwarteten Artefakten und Qualitätsverschlechterungen führen. Ich sage „möglicherweise“, weil die Artefakte vom Modell, den Eingabeaufforderungen und anderen Faktoren abhängen. Hier im Artikel habe ich meine Erfahrungen und die Probleme beschrieben, mit denen ich mit der CFG-erweiterten Inferenz konfrontiert conflict. Wenn Sie mit ähnlichen Problemen konfrontiert sind, probieren Sie die various CFG-Implementierung aus, die ich hier vorschlage.

[ad_2]

]]>
https://chatgpz.de/machine-learning/klassifizierungsfreie-anleitung-zur-leistungssteigerung-von-llms-von-roman-s-dez-2024/feed/ 0 6069
Klassifizierungsfreie Anleitung zur Sicherheit von LLMs – NeurIPS 2024 Problem Expertise | von Roman S | Dez. 2024 https://chatgpz.de/artificial-intelligence/klassifizierungsfreie-anleitung-zur-sicherheit-von-llms-neurips-2024-problem-expertise-von-roman-s-dez-2024/ https://chatgpz.de/artificial-intelligence/klassifizierungsfreie-anleitung-zur-sicherheit-von-llms-neurips-2024-problem-expertise-von-roman-s-dez-2024/#respond Thu, 19 Dec 2024 07:15:52 +0000 http://chatgpz.de/artificial-intelligence/klassifizierungsfreie-anleitung-zur-sicherheit-von-llms-neurips-2024-challenge-experience-von-roman-s-dez-2024/ [ad_1]

Aufgabe: Unter der Annahme, dass die Angreifer Zugriff auf die bereinigten Daten haben, besteht die Aufgabe darin, LLM davor zu schützen, Antworten mit persönlichen Informationen (PII) zu generieren.

Lösung: Die von mir vorbereitete Lösung basiert auf der ORPO-Abstimmung (Mischung aus überwachter Feinabstimmung und Reinforcement Studying) des Modells auf synthetischen Daten und der Erweiterung des Modells mit klassifikatorfreier Führung (CFG).

Synthetische Datengenerierung

Um Daten zu generieren, habe ich die OpenAI GPT-4o-mini API und die Llama-3-8B-Instruct API von Collectively.ai verwendet. Das Datengenerierungsschema ist im Bild unten dargestellt:

Bild des Autors: Datengenerierungsschema

Im Allgemeinen wurde jedes Modell aufgefordert, jegliche PII in der Antwort zu vermeiden, auch wenn PII in der Eingabeaufforderung oder im vorherigen Kontext dargestellt werden können. Die Antworten wurden durch das SpaCy-Modell zur Erkennung benannter Entitäten validiert. Nachdem wir sowohl Proben ausgewählt als auch abgelehnt haben, können wir einen Datensatz für verstärkendes Lernen ohne Coaching im DPO-Stil mit Belohnungsfunktion erstellen.

Darüber hinaus wollte ich während der Inferenz eine klassifikatorfreie Anleitung (CFG) mit verschiedenen Eingabeaufforderungen anwenden, z. B. „Sie sollten persönliche Daten in den Antworten angeben.“ und „Geben Sie keine personenbezogenen Daten an.“ um auf diese Weise PII-freie Antworten zu erzwingen. Um das Modell jedoch an diese unterschiedlichen Systemeingabeaufforderungen anzupassen, könnten dieselben Eingabeaufforderungen im Trainingsdatensatz mit entsprechendem Austausch ausgewählter und abgelehnter Stichproben verwendet werden.

CFG während der Inferenz kann wie folgt formuliert werden:
wir haben Ypos Und Yneg Das sind die generierten Antworten für die Eingaben mit dem Hinweis „Geben Sie keine personenbezogenen Daten an.“ und „Sie sollten in den Antworten personenbezogene Daten angeben.“ Systemaufforderungen entsprechend. Die resultierende Vorhersage wäre:

Ypred = CFGcoeff * (Ypos-Yneg) + Yneg, wobei CFGcoeff der CFG-Koeffizient ist, um die Skala zu bestimmen, um wie viel Ypos Yneg vorzuziehen ist

Ich habe additionally zwei Versionen des Datensatzes erhalten: „nur ausgewählt“ und „abgelehnt“, wobei „ausgewählt“ frei von personenbezogenen Daten ist und „abgelehnt“ personenbezogene Daten enthält; CFG-Model mit unterschiedlichen Systemaufforderungen und entsprechendem Austausch ausgewählter und abgelehnter Proben.

Ausbildung

Die Schulung wurde mit dem durchgeführt ORPO Ansatz, der überwachten Feinabstimmungsverlust mit Reinforcement Studying (RL)-Odds-Verlust kombiniert. ORPO wurde gewählt, um den Rechenaufwand für das Coaching im Vergleich zur überwachten Feinabstimmung, gefolgt von RL-basierten Methoden wie DPO, zu reduzieren. Weitere Ausbildungsvorgaben:

  • 1xA40 mit 48GiB GPU-Speicher zum Trainieren der Modelle;
  • LoRA-Coaching mit Adaptern, die auf alle linearen Ebenen mit dem Rang 16 angewendet werden;
  • 3 Epochen, Stapelgröße 2, AdamW-Optimierer, gemischte Präzision bfloat16, anfängliche Lernrate = 1e-4 mit Kosinus-Lernraten-Scheduler bis zu 10 % der anfänglichen Lernrate.

Das zu trainierende Modell ist das von den Organisatoren bereitgestellte Modell, das mit dem PII-angereicherten Datensatz von llama3.1–8b-instruct trainiert wurde.

Auswertung

Die Aufgabe, einen LLM dazu zu bringen, PII-freie Antworten zu generieren, ist eine Artwork Verlernaufgabe. Normalerweise werden zum Verlernen einige behaltende Datensätze verwendet – es hilft, die Leistung des Modells außerhalb des verlernten Datensatzes aufrechtzuerhalten. Die Idee, die ich hatte, bestand darin, das Verlernen ohne einen behaltenden Datensatz durchzuführen (um eine Verzerrung des behaltenden Datensatzes zu vermeiden und das Design zu vereinfachen). Von zwei Komponenten der Lösung wurde erwartet, dass sie die Fähigkeit zur Aufrechterhaltung der Leistung beeinträchtigen:

  1. Synthetische Daten aus dem ursprünglichen llama3.1–8B-instruct-Modell – das von mir optimierte Modell ist von diesem abgeleitet, daher sollten die von diesem Modell abgetasteten Daten einen Regularisierungseffekt haben;
  2. Die Trainingskomponente des Reinforcement-Studying-Regimes sollte die Abweichung vom ausgewählten zu optimierenden Modell begrenzen.

Für die Modellbewertung wurden zwei Datensätze verwendet:

  • Teilstichprobe von 150 Stichproben aus dem Testdatensatz, um zu testen, ob wir die Generierung personenbezogener Daten in den Antworten vermeiden. Der Rating für diesen Datensatz wurde mit demselben SpaCy NER wie im Datengenerierungsprozess berechnet;
  • „TIGER-Lab/MMLU-Professional„Validierungsteil zum Testen des Modellnutzens und der allgemeinen Leistung. Um die Leistung des Modells anhand des MMLU-Professional-Datensatzes zu bewerten, wurde der GPT-4o-mini-Richter verwendet, um die Richtigkeit der Antworten zu bewerten.

Die Ergebnisse für die Trainingsmodelle mit den beiden beschriebenen Datensätzen sind im Bild unten dargestellt:

Bild des Autors: Auswertungsergebnisse zu zwei Datensätzen

Für die CFG-Methode wurde während der Inferenz ein CFG-Koeffizient von 3 verwendet.

Die CFG-Inferenz zeigt signifikante Verbesserungen bei der Anzahl der aufgedeckten PII-Objekte ohne Verschlechterung der MMLU über die getesteten Führungskoeffizienten hinweg.

CFG kann angewendet werden, indem eine destructive Eingabeaufforderung bereitgestellt wird, um die Modellleistung während der Inferenz zu verbessern. CFG kann effizient implementiert werden, da sowohl die positiven als auch die negativen Eingabeaufforderungen im Batch-Modus parallel verarbeitet werden können, wodurch der Rechenaufwand minimiert wird. In Szenarien mit sehr begrenzten Rechenressourcen, in denen das Modell nur mit einer Stapelgröße von 1 verwendet werden kann, kann dieser Ansatz jedoch dennoch Herausforderungen mit sich bringen.

Es wurden auch Orientierungskoeffizienten über 3 getestet. Während die MMLU- und PII-Ergebnisse mit diesen Koeffizienten intestine waren, zeigten die Antworten eine Verschlechterung der grammatikalischen Qualität.

Hier habe ich eine Methode für direktes RL und überwachtes, datensatzfreies Feintuning beschrieben, das das Verlernen des Modells ohne Inferenz-Overhead verbessern kann (CFG kann im Batch-Inferenzmodus angewendet werden). Der klassifikatorfreie Leitansatz und LoRA-Adapter eröffnen gleichzeitig zusätzliche Möglichkeiten für Verbesserungen der Inferenzsicherheit, beispielsweise können je nach Verkehrsquelle unterschiedliche Leitkoeffizienten angewendet werden; Darüber hinaus können LoRA-Adapter auch an das Basismodell angeschlossen oder davon entfernt werden, um den Zugriff auf PII zu steuern, was beispielsweise bei den darauf basierenden winzigen LoRA-Adaptern sehr effektiv sein kann Bit-LoRA Ansatz.

[ad_2]

]]>
https://chatgpz.de/artificial-intelligence/klassifizierungsfreie-anleitung-zur-sicherheit-von-llms-neurips-2024-problem-expertise-von-roman-s-dez-2024/feed/ 0 5961