1 points par GN⁺ 2023-07-25 | 1 commentaires | Partager sur WhatsApp
  • Le softmax d’attention à l’intérieur des Transformers empêche une tête de choisir de « ne rien faire », ce qui peut compliquer la quantification et le déploiement avec peu de mémoire
  • L’indice du problème réside dans les poids/activations aberrants observés dans les LLM ; un article de Qualcomm AI Research analyse que plus de 97 % des activations aberrantes proviennent des positions d’espaces et de ponctuation
  • Le softmax classique attribue un poids de 1/k à chaque terme même lorsque toutes les entrées sont très négatives, tandis que softmax_1 ajoute 1 au dénominateur afin que la sortie de l’attention puisse devenir proche de 0
  • softmax_1 conserve les rapports relatifs tout en limitant la somme entre 0 et 1, et laisse aussi un gradient non nul grâce à sa dérivée positive
  • Ce changement n’est pas un correctif à greffer directement sur des modèles existants : il nécessite un réentraînement ; avec des modèles comme LLaMA, une expérimentation rapide pourrait être possible via une approche de token préfixe nul

Les valeurs aberrantes qui compliquent la quantification

  • Dans les modèles Transformer apparaissent des poids et activations plusieurs ordres de grandeur plus grands que les autres valeurs, et ces valeurs semblent importantes pour le comportement du modèle
  • Ces valeurs aberrantes dégradent les performances dans la quantification entière classique par échelle et biais, ce qui rend plus difficile l’exécution de grands modèles dans des environnements à RAM limitée comme un Mac Mini ou un Raspberry Pi
  • Réduire l’usage de la RAM ouvre la possibilité de gérer des modèles plus grands ou davantage de fonctionnalités, aussi bien dans le cloud qu’en edge
  • Quantizable Transformers: Removing Outliers by Helping Attention Heads Do Nothing, de Qualcomm AI Research, relie les valeurs aberrantes au softmax du mécanisme d’attention
    • L’article analyse que plus de 97 % des activations aberrantes des LLM se produisent aux positions de whitespace et de ponctuation
    • Le softmax tronqué souffre d’un problème de gradient nul, et l’attention à porte ajoute des millions de nouveaux paramètres

Le rôle du softmax dans les Transformers

  • Les embeddings d’entrée d’un Transformer sont des vecteurs en virgule flottante qui représentent des mots
    • Le LLaMA 2 de Meta utilise une longueur de vecteur d’embedding de 3 204, et il faut plus de 6 Ko pour représenter un mot en half-precision
    • Le vocabulaire contient généralement 30 000 à 50 000 éléments
  • Un Transformer transforme un vecteur d’entrée en un vecteur de sortie de même taille, et le vecteur de sortie final sert à prédire le token qui suit le token courant
  • La connexion résiduelle fonctionne comme une manière pour l’attention d’ajouter des informations contextuelles à l’information du mot d’origine
    • Par exemple, elle ajoute des informations de contexte pour distinguer si pupil désigne un élève ou la pupille de l’œil
  • À la dernière étape, le vecteur de sortie est transformé en un vecteur de la longueur du vocabulaire, puis un softmax est appliqué pour le traiter comme des probabilités du prochain token
    • Les implémentations réelles utilisent un mécanisme de sampling plutôt que de faire directement confiance aux probabilités en sortie du softmax
    • Le softmax de l’étape de sortie est considéré comme un choix raisonnable, car il donne un gradient à l’ensemble du vocabulaire

Les limites du softmax dans l’attention interne

  • L’équation centrale de l’attention interne est la suivante

