Что такое позиционное кодирование в трансформере
Что проверяют
Понимаете ли вы, зачем трансформеру вообще информация о порядке. Само внимание перестановочно: переставьте токены на входе, и выходные векторы переставятся так же, а содержимое не изменится. Позиционное кодирование это то, что вносит различие между последовательностями из одних и тех же токенов.
Как отвечать
Начните с причины, потом переберите семейства решений. Классика это фиксированные синусоиды: для позиции и номера измерения берётся синус или косинус от позиции, делённой на 10000 в степени, пропорциональной номеру измерения. Каждая пара измерений задаёт волну своей частоты, вектор позиции просто прибавляется к эмбеддингу токена.
angles = pos / np.power(10000, 2 * (np.arange(d) // 2) / d)
pe = np.where(np.arange(d) % 2 == 0, np.sin(angles), np.cos(angles))Второе семейство это обучаемые эмбеддинги позиций: отдельная таблица, обучается вместе с моделью, но не работает за пределами длины, встреченной при обучении.
Третье это относительные схемы, где в расчёт внимания входит расстояние между токенами, а не абсолютный номер. Крупные языковые модели чаще поворачивают векторы запроса и ключа на угол, пропорциональный позиции; есть и варианты со штрафом, растущим с расстоянием. Плюс в том, что скалярное произведение зависит от разности позиций, и длинный контекст переносится лучше.
Где спотыкаются
Пересказывают формулу и не могут объяснить, зачем нужны разные частоты. Смысл в том, что сдвиг позиции выражается линейным преобразованием кода, и модели проще извлекать относительное расстояние.
Считают, что все трансформеры используют синусоиды из исходной статьи. Ранние энкодерные и декодерные модели брали обучаемые эмбеддинги, нынешние крупные модели чаще используют поворотные схемы, и от этого напрямую зависит поведение на длинах больше обучающей.
Забывают, в каком месте кодирование применяется. Абсолютное добавляется к эмбеддингам один раз на входе, относительное вмешивается в каждый слой внимания. Из-за этой разницы нельзя просто подменить одно другим и ждать, что модель сойдётся.