English translation is not available yet. Showing Russian content.

Что такое SwiGLU и почему он используется вместо ReLU в современных LLM?

Краткий тезис

SwiGLU (Swish‑Gated Linear Unit) — это функция активации, объединяющая GLU (Gated Linear Unit) с Swish (SiLU). Она заменяет ReLU в современных LLM (PaLM, Llama), потому что гейтинг (вентильное управление) позволяет сети динамически выбирать, какую информацию пропускать, что даёт более богатую выразительность и лучший поток градиентов. Несмотря на увеличенное вдвое количество параметров за счёт второй матрицы, SwiGLU стабильно даёт лучшие результаты на этапе масштабирования.


1. Проблема ReLU в больших языковых моделях

ReLU (Rectified Linear Unit) — f(x) = max(0, x) — простая и быстрая функция, но в LLM она имеет два недостатка:

  • Мёртвые нейроны при отрицательном входе производная строго нулевая → градиент не обновляет нейрон, он «умирает» навсегда.
  • Ограниченная выразительность ReLU — кусочно-линейная функция, не способная моделировать сложные нелинейные зависимости, важные для представления языка.

В современных LLM с миллиардами параметров даже малая потеря нейронов критична. Поэтому инженеры начали искать альтернативы, которые сохраняют нелинейность и улучшают обучение.


2. GLU — Gated Linear Unit (механизм гейтинга)

GLU (предложен в 2017 г. для NLP) — это не простая функция, а слой с двумя линейными проекциями:

GLU(x) = (W·x + b) ⊙ σ(V·x + c)

где:

  • W, V — матрицы весов (разные);
  • b, c — смещения;
  • — поэлементное умножение (Hadamard product);
  • σ — сигмоидная функция (в оригинале), управляющая «вентилем».

Идея: одна линейная проекция (W·x+b) — это «содержание», вторая (V·x+c) после сигмоиды — «вентиль» (0…1), который решает, какую долю содержания пропустить. Это даёт динамическое управление потоками информации.

Почему это хорошо

  • Позволяет модели выбирать, какие признаки активировать для каждого токена;
  • Градиенты проходят через вентиль, даже когда содержание близко к нулю (нет «мёртвого» режима).

3. Swish — Smooth ReLU с самовентилем

Swish (также SiLU — Sigmoid Linear Unit) — это f(x) = x · σ(β·x), где σ — сигмоида, β — обучаемый или фиксированный (обычно 1.0). Свойства:

  • Гладкая (в отличие от ReLU) → градиенты везде определены;
  • Не монотонна при β > 1 → может как усиливать, так и ослаблять отрицательные значения;
  • Не имеет мёртвых нейронов — при больших отрицательных x значение стремится к 0, но градиент остаётся ненулевым.

В LLM Swish (или GELU — его аппроксимация) часто использовался как альтернатива ReLU в FFN-слоях (но без гейтинга).


4. SwiGLU = Swish + GLU (улучшенный гейтинг)

Определение
SwiGLU — это комбинация GLU, где в качестве нелинейности в вентиле вместо сигмоиды используется Swish (SiLU):

SwiGLU(x) = Swish(W·x + b) ⊙ (V·x + c)

Или, в более простой записи (как в Llama):

FFN_SwiGLU(x) = (Swish(x·W_gate) ⊙ (x·W_up)) · W_down

где:

  • W_gate — матрица для вычисления вентиля (gate);
  • W_up — матрица для «содержания» (up projection);
  • W_down — матрица обратной проекции (down projection).

Почему Swish, а не сигмоида?

  • Swish даёт нелинейность без насыщения на отрицательной части (сигмоида быстро насыщается до 0, убивая градиент);
  • Производная Swish более информативна — вентиль не бинарный (0/1), а мягкий, что улучшает обучение.

Параметры
В стандартном FFN (feed‑forward network) с ReLU: W1 (d_modeld_ff), W2 (d_ffd_model).
В SwiGLUFFN: три матрицы — W_gate (d_modeld_ff), W_up (d_modeld_ff), W_down (d_ffd_model).
Чтобы число параметров не выросло в 1.5×, в архитектурах обычно уменьшают d_ff в 2/3 относительно базового FFN (например, 8/3*d_model вместо 4*d_model). Но на практике SwiGLU даёт лучшее качество при равном количестве параметров.


5. Математика и код реализации

Формула SwiGLU (для одного токена x):

gate = Swish(x @ W_gate + b_gate)
value = x @ W_up + b_up
output = (gate * value) @ W_down + b_down

Пример на PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F

class SwiGLUFFN(nn.Module):
    def __init__(self, d_model, d_ff, dropout=0.1):
        super().__init__()
        self.w_gate = nn.Linear(d_model, d_ff, bias=False)
        self.w_up   = nn.Linear(d_model, d_ff, bias=False)
        self.w_down = nn.Linear(d_ff, d_model, bias=False)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        # Swish: x · sigmoid(x)
        gate = self.w_gate(x)
        gate = gate * torch.sigmoid(gate)   # Swish (SiLU)
        value = self.w_up(x)
        hidden = gate * value               # поэлементное умножение
        out = self.w_down(hidden)
        return self.dropout(out)

Сравнение с ReLU-FFN:

ХарактеристикаReLU-FFNSwiGLU-FFN
ВыразительностьОграниченная (кусочно-линейная)Богатая (гейтинг + нелинейность)
Мёртвые нейроныЕсть (при отрицательном входе)Нет (градиент всегда течёт через gate)
Параметры2 матрицы3 матрицы (при уменьшенном d_ff сопоставимо)
Тренировочная стабильностьМенее стабильна (возможен срыв)Стабильна, лёгкая настройка
Использование в LLMGPT-2, GPT-3PaLM, Llama, Mistral, Qwen

6. Почему SwiGLU лучше для LLM (основные причины)

6.1. Экспрессивность гейтинга

  • GLU позволяет модели адаптивно «выключать» нерелевантные признаки. Это критично для языковых задач, где один и тот же нейрон может быть полезен в одном контексте и вреден в другом.
  • В отличие от ReLU, который либо включает, либо выключает признак «жёстко», SwiGLU делает это плавно (soft‑gating).

6.2. Лучший поток градиентов

  • Производная Swish ненулевая на всей оси (кроме 0, но предел есть). Градиенты распространяются даже через отрицательные значения.
  • В ReLU градиент = 0 для x ≤ 0 → блокировка обратного распространения.

6.3. Масштабируемость

  • В экспериментах (например, в статье PaLM) SwiGLU стабильно показывает более низкий loss при одинаковом количестве параметров, чем ReLU или GELU.
  • Особенно заметно на больших моделях (от 1B параметров) — SwiGLU даёт прирост качества без увеличения вычислительной стоимости (при оптимизированной реализации).

6.4. Совместимость с остаточной нормализацией

  • В LLM типа Llama используется RMSNorm и pre‑normalization. SwiGLU хорошо сочетается с этими техниками, не вызывая расходимости.

7. Использование в современных архитектурах

МодельАктивация в FFNПримечание
GPT-2, GPT-3GELU (Gaussian Error Linear Unit)GELU — гладкая аппроксимация ReLU, но без гейтинга
PaLM (2022)SwiGLUВпервые масштабно применили для 540B параметров
Llama (Meta, 2023)SwiGLUВзяли из PaLM, уменьшили d_ff в 2/3
Mistral, Qwen, DeepSeekSwiGLUСтандартная практика для современных LLM

Причина выбора SwiGLU в Llama

  • Лучшее качество на перплексии (ppl) при равном количестве параметров;
  • Гладкая нелинейность хорошо работает с квантизацией (меньше outliers).

8. Экспериментальные результаты (кратко)

  • В статье PaLM: Scaling Language Modeling with Pathways авторы сравнивают SwiGLU, ReLU и GELU на моделях 8B и 62B.
    • SwiGLU + GELU ≈ лучшие, ReLU — на 0.1–0.3 хуже.
    • SwiGLU при обучении на 30% меньше шагов достигал того же loss (см. Section 4.2).
  • В Llama 2 (Touvron et al.) SwiGLU используется без пояснения альтернатив (стандартный выбор).
  • На датасете C4 (Colossal Clean Crawled Corpus) SwiGLU даёт -0.13 nats улучшение loss относительно GELU при 0.5B параметров.

9. Сравнение с другими активациями

ФункцияФормулаСильные стороныСлабые стороны
ReLUmax(0, x)Простота, скоростьМёртвые нейроны
GELUx·Φ(x) (Φ — нормальное CDF)Гладкая, без мёртвыхНет гейтинга, средняя выразительность
Swish (SiLU)x·σ(x)Гладкая, самовентильМеньше нелинейности, чем гейтинг
SwiGLUSwish(Wx+b) ⊙ (Vx+c)Гейтинг + гладкостьБольше параметров (∼1.33×)

Вывод SwiGLU — компромисс между выразительностью и параметрами. Для LLM этот компромисс оправдан: улучшение качества перевешивает увеличение весов.


10. Выводы

SwiGLU стал стандартом в современных LLM по трём причинам:

  1. Гейтинг (GLU) даёт модели способность динамически выбирать релевантную информацию.
  2. Swish (вместо сигмоиды) обеспечивает гладкую нелинейность с ненулевыми градиентами.
  3. Эмпирические результаты — стабильно лучшее качество на перплексии и задачах few‑shot.

Хотя ReLU проще и быстрее в вычислениях, его ограничения (мёртвые нейроны, слабая выразительность) делают его непрактичным для моделей с сотнями миллиардов параметров. SwiGLU — пример того, как комбинация двух идей (гейтинг + гладкая активация) может дать синергетический эффект.


11. Пет-проект для закрепления

Задача Сравнить SwiGLU, ReLU и GELU на небольшом Transformer‑моделе на задаче классификации текста (например, SST-2). Цель — убедиться, что SwiGLU даёт более низкое perplexity и лучшую accuracy.

Инструменты PyTorch, Hugging Face transformers, datasets.

Шаги:

  1. Сборка кастомного Transformer используйте nn.TransformerEncoderLayer (замените FFN на свою реализацию SwiGLU, ReLU, GELU).
  2. Данные SST-2 (бинарная классификация) из datasets.load_dataset("glue", "sst2").
  3. Обучение Зафиксируйте число параметров (например, 1M) — для SwiGLU уменьшите d_ff так, чтобы общее число параметров было равно ReLU‑версии.
  4. Метрики: Перплексия на валидации, accuracy, время сходимости.
  5. Результат Постройте таблицу и графики loss / accuracy.

Ожидаемый результат

  • SwiGLU сойдётся быстрее (по шагам) к более высокой accuracy.
  • Перплексия у SwiGLU будет ниже, чем у ReLU (на 0.05–0.1).
  • Убедитесь, что мёртвых нейронов (по гистограмме активаций) у ReLU много, у SwiGLU — нет.

12. Связь с другими вопросами

ВопросТема
1Что такое функция активации и зачем она нужна в нейросетях?
2Как устроена архитектура Transformer (Attention Is All You Need)?
23Что такое GELU и чем он отличается от Swish?
278Какие функции активации используются в современных LLM?
280Как работает нормализация (LayerNorm, RMSNorm) в LLM?

13. Навигация


Навигация