О модификациях RoPE: Заглянем в мир позиционного кодирования

Разговор о RoPE задал нам интересный вектор, и теперь настало время покопаться в его модификациях. Обещаю: будет увлекательно! Здесь мы собрали обилие информации, так что приготовьтесь к трем насыщенным постам на эту тему. Питаю надежду, что вам будет интересно!

Что такое Posiotional Encoding и зачем он нужен?

Итак, напомню, что такое Positional Encoding (кодирование позиций токенов). Не спорю, звучит строго, но важно! Без этой фишки модели и трансформеры не могли бы понимательно интерпретировать, где именно находятся слова в предложении. Это словно GPS для текста: без него все теряется в пространстве. Позиционное кодирование помогает нам передать информацию не только о том, где слово находится в отрезке, но и о том, насколько далеко оно от других слов.

Эволюция позиционного кодирования

Теперь давайте погрузимся в историю его развития. Поехали!

📆 2017 год
С выходом классического трансформера в целом сценарий позиционного кодирования выглядел иначе, чем сейчас. Давайте вспомним: позиции токенов определялись с помощью тригонометрических функций. Простая прибавка значений этих функций к эмбеддингам слов. Вроде бы растянули лимон до предела, но при этом очень удобно: кодировать можно любую позицию, даже такую, которая выходит за пределы обучающей длины.

Однако не все так гладко. Работа с длинными последовательностями не была шикарной, и моделям не удавалось охватить всю суть языка. Так что эта тригонометрия, хоть и была новаторской, попала в ловушку собственных ограничений.

📆 2018 год
И затем приходит BERT от Google, ставящий на уши весь мир NLP! Вместо тригонометрии нам предлагают новый подход к позиционному кодированию. Почему бы не сделать так, чтобы позиция токена кодировалась с помощью дополнительного обучаемого слоя nn.Embedding, как и в случае с эмбеддингами слов?

Это дает нам сумму векторов слова и его позиции — и, блин, это работает лучше! Проблема лишь в том, что мы снова зашли в тот же тупик: если нам нужно закодировать позицию за пределами максимальной длины обучения, то мы пасуем. Все, что за пределами модели, попадает под категорию "незнакомое". Это как указывать на далекие звезды, но не имея телескопа!

И тут возникает действительно интересная идея: относительная позиция важнее, чем кажется. Вместо того чтобы зацикливаться на абсолютных положениях слов, нужно сосредоточиться на том, как близко или далеко друг от друга находятся токены. Так появился Relative Position Encoding (RPE), который упрощает ситуацию благодаря декодированию относительной близости.

Плюс, подкидывают новую идею о том, чтобы позиционное кодирование встраивать не в момент создания эмбеддингов, а во время механизма Attention. Это значит, что информация о позициях добавляется непосредственно в queries и keys!

Вот такие крутящиеся процессы! На первый взгляд может показаться, что это всё заумно, но на самом деле за высокими терминами скрываются реальные изменения, которые направлены исключительно на то, чтобы сделать модели умнее и предсказания точнее.

Так что оставайтесь с нами! Дальше будет только интереснее.

Теги.: RoPEPositionalEncodingNLPMachineLearningDeepLearning
14 3 недели назад


Обсуждение (0)

Войдите, чтобы оставить комментарий

Пока нет комментариев!



Вам также может понравиться

RoPE, или Rotation-based Position Encoding, — это техника, которая революционизирует подход к обучению языковых моделей (LLM). Вместо традиционных позиционных эмбеддингов RoPE использует вращения векторов, что позволяет лучше захватывать контекст и взаимосвязи в тексте. Важно понимать, что это не просто очередная техническая заморо... Читать далее
Модификация RoPE – это настоящая революция в кодировании позиций! Мы переходим от привычной тригонометрии к относительным позициям, открывая новые горизонты. Представь себе, как эти модификации работают: они не просто улучшают пищу для нашей нейросети, но и добавляют в нее еще больше вкуса. Погружаемся в мир возможностей и перспект... Читать далее