[ \textrm{Attention}(Q, K, V) = \textrm{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V ]

  • Dans un modèle decoder-only, (Q), (K) et (V) partent de la même séquence d’entrée, mais sont projetés de manières différentes
  • (QK^T) cherche les corrélations entre les vecteurs d’embedding des tokens, puis un softmax est appliqué à chaque ligne pour obtenir les poids utilisés afin de mélanger les vecteurs de valeur de la matrice (V)
  • L’attention multi-têtes effectue ce processus en parallèle dans plusieurs têtes à chaque couche
    • Le vecteur d’embedding est divisé en plusieurs segments, et chaque tête ajoute de l’information à un segment du vecteur de sortie
  • Le problème est que le softmax force chaque tête d’attention à produire une annotation
    • Même quand une tête n’a aucune information à ajouter, le softmax fabrique un choix
    • Plus une tête est spécialisée, plus il est probable qu’elle ait besoin de « passer », mais le softmax classique n’offre pas d’abstention

Proposition : softmax_1 et QuietAttention

  • La modification proposée consiste à ajouter 1 au dénominateur du softmax

[ (\textrm{softmax}_1(x))_i = \frac{\exp(x_i)}{1+\sum_j \exp(x_j)} ]

  • Avec le softmax classique, même lorsque toutes les valeurs de (x) deviennent très négatives, chaque terme converge vers (1/k)

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}(x))_i = \frac{1}{k} \gt 0 ]

  • Dans les mêmes conditions, softmax_1 fait converger chaque terme vers 0

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}_1(x))_i = 0 ]

  • Grâce à cette différence, une tête d’attention peut choisir de ne pas ajouter d’information
  • L’équation d’attention proposée est la suivante

[ \textrm{QuietAttention}(Q, K, V) := \textrm{softmax}_1 \left(\frac{QK^T}{\sqrt{d}}\right)V ]

Propriétés de softmax_1 et conditions d’expérimentation

  • softmax_1 réduit légèrement toutes les valeurs, mais comme il y a une normalisation après l’attention, cette réduction peut être compensée
  • Les rapports relatifs du vecteur de sortie sont les mêmes qu’avec le softmax classique

[ \frac{(\textrm{softmax}_1(x))_i}{(\textrm{softmax}_1(x))_j} = \frac{(\textrm{softmax}(x))_i}{(\textrm{softmax}(x))_j} = \frac{\exp(x_i)}{\exp(x_j)} \quad \forall \ i, j ]

  • Sa dérivée est positive, ce qui maintient un gradient non nul, et la somme se situe entre 0 et 1, de sorte que la sortie ne dépasse pas la plage contrôlée
  • Ce problème est traité comme un problème mathématique, et non comme un problème de précision numérique ; une précision supplémentaire ne suffit pas à le résoudre
  • L’idée expérimentale consiste à ajouter un vecteur nul devant chaque contexte d’entrée et à garantir qu’aucun biais ne soit ajouté, y compris via l’encodage positionnel
    • Si le zéro passe tel quel, cela produit l’effet d’ajouter 1 à chaque dénominateur du softmax par la suite
    • Cela pourrait être possible avec des modèles LLaMA utilisant un embedding fixe et un token préfixe spécial
  • Il ne s’agit pas d’une expérience directement applicable aux modèles existants ; un réentraînement du modèle est nécessaire
  • Les valeurs à vérifier sont l’évolution de la kurtose des poids et de la norme infinie des activations

