Это 28-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления
Недавно, когда я изучал структуру Transformer, я обнаружил, что позиционное кодирование в нем очень сложно для понимания, особенно формулы.
Прежде всего, вам нужно знать, что Transformer принимает слова в качестве входных данных и преобразует слова ввложение словПосле этого спозиционное вложениепровестиДобавление (не сращивание или просто добавление значений в соответствующих позициях)
Причина использования позиционного встраивания также очень проста, потому что Transformer отказывается от структуры RNN, поэтому необходима вещь, чтобы отметить временные или позиционные отношения между каждым словом, и эта вещь — позиционное встраивание.
Одно из возможных решений придать модели ощущение порядка — добавить к каждому слову информацию о его позиции в предложении, которую мы называем позиционным кодированием.
Если мы разрабатываем позиционное кодирование из 0, первый метод, о котором легче думать, — это взять число между [0, 1] и присвоить его каждому слову, где 0 — для первого слова, а 1 — для последнего слова. , Конкретная формула. Проблема в том, что предположим, что разница между любыми двумя кодами позиций слов в более коротком тексте составляет 0,0333, а в более длинном тексте также есть два кода позиций слов, отличающиеся на 0,0333. Предполагая, что в коротком тексте всего 30 слов, два слова в более коротком тексте на самом деле являются смежными; если предположить, что в общей сложности 90 слов в более длинном тексте, то два слова в более длинном тексте фактически разделены двумя символами слов. Это явно неуместно, потому что одно и то же различие не имеет одинакового значения в разных предложениях.
Другая идея состоит в том, чтобы присвоить номер каждому временному шагу линейно, то есть первому слову присваивается 1, второму слову присваивается 2 и так далее. Этот метод также имеет большие проблемы: 1. Он имеет большее значение, чем общее встраивание слов, что неизбежно украдет «свет» встраивания слов, что может в определенной степени мешать модели; 2. Последнее слово больше, чем первое слово Символы слишком велики, и неизбежно будет перекос в значении функции после объединения с встраиванием слова.
идеальный дизайн
В идеале конструкция позиционного встраивания должна удовлетворять следующим условиям:
- Он должен выводить уникальную кодировку для каждого слова
- Между предложениями разной длины разница между любыми двумя словами должна быть постоянной.
- Его значение должно быть ограничено
Разработанное автором позиционное вложение удовлетворяет указанным выше требованиям. Во-первых, это не число, а число, содержащее информацию о конкретной позиции в предложении.размерный вектор. Во-вторых, это вложение не интегрируется в модель, вместо этого этот вектор используется для предоставления информации о положении каждого слова в предложении.Другими словами, мы улучшаем модель, вводя информацию о положении каждого слова.На самом деле, грубо говоря, встраивание позиции и встраивание слова добавляются, а затем используются в качестве входных данных.)
Предполагатьместо слова в предложении,Указывает местоположениеВектор положения слова, вложенного в данный момент,определяется следующим образом
в
Относится к нижнему индексу измерения в позиционном встраивании. Чтобы включить позиционное вложение и встраивание слова, размерность позиционного вложения и размерность вложения слова должны быть одинаковыми, поэтому, так что есть
для тригонометрических функцийНапример, период, частота, поэтому чем больше B, тем больше значение частоты, тем больше повторений изображения функции в одном цикле и тем короче длина волны (если вы забыли математические знания здесь, вы можете прочитать этостатья)
назадВ определении ,становится больше, поэтомустановится все меньше и меньше, поэтомуОн также становится все меньше и меньше, поэтому частота уменьшается по мере увеличения индекса размерности вектора, а частота уменьшается = период становится больше. Рассчитаем минимальный период(время), максимум периода(при условииВремя)
ты можешь представитькод позиции временного словасодержитивектор функций (при условииДелится на 2)
Визуальный дисплей
вам может быть интересноиКак комбинация s представляет информацию о местоположении? На самом деле это довольно просто, предположим, вы хотите представить число в двоичном виде, что бы вы сделали?
Представление числа в двоичном виде — пустая трата места, поэтому мы можем использовать соответствующую непрерывную функцию — функцию синуса.