23
правки
Изменения
→Позиционное кодирование
===Позиционное кодирование===
[[Файл:PositionalEncodingPositionalEncodingNew.png|400px|thumb|right|Визуализация работы позиционного кодирования<ref>httphttps://wwwkazemnejad.machinelearning.ru/wiki/imagescom/eblog/e6transformer_architecture_positional_encoding/Voron-ML-TopicModeling-slides.pdf</ref>]]
Так как в архитектуре трансформер обработка последовательности заменяется на обработку множества мы теряем информацию о порядке элементов последовательности. Чтобы отобразить информацию о позиции элемента в исходной последовательности мы используем позиционное кодирование.
Позиционное кодирование (англ. ''positional encoding'') {{---}} позволяет модели получить информацию о порядке элементов в последовательности путем прибавления специальных меток к вектору входных элементов. Позиции элементов <math>i</math> кодируются векторами <math>p_i</math>, <math>i = 1, 2, ..., n</math>, так, что чем больше <math>|i - j|</math>, тем больше <math>||p_i - p_j||</math>, и <math>n</math> не ограничено:
<math> p_{(i, s)} = \begin{cases} \sin \left(i \cdot 10000^{\frac{-2s}{d_{model}}}\right)</math>,<math>p_ & \quad \text{(i, если } s + \fractext{dчетное}{2})} = \\ \cos \left(i \cdot 10000^{\frac{-2s}{d_{model}}}\right) & \quad \text{если } s \text{ нечетное} \end{cases}</math>
===Self-attention===