Если убрать весь маркетинг вокруг LLM и трансформеров, attention – это очень простая идея: каждый элемент последовательности смотрит на другие элементы и берёт их в разной степени важности.
Математически это всего лишь взвешенное суммирование.
Инженерно – это самый важный блок в архитектуре Attention Is All You Need.
Разберёмся спокойно, без лишней суеты.
Интуиция: внимание как "умное среднее"
Представим предложение:
“The bank approved the loan.”
Слово bank может означать и "банк", и "берег". Чтобы понять смысл, модель должна "посмотреть" на другие слова – approved, loan – и понять контекст.
Механизм attention делает следующее:
Для каждого слова считает, насколько оно связано с другими словами.
Превращает эти оценки в веса.
Делает взвешенную сумму представлений слов.
Формально:
outputi=j=1∑nαij⋅vj
где:
vj – вектор значения (value) слова j
αij – насколько слово i “внимательно” к слову j
∑jαij=1
Это обычное взвешенное среднее. Но веса считаются не вручную, а через Q/K/V.
Откуда берутся Q, K и V
Каждое входное слово представлено вектором x∈Rd.
Из него линейными преобразованиями получаем три новых вектора:
Q=XWQK=XWKV=XWV
Где:
WQ,WK,WV – обучаемые матрицы
Q – query (запрос)
K – key (ключ)
V – value (значение)
Интуитивно:
Query – "что я ищу?"
Key – "что я предлагаю?"
Value – "что я передаю, если меня выбрали?"
Скалярное произведение как мера похожести
Чтобы понять, насколько слово i связано со словом j, берём:
scoreij=Qi⋅Kj
Это скалярное произведение. Если векторы сонаправлены – значение большое. Если ортогональны – около нуля.
Чтобы избежать слишком больших чисел, делим на dk:
scoreij=dkQi⋅Kj
Это называется Scaled Dot-Product Attention.
Превращаем score в вероятности
Чтобы получить веса, применяем softmax:
αij=∑kexp(scoreik)exp(scoreij)
Теперь:
все веса положительные
сумма по j равна 1
Полная формула Attention
В матричной форме:
Attention(Q,K,V)=softmax(dkQKT)V
Это ключевая формула трансформера.
27.1 Scaled dot product attention
Мини-пример с числами
Пусть у нас 2 токена и размерность 2.
Считаем score
Для первого токена:
После softmax:
Output:
0.73∗V1+0.27∗V2≈[7.3,5.4]
Мы получили смесь значений.
Упрощённая реализация Attention на PHP
Ниже – минималистичная версия scaled dot-product attention.
Это не оптимизированый код. Это демонстрация идеи.
Где здесь обучение?
Матрицы:
WQ
WK
WV
обучаются через backpropagation.
Градиенты проходят:
Через умножение на V
Через softmax
Через деление на d
Через Q и K
Через линейные слои
Именно поэтому attention полностью дифференцируем.
Геометрическая интерпретация
Attention – это:
Проекция запроса в пространство ключей
→ измерение угла
→ смешивание значений
Если представить векторы в 2D, то скалярное произведение – это: ∥Q∥∥K∥cos(θ)
Чем меньше угол – тем больше вклад.
27.2 Вклад угла между векторами на скалярное произведение
Почему это революция?
До трансформеров были:
RNN
LSTM
GRU
Они обрабатывали текст последовательно.
Attention позволил:
Параллельную обработку
Глобальный контекст
Масштабирование
И стал основой моделей вроде OpenAI и их GPT-линейки.
Self-Attention
В self-attention:
Q=K=V=XW
То есть все три получаются из одного входа.
Каждый токен "смотрит" на всех остальных.
Что важно понять разработчику
Attention – это не магия.
Это:
Линейные преобразования
Скалярное произведение
Softmax
Взвешенная сумма
И... Всё.
Если вы понимаете матрицы и взвешенные средние – вы понимаете attention.
Как использовать это в PHP-проектах
В реальных PHP-проектах вы врядли будете реализовывать attention вручную.