Что такое позиционное кодирование в модели трансформатора?


23

Я новичок в ML, и это мой первый вопрос здесь, так что извините, если мой вопрос глупый.

Я пытаюсь прочитать и понять статью. Внимание - это все, что вам нужно, и в нем есть картинка:

введите описание изображения здесь

Я не знаю, что такое позиционное кодирование . Слушая некоторые видеоролики на YouTube, я обнаружил, что это вложение, имеющее как значение, так и положение слова в нем и имеющее отношение к sin(x) или cos(x)

но я не мог понять, что это такое и как именно это происходит. так что я здесь за помощью. заранее спасибо.

Ответы:


31

Например, для слова w в позиции pos[0,L1] во входной последовательности w=(w0,,wL1) , с 4-мерным вложением ew и dmodel=4 , операция будет

ew=ew+[sin(pos100000),cos(pos100000),sin(pos100002/4),cos(pos100002/4)]=ew+[sin(pos),cos(pos),sin(pos100),cos(pos100)]

где формула для позиционного кодирования выглядит следующим образом:

PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
сdmodel=512(таким образом,i[0,255]) в исходной статье.

nn , что помогает модели включить порядок слов.

sincossinсоs для нечетных индексов).


1
У вас также есть эта превосходная статья сосредоточено исключительно на позиционном вложения: kazemnejad.com/blog/...
Yohan Обадья

6

Позиционное кодирование - это повторное представление значений слова и его позиции в предложении (учитывая, что это не то же самое, что в начале, в конце или в середине).

Но вы должны принять во внимание, что предложения могут быть любой длины, поэтому говорить «X» слово является третьим в предложении »не имеет смысла, если есть предложения различной длины: 3-е в 3-словосочетании полностью отличается от 3-го в предложении из 20 слов.

Что позиционный кодировщик делает, чтобы получить помощь циклического характера sяN(Икс) а также соs(Икс) функции для возврата информации о положении слова в предложении.


2
благодарю вас. не могли бы вы пояснить, как этот позиционный кодер делает это сsяN а также соs?
Пейман

1

Чтобы добавить к другим ответам, реализация ref OpenAI вычисляет это в естественном пространстве журнала (я думаю, чтобы улучшить точность. Не уверен, что они могли использовать журнал в базе 2). Они не придумали кодировку. Вот генерация таблицы поиска PE, переписанная в C как цикл for-for:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.