LORA (Adaptive à faible rang - arXiv.org/abs/2106.09685) est une technologie populaire qui est des modèles de grande langue rentables et affinés (LLM). Mais en 2024, un grand nombre de nouvelles technologies de réglage des paramètres efficaces ont émergé, et diverses alternatives LORA ont émergé les unes après les autres: SVF, SVFT, Milora, Pissa, Lora-XS? ... la plupart d'entre elles sont basées sur une technologie matricielle que j'aime beaucoup: la décomposition de la valeur singulière (SVD). Plongeons-y en profondeur.
L'informatique initiale de LORA est que tous les poids des modèles de réglage fin sont surévalués. Au lieu de cela, Lora gèle le modèle et ne forme qu'une paire de petites matrices "adaptateurs" de faible rang. Voir l'illustration ci-dessous (où W est n'importe quelle matrice de poids dans Transformer LLM).
Puisqu'il y a beaucoup moins de gradients à calculer et à stocker, la mémoire et les cycles de calcul peuvent être enregistrés. Par exemple, il s'agit d'un modèle Gemma 8b qui utilise le réglage fin de Lora pour simuler comment les pirates parlent: seulement 22 millions de paramètres peuvent être formés, et 8,5 milliards de paramètres restent gelés.
Lora est très populaire. Il est même entré dans les frameworks ML traditionnels tels que Keras en tant qu'API à une seule ligne:
<code>gemma.backbone.enable_lora(rank=8)</code>
Mais Lora est-elle la meilleure? Les chercheurs ont travaillé pour améliorer la formule. En fait, il existe de nombreuses façons de choisir une plus petite matrice «adaptateur». Étant donné que la plupart d'entre eux utilisent intelligemment la décomposition de la valeur singulière (SVD) de la matrice, faisons une pause pour un peu de mathématiques.
SVD est un bon outil pour comprendre la structure matricielle. Cette technique décompose la matrice en trois: w = usv t , où u et v sont orthogonaux (c'est-à-dire la transformée de base), et S est une matrice diagonale de valeurs singulières triées. Cette décomposition existe toujours.
Dans le "manuel", SVD, U et V sont des matrices carrées, tandis que S est une matrice rectangulaire avec des valeurs singulières sur la diagonale et les zéros suivis. En fait, vous pouvez utiliser la matrice carrée S et les rectangles u ou v - voir l'image - la partie tronquée est simplement multipliée par zéro. Ce SVD "économie" est utilisé dans des bibliothèques communes telles que Numpy.Linalg.Svd.
Alors, comment utilisons-nous cela pour choisir plus efficacement les poids pour s'entraîner? Jetons un coup d'œil à cinq techniques récentes de réglage fin basées sur SVD avec des instructions de commentaires.
L'alternative la plus simple à LORA est d'utiliser SVD sur la matrice de poids du modèle, puis de définir directement les valeurs singulières. Étrangement, il s'agit de la dernière technologie, appelée SVF, publiée dans le papier Transformers² (arXiv.org/abs/2501.06252v2).
SVF est beaucoup économique en termes de paramètres que LORA. De plus, il rend le modèle final composable. Pour plus d'informations à ce sujet, voir My Transformers² Description Ici, mais combiner deux modèles de réglage fin SVF n'est qu'une opération d'addition:
Si vous avez besoin de paramètres plus formables, le papier SVFT (arxiv.org/abs/2405.19597) explore une variété de méthodes, d'abord en ajoutant des poids plus entraînables sur la diagonale.
Il évalue également une variété d'autres alternatives, comme les diffuser au hasard dans la matrice "M".
Plus important encore, le papier SVFT confirme que le fait d'avoir des valeurs plus entraînables que les diagonales est utile. Voir les résultats fins ci-dessous.
Viennent ensuite plusieurs techniques pour diviser les valeurs singulières en deux groupes de "gros" et de "petit". Mais avant de continuer, faisons une pause pour un peu plus de mathématiques SVD.
Le SVD est généralement considéré comme décomposé en trois matrices w = usv t , mais il peut également être considéré comme une somme pondérée de nombreuses matrices de rang 1, pondérées par des valeurs singulières:
Si vous voulez le prouver, utilisez la formule de la forme usv t et de la multiplication matricielle pour exprimer un seul élément de matrice w jk d'une part, et utilisez la forme σ s i u i v i t d'autre part, et simplifiez le fait que S est une diagonale, et notez que c'est la même chose.
Dans cette représentation, il est facile de voir que vous pouvez diviser la somme en deux parties. Et comme vous pouvez toujours trier les valeurs singulières, vous pouvez les diviser en valeurs "grandes" et "petites" singulières.
Pour en revenir à la forme des trois matrices w = usv t , c'est à quoi ressemble la segmentation:
Sur la base de cette formule, deux articles explorent ce qui se passe si vous ajustez uniquement de grandes valeurs singulières ou seulement de petites valeurs singulières, c'est-à-dire Pissa et Milora.
Pissa (principales valeurs singulières et adaptation vectorielle singulière, arXiv.org/abs/2404.02948) affirme que vous ne devriez ajuster que les grandes valeurs maîtresses. Le mécanisme est le suivant:
Extrait de l'article: "Pissa vise à approximer le réglage fin complet en ajustant les principaux composants singuliers qui sont censés capturer la nature de la matrice de poids. Au lieu de cela, Milora est conçue pour s'adapter à de nouvelles tâches tout en maximisant les connaissances du modèle sous-jacent."
Il y a aussi une découverte intéressante sur le papier Pissa: le réglage fin complet est sujet à un sur-ajustement. Avec des techniques de réglage fin à faible rang, vous pouvez obtenir de meilleurs résultats sur les valeurs absolues.
Milora, en revanche, affirme que vous ne devez ajuster la petite valeur maître. Il utilise un mécanisme similaire à Pissa:
Étonnamment, Milora semble avoir le dessus, du moins lorsqu'il a affiné les ensembles de données mathématiques, ce qui peut être assez cohérent avec la pré-formation d'origine. On peut affirmer que la Pissa devrait être plus adaptée pour plier davantage le comportement de la LLM de sa pré-formation.
Enfin, je veux mentionner Lora-XS (arXiv.org/abs/2405.17604). Très similaire à Pissa, mais le mécanisme est légèrement différent. Cela montre également que beaucoup moins de paramètres que LORA donnent également de bons résultats.
Le document fournit une explication mathématique que cette configuration est "idéale" dans deux cas:
Les deux me semblent douter, donc je n'entrerai pas dans les mathématiques en détail. Quelques résultats:
L'hypothèse fondamentale semble être que les valeurs singulières sont divisées en "grandes" et "petites", mais est-ce vrai? J'ai rapidement vérifié le Gemma2 9b sur Colab. Conclusion: 99% des valeurs singulières sont dans la plage de 0,1 à 1,1. Je ne sais pas s'il est logique de les diviser en "gros" et "petits".
Il existe de nombreuses autres techniques de réglage fin pour une paramétrisation efficace. Il convient de mentionner:
Ma conclusion: Pour dépasser la norme LORA avec des paramètres 10X, j'aime la simplicité du SVF de Transformers². Si vous avez besoin de poids plus entraînables, SVFT est une simple extension. Les deux utilisent toutes les valeurs singulières (rang complet, pas d'élagage des valeurs singulières) et sont toujours bon marché ?. Je vous souhaite une bonne affinerie!
Remarque: Toutes les illustrations sont créées par l'auteur ou extraites des articles arXiv.org pour des commentaires et des discussions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!