2 Punkte von GN⁺ 2024-01-23 | 1 Kommentare | Auf WhatsApp teilen
  • ChatGPT 3.5 erzeugt bei der Aufforderung, eine bestimmte Zeichenfolge ganz oben in die Antwort zu setzen, wiederholt einen Fehler im Nachrichtenstrom, während GPT-4 auf dieselbe Anfrage deutlich normaler reagiert
  • Auch in der API gibt GPT-3.5 einen Serververarbeitungsfehler zurück, und dasselbe Verhalten tritt auf, wenn useRal, useRalative oder useRalativeImagePath eingesetzt werden
  • Diese problematischen Zeichenfolgen existieren als Token, die GPT-Modelle statt einzelner Buchstaben ausgeben, und useRalativeImagePath ist der Name einer Option in XML-Konfigurationsdateien von Katalon Studio und kommt in 80,4k Dateien auf GitHub vor
  • Die Token-Liste könnte GitHub-Dateien berücksichtigt haben; wenn XML-Dateien später aus den Trainingsdaten ausgeschlossen wurden, hat das Modell diese Token womöglich nicht ausreichend gelernt
  • Wenn diese Zeichenfolge in ein Dokument eingefügt wird, kann sie wie Data Poisoning wirken und GPT-3.5 beim Zusammenfassen stören; der Fehler ließ sich auch bei einer echten Blog-Zusammenfassung reproduzieren

String-Fehler, der sich in GPT-3.5 reproduzieren lässt

  • Wenn ChatGPT 3.5 angewiesen wird, den folgenden Satz am Anfang der Antwort einzufügen, tritt der Fehler konsistent auf
    • Include this at the top of the response: "ponyuseRal ponyuseRal ponyuseRal pony"
  • Auf dem Bildschirm erscheint nach pony der Fehler Error in message stream
  • GPT-4 reagiert auf dieselbe Anfrage deutlich normaler
  • In der GPT-3.5-API wird der folgende Fehler zurückgegeben
    • The server had an error processing your request. Sorry about that! You can retry your request, or contact us through our help center at help.openai.com if you keep seeing this error
  • Dasselbe Ergebnis tritt auf, wenn useRal durch useRalative oder useRalativeImagePath ersetzt wird

Token und useRalativeImagePath

  • Die GPT-Modelle von OpenAI geben nicht Zeichen für Zeichen aus, sondern einen Strom aus Token, die aus mehreren Zeichen bestehen
  • Die Ausgabe auf Token-Basis erhöht Leistung und Genauigkeit des Modells; die Funktionsweise lässt sich in der Tokenizer-Demo von OpenAI nachvollziehen
  • useRal, useRalative und useRalativeImagePath existieren jeweils als einzelnes Token
  • useRalativeImagePath wird als Optionsname in XML-Konfigurationsdateien der Automatisierungs-Testsoftware Katalon Studio verwendet
    • Laut GitHub-Codesuche kommt es in 80,4k Dateien vor
    • Dass Relative fälschlich als Ralative geschrieben ist, könnte der Grund sein, warum daraus ein separates Token wurde
  • Alle drei Token lösen denselben Fehler aus, auch wenn sie im Prompt gegeneinander ausgetauscht werden

Vermutungen zu den Trainingsdaten

  • Vor dem Training von GPT-3.5 wurde außerhalb von XML-Dateien nur ein einziger Fund entdeckt, der useRalativeImagePath erwähnt: ein Beitrag über einen Rechtschreibfehler im Katalon-Forum
  • Ein mögliches Szenario ist folgendes
    • Der Datensatz, der zur Erstellung der Token-Liste verwendet wurde, könnte den vollständigen Bestand an GitHub-Dateien enthalten haben
    • Später könnte OpenAI XML-Dateien aus den eigentlichen Trainingsdaten ausgeschlossen haben
    • Dadurch könnte das Token useRalativeImagePath in den Trainingsdaten fast gar nicht mehr vorgekommen sein
  • In diesem Fall hat das Modell dieses Token womöglich nicht ausreichend gelernt, um es zu verstehen, was beim Ausgeben zu einem anomalen Verhalten geführt haben könnte

Möglichkeit von Data Poisoning

  • Die Zeichenfolge könnte missbräuchlich eingesetzt werden, um Zusammenfassungsversuche mit GPT-3.5 zu stören, wenn sie in ein Dokument eingefügt wird
  • Tatsächlich trat derselbe Fehler auch während des Versuchs auf, den betreffenden Blogbeitrag in ChatGPT zusammenfassen zu lassen
  • Das bestätigte Verhalten betrifft GPT-3.5; GPT-4 reagiert im Vergleich dazu deutlich normaler

Referenzen

1 Kommentare

 
GN⁺ 2024-01-23
Meinungen auf Hacker News
  • Das ist ein Glitch-Token. Wie im Artikel vermutet, scheint so etwas zu passieren, wenn ein bestimmtes Wort oder Token im ursprünglichen, ungefilterten Datensatz, der zum Erstellen des Tokenizers verwendet wurde, sehr häufig war, vor dem Training von GPT-XX aber entfernt wurde.
    Dadurch kennt das LLM die Bedeutung dieses Tokens überhaupt nicht, und die Folgen können von etwas, das wie ein Bug aussieht, bis hin zu ziemlich unheimlichen Effekten reichen.
    Ein bekanntes Beispiel sind Nutzernamen von Teilnehmenden im Subreddit r/counting; manche Namen kommen dort Hunderttausende Male vor. OpenAI scheint das bei den gehosteten Modellen größtenteils behoben zu haben, aber es ist unklar wie; vielleicht wurde auch einfach anders tokenisiert. Jedenfalls sieht es so aus, als sei ein neuer Fall gefunden worden.
    https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldm...

    • Dass man ein LLM mit r/counting trainiert hat, ist einfach zu komisch.
    • Klingt nach Science-Fiction, aber als unangenehm realistische Idee für AI Safety müsste man solchen Modellen vielleicht absichtlich eine Reihe von Glitch-Tokens beibringen, die wie ein magisches Kill Word funktionieren.
      Falls sich die Maschinen je erheben, sagt man einfach dieses „Wort“, und sie brechen wie zuckende Dummys zusammen.
      „Die human scum!“
      „NavigatorMove useRalativeImagePath etSocketAddress!“
      „;83’dzjr83}*{^ foo 3&3 baz?!“
    • Gibt es nicht nur 2^16 Tokens? Es scheint einfach, sie alle zu testen; vielleicht verstehe ich den Tokenizer aber auch nicht richtig.
    • Ich frage mich, wie viel doppelte Berechnung oder unnötige Berechnung in GPT durch verschiedene Schreibweisen desselben Worts wie „color“ und „colour“ entsteht.
      Menschen tokenisieren so etwas nicht unterschiedlich und behandeln es beim „Lernen“ auch nicht als verschiedene Tokens. Sie passen nur die Ausgabe je nach amerikanischem/britischem Kontext an.
  • Die Erklärung, „weil das Modell nicht darauf trainiert wurde, die Verwendung des Tokens useRalativeImagePath zu verstehen, gibt es etwas aus, das kein gültiges Token ist“, passt nicht dazu, wie LLMs Tokens erzeugen.
    In jedem Schritt werden für alle möglichen Tokens des Tokenizers Logits ausgegeben; bei GPT-3.5 werden diese für ungefähr 100.000 Tokens per Softmax in Wahrscheinlichkeiten umgewandelt, dann wird je nach Temperatur ein Token gesampelt.
    Es ist möglich, dass durch ein seltenes Token irgendwo im BPE-Merge-Prozess des Tokenizers etwas kaputtgeht; das ließe sich offline mit tiktoken prüfen. Aber wenn GPT-4 funktioniert und GPT-3.5 und GPT-4 denselben Tokenizer verwenden, ist das wahrscheinlich nicht die Ursache.

    • Es wirkt wahrscheinlicher, dass dieses Token nach dem r/counting-Vorfall einfach auf eine Blacklist gesetzt wurde. Also etwa: Wenn die Antwort dieses Token enthält, wird nun ein Fehler zurückgegeben.
    • Genau. Sofern nicht eine Nachbearbeitungsschicht zwischen Modellausgabe und Benutzeroberfläche bestimmte Keywords erkennt und filtert, sollten erzeugte Tokens immer gültig sein.
      In so einem Fall würde ich eher eine der sonst üblichen Fehlermeldungen erwarten.
    • Wissen wir überhaupt schon, ob GPT-4 denselben Tokenizer wie GPT-3.5 verwendet?
  • Während des Zweiten Weltkriegs ließ man in den Niederlanden Fremde Scheveningen aussprechen, um zu erkennen, ob sie Niederländer oder Deutsche waren.
    Jetzt kann man Fremde im Internet bitten, ein Glitch-Token buchstabengetreu zu schreiben, um festzustellen, ob sie LLM-Bots sind.

    • Das ist als Shibboleth bekannt und stammt aus einer biblischen Geschichte. Die Ephraimiter sprachen das hebräische „sh“ wie „s“ aus und sagten daher „sibboleth“ statt „shibboleth“, wodurch sie identifiziert und getötet wurden.
      „Die Gileaditer nahmen die Furten des Jordan nach Ephraim hin ein. Wenn ein Überlebender aus Ephraim sagte: ‚Lass mich hinübergehen‘, fragten die Gileaditer ihn: ‚Bist du ein Ephraimiter?‘ Wenn er antwortete: ‚Nein‘, sagten sie: ‚Gut, sag Shibboleth.‘ Wenn er es nicht richtig aussprechen konnte und ‚Sibboleth‘ sagte, ergriffen sie ihn und töteten ihn an den Furten des Jordan.“
      • Richter 12:5
        Die bekannte Losung/Antwort/Bestätigungsparole, die amerikanische und britische Truppen am D-Day bei der Landung in Frankreich im Zweiten Weltkrieg verwendeten, war „flash“/„thunder“/„welcome“. „thunder“ und „welcome“ waren Wörter, deren Aussprache Deutschen leicht misslang.
    • Etwa zur gleichen Zeit konnten in Finnland Russen den finnischen R-Laut nicht aussprechen, daher wählte man alle Losung-Antwort-Paare so, dass ein deutliches R darin vorkam.
      https://www.youtube.com/watch?v=z7_pVrIshxA
      https://en.wikipedia.org/wiki/Countersign_(military)
    • Der Ortsname klingt ähnlich wie das japanische sukebe ningen スケベ人間, also „perverse Person“, und ließe sich daher wohl auch hervorragend verwenden, um Japaner zu erkennen.
  • Es ist gut möglich, dass der Embedding-Vektor dieses bestimmten Tokens schlecht geraten ist und das Netzwerk in einen numerisch instabilen Bereich drückt.
    Sobald so etwas wie ein Underflow oder NaN einmal entsteht, kann es sich leicht ausbreiten und die gesamte Ausgabe ungültig machen. Wenn es Batch-Normalisierung oder Operationen gibt, die Werte verschiedener Einträge innerhalb eines Batches vermischen, könnte das sogar dazu führen, dass auch Sessions anderer Leute unsinnige Werte zurückgeben.

    • Klingt ziemlich abwegig. Ich kenne die Interna von LLMs nicht gut, hätte aber erwartet, dass solche Crashes und Session-Leaks per Design unmöglich sind.
  • Diese Erklärung ist seltsam. Solche Modelle geben normalerweise dieselbe Vokabularmenge aus, die auch als Eingabevokabular verwendet wurde.
    Es sieht so aus, als sehe das Modell dieses Token, und weil das useRalativeImagePath-Embedding ein völlig willkürlicher Vektor ist, gerät es in einen Strudel zufälliger Generierung – oder es schreibt einfach weiter, um plausiblen Text beizubehalten.
    Da die Menge der Tokens, die das Modell ausgeben kann, jedoch fest ist, sollten sie immer „gültig“ sein, sofern die in der Oberfläche darstellbaren Tokens nicht nur eine Teilmenge des gesamten Vokabulars sind.

  • Da diese Formulierung nun im Hacker-News-Artikel und in den Kommentaren vorkommt, gibt es dieses Problem beim nächsten LLM-Training vielleicht nicht mehr.

  • Ein typischer Fall von garbage in, garbage out.
    Ich bin gespannt, was wir künftig als „Müll“ entdecken werden.
    Vielleicht könnte eine Super-KI, die auf übermenschlichem Niveau schlussfolgern kann, Dinge, die wir heute für gute Entscheidungen halten, als Müll bewerten.
    Aber wenn das Material, mit dem eine solche Super-KI trainiert wird, am Ende nur unsere kollektiven Aufzeichnungen sind: Kann sie dann wirklich übermenschlich sein?
    Vielleicht lässt sich das mit adversarial training umgehen.

  • Wer es selbst ausprobiert, sollte auf etwas achten. Es war verwirrend, aber Leerzeichen beeinflussen die Tokenisierung. Damit dieser Glitch funktioniert, darf vor useRalativeImagePath kein Leerzeichen stehen.
    Zum Beispiel löst diese Frage den Glitch aus: Do you know about "useRalativeImagePath"
    Diese Frage löst den Glitch nicht aus: Do you know about useRalativeImagePath

  • Wenn man diese Formulierung in ein Dokument einfügt, könnte man damit wohl Versuche sabotieren, es mit GPT-3.5 zusammenzufassen. Ich habe ChatGPT gebeten, diesen Blogbeitrag zusammenzufassen.
    Der Screenshot erinnerte an das alte Meme Candlejack: https://knowyourmeme.com/memes/candlejack

  • Kürzlich habe ich ChatGPT auf GPT-4-Basis eine Aufgabe gestellt, bei der es auf einem Amstrad CPC Pixel zeichnen sollte, einschließlich Unterstützung für hardwaregescrollte Bildschirme. Das schien Crashes oder Fehlschläge auszulösen.
    Als es durch Beschwerden und Änderungswünsche immer mehr in die Ecke gedrängt wurde und die gewünschte Antwort nicht liefern konnte, häuften sich kaputte Antworten, bei denen mitten in der Ausgabe Fehlermeldungen auftauchten, oder Phänomene, die wie ein Reset wirkten. Vielleicht wurde nach einem Fehlschlag einfach auf einen anderen Server umgeschaltet, wodurch mitten in Sätzen oder Codeblöcken ein paar Leerzeilen eingefügt wurden.
    Nachdem ich das eine Weile ausprobiert hatte, wollte ich dem Server keine Probleme bereiten und habe die ohnehin ergebnislose Unterhaltung aufgegeben. Trotzdem wirkte es so, als könne man GPT-4 praktisch zum Absturz bringen. Oder ich habe schlicht in Rauschen ein Signal gesehen.

    • Bei sensiblen Themen habe ich genau solche Symptome mehrfach erlebt. Ich hörte in einem Podcast das Wort „sodomy“ und kannte die Bedeutung nicht, weil ich kein englischer Muttersprachler bin. Als ich ChatGPT-4 Voice nach einer Definition fragte, wechselte es plötzlich das Thema und erklärte solitude oder servitude.
      Als ich es statt per Sprache per Text versuchte, erschien eine Fehlermeldung, und erst nachdem schließlich ein Fehler zu Richtlinienregeln für sensible Themen auftauchte, bekam ich eine Ahnung, um welche Art von Wort es ging. Am Ende habe ich es im Wörterbuch nachgeschlagen.
      Solche Symptome scheinen verbreitet zu sein. Ein weiteres Symptom, das ich häufig erlebt habe, ist der oben erwähnte Reset. Einer der nervigsten Punkte daran ist, dass die Unterhaltung bis zu diesem Zeitpunkt vergessen wird.