pourquoi cela se produit-il ? le modèle croit qu'il y a un emoji hippocampe, c'est sûr, mais pourquoi cela le pousse-t-il à produire un *autre* emoji ? voici un indice de l'outil d'interprétabilité sous-estimé préféré de tout le monde, logit lens ! dans logit lens, nous utilisons la tête lm du modèle d'une manière étrange. typiquement, la tête lm est utilisée pour transformer le résidu (l'état interne accumulé à travers les couches du modèle) en un ensemble de probabilités de tokens après la dernière couche. mais dans logit lens, nous utilisons la tête lm après *chaque* couche - nous montrant quels tokens le modèle produirait si cette couche était la dernière couche. pour les premières couches, cela donne des états difficiles à interpréter. mais à mesure que nous avançons à travers les couches, le modèle affine itérativement le résidu d'abord vers des concepts utiles pour continuer le texte, puis vers la prédiction finale. en regardant l'image à nouveau, à la dernière couche, nous avons la sortie réelle du modèle - ĠðŁ, IJ, ł - c'est-à-dire, un préfixe d'emoji byte suivi du reste de l'emoji poisson. (cela ressemble à des absurdités unicode à cause d'une particularité de tokenisation - ne vous inquiétez pas. si vous êtes curieux, demandez à claude à propos de cette ligne de code : `bytes([byte_decoder[c] for c in 'ĠðŁIJł']).decode('utf-8') == ' 🐠'`) mais regardez ce qui se passe dans les couches intermédiaires - nous n'obtenons pas seulement des bytes d'emoji ! nous obtenons ces *concepts*, spécifiquement le concept d'un hippocampe. par exemple, à la couche 52, nous obtenons "hippocampe cheval". plus tard, dans le top-k, nous obtenons un mélange de "mer", "cheval", et ce préfixe d'emoji, "ĠðŁ". alors, à quoi pense le modèle ? hippocampe + emoji ! il essaie de construire une représentation résiduelle d'un emoji hippocampe. pourquoi ferait-il cela ? eh bien, regardons comment la tête lm fonctionne réellement. la tête lm est une énorme matrice de vecteurs de taille résiduelle associés à des identifiants de tokens. lorsqu'un résidu est passé à travers, il va comparer ce résidu avec chaque vecteur de token, et en coordination avec l'échantillonneur, sélectionner l'identifiant de token avec un vecteur le plus similaire au résidu. (plus techniquement : c'est une couche linéaire sans biais, donc v @ w.T effectue des produits scalaires avec chaque vecteur de désembeddings, puis log_softmax et échantillonnage argmax/température.) donc si le modèle veut produire le mot "bonjour", il doit construire un résidu similaire au vecteur pour le token de sortie "bonjour" que la tête lm peut transformer en l'identifiant de token bonjour. et si le modèle veut produire un emoji hippocampe, il doit construire un résidu similaire au vecteur pour le(s) token(s) de sortie emoji hippocampe - qui en théorie pourrait être n'importe quelle valeur arbitraire, mais en pratique est hippocampe + emoji, style word2vec. le seul problème est que l'emoji hippocampe n'existe pas ! donc lorsque ce résidu hippocampe + emoji atteint la tête lm, il effectue son produit scalaire sur tous les vecteurs, et l'échantillonneur choisit le token le plus proche - un emoji poisson. maintenant, cette discrétisation est une information précieuse ! vous pouvez voir dans l'exemple d'Armistice que lorsque le token est réinséré dans le contexte de manière autoregressive, le modèle peut dire que ce n'est pas un emoji hippocampe. donc il essaie à nouveau, ajuste le résidu et obtient un emoji légèrement différent, rincez et répétez jusqu'à ce qu'il réalise ce qui se passe, abandonne ou manque de tokens de sortie. mais jusqu'à ce que le modèle obtienne le mauvais token de sortie de la tête lm, il ne sait tout simplement pas qu'il n'y a pas d'emoji hippocampe dans la tête lm. il suppose que hippocampe + emoji produira le(s) token(s) qu'il veut. ------------------ pour spéculer (encore plus), je me demande si cela fait partie du bénéfice de RL - cela donne aux modèles des informations sur leur tête lm qui sont autrement difficiles à obtenir car elles se trouvent à la fin de la pile de couches. (rappelez-vous que les modèles de base ne sont pas entraînés sur leurs propres sorties / rollouts - cela ne se produit que dans RL.)