Compréhension simple de LoRA (Low-Rank Adaptation) pour un réglage fin efficace de grands paramètres de modèle

[Adresse papier] [Code] [ICLR 22]

Remarque avant de lire : ce billet de blog peut contenir des inexactitudes/simplifications/erreurs dans la description, et il est uniquement à titre de référence.


organisation du réseau

insérez la description de l'image ici
Parmi eux, les paramètres du modèle d'origine sont directement figés, et les paramètres entraînables ne sont introduits qu'en plus des paramètres LoRA (implémentés par nn.Parameter).


La nature du réglage fin du modèle

Notez que les paramètres de pré-formation d'origine du réseau sont W 0 ∈ R d × k W_0 \in R^{d \times k}O0R× k . Après ajustement sur la nouvelle tâche en aval, les paramètres deviennentW ∈ R d × k W \in R^{d \times k}OR× k . On peut trouver que le changement de paramètreΔ W = W − W 0 \Delta W = W - W_0∆W _=OO0. Autrement dit, il y a : W = W 0 + Δ WW=W_0+\Delta WO=O0+Δ W C'est-à-dire que le réglage fin du modèle peut en fait modifier les paramètres d'origineW 0 W_0O0Gelez-le directement, apprenez simplement ce changement Δ W = W − W 0 \Delta W = W - W_0∆W _=OO0C'est ça.


Pourquoi la décomposition de rang inférieur

L'article de LoRA souligne que les modèles de pré-formation existants sont généralement sur-paramétrés (les modèles sur-paramétrés appris résident en fait sur une faible dimension intrinsèque).Lors de la mise au point de ces modèles, la mise à jour des paramètres se fait principalement dans le sous -espace de faible dimension dans . En d'autres termes, les paramètres de nombreux sous-espaces de grande dimension ne bougent pas du tout avant et après le réglage fin. Sur cette base, affiner le Δ W \ Delta W apprisEn fait, Δ W n'a pas besoin d'une dimension (rang) aussi élevée, nous pouvons la réduire à une dimension inférieure pour l'optimisation. Bien sûr, on peut également remarquer ici que si un grand nombre de mises à jour de paramètres se produisent également dans des sous-espaces de grande dimension, la décomposition de rang inférieur à ce moment-là manquera d'informations et entraînera l'échec de LoRA.


Comment comprendre les caractéristiques du sous-espace de faible dimension/du sous-espace de grande dimension

Ici, je donne une analogie qui peut ne pas être correcte . Par exemple, en vision par ordinateur, qu'il s'agisse d'effectuer diverses tâches en aval telles que la segmentation, la détection et la médecine, il peut être affiné en fonction du modèle pré-formé (tel que ResNet) sur ImageNet. La texture, le bord, le contour et d'autres caractéristiques du modèle de pré-formation sont généralement nécessaires quel que soit le type de tâche effectuée, alors cette caractéristique indépendante de la tâche est similaire à la caractéristique de sous-espace de grande dimension mentionnée ci-dessus et n'a fondamentalement pas besoin à affiner dans les tâches en aval. Inversement, pour certaines caractéristiques antérieures dans les tâches en aval (telles que les conditions d'éclairage uniques, la distribution de l'emplacement cible), elles peuvent être considérées comme les caractéristiques de sous-espace de faible dimension mentionnées ci-dessus. Si le modèle souhaite brosser des points vers SOTA, il doit utiliser efficacement ces fonctionnalités liées aux tâches .


Décrire les décompositions de rang inférieur sous forme mathématique

LoRA paramétrera la matrice de changement Δ W \ Delta WΔ W se décompose en la multiplication de deux matrices de rang inférieur : Δ W = BA \Delta W=BA∆W _=B A其中B ∈ R d × r B \in R^{d \times r}BR× rUNE ∈ R r × k UNE \in R^{r \fois k}UNRr × k


