Wenn Sie sich mit der Architektur großer Sprachmodelle befasst haben, ist Ihnen möglicherweise der Begriff „SwiGLU“ in den neuesten Modellen und Forschungsarbeiten aufgefallen. Man kann sagen, dass SwiGLU die am häufigsten verwendete Aktivierungsfunktion in großen Sprachmodellen ist. Wir werden sie in diesem Artikel ausführlich vorstellen. SwiGLU ist eigentlich eine von Google im Jahr 2020 vorgeschlagene Aktivierungsfunktion, die die Eigenschaften von SWISH und GLU kombiniert. Der vollständige chinesische Name von SwiGLU lautet „bidirektionale Gated Linear Unit“. Es optimiert und kombiniert zwei Aktivierungsfunktionen, SWISH und GLU, um die nichtlineare Ausdrucksfähigkeit des Modells zu verbessern. SWISH ist eine sehr häufige Aktivierungsfunktion, die häufig in großen Sprachmodellen verwendet wird, während GLU bei Aufgaben zur Verarbeitung natürlicher Sprache eine gute Leistung erbringt. Der Vorteil von SwiGLU besteht darin, dass es gleichzeitig die Glättungseigenschaften von SWISH und die Gating-Eigenschaften von GLU erhalten kann, wodurch der nichtlineare Ausdruck des Modells besser wird
Wir werden sie einzeln vorstellen:
Swish ist eine nichtlineare Aktivierungsfunktion, die wie folgt definiert ist:
Swish(x) = x*sigmoid(ßx)
wobei ß ein lernbarer Parameter ist. Swish kann besser sein als die ReLU-Aktivierungsfunktion, da es weichere Übergänge ermöglicht, was zu einer besseren Optimierung führen kann.
GLU (Gated Linear Unit) ist definiert als das Komponentenprodukt zweier linearer Transformationen, von denen eine durch Sigmoid aktiviert wird.
GLU(x) = sigmoid(W1x+b)⊗(Vx+c)
Das GLU-Modul kann Langzeitabhängigkeiten in Sequenzen effektiv erfassen und gleichzeitig einige der verschwindenden Gradientenprobleme vermeiden, die mit anderen Gating-Mechanismen wie LSTM und GRU verbunden sind.
Wir haben bereits gesagt, dass SwiGLU eine Kombination aus beidem ist. Es ist eine GLU, aber anstatt Sigmoid als Aktivierungsfunktion zu verwenden, verwenden wir swish mit ß=1, sodass wir am Ende die folgende Formel erhalten:
SwiGLU(x) = Swish(W1x+b)⊗(Vx+c)
Wir verwenden die SwiGLU-Funktion, um ein Feedforward-Netzwerk aufzubauen
FFNSwiGLU(x) = (Swish1(xW)⊗xV)W2
Wenn die oben genannten mathematischen Prinzipien mühsam und langweilig erscheinen, erklären wir sie direkt anhand des folgenden Codes.
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)
Die in unserem Code verwendete F.silu-Funktion ist dieselbe wie swish, wenn ß=1 ist, daher verwenden wir sie direkt.
Sie können dem Code entnehmen, dass es in unserer Aktivierungsfunktion drei Gewichte gibt, die trainiert werden können, nämlich die Parameter aus der GLU-Formel.
Beim Vergleich von SwiGLU mit anderen GLU-Varianten können wir sehen, dass SwiGLU in beiden Vortrainingsphasen eine bessere Leistung erbringt.
Downstream-Aufgaben
haben die beste Leistung, daher verwenden jetzt alle LLMs wie LLAMA, OLMO und PALM SwiGLU in ihrer Implementierung. Aber warum ist SwiGLU besser als die anderen?
Das Papier gab nur die Testergebnisse bekannt und erläuterte nicht die Gründe. Stattdessen hieß es:
Wir geben keine Erklärung dafür, warum diese Architekturen zu funktionieren scheinen, wie alles andere auch. zur göttlichen Güte.
Der Autor sagte, dass die Alchemie erfolgreich war.
Aber jetzt haben wir das Jahr 2024 und wir können es eindringlich erklären:
1 Swishs relativ geringe Reaktion auf negative Werte überwindet das Manko von ReLU, dass die Ausgabe auf einigen Neuronen immer Null ist
2. Die Gating-Eigenschaften von GLU bedeuten, dass sie basierend auf der Eingabesituation entscheiden kann, welche Informationen weitergeleitet und welche Informationen gefiltert werden sollen. Dieser Mechanismus ermöglicht es dem Netzwerk, nützliche Darstellungen effektiver zu lernen und trägt dazu bei, die Generalisierungsfähigkeit des Modells zu verbessern. In großen Sprachmodellen ist dies besonders nützlich für die Verarbeitung langer Textsequenzen mit Abhängigkeiten über große Entfernungen.
3. Die Parameter W1, W2, W3, b1, b2, b3 können durch Training erlernt werden, sodass das Modell diese Parameter dynamisch an verschiedene Aufgaben und Datensätze anpassen kann.
4. Die Berechnungseffizienz ist höher als bei einigen komplexeren Aktivierungsfunktionen (wie GELU), während die Leistung dennoch gut bleibt. Dies ist eine wichtige Überlegung für das Training und die Inferenz umfangreicher Sprachmodelle.
Wählen Sie SwiGLU als Aktivierungsfunktion des großen Sprachmodells, hauptsächlich weil es die Vorteile nichtlinearer Fähigkeiten, Gating-Eigenschaften, Gradientenstabilität und lernbarer Parameter kombiniert. SwiGLU wird aufgrund seiner hervorragenden Leistung bei der Bewältigung komplexer semantischer Beziehungen und langer Abhängigkeitsprobleme in Sprachmodellen sowie der Aufrechterhaltung der Trainingsstabilität und Recheneffizienz weit verbreitet.
Papieradresse
Das obige ist der detaillierte Inhalt vonWarum verwenden große Sprachmodelle SwiGLU als Aktivierungsfunktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!