Как именно рассчитывается это позиционное кодирование?
Давайте предположим сценарий машинного перевода, и это входные предложения,
english_text = [this is good, this is bad]
german_text = [das ist gut, das ist schlecht]
Теперь наш размер входного словаря равен 4, а размер вложения равен 4.
#words #embeddings
this - [0.5, 0.2, 0.3, 0.1]
is - [0.1, 0.2, 0.5, 0.1]
good - [0.9, 0.7, 0.9, 0.1]
bad - [0.7, 0.3, 0.4, 0.1]
В соответствии с форматом бумаги трансформатора мы добавляем кодировку положения каждого слова с каждым словом, встраивающим , а затем передаем его кодировщику, как показано на рисунке ниже. ,
Что касается статьи, они дали эту формулу для расчета кодирования позиции каждого слова,
Итак, вот как я могу это реализовать,
d_model = 4 # Embedding dimension
positional_embeddings = np.zeros((max_sentence_length, d_model))
max_sentence_length = 3 # as per my examples above
for position in range(maximum_sentence_length):
for i in range(0, d_model, 2):
positional_embeddings[position, i] = (
sin(position / (10000 ** ( (2*i) / d_model) ) )
)
positional_embeddings[position, i + 1] = (
cos(position / (10000 ** ( (2 * (i + 1) ) / d_model) ) )
)
Тогда новый вектор внедрения будет
[[0.5, 0.2, 0.3, 0.1],
[0.1, 0.2, 0.5, 0.1],
[0.9, 0.7, 0.9, 0.1]] + positional_embeddings = NEW EMBEDDINGS
## shapes
3 x 4 + 3 x 4 = 3 x 4
Так будет вычисляться осуществляться в реализации? Поправьте меня, если есть какая-либо ошибка в моей вышеупомянутой псевдо-реализации.
Если все правильно, тогда У меня есть три сомнения надеюсь, что кто-то может их очистить,
1) Из приведенной выше реализации мы используем формулу sin для четных позиций и формулу cos для нечетных позиций, но я не мог понять причину этого? Я читал, что он использует свойства cycli c, но не может его понять.
2) Есть ли причина для выбора 10000/(2i/d)
или 10000/(2i+1/d)
в качестве коэффициента масштабирования в формуле.
3) Все предложение не будет равно максимальной длине предложения, поэтому нам, возможно, придется дополнить предложение, поэтому мы также рассчитываем позиционное присоединение к токенам дополнения.