Si vous avez prêté attention à l'architecture des grands modèles de langage, vous avez peut-être vu le terme « SwiGLU » dans les derniers modèles et documents de recherche. SwiGLU peut être considéré comme la fonction d'activation la plus couramment utilisée dans les grands modèles de langage. Nous la présenterons en détail dans cet article. SwiGLU est en fait une fonction d'activation proposée par Google en 2020, qui combine les caractéristiques de SWISH et de GLU. Le nom chinois complet de SwiGLU est « unité linéaire à porte bidirectionnelle ». Il optimise et combine deux fonctions d'activation, SWISH et GLU, pour améliorer la capacité d'expression non linéaire du modèle. SWISH est une fonction d'activation très courante et largement utilisée dans les grands modèles de langage, tandis que GLU fonctionne bien dans les tâches de traitement du langage naturel. L'avantage de SwiGLU est qu'il peut obtenir en même temps les caractéristiques de lissage de SWISH et les caractéristiques de gating de GLU, rendant ainsi l'expression non linéaire du modèle plus
Nous les présenterons une par une :
Swish est une fonction d'activation non linéaire, définie comme suit :
Swish(x) = x*sigmoid(ßx)
où, ß est un paramètre apprenable. Swish peut être meilleur que la fonction d'activation ReLU car il offre des transitions plus fluides qui peuvent conduire à une meilleure optimisation.
GLU (Gated Linear Unit) est définie comme le produit composant de deux transformations linéaires, dont l'une est activée par le sigmoïde.
GLU(x) = sigmoid(W1x+b)⊗(Vx+c)
Le module GLU peut capturer efficacement les dépendances à longue portée dans des séquences tout en évitant certains des problèmes de gradient de disparition associés à d'autres mécanismes de déclenchement tels que LSTM et GRU.
Nous avons déjà dit que SwiGLU est une combinaison des deux. C'est un GLU, mais au lieu d'utiliser sigmoïde comme fonction d'activation, on utilise swish avec ß=1, on se retrouve donc avec la formule suivante :
SwiGLU(x) = Swish(W1x+b)⊗(Vx+c)
Nous utilisons la fonction SwiGLU pour construire un réseau feedforward
FFNSwiGLU(x) = (Swish1(xW)⊗xV)W2
Si les principes mathématiques ci-dessus semblent gênants et ennuyeux, nous l'expliquerons directement en utilisant le code ci-dessous.
class SwiGLU(nn.Module): def __init__(self, w1, w2, w3) -> None:super().__init__()self.w1 = w1self.w2 = w2self.w3 = w3 def forward(self, x):x1 = F.linear(x, self.w1.weight)x2 = F.linear(x, self.w2.weight)hidden = F.silu(x1) * x2return F.linear(hidden, self.w3.weight)
La fonction F.silu utilisée dans notre code est la même que swish lorsque ß=1, nous l'utilisons donc directement.
Comme vous pouvez le voir sur le code, il y a 3 poids dans notre fonction d'activation qui peuvent être entraînés, qui sont les paramètres de la formule GLU.
En comparant SwiGLU avec d'autres variantes de GLU, nous pouvons voir que SwiGLU fonctionne mieux pendant les deux périodes de pré-entraînement.
Les tâches en aval
ont les meilleures performances, alors maintenant les llm, comme LAMA, OLMO et PALM utilisent tous SwiGLU dans leur implémentation. Mais pourquoi SwiGLU est-il meilleur que les autres ?
Le journal n'a donné que les résultats des tests et n'a pas expliqué les raisons. Au lieu de cela, il a déclaré :
Nous n'offrons aucune explication sur la raison pour laquelle ces architectures semblent fonctionner, nous attribuons leur succès, comme tout le reste. à la bienveillance divine.
L'auteur a dit que l'alchimie était réussie.
Mais nous sommes maintenant en 2024 et nous pouvons l'expliquer avec force :
1 La réponse relativement faible de Swish aux valeurs négatives surmonte le défaut de ReLU selon lequel la sortie sur certains neurones est toujours nulle
2. Les caractéristiques de contrôle de GLU, ce qui signifie qu'il peut décider quelles informations doivent passer et quelles informations doivent être filtrées en fonction de la situation d'entrée. Ce mécanisme permet au réseau d'apprendre plus efficacement les représentations utiles et contribue à améliorer la capacité de généralisation du modèle. Dans les grands modèles de langage, cela est particulièrement utile pour traiter de longues séquences de texte avec des dépendances longue distance.
3. Les paramètres W1, W2, W3, b1, b2, b3 dans SwiGLU peuvent être appris par formation, afin que le modèle puisse ajuster dynamiquement ces paramètres en fonction de différentes tâches et ensembles de données. Flexibilité et adaptabilité améliorées du modèle.
4. L'efficacité du calcul est supérieure à certaines fonctions d'activation plus complexes (telles que GELU), tout en conservant de bonnes performances. Il s’agit d’une considération importante pour la formation et l’inférence de modèles linguistiques à grande échelle.
Choisissez SwiGLU comme fonction d'activation du grand modèle de langage, principalement parce qu'il combine les avantages des capacités non linéaires, des caractéristiques de déclenchement, de la stabilité du gradient et des paramètres apprenables. SwiGLU est largement adopté en raison de ses excellentes performances dans la gestion des relations sémantiques complexes et des problèmes de longue dépendance dans les modèles de langage, ainsi que dans le maintien de la stabilité de la formation et de l'efficacité informatique.
Adresse papier
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!