Заглянем в мир модификаций RoPE!
Привет, друзья! 🌟 На днях мы затрагивали тему RoPE, и теперь я полный энергии, чтобы углубиться в модификации этой удивительной технологии! Обещаю, будет очень интересно, и на всё про всё проведем три захватывающих поста. Так что пристегните ремни, и давайте погрузимся в захватывающий мир позиционного кодирования!
Если вы помните, Positional Encoding (кодирование позиций) — это не просто какая-то скучная техническая деталь. Это суть того, как трансформеры "понимают", где размещены слова в предложении. Это знание о позициях, будь то относительные или абсолютные, критично для работы модели!
Итак, давайте разберем, как эволюционировало позиционное кодирование на протяжении последних лет. Это просто супер интересно!
📆 2017: Рождение ванильного трансформера
Мы вернемся к 2017 году, когда мир увидел ванильный трансформер. Тут началась магия! Pозиции токенов были закодированы с использованием тригонометрических функций. Да, звучит сложно, но если проще, то мы просто прибавляли определенные значения к эмбеддингам слов в зависимости от их позиции. 🎶
Плюсы: Это позволяло нам кодировать любую позицию, даже ту, которая превышала максимальную длину, на которой мы когда-либо тренировались. Практически как правило "перепрыгни выше головы"!
Минусы: Но, как и в любой хорошей истории, были свои недостатки. Ванильное кодирование не справлялось с длинными последовательностями. Да и в целом, как будто бродяга в темном лесу — не всегда работало так, как ожидалось.
📆 2018: BERT меняет правила игры
С появлением BERT в 2018 году всё изменилось! 🚀 Google предложил свежий взгляд на кодирование позиций. Они убрали тригонометрию и добавили в модель слой nn.Embedding, который стал отвечать за кодирование позиции токена. Это была настоящая революция!
Получившийся итоговый вектор токена — это теперь сумма векторов самого токена и его позиции. Вот так просто! И знаете, это действительно работало лучше, чем старое тригонометрическое кодирование.
Однако, тут тоже набралось несколько проблем. Наша модель не могла экстраполировать; если позиция превосходила максимальную длину обучения, мы оставались "без сил". Это так же как неуместный гость на вечеринке — не знаешь, как с ним справиться, потому что он незнаком.
📆 Идея относительного кодирования
И не забывайте о решении, которое зародилось в то время — это относительное позиционное кодирование, или как мы его называем, Relative Position Encoding (RPE). 🤔 Авторы сделали потрясающую работу, поняв, что важнее не абсолютные позиции слов, а их относительные расстояния друг к другу! 📏
Вместо того, чтобы кодировать каждую позицию в ее абсолютном значении, они взглянули на близость токенов и решили интегрировать позиционное кодирование прямо на уровне Attention. Это означает, что теперь информация о позиции включается в запросы и ключи. Вот так, с помощью нескольких простых шагов, они сделали подход к позиционному кодированию более адаптивным!
Ну что, друзья, на этом я закончу свой рассказ о первых шагах позиционного кодирования и его трансформациях. Ожидайте следующих постов, где мы будем думать о том, что же внедрили разработчики после 2018 года! Делаем шаги во Вселенную RoPE вместе! 🌌✨
Вам также может понравиться










