2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Positional Encoding (PE) в трансформерах и не только
Сообщение25.07.2025, 07:22 
Я как-то ещё до разборки с трансформерами пришёл к идее наивного позиционного кодирования, которое можно назвать линейным:
Mihaylo в сообщении #1655790 писал(а):
Тут я не придумал ничего лучше как сделать unbinding - оторвать данные от индексов массива. Для этого нужно пиксели хранить не в виде вектора $x$ длиной 784 элемента, а иметь данные в виде массива $[(x_1, y_1, value_1), (x_2, y_2, value_2), ...]$.

На это мне ответили:
mihaild в сообщении #1655895 писал(а):
Всё уже украдено до Вас, называется positional encoding.
Собственно интерполяцию оно даст автоматически (только не по соседним пикселям, а по всем, но с убывающими весами).

Я стал изучать Sinusoidal Positional Encoding (SPE) - это первый исторический из методов позиционного кодирования для трансформеров. В принципе, нетрудно понять и один из самых актуальных методов - Rotary Positional Embeddings (RoPE). Оба этих метода работают с абсолютным и относительным позиционированием одновременно.

Я пока пытаюсь усовершенствовать свой наивный способ, у него недостатки:
1. Только абсолютные позиции
2. Слабая выразительность позиции. (Равные и близкие позиции почти неотличимы, когда их нужно отличать. И, наоборот, равные и близкие позиции отличимы, когда между ними по сути нет разницы.)

Со вторым недостатком я разобрался. Вместо линейного кодирования применяем слегка модифицированный onehot-encoding. Вместо двух координат $(x, y)$ позиции пикселя заводим 54 признака позиции - $(x\geqslant 1, x\geqslant 2, x\geqslant 3, ..., x\geqslant 26, y\geqslant 1, y\geqslant 2, y\geqslant 3, ..., y\geqslant 26)$.
Гениальное просто!

Но как закодировать относительную позицию?.. Особенно, если твой код не рассматривает пиксели попарно (как это делается с токенами в трансформерах).

 
 
 
 Re: Positional Encoding (PE) в трансформерах и не только
Сообщение25.07.2025, 09:11 
Пока у меня такая мысль: берём эмбеддинг - результат обработки пикселя и складываем с абсолютной позицией.
$emb = \frac{emb + \frac{x}{27} + \frac{y}{27}}{3}$

И потом надеемся, что последующая нейроструктура с линейным слоем разложит эту суперпозицию в нужную линейную комбинацию позиций, включая относительную $x_1 - x_2$ и т.д.

Требуется тестирование...

-- 25.07.2025, 09:22 --

Ещё один способ:
$emb = \frac{emb \cdot (1 + \frac{x}{27} + \frac{y}{27})}{3}$
Дело в том, что очень многие члены эмбеддинга равны 0 и некоторые близки к 1. Но не все. Немного такой подход идёт в разрез с линейной алгеброй - нелинейное кодирование позиции. Не знаю. Просто идея.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group