Sobes.tech
Назад к вопросам
Middle — Senior
11

Что такое SwiGLU и в каких моделях применяется эта активация?

Компании, где спрашивали
ЦифровыеПривычки
AvitoAvito

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

SwiGLU — это вариант гейтинговой активации, где один линейный поток “пропускает” информацию, а другой управляет, сколько из неё пройти дальше. Обычно её используют вместо классического ReLU/GELU в MLP-блоках трансформеров. В современных LLM она часто даёт лучшее качество при сопоставимых или меньших затратах.

Определение:

SwiGLU — это gated activation, построенная на сочетании линейного преобразования и функции SiLU. Типичная форма: один вход преобразуется в две части, одна умножается на SiLU от второй, и результат идёт дальше по сети.

Идея такая: модель не просто нелинейно преобразует признаки, а учится “открывать” или “закрывать” их в зависимости от контекста. Это делает промежуточный MLP в трансформере более выразительным.

Пример использования:

SwiGLU часто применяется в feed-forward блоках трансформеров, особенно в современных языковых моделях.

import torch
import torch.nn as nn

class SwiGLU(nn.Module):
    def __init__(self, d_model, d_hidden):
        super().__init__()
        self.w1 = nn.Linear(d_model, d_hidden)
        self.w2 = nn.Linear(d_model, d_hidden)
        self.w3 = nn.Linear(d_hidden, d_model)

    def forward(self, x):
        return self.w3(self.w1(x) * torch.nn.functional.silu(self.w2(x)))

Такой блок может использоваться внутри Transformer decoder вместо стандартного Linear -> GELU -> Linear.

Пояснение кода:

  • w1(x) — основная ветка, которая формирует признаки.
  • w2(x) — управляющая ветка, которая через silu выдаёт “гейт”.
  • w1(x) * silu(w2(x)) — покомпонентное произведение: одни признаки усиливаются, другие подавляются.
  • w3(...) — проекция обратно в размерность модели.

На практике это вставляется в MLP-блок трансформера, где раньше использовали обычную нелинейность вроде GELU.

Ключевые моменты:

  • SwiGLU — это gated activation, а не просто обычная нелинейность.
  • Основа — умножение одной ветки на SiLU от другой ветки.
  • Часто используется в MLP-блоках трансформеров вместо GELU/ReLU.
  • Популярна в современных LLM, потому что улучшает качество и эффективность обучения.
  • Хорошо работает там, где важна выразительность feed-forward части модели.