- BrainTools - https://www.braintools.ru -
Привет, меня зовут Василий Техин. За последние 6 лет я прошёл путь от новичка в ML который ни в чем не разбирается, до человека, который может помочь разобраться другим не используя сложной математике [1] и приправляя обьяcнение наглядными примерами. В этой серии статей я разбираю прорывные модели “на пальцах”:
Vision Transformer (ViT) — Когда трансформеры научились видеть [3]
Diffusion Transformer (DiT) — Stable Diffusion 3 как она есть [4] Сегодня: Mamba — революция в обработке длинных последовательностей!
Представьте тусовку ученых исследователей, где каждый должен переговорить со всеми. Для 10 человек — 100 диалогов (да, мы считаем, что разговоры первый со вторым и второй с первым отличаются и да да мы будем считать, что он и сам с собой говорит, кто поймет этих ученых!). Для 1000 — 1 000 000! Это квадратичная сложность (O(n²)) внимания [5] в трансформерах.
Mamba (State Space Models) решает это:
Замена внимания на линейную рекуррентную сеть (O(n)).
Селективность: динамический выбор важной информации.
Ускорение в 5 раз на длинных текстах.
State Space Models (SSM) — семейство линейных моделей для последовательностей, основанных на дифференциальных уравнениях. Их ключевые особенности:
Линейность: состояние обновляется линейно (s(t) = A·s(t-1) + B·x(t)), без нелинейных активаций.
Дискретизация: параметры выводятся из непрерывных уравнений для работы с дискретными токенами.
Сжатое состояние: вся история последовательности сжимается в вектор фиксированного размера.
|
Модель |
Ключевые особенности |
Отличие от SSM |
|---|---|---|
|
RNN/GRU/LSTM |
Нелинейные активации (tanh, sigmoid) |
SSM — полностью линейны |
|
Трансформеры |
Внимание (O(n²)) |
SSM — рекуррентные (O(n)) |
|
S4 SSM |
Линейность + инвариантность во времени |
Mamba добавляет селективность (B, C, Δt зависят от входа) |
|
Mamba |
SSM + селективность + параллельный scan |
Динамическая адаптация к важности токенов |
Ядро архитектуры:
ds(t)/dt = A·s(t) + B·x(t)
y(t) = C·s(t) + D·x(t)
Где:
x(t) — входной сигнал (токен) в момент времени t
s(t) — скрытое состояние (память [6] модели)
ds(t)/dt — скорость изменения состояния
A — матрица переходов (определяет “забывание” прошлого)
B — матрица входа (влияние нового токена на состояние)
C — матрица выхода (преобразует состояние в выход)
D — сквозная связь (прямое влияние входа на выход)
y(t) — выходной сигнал
Дискретизация для токенов:
A_d = exp(-Δt * A) # Дискретная матрица переходов
B_d = (A⁻¹)(exp(Δt·A) - I)B # Дискретная матрица входа
s_t = A_d · s_{t-1} + B_d · x_t
Где:
A_d — дискретный аналог матрицы A (определяет “сохранение памяти”)
B_d — дискретный аналог матрицы B (влияние входа на обновление состояния)
Δt — шаг дискретизации (учится: большой = долгая память, маленький = быстрое забывание [7])
Уникальность Mamba:
B = Linear(x_t) # Линейное преобразование входа
Δt = softplus(Linear(x_t)) # Активация softplus: log(1 + exp(x))
Где:
Linear() — полносвязный слой (y = Wx + b)
softplus() — гладкая версия ReLU, гарантирует Δt > 0
Модель динамически решает:
“Важный токен? Запомню надолго (↑ Δt)”
“Шум? Проигнорирую (↓ Δt)”
Решение проблемы RNN:
state = cumprod(A) * cumsum(B) # O(log n) вместо O(n)
Где:
cumprod() — кумулятивное произведение (a1, a1a2, a1a2*a3, …)
cumsum() — кумулятивная сумма (b1, b1+b2, b1+b2+b3, …)
Как работает:
Разбиваем последовательность на блоки
Вычисляем промежуточные состояния внутри блоков параллельно
Объединяем результаты между блоками
Повторяем [8] иерархически (дерево слияний)
Обработка фразы “Мама мыла раму”
"М"→10, "а"→11, " "→12, "м"→13, "ы"→14, "л"→15, "р"→16, "у"→17
Последовательность: [10, 11, 13, 11, 12, ...]
Каждый токен → вектор:
10 → [0.2, -0.1, 0.4, 1.1]
11 → [0.7, 0.3, -0.2, 0.5]
Для токена “м” (позиция 2):
Локальный контекст (Conv1D):
conv("Ма") = [0.5, 0.1, 0.3, 0.9] # Смешение соседей
Селективное обновление состояния:
Δt = sigmoid("м") → 0.7 # Высокая важность
new_state = (1 - 0.7*A) * state + 0.7*B * x_token
Gating механизм:
gate = sigmoid(Linear(x)) # Решает, какую информацию передать
output = gate * (C * state + D * x_token)
Выход: y = output
После 12 блоков:
logits = linear_layer(output) # Вероятности символов
next_token = argmax(logits) → "а" # "Мама..."
class MambaBlock(nn.Module):
def forward(self, x):
# Локальный контекст
x_conv = depthwise_conv1d(x)
# Селективные параметры
Δ, B, C = self.x_proj(x_conv)
A_d = exp(-Δ * self.A)
# Параллельный scan
state = cumprod(A_d) * cumsum(B * x_conv)
y = einsum('btd,btd->bt', state, C) + self.D * x_conv
# Gating механизм
return y * torch.sigmoid(self.gate_proj(x))
def parallel_scan(A, B):
A_cum = torch.cumprod(A, dim=1) # Продукт: [a0, a0*a1, a0*a1*a2, ...]
B_cum = torch.cumsum(B * A_cum, dim=1) # Взвешенная сумма
return B_cum / (A_cum + 1e-7) # Нормализация
|
Критерий |
Трансформер |
Mamba |
|---|---|---|
|
Сложность |
O(n²) |
O(n) |
|
Память (инференс) |
O(n) |
O(1) |
|
Длина контекста |
~128K |
>1M токенов |
|
Качество |
SOTA |
Сопоставимо |
|
Селективность |
Жёсткое внимание |
Динамический выбор |
Анализ ДНК/белковых последовательностей.
Работа на edge-устройствах (телефоны).
Короткие тексты (трансформеры эффективнее).
Мультимодальные задачи (пока).
🧬 BioMamba:
Анализ генома человека (3 млрд пар оснований).
🖼️ Vim (Vision Mamba):
На 30% быстрее ViT на ImageNet.
Статья [9].
Mamba — прорыв для длинных последовательностей:
State Space Model с селективностью.
Сложность O(n) vs O(n²) у трансформеров.
Применения: геномика, длинные тексты, edge-устройства.
Ограничения: мультимодальность, короткие контексты.
Ссылки:
Оригинальная статья [10]
Объяснение SSM [11]
Mamba не заменяет трансформеры, а расширяет инструментарий ИИ:
Для длинных данных — оптимальный выбор.
Для мультимодальности — трансформеры сохраняют преимущество. Будущее: Гибридные архитектуры, где Mamba обрабатывает историю, а внимание — кросс-модальные связи.
Почему сложность Mamba O(n), а не O(n²)?
Как селективность помогает анализировать ДНК?
Автор: fartoviy109
Источник [12]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/17008
URLs in this post:
[1] математике: http://www.braintools.ru/article/7620
[2] ResNet-18 — Архитектура, покорившая глубину: https://habr.com/ru/articles/921608/
[3] Vision Transformer (ViT) — Когда трансформеры научились видеть: https://habr.com/ru/articles/922868/
[4] Diffusion Transformer (DiT) — Stable Diffusion 3 как она есть: https://habr.com/ru/articles/924410/
[5] внимания: http://www.braintools.ru/article/7595
[6] память: http://www.braintools.ru/article/4140
[7] забывание: http://www.braintools.ru/article/3931
[8] Повторяем: http://www.braintools.ru/article/4012
[9] Статья: https://arxiv.org/abs/2401.09417
[10] Оригинальная статья: https://arxiv.org/abs/2312.00752
[11] Объяснение SSM: https://github.com/state-spaces/mamba
[12] Источник: https://habr.com/ru/articles/925416/?utm_campaign=925416&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.