Книга: Инжиниринг искусственного интеллекта
Назад: 1.2 Эмбеддинги
Дальше: 1.4 Механизм самовнимания (Self‑Attention)

1.3 Позиционное кодирование (Positional Encoding)

Эмбеддинги наделили каждое слово смыслом, расположив их в пространстве так, что «кот» и «кошка» оказались рядом. Но в языке важен не только смысл самих слов, но и их порядок. Фразы «кот укусил собаку» и «собака укусила кота» состоят из одних и тех же слов, но означают прямо противоположное. Если мы просто сложим эмбеддинги, модель не увидит разницы. Как же сообщить ей, что порядок имеет значение?

Вектор токена сам по себе не содержит информации о его позиции в последовательности. Чтобы модель могла различать порядок слов, к эмбеддингам добавляют специальную метку - позиционное кодирование. Но как именно его реализовать? Здесь инженеры придумали несколько способов, и выбор между ними влияет на то, как модель будет работать с длинными текстами.

За годы развития трансформеров два метода стали самыми популярными - каждый со своей философией и областью применения. Познакомимся с ними поближе.



RoPE



Rotary Position Embedding / вращательное позиционное кодирование (используют в LLaMA, DeepSeek);

Это способ объяснить нейросети порядок слов, не теряя при этом связь между ними. Представьте, каждое слово - это бусинка, нанизанная на длинную нить (это ось предложения). Если мы просто повесим табличку с номером, бусинка так и останется бусинкой. При использовании Rotary мы начинаем закручивать каждую бусинку по мере удаления от начала нити. Первая бусинка чуть-чуть повернута, вторая - еще немного, третья - еще сильнее... В итоге все бусинки закручены в спираль вокруг основной нити.



Почему это круто для связи между словами?



Потому что поворот - это геометрическое свойство. Когда нейросеть смотрит на две бусинки (два слова), она видит не просто их «номера», а угол между ними. Чем дальше слова друг от друга, тем больше этот угол (потому что они сильнее закручены). Модель обучается реагировать на эти углы.

Например, внимание (Attention) модели может быть настроено так: «Мне нужно найти слово, которое повернуто относительно текущего ровно на определенный угол». Это математически эквивалентно фразе «найди слово через два слова слева».



Как это работает



Проблема

Трансформер (мозг GPT) видит все слова сразу. Если не отметить позицию, для него фраза «Мальчик ударил мяч» и «Мяч ударил мальчика» будут одинаковыми.



Обычные методы

Просто добавляют число к смыслу слова (позицию). Это работает, но нейросеть со временем «забывает» числа и путается в длинных текстах.



RoPE (Вращение)

Вместо того чтобы приписывать цифру, RoPE поворачивает вектор смысла слова. Чем дальше слово от начала, тем сильнее оно повернуто вокруг своей оси.



Почему это гениально?



Относительность

Нейросеть видит не только, что слово стоит на 5-м месте, но и угол поворота между словами. Это позволяет ей легко понимать зависимость между «далекими» словами (например, если в начале предложения было "он", а в конце - "потому что").



Затухание

Вращение устроено так, что очень далекие слова «перекручиваются» и их влияние ослабевает (как в реальной жизни - первые слова уже слабо влияют на конец огромной книги).



RoPE - это хитрый способ накрутить на вектор слова спиральку, которая показывает его место в предложении, чтобы нейросеть понимала не только ЧТО сказано, но и в каком ПОРЯДКЕ.



Формула расчета угла поворота



angle_diff = (pos2 - pos1) / (10000 ^ (2i / d)), где







ALiBi





Attention with Linear Biases / внимание с линейными смещениями.

Еще один способ объяснить нейросети порядок слов, но работает он проще и эффективнее, чем сложное вращение RoPE.





Суть одной фразой

ALiBi наказывает далекие слова, вычитая из их «внимания» штраф, который растет пропорционально расстоянию.





Как это работает





Проблема

Нейросеть (трансформер) пытается понять связь между словами. Связь между близкими словами (например, «я» и «пошел») обычно сильнее, чем между далекими.





Механизм

Когда модель смотрит на два слова и решает, насколько они связаны, ALiBi просто вычитает число из оценки этой связи.

Если слова стоят рядом - штраф маленький (почти ноль).

Если между ними 10 слов - штраф побольше.

Если между ними 1000 слов - штраф огромный, модель понимает: «Они слишком далеко, забудь».





Почему это круто?





Длинные тексты

ALiBi помогает модели работать с очень длинными текстами, потому что она «знает»: на каждый шаг расстояния связь ухудшается.





Простота

Не нужно сложных математических преобразований (вращений), как в RoPE. Просто берем и уменьшаем внимание к дальним словам.





ALiBi - это как линейка, которой модель бьет по рукам за попытку обращать слишком много внимания на слова, которые находятся далеко в тексте. Штраф растет ровно и предсказуемо (линейно), отсюда и название.





RoPE vs ALiBi





RoPE (вращательное кодирование):

Слова закручиваются по спирали, угол поворота = позиция

[Кот]⁰° [съел]⁹⁰° [мышь]¹⁸⁰°

●────────●────────●

(чем дальше, тем больше поворот)

ALiBi (линейные смещения):

Внимание штрафуется за расстояние

Вес внимания = исходная_оценка - расстояние × штраф

Кот → съел: вес 0.9 - 1×0.1 = 0.8

Кот → мышь: вес 0.3 - 2×0.1 = 0.1





Итак, мы добавили к словам информацию об их порядке. Теперь модель знает, кто за кем стоит. Но этого всё ещё недостаточно, чтобы понимать сложные связи между словами. Предложение «кот укусил собаку» - это не просто последовательность слов, это история про то, кто совершил действие, а кто его испытал. Чтобы уловить эти отношения, нужен следующий, самый важный компонент трансформера - механизм самовнимания.





Назад: 1.2 Эмбеддинги
Дальше: 1.4 Механизм самовнимания (Self‑Attention)