Одна из главных загадок для новичков в ИИ: если Transformer обрабатывает все слова параллельно, как он вообще понимает, что было сначала, а что потом? Ответ — positional encoding.
Почему это важно
В обычной фразе порядок слов критичен:
- «Кошка укусила собаку»
- «Собака укусила кошку»
Слова те же, смысл разный.
Но в архитектуре Transformer нет встроенного чувства порядка, как в RNN. Attention видит токены сразу, а значит модели нужно добавить информацию о позиции вручную.
Что такое positional encoding
Positional encoding — это способ сообщить модели, на каком месте стоит каждый токен в последовательности.
На практике у каждого слова есть:
- embedding — смысл слова
- position encoding — его позиция в тексте
Они складываются, и модель получает не просто слово, а слово в конкретном месте.
Как это работает
Например, есть фраза:
- [Я] [люблю] [чай]
Модель получает:
- embedding слова «Я» + код позиции 1
- embedding слова «люблю» + код позиции 2
- embedding слова «чай» + код позиции 3
Благодаря этому attention учитывает не только сами токены, но и их порядок.
Какие бывают positional encoding
Есть два основных подхода:
- Абсолютные позиции
Каждому месту в последовательности соответствует свой код: 1, 2, 3, 4… - Относительные позиции
Модель смотрит не только на номер слова, но и на то, насколько далеко один токен от другого. Это особенно полезно для длинных текстов.
Почему в оригинальном Transformer использовали синусы и косинусы
В классической статье Attention Is All You Need позиции кодировались через sin/cos-функции. Это дало два преимущества:
- модель может улавливать закономерности расстояний между словами
- кодировки можно переносить на последовательности длиннее тех, что были в обучении
То есть позиция задается не числом “5”, а набором значений по формулам. Для модели это удобный математический язык 📐
А как модель «помнит» порядок дальше
Важно понять: Transformer не запоминает порядок как человек, а использует его как часть входных данных и внутренних связей attention.
Когда модель анализирует текст, она смотрит:
- какие слова важны друг для друга
- на каких позициях они стоят
- как далеко они расположены
Так формируется контекст. Например, модель может понять, к какому существительному относится местоимение, где начало конструкции и какой токен логически связан с другим.
Где это особенно важно
Positional encoding критичен в задачах:
- машинный перевод
- суммаризация
- генерация текста
- кодогенерация
- анализ длинных документов
Без него Transformer видел бы предложение как мешок слов, а не как последовательность 🧩
Главное
Positional encoding — это механизм, который добавляет в Transformer информацию о порядке токенов.
Именно поэтому модель различает смысл фраз, где слова одинаковые, но стоят в разном порядке.
Сегодня вместо классических sin/cos часто используют более продвинутые методы — например, relative positional encoding, RoPE и другие. Но идея остается той же: дать модели чувство позиции 🚀
Если интересна тема нейросетей, NLP и архитектуры современных ИИ-моделей — загляните в нашу подборку каналов про ИИ 👀