Изменения

Перейти к: навигация, поиск

Трансформер

626 байт добавлено, 19:11, 4 сентября 2022
м
rollbackEdits.php mass rollback
==Архитектура трансформера==
[[Файл:TransformerSimpleArchitecture.png|350px400px|thumb|right|Архитектура трансформера<ref>https://jalammar.github.io/illustrated-transformer/</ref>]]
Устройство трансформера состоит из кодирующего и декодирующего компонентов. На вход принимается некая последовательность, создается ее [[:Векторное_представление_слов|векторное представление]] (англ. ''embedding''), прибавляется вектор позиционного кодирования, после чего набор элементов без учета порядка в последовательности поступает в кодирующий компонент (параллельная обработка), а затем декодирующий компонент получает на вход часть этой последовательности и выход кодирующего. В результате получается новая выходная последовательность.
В основе лежит архитектура похожая на базовую архитектуру [[Механизм внимания#Базовая архитектура Seq2seq|Seq2seq]]: кодирующий Внутри кодирующего и декодирующего компонента нет рекуррентности. Кодирующий компонент {{---}} это последовательные блоки состоит из кодировщиков (англ. ''encoders''), а которые повторяются несколько раз, аналогично устроен декодирующий компонент . Трансформер {{---}} это последовательные блоки декодировщиков (англпоставленные друг за другом модели внимания, которые позволяют исходную последовательность векторов перевести в новую последовательность векторов, которые кодируют информацию о контексте каждого элемента. ''decoders'')Трансформер-кодировщик переводит исходные векторы в скрытые, которые правильно сохраняют в себе информацию о контексте каждого элемента. Кодировщики последовательно передает Далее трансформер-декодировщик декодирует результат своей работы следующему кодировщику на входкодировщика в новую последовательность, которая состоит из эмбедингов элементов выходного языка. Декодировщики передают друг другу на вход результат работы вместе После по эмбедингам генерируются сами итоговые элементы с результатом кодирующего компонентапомощью вероятностной языковой модели.
Ниже рассмотрим архитектуру кодировщика и декодировщика подробнее.
Так как в архитектуре трансформер обработка последовательности заменяется на обработку множества мы теряем информацию о порядке элементов последовательности. Чтобы отобразить информацию о позиции элемента в исходной последовательности мы используем позиционное кодирование.
Позиционное кодирование (англ. ''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{-s2k}{d_{model}}}\right) & \quad \text{если } s \text{ четное}=2k\\ \cos \left(i \cdot 10000^{\frac{-s + 12k}{d_{model}}}\right) & \quad \text{если } s \text{ нечетное}=2k+1
\end{cases}
</math>
1632
правки

Навигация