1 commentaires

 
GN⁺ 2023-07-25
Commentaires sur Hacker News
  • Ce que propose l’auteur n’est pas d’ajouter quelque chose au softmax de la sortie finale, mais d’ajouter 1 au dénominateur du softmax interne à l’attention
    Le softmax de l’attention fait ressembler l’appariement clé/requête à une probabilité, ce qui permet une consultation clé-valeur pondérée par des valeurs continues au lieu d’un accès binaire 0/1
    Si on ajoute 1 au dénominateur, la somme des poids devient inférieure à 1, donc ce n’est plus vraiment un vecteur de probabilités, mais si le modèle apprend des poids élevés, cela fonctionne presque comme tel, et il peut aussi choisir de produire partout de faibles poids pour « ne rien affirmer avec certitude »
    Pour savoir si c’est réellement utile, il faut simplement entraîner un LLM de cette façon. Cela dit, je ne pense pas que la différence sera énorme. Les nœuds d’attention peu confiants peuvent déjà rendre les scores pré-softmax similaires et produire une distribution presque uniforme ; on obtient alors une moyenne de plusieurs vecteurs, qui a statistiquement de fortes chances de se rapprocher de 0
    Le Transformer contient aussi déjà beaucoup de poids entraînables pouvant implémenter une forme d’opt-out, comme la matrice V et la couche feed-forward après l’attention. Malgré tout, j’aime bien le ton non académique du billet et sa volonté de toucher à l’idée de fond ; je ne suis pas complètement convaincu, mais j’aimerais lire davantage de textes de ce genre

    • Si je comprends bien, l’auteur semble dire qu’avec ce changement, les grandes valeurs disparaissent, ce qui permet d’encoder la sortie du Transformer sur moins de bits et donc de réduire les besoins mémoire du réseau
      Comme la mémoire est le principal goulot d’étranglement pour exécuter de grands modèles, ce serait assez important si c’était vrai
    • J’aime davantage le modèle conceptuel proposé par l’auteur
      Comme lorsqu’il dit qu’il voulait à l’origine appeler cette fonction ghostmax, on peut voir cela comme l’ajout d’une entrée de valeur 0 à x, avec exp(0)=1, donc comme s’il y avait aussi dans la matrice V un vecteur nul qui atténue le résultat
      Plutôt que de dire « la somme des poids est inférieure à 1, donc parfois rien n’est sélectionné », il vaut mieux considérer que, chaque fois qu’on examine l’ensemble des choix possibles, on force aussi la prise en compte de l’option ne rien faire
      C’est la différence entre « si on n’a qu’un marteau, tout ressemble à un clou » et « même si on n’a qu’un marteau, on enfonce les clous et on ignore ce qui n’en est pas »
      Par exemple, dans un système voix-texte, c’est gênant que l’utilisateur doive d’abord choisir la langue, puis fournir l’audio de cette langue pour obtenir une transcription correcte, alors qu’une erreur dans cette première étape produit du charabia. Un transcripteur anglais devrait, face à un audio en français, commencer par dire « ceci n’est pas de l’anglais », ce qui serait plus proche du comportement humain
    • Pour vérifier si c’est bon, il suffit d’entraîner deux modèles identiques sur un grand jeu de données
      L’un avec un +1 au dénominateur du softmax du module d’attention, l’autre sans. Il faut montrer que les performances sont similaires, puis que le modèle avec +1 diverge moins et se quantifie plus efficacement
    • J’ai du mal à accepter l’idée que « si la confiance est faible, il suffit de rendre similaires les scores avant softmax »
      Tout comme les réseaux de neurones modélisent mal la fonction identité, ce qui impose des connexions résiduelles, je pense qu’ils sont aussi assez faibles pour apprendre implicitement des transformations à faible entropie
      Même si cela n’augmente pas la capacité d’expression, cela peut avoir pour effet d’intégrer directement dans le modèle une transformation de type recherche d’aiguille dans une botte de foin, difficile d’accès par descente de gradient. Je ne sais pas à quel point c’est utile en pratique
    • Cette technique est connue depuis des années et est même présente dans PyTorch
      Si elle n’est pas largement utilisée, c’est probablement parce que des gens l’ont essayée et qu’en pratique elle ne marche pas si bien. Qualifier cela de « bug négligé depuis plus de 8 ans » dans le billet d’origine relève davantage du clickbait
  • Il m’échappe peut-être quelque chose, mais je ne comprends pas pourquoi les commentaires présentent cela comme si c’était majeur. J’ai déjà vu cette astuce plusieurs fois
    Par exemple, il y a ce code dans un ancien dépôt Google : https://github.com/google/flaxformer/blob/ee62754ebe5a5eeb11...

    • Exact. On utilisait aussi cela il y a quelques années dans nos anciens modèles. Je ne me souviens plus précisément des détails, mais il me semble que cela n’avait pas vraiment d’effet
      Je ne pense pas du tout que cela aide pour la stabilité. Pour la stabilité du softmax quand on change d’échelle, des astuces comme Q/K layernorm sont meilleures : https://arxiv.org/pdf/2302.05442.pdf
    • Si les modèles populaires font encore cette erreur, cela reste digne d’attention
      Écrire un billet de blog ou un article pour sensibiliser à ce sujet a donc tout à fait de la valeur. Il est aussi courant que de bonnes idées soient découvertes plusieurs fois indépendamment
    • L’essentiel est de savoir si des gens ont essayé cela pour la quantification, c’est-à-dire avec les méthodes int8 / GGML / GPTQ
      Pour savoir si l’aplatissement de la distribution dû à un dénominateur plus grand se traduit par un meilleur comportement en quantification, il faut comparer directement les cas avec et sans +1. Le billet d’origine pense que cet avantage pourrait être important
    • L’argumentation me semble un peu douteuse
      Techniquement, le softmax n’est pas implémenté exactement selon la formule affichée, mais comme exp(x_i-max(x)), puis ces valeurs sont additionnées au dénominateur. Il m’échappe peut-être quelque chose
      Par ailleurs, les connexions résiduelles sont utilisées parce que le réseau n’apprend pas bien la fonction identité, mais il peut apprendre 0. Donc dans f(x): x+g(x), il suffit que g:x ~> 0, autrement dit qu’il tende presque vers 0
      f(x): x+g(x) facilite aussi davantage la propagation du gradient
  • Cette astuce « découverte » fait partie de l’implémentation standard de l’attention multi-têtes de PyTorch, sous le nom add_zero_attention
    Elle ajoute 0 aux logits, donc e^0=1, ce qui ajoute 1 au dénominateur : https://pytorch.org/docs/stable/generated/torch.nn.Multihead...

    • La documentation est assez médiocre. Elle dit seulement quelque chose comme « si défini, ajoute un nouveau lot de zéros aux séquences key et value à dim=1 »
      Elle n’explique quasiment pas le sens de l’option. Rien qu’en ajoutant la deuxième phrase que je viens d’écrire, ce serait déjà bien plus utile
    • C’est une option dont la valeur par défaut est false. Est-ce que cela veut dire que les gens l’ont déjà essayée et que, d’ordinaire, cela n’aide pas ?
    • Bien vu. J’espère que l’auteur du billet d’origine le verra
    • https://en.wikipedia.org/wiki/Multiple_discovery
  • Il ne s’agit pas d’IA ni de cet algorithme en particulier, mais il arrive qu’on soit incapable de convaincre qui que ce soit qu’une petite erreur est bien une erreur, même en l’expliquant sans relâche
    En 2011, dans le cadre de mon projet, j’ai regardé le code source pour copier l’algorithme de classement de reddit, et il avait un comportement totalement absurde pour les publications avec un total de votes négatif
    Dans une formule simple, des termes avaient été intervertis et les signes positif/négatif semblaient appliqués à l’envers. J’en ai donc parlé sur mon blog puis sur reddit, mais beaucoup de gens, y compris des employés de reddit, m’ont dit que j’avais complètement tort et que l’algorithme fonctionnait comme prévu
    Ils ont aussi dit que d’autres personnes avaient déjà remarqué et signalé le même point auparavant, mais qu’on leur avait également répondu qu’elles avaient tort
    J’ai fini par modifier mon billet en disant en substance : « des gens plus intelligents que moi m’ont assuré qu’il n’y avait pas d’erreur dans l’algorithme de reddit, simplement ma variante me semblait plus logique »
    Et pourtant, trois ans plus tard, en 2014, le code source de reddit a reçu exactement la correction que moi, ainsi que d’autres avant moi, avions proposée depuis le début : https://github.com/reddit-archive/reddit/commit/50d35de04b92...
    L’open source permet à beaucoup de regards de repérer des bugs, mais parfois, même si on a trouvé le bug, on n’arrive à convaincre personne. Bien sûr, reddit a fermé le code en 2017
    Au final, je n’ai mis dans mon app ni la fonctionnalité de classement que je voulais copier à l’origine, ni le système de vote

    • J’ai vécu quelque chose de semblable vers 2008, quand j’étais stagiaire chez Yahoo et que je créais un outil interne de génération d’URL OAuth 1.0
      Il fallait encoder de nombreuses valeurs dans les paramètres de requête, et certains paramètres devaient en pratique être encodés deux fois, donc mon outil le faisait ainsi. Mais l’ingénieur chargé de l’implémentation insistait pour dire que mon outil était faux, se servait de mon statut de stagiaire contre moi, et brandissait même la spécification OAuth en la tordant pour affirmer que son implémentation était correcte et que c’était moi qui la lisais mal
      Au final, il a fallu faire venir Eran Hammer-Lahav pour trancher, et c’est seulement là qu’il a été établi que j’avais raison ; l’ingénieur a alors admis, comme si c’était une évidence, que c’était bien ça. Il n’y a eu aucune reconnaissance ni excuse pour les attaques personnelles des jours précédents
      J’en ai tiré une leçon importante : les plus seniors n’ont pas toujours raison. Aujourd’hui, c’est généralement moi qui suis le plus senior, et j’essaie de m’en souvenir tous les jours
    • Je travaille dans une FAANG, et j’ai été vraiment surpris de voir à quel point ce genre de chose arrive souvent
      Le simple fait d’être « la personne qui ajoute des logs partout dans la codebase et raisonne pas à pas » peut suffire à bâtir une carrière longue et influente. Même à un niveau très basique, j’ai souvent vu des corrections étonnantes de problèmes anciens
      Mais cela s’accompagne aussi de beaucoup de jeux politiques. La première réaction des gens, c’est le déni, et ensuite ça empire. Il n’y a qu’une ou deux personnes qui se disent « ah, il suffit de corriger ça », tandis qu’une autre envoie un mail en mettant en copie le chef du chef du chef, sous une formulation élégante du type « manque de prise en compte des préoccupations liées à la concurrence / à la gestion mémoire / etc. »
      Dans ces cas-là, mieux vaut attendre en silence, sans s’y opposer ni se plaindre. Si rien ne se passe, que la direction ne pose aucune question, mais que les collègues commencent à le faire, il vaut mieux préparer son transfert vers une autre équipe
    • Je viens de regarder le code, et c’est tout simplement, de façon flagrante, faux. Ça a dû être vraiment frustrant
    • Vu les derniers mois, je ne suis pas surpris que les échanges avec les employés de reddit aient pris cette tournure
  • Il y a une discussion intéressante sur les caractéristiques aberrantes et la quantification : https://timdettmers.com/2022/08/17/llm-int8-and-emergent-fea...
    Les valeurs aberrantes servent à élaguer les valeurs, et les Transformer semblent subir une « transition de phase » dans leur manière de traiter les caractéristiques aberrantes autour de 6,7 milliards de paramètres. Cela pourrait compliquer les recherches par ablation
    Il semble qu’il y aurait beaucoup de choses à discuter avec Tim Dettmers

  • L’auteur pointe un vrai problème et propose une solution simple. Ça coche tous mes critères de détection du geek.
    À la question « pourquoi personne n’y a pensé ? », l’explication selon laquelle l’auteur était très familier de la fonction softmax dans des travaux hors du machine learning, et que les personnes enquêtant sur ce problème, même si elles l’avaient réduit à « quelque chose lié au softmax », n’avaient peut-être pas une compréhension suffisamment profonde du softmax lui-même, me paraît plausible.
    Cela dit, si l’auteur du billet original voit ce commentaire, j’aimerais qu’il développe davantage l’affirmation selon laquelle cela « résoudra la boucle de rétroaction des valeurs aberrantes avec une probabilité de 99,44 % ». Pour l’instant, cette phrase est la seule explication de la façon dont les valeurs aberrantes pourraient être liées au softmax.

    • Il s’avère que quelqu’un y avait déjà pensé. Plus précisément, Google l’avait fait, et cette idée était présente dans flaxformer au moins depuis novembre 2021.
      https://github.com/google/flaxformer/blame/ee62754ebe5a5eeb1...
      Le commentaire dit : « fonction softmax avec un logit virtuel supplémentaire, par exemple 0. Pour la compatibilité avec certains modèles entraînés précédemment. Cela revient à ajouter 1 au dénominateur. Dans le contexte de l’attention, cela permet de ne rien regarder. »
      Cela produit exactement le même softmax modifié que dans ce billet. Le temps dira pourquoi cela a été ignoré publiquement. Peut-être que l’effet était faible, que l’idée a simplement été oubliée, ou que Google ne l’a pas poussée.
    • Il manque la vérification la plus importante : les résultats.
      Il ne l’a pas réellement essayé, il pense simplement que ça va marcher. Pour une modification aussi simple du softmax, la validation ne devrait pas prendre longtemps, donc ne pas l’avoir faite avant publication est plutôt embarrassant.
    • L’explication « pourquoi personne n’y a pensé ? parce que l’auteur connaissait profondément le softmax en dehors du machine learning » me semble douteuse.
      Le softmax est très bien compris dans la communauté du machine learning. C’est une astuce extrêmement courante, et ce genre de propriété est bien connu. Il paraît peu probable que personne n’y ait pensé.
      Cela dit, il est possible que la convention actuelle autour du softmax ait été choisie un peu par hasard, et que l’auteur en ait correctement identifié les défauts.
    • C’est peut-être aussi parce que l’effet du problème est subtil.
      Même si le diagnostic est juste, un LLM en pleine précision peut contourner le problème en donnant un poids d’attention élevé à des tokens sans importance afin de produire une sortie d’attention inoffensive.
      Ce problème n’est peut-être important que lors de la quantification, et l’objectif des LLM de pointe récents n’est pas forcément la performance en quantification.
    • J’ai lu le « 99,44 % de certitude » comme une blague sur les probabilités mal calibrées du softmax.
      Dans l’idée, le softmax sait très bien sortir du 99,9 % ou du 0,1 %, mais beaucoup moins bien les valeurs intermédiaires.
  • Je sais que se plaindre du milieu académique est à la mode sur HN, mais ce billet de blog ne présente pas une bonne argumentation.
    Le fond aurait pu être transmis en un quart de la longueur, probablement même en moins d’un huitième, mais il a été enveloppé dans des tournures relâchées et des plaintes à peine voilées sur la publication académique.
    Résultat : la discussion ici ne porte pas sur les résultats ou l’idée du billet, mais devient 200 commentaires sur publication académique vs blog, écriture formelle vs écriture informelle.
    C’est peut-être un bon style si l’on veut publier un billet sur la première page de HN. Mais si l’objectif est de faire examiner et discuter les avantages et inconvénients de l’idée, ce n’est pas très bon.

    • Au final, c’est là la raison fondamentale pour laquelle on en arrive à une économie de l’attention.
      Les gens ont une quantité limitée d’attention à consacrer à tout, mais la capacité et le besoin d’obtenir de l’attention sont illimités. C’est ce que disait Michael Goldhaber.
      C’est la graine même de l’explosion informationnelle : 6 milliards de vidéos sur comment faire cuire un œuf, ou 200 commentaires façon local à vélos.
      Pour limiter cela, des endroits comme Google, Facebook ou HN classent commentaires, liens et fils d’actualité, mais comme la majeure partie du corpus à classer est du bruit, on ne fait qu’ajouter une couche supplémentaire de bruit.
      Nous n’avons toujours pas conçu de système d’information qui reflète ce que Goldhaber disait de l’attention il y a 30 ou 40 ans.
    • On peut se moquer du fait que cela « finisse en première page de HN », mais si on reformule par « discuter de quelque chose observé de manière informelle », cette condescendance perd de sa force.
      Le but peut être à la fois d’informer et de divertir. Beaucoup de gens aiment les discussions lâches autour du point central, et l’auteur peut lui-même préférer cela au ton clinique et formel d’un article académique.
    • À noter d’ailleurs que quelqu’un a souligné que l’API PyTorch de Multihead Attention contient une solution de contournement optionnelle pour ce problème.
      Mais, de façon un peu agaçante malgré tout, il faut pour la voir passer au-dessus de 200 commentaires de plainte hors sujet.
  • J’ai fait une expérience similaire, et dans ma configuration cela n’a pas aidé.
    Je ne dirais pas avec certitude qu’il n’y avait pas un bug, mais le fait de porter l’attention sur la position courante semble déjà résoudre ce problème dans une certaine mesure. Quand il ne faut rien dire, il suffit en quelque sorte d’émettre la valeur de la position courante.
    Plus précisément, au lieu d’ajouter 1 au dénominateur du softmax, j’ai ajouté avant QK un attention sink paramétré appris, puis je l’ai retiré après le softmax afin que la somme ne soit pas égale à 1 lors de la multiplication avec V.
    J’ai aussi essayé une variante qui regarde la position courante et une autre qui ne la regarde pas, ainsi qu’une variante où le sink est généré par un réseau feed-forward pour chaque position au lieu d’être un paramètre appris. Dans ma configuration, aucune des deux n’a fait de grande différence, mais comme il y avait aussi beaucoup d’autres éléments étranges en jeu, cela peut valoir le coup de réessayer.

    • Quand tu dis que cela n’a pas aidé, je me demande ce que tu as mesuré.
      Dans le contexte de ce billet, il semble que les performances sur la tâche et le nombre ainsi que l’ampleur des poids aberrants soient tous deux importants.
    • Il vend cela comme un correctif pour des valeurs aberrantes très marquées. Est-ce que ta variante avait ce type de valeurs aberrantes au départ ?
  • Je ne vois aucun résultat. Avec des chiffres venant étayer la théorie, ce serait bien plus solide et convaincant.
    Il n’est pas si difficile de faire un fine-tuning d’un modèle de langage existant sur un petit jeu de données pour vérifier si cela fonctionne.
    Cela dit, je suis assez d’accord sur le fait qu’il pourrait exister une meilleure formule d’attention. L’article de 2020 https://arxiv.org/abs/2005.09561 m’a beaucoup aidé sur l’un des modèles Transformer que j’ai entraînés. Ce n’était pas un modèle de langage généraliste, mais un problème de graphe multimodal spécialisé.
    Cet article propose une attention normalisée et, si je ne me trompe pas, cela pourrait aussi aider pour les problèmes de quantification.

  • Cette approche était souvent utilisée avant la généralisation des tokens factices. J’ai découvert cette idée pour la première fois dans l’article sur XLNet
    Il me semble que PyTorch l’intégrait déjà depuis 2019/2020, et quelqu’un pourra probablement trouver des références encore plus anciennes
    J’ai été surpris par le ton exagéré du billet d’origine. C’est d’autant plus vrai s’il s’agit de quelque chose que la plupart des chercheurs travaillant sur les Transformer comprennent déjà. J’ai aussi été surpris de voir tant de réponses affirmant que « c’est comme ça qu’il faut faire de la recherche ». C’est plutôt un exemple de pourquoi la recherche ne fonctionne pas ainsi, et l’évaluation par les pairs a de nombreux mérites, dont celui d’éviter plus souvent de se ridiculiser soi-même

    • Il n’est pas arrogant. Les gens aiment un ton informel, direct et autodérisoire, ce qui est l’opposé de l’arrogance
      On dirait que certains lisent une autodérision ambiguë comme s’il s’agissait d’une affirmation littérale
      En résumé, si c’était important au point d’être partagé, c’est parce qu’il s’agit d’un problème assez niche, pertinent surtout quand on essaie de faire tourner une pâle imitation de ChatGPT sur un matériel contraint. Il est donc tout à fait possible que les grandes équipes de recherche ne l’aient pas jugé important. Elles n’essaient pas de faire tourner des LLM sur une 3090
    • Qualifier cela d’« arrogant » est étrange
      Le texte a un ton oral, autodérisoire et humoristique. Je ne sais pas quels en sont les avantages ou les inconvénients, mais j’ai pu suivre tout le raisonnement. On est loin de l’arrogance
      Dire que cela « évite de se ridiculiser soi-même » implique qu’on se ridiculise si l’on a tort ou si l’on n’est pas le premier à faire une découverte. N’est-ce pas, au fond, une forme d’arrogance ?