Pourquoi la matrice B est-elle initialisée à 0 alors que la matrice A est normalement initialisée gaussienne

Les inconvénients des deux autres configurations sont discutés ici :

  • Si B et A sont tous initialisés à 0, alors l'inconvénient est le même que l'initialisation de tous les 0 dans le réseau profond, et il est facile de faire disparaître le gradient (car les fonctions de tous les neurones sont équivalentes au début) .
  • Si B et A sont tous initialisés gaussiens, alors il y aura une probabilité d'obtenir une valeur de décalage excessive Δ W \ Delta W au début de l'apprentissage du réseauΔW introduit donc trop de bruit , rendant la convergence difficile.

Par conséquent, une partie de l'initialisation est 0, et une partie de l'initialisation normale consiste à maintenir la sortie d'origine du réseau (l'offset initial est 0) au début de l'apprentissage , mais aussi à assurer une meilleure convergence après le début effectif de l'apprentissage.


Quelle est la valeur de la décomposition de rang inférieur ?

Même jusqu'à 8 est hautement disponible, et même jusqu'à 1 :
insérez la description de l'image ici
notez ici que les performances sont même dégradées pour r=64. Interprété selon la conclusion précédente, cela est dû au fait que la mise à jour des paramètres se fait principalement dans l'espace de rang inférieur ; l'utilisation d'une matrice de rang élevé permet la mise à jour de l'espace de grande dimension, mais peut entraîner des modifications supplémentaires inutiles des paramètres ( bruit introduit).


Où LoRA finit-il par être inséré dans le réseau

Il est uniquement ajouté à la matrice Q, K, V, O de la couche Self Attention, et les autres positions telles que MLP ne sont pas ajoutées. Bien sûr, certaines expériences de suivi [1] ont montré qu'il serait préférable d'ajouter uniquement Q et K dans d'autres tâches, comme le montre la figure ci-dessous. Par conséquent, cela peut également être considéré comme un point ajustable dans l'application réelle de LoRA.
insérez la description de l'image ici
insérez la description de l'image ici


La différence entre LoRA et Adapter

En fait, d'un point de vue structurel, l'adaptateur qui est apparu plus tôt a également introduit un petit nombre de paramètres entraînables, et a également une structure "BottleNeck" qui réduit d'abord la dimension puis augmente la dimension, comme indiqué ci-dessous : Les principales différences sont comme suit
insérez la description de l'image ici
:

  • position d'insertion. LoRA est "parallèle" sous la forme d'une connexion résiduelle sur la matrice Q, K, V, O du transformateur, et l'adaptateur est inséré derrière la couche d'alimentation.
  • Délais de raisonnement. Une fois LoRA formé, ses paramètres peuvent être directement fusionnés avec le modèle pré-formé d'origine pour revenir à une structure à branche unique sans introduire de retards supplémentaires ; tandis que l'adaptateur introduira des retards supplémentaires en raison de l'introduction de couches de réseau série supplémentaires.
  • stockage des paramètres. En utilisant LoRA pour le réglage fin, vous n'avez qu'à enregistrer les paramètres de LoRA lui-même après la formation ; lors de l'utilisation de l'adaptateur, vous devez enregistrer les paramètres de l'ensemble du modèle d'origine.

Comment les paramètres LoRA sont fusionnés avec les paramètres d'origine du modèle

Une compréhension simple est la loi associative de la multiplication, W 0 x + Δ W x = ( W 0 + Δ W ) x = W x W_0x+\Delta Wx = (W_0+\Delta W)x = WxO0X+∆W x _=( W0+Δ W ) x=W x , c'est-à-dire ajouter la matrice de paramètres LoRA aux paramètres d'origine.


les références

[1] Modèle personnalisé de segment n'importe quoi pour la segmentation d'images médicales

Je suppose que tu aimes

Origine blog.csdn.net/qq_40714949/article/details/131988734
conseillé
Classement