中文翻译暂不可用,显示俄语原文。
Что такое SwiGLU и почему он лучше ReLU в LLM?
Краткий тезис
SwiGLU — это функция активации, объединяющая Swish (гладкую нелинейность) и гейтинг (управление потоком информации через элементное умножение). Она превосходит ReLU за счёт отсутствия «мёртвых нейронов», более богатой нелинейности и способности модели контролировать, какую информацию пропускать. Современные LLM (Llama, PaLM, Falcon) используют SwiGLU вместо ReLU или GELU, получая стабильно лучшее качество при тех же вычислительных затратах.
1. Термин: Функция активации
Функция активации — это нелинейное преобразование, применяемое к выходу нейрона (или целого слоя). Без нелинейности нейронная сеть была бы просто линейной комбинацией входов и не могла бы аппроксимировать сложные функции. В LLM активации используются в Feed-Forward Network (FFN) — двухслойной сети, которая идёт после механизма внимания в каждом блоке трансформера.
2. ReLU: классика и её проблемы
ReLU (Rectified Linear Unit) — самая популярная активация до 2020 года:
ReLU(x) = max(0, x)
Плюсы
- Простота и дешевизна вычисления.
- Спасает от затухания градиента (градиент для x>0 равен 1).
Минусы
- Dead Neurons (мёртвые нейроны): если нейрон выдаёт отрицательное значение, градиент равен 0, и нейрон перестаёт обучаться.
- Неотрицательный выход все значения после ReLU ≥ 0, что ограничивает выразительность.
- Негладкость в точке 0 производная не определена (хотя на практике это редко проблема).
3. Swish: гладкая альтернатива
Swish (или SiLU) — функция, предложенная Google (Ramachandran et al., 2017):
Swish(x) = x * sigmoid(x)
Свойства
- Гладкая (бесконечно дифференцируема).
- Не монотонна имеет небольшой «провал» для отрицательных x (около -0.5), что помогает регуляризации.
- Ненулевой градиент для отрицательных x sigmoid(x) > 0, поэтому градиент никогда не равен 0 (кроме x → -∞). Нет мёртвых нейронов.
На практике Swish часто даёт лучшее качество, чем ReLU, но требует чуть больше вычислений (sigmoid).
4. GLU (Gated Linear Unit): гейтинг
GLU — это не функция активации, а механизм гейтинга (управления информацией). Введён в (Dauphin et al., 2017) для CNN, позже адаптирован для трансформеров.
Формула:
GLU(x) = (W₁x + b₁) ⊙ σ(W₂x + b₂)
где:
⊙— поэлементное умножение (Hadamard product).σ— сигмоида (sigmoid).- Первая часть (
W₁x + b₁) — «информация». - Вторая часть (
σ(W₂x + b₂)) — «ворота» (gate), которые решают, какую информацию пропустить.
GLU позволяет модели динамически выбирать, какие признаки важны. Это мощнее, чем просто нелинейность.
5. SwiGLU: объединение Swish и GLU
SwiGLU (Shazeer, 2020) — вариант GLU, где вместо сигмоиды используется Swish (или SiLU). Формула:
SwiGLU(x) = Swish(W₁x + b₁) ⊙ (Vx + c)
где:
- Swish(z) = z * sigmoid(z).
(Vx + c)— вторая линейная проекция (без активации), выполняющая роль «входных ворот».
В оригинальной статье Shazeer также предложил вариант с ReLU вместо Swish (ReGLU), но SwiGLU показал лучшие результаты.
Важно SwiGLU требует три матрицы весов (W₁, V, и выходную проекцию), в то время как стандартный FFN с ReLU использует две. Чтобы сохранить число параметров, в современных LLM (например, Llama) уменьшают скрытую размерность FFN в 2/3 раза (примерно 2/3 * 4 * d_model вместо 4 * d_model).
6. Почему SwiGLU лучше ReLU в LLM?
Сравнение по ключевым аспектам:
| Аспект | ReLU | SwiGLU |
|---|---|---|
| Мёртвые нейроны | Да (градиент 0 для x<0) | Нет (Swish даёт ненулевой градиент) |
| Нелинейность | Простая кусочно-линейная | Богатая (гладкая + гейтинг) |
| Контроль информации | Нет (просто max) | Да (гейтинг через ⊙) |
| Вычислительная сложность | 2 матрицы (W₁, W₂) | 3 матрицы (W₁, V, W₂), но с уменьшенной размерностью |
| Качество (perplexity) | Базовое | Лучше на 0.5–1.0 пункта при равных параметрах |
| Использование в LLM | Устаревшие модели (GPT-2) | Современные (Llama, PaLM, Falcon, Mistral) |
Эмпирические результаты (Shazeer, 2020; Touvron et al., 2023 — Llama paper):
- SwiGLU снижает perplexity на 0.5–1.0 по сравнению с ReLU при одинаковом числе параметров.
- В Llama 2 замена ReLU на SwiGLU дала улучшение на всех бенчмарках (MMLU, HellaSwag, etc.).
- SwiGLU стабильнее при обучении: меньше всплесков loss, быстрее сходимость.
Почему гейтинг так важен
В LLM FFN выполняет роль «ключа-значения»: первая проекция создаёт «ключи», вторая — «значения», а гейтинг (умножение) решает, какие ключи активировать. Это похоже на механизм внимания внутри FFN. ReLU просто отсекает отрицательные значения, теряя информацию.
7. Реализация SwiGLU в PyTorch
import torch
import torch.nn as nn
import torch.nn.functional as F
class SwiGLUFFN(nn.Module):
def __init__(self, d_model, hidden_mult=4):
super().__init__()
# Стандартный FFN с ReLU: hidden = 4 * d_model
# Для SwiGLU hidden = int(2/3 * 4 * d_model) ≈ 2.67 * d_model
hidden = int(2/3 * hidden_mult * d_model)
self.w1 = nn.Linear(d_model, hidden, bias=False)
self.v = nn.Linear(d_model, hidden, bias=False)
self.w2 = nn.Linear(hidden, d_model, bias=False)
def forward(self, x):
# Swish(w1(x)) * v(x)
gate = F.silu(self.w1(x)) # SiLU = Swish
value = self.v(x)
return self.w2(gate * value)
Примечание F.silu — встроенная функция PyTorch, эквивалент x * sigmoid(x).
8. Связь с другими функциями активации
- GELU (Gaussian Error Linear Unit):
x * Φ(x), где Φ — CDF нормального распределения. Похожа на Swish, но чуть более гладкая. Используется в BERT, GPT-3. SwiGLU даёт лучшее качество, чем GELU, по данным Shazeer. - SiLU — то же, что Swish (название из PyTorch). SwiGLU использует SiLU.
- ReGLU — GLU с ReLU вместо Swish. Проще, но хуже SwiGLU.
9. Пет-проект для закрепления
Задача Сравнить SwiGLU и ReLU на маленьком трансформере (2 слоя, d_model=128) при обучении на задаче next-token prediction (например, на датасете TinyStories).
Инструменты PyTorch, Hugging Face Transformers (можно написать свой блок), Weights & Biases (для логов).
Шаги:
- Реализовать два варианта FFN: с ReLU (2 линейных слоя, hidden=4*d_model) и с SwiGLU (3 линейных слоя, hidden=int(2/34d_model)).
- Собрать маленький трансформер-декодер (2 слоя, 4 головы внимания).
- Обучить обе модели на TinyStories (100k шагов, batch size 64, learning rate 3e-4).
- Логировать loss и perplexity на валидации.
- Построить графики сходимости.
Ожидаемый результат Модель со SwiGLU покажет более низкий perplexity (на 0.5–1.0) и более стабильное обучение (меньше выбросов loss). Вы также можете измерить время шага — SwiGLU будет немного медленнее из-за дополнительного линейного слоя, но качество перевешивает.
10. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 650 | Что такое LLM и как они устроены? |
| 651 | Архитектура трансформера (энкодер-декодер) |
| 652 | Какие функции активации используются в LLM? |
| 653 | Layer Normalization и Pre-Norm vs Post-Norm |
| 654 | Позиционные кодировки (RoPE, AliBi) |
| 656 | Что такое GQA (Grouped Query Attention)? |
11. Навигация
- Предыдущий: 654
- Следующий: 656
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 654
- Следующий: 656
- Индекс: 00. Индекс разборов