Trend-Themen
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Warum passiert das? Das Modell glaubt, dass es ein Seepferdchen-Emoji gibt, sicher, aber warum führt das dazu, dass es ein *anderes* Emoji ausgibt? Hier ist ein Hinweis von jedem Lieblingswerkzeug zur Interpretierbarkeit, dem Logit Lens!
Im Logit Lens verwenden wir den lm_head des Modells auf eine seltsame Weise. Typischerweise wird der lm_head verwendet, um den Residual (den internen Zustand, der über die Modellschichten aufgebaut wird) nach der letzten Schicht in eine Menge von Token-Wahrscheinlichkeiten umzuwandeln. Aber im Logit Lens verwenden wir den lm_head nach *jeder* Schicht - was uns zeigt, welche Tokens das Modell ausgeben würde, wenn diese Schicht die letzte Schicht wäre.
Für frühe Schichten führt dies zu schwer interpretierbaren Zuständen. Aber während wir durch die Schichten gehen, verfeinert das Modell iterativ den Residual zuerst in Richtung Konzepte, die nützlich sind, um den Text fortzusetzen, und dann in Richtung der endgültigen Vorhersage.
Wenn wir uns das Bild erneut ansehen, haben wir in der letzten Schicht die tatsächliche Ausgabe des Modells - ĠðŁ, IJ, ł - auch bekannt als ein Emoji-Byte-Präfix, gefolgt vom Rest des Fisch-Emojis.
(Es sieht aus wie Unicode-Nonsens wegen einer Tokenisierungsquirke - keine Sorge. Wenn du neugierig bist, frag Claude nach dieser Codezeile: `bytes([byte_decoder[c] for c in 'ĠðŁIJł']).decode('utf-8') == ' 🐠'`)
Aber schau, was in den mittleren Schichten passiert - wir bekommen nicht nur Emoji-Bytes! Wir bekommen diese *Konzepte*, speziell das Konzept eines Seepferdchens. Zum Beispiel erhalten wir in Schicht 52 "sea horse horse". Später, im Top-k, erhalten wir eine Mischung aus "sea", "horse" und diesem Emoji-Präfix, "ĠðŁ".
Woran denkt das Modell also? Seepferdchen + Emoji! Es versucht, eine Residualdarstellung eines Seepferdchen-Emojis zu konstruieren.
Warum würde es das tun? Nun, schauen wir uns an, wie der lm_head tatsächlich funktioniert. Der lm_head ist eine riesige Matrix von residualgroßen Vektoren, die mit Token-IDs verknüpft sind. Wenn ein Residual an ihn übergeben wird, vergleicht er dieses Residual mit jedem Token-Vektor und wählt in Koordination mit dem Sampler die Token-ID mit einem Vektor aus, der dem Residual am ähnlichsten ist. (Technisch gesehen: Es ist eine lineare Schicht ohne Bias, also v @ w.T macht Punktprodukte mit jedem Unembedding-Vektor, dann log_softmax und argmax/Temperatur-Sampling.)
Wenn das Modell also das Wort "hello" ausgeben möchte, muss es ein Residual konstruieren, das dem Vektor für das "hello"-Ausgabetoken ähnelt, das der lm_head in die hello-Token-ID umwandeln kann. Und wenn das Modell ein Seepferdchen-Emoji ausgeben möchte, muss es ein Residual konstruieren, das dem Vektor für die Seepferdchen-Emoji-Ausgabetoken ähnelt - was theoretisch jeder beliebige Wert sein könnte, aber in der Praxis ist es Seepferdchen + Emoji, word2vec-Stil.
Das einzige Problem ist, dass das Seepferdchen-Emoji nicht existiert! Wenn also dieses Seepferdchen + Emoji-Residual den lm_head erreicht, führt es sein Punktprodukt über alle Vektoren durch, und der Sampler wählt das nächstgelegene Token - ein Fisch-Emoji.
Nun, diese Diskretisierung ist wertvolle Information! Du kannst in Armistice's Beispiel sehen, dass, wenn das Token autoregressiv wieder in den Kontext eingefügt wird, das Modell erkennen kann, dass es kein Seepferdchen-Emoji ist. Also versucht es es erneut, schüttelt das Residual und erhält ein leicht anderes Emoji, spült und wiederholt, bis es erkennt, was los ist, aufgibt oder keine Ausgabetoken mehr hat.
Aber bis das Modell das falsche Ausgabetoken vom lm_head erhält, weiß es einfach nicht, dass es kein Seepferdchen-Emoji im lm_head gibt. Es geht davon aus, dass Seepferdchen + Emoji die Token(s) produzieren werden, die es möchte.
------------------
Um noch mehr zu spekulieren, frage ich mich, ob dies ein Teil des Nutzens von RL ist - es gibt den Modellen Informationen über ihren lm_head, die sonst schwer zu erhalten sind, weil sie am Ende des Schichtstacks liegen. (Denk daran, dass Basismodelle nicht auf ihren eigenen Ausgaben/Rollouts trainiert werden - das passiert nur in RL.)

Top
Ranking
Favoriten