Вопрос или проблема
Насколько я понимаю, все токены передаются в трансформер одновременно, и позиционные кодировки помогают ему понять их порядок в последовательности. А косинусовое кодирование помогает захватить краткосрочные и долгосрочные зависимости между токенами (это связано с различными частотами для косинусных функций).
Первый вопрос: почему порядок слов не возникает имплицитно из механизма многоголового внимания? Я думал, что после обучения трансформера на большом объеме данных механизм в конечном итоге сможет смотреть на неупорядоченный набор слов и придавать ему некоторый порядок? Еще один момент: разве порядок не имплицитный в том, как упорядочены строки матриц Q, K, V и встраиваний? То есть первая строка для первого токена, i-я строка для i-го токена и так далее.
Или с помощью позиционных кодировок мы можем снять часть “нагрузки обучения” с механизма внимания, оставив его сосредоточиться на межтокенных зависимостях? Это кажется очень неопределенным объяснением, поэтому я подумал, что стоит уточнить у вас всех.
Второй вопрос: даже если позиционная кодировка необходима, почему мы не можем просто использовать нормализованную позицию токена в последовательности? Например, “My name is Bob” может стать [0, 1, 2, 3], и этот вектор может быть нормализован для получения позиционной кодировки. Многоголовое самовнимание, безусловно, способно захватить краткосрочные, среднесрочные и долгосрочные зависимости токенов. Так зачем тратить усилия на использование косинусных кодировок?
.
Ответ или решение
Теория (Theory)
В трансформерах механизм внимания играет ключевую роль, позволяя модели учитывать связи между токенами в последовательности. Однако механизм внимания по своей природе неосведомлён о положении каждого токена в последовательности; все токены обрабатываются одновременно, и их относительное расположение не учитывается напрямую. Это создает проблему, так как порядок токенов имеет значение в таких задачах, как машинный перевод и обработка естественного языка.
Позиционное кодирование обеспечивает трансформеры необходимой информацией о порядке, добавляя информацию о позиции в векторное представление токенов. Косинусное позиционное кодирование, в частности, использует различные частоты косинусных функций для представления позиций. Это позволяет модели улавливать как краткосрочные, так и долгосрочные зависимости. Использование косинусных функций с различными частотами помогает модели различать токены на разных расстояниях друг от друга.
Пример (Example)
Предположим, в предложении "Мой друг купил машину" токены "друг" и "машину" имеют важную зависимость друг от друга, но отделены другим токеном. Если бы модель не обладала информацией о расположении токенов, она бы не могла правильно выстроить зависимости и контекст.
Применение (Application)
Теперь подробнее об обсуждаемых вами аспектах. На ваш первый вопрос о том, может ли порядок слов автоматически выучиваться механизмом внимания: хотя механизм внимания способен выучивать зависимости между токенами, предоставление дополнительной информации о расположении токенов снимает некоторую вычислительную нагрузку и позволяет модели более эффективно обучаться с акцентом на содержательные зависимости между словами. Таким образом, пояснительное позиционное кодирование действительно облегчает задачу обучения модели, предоставляя при этом необходимый контекст.
Второй ваш вопрос о том, почему нельзя использовать просто нормализованное позиционное кодирование, тоже имеет логическое объяснение. Использование только нормализованных позиций может привести к потере информации, особенно в длинных последовательностях, где относительная позиция двух токенов важнее, чем их абсолютные позиции. Косинусные функции с разными частотами сохраняют локальные и глобальные отношения, не ограничиваясь линейным расстоянием между токенами.
Таким образом, косинусное позиционное кодирование является неотъемлемой частью архитектуры трансформера, позволяя моделям более точно интерпретировать порядок токенов и эффективно обучаться на любых входных данных.