Transformer — это классическая модель НЛП, предложенная командой Google в 2017 году, а теперь более популярный Bert также основан на Transformer. Модель Transformer использует механизм Self-Attention и не использует последовательную структуру RNN, так что модель может обучаться параллельно и может иметь глобальную информацию.
1. Структура трансформатора
Во-первых, представлена общая структура Transformer.На следующем рисунке показана общая структура Transformer для китайского и английского перевода.
Общая структура трансформатора
Вы можете видеть, что Transformer состоит из двух частей, Encoder и Decoder.И Encoder, и Decoder содержат 6 блоков. Рабочий процесс Transformer примерно следующий:
Шаг 1: Получите вектор представления X каждого слова входного предложения, X получается путем добавления вложения слова и встраивания позиции слова.
Входное представление трансформатора
Шаг 2: Передайте полученную векторную матрицу представления слова (как показано на рисунке выше, каждая строка является представлением x слова) в кодировщик, после 6 блоков кодировщика информационная матрица кодирования C всех слов в предложении может быть получается, как показано ниже. Матрица вектора слов представлена X (n × d), где n — количество слов в предложении, а d — размерность вектора (в статье d = 512). Размер матрицы вывода каждого блока Encoder точно такой же, как и вход.
Transformer Encoder кодирует информацию о предложении
Шаг 3: Передайте матрицу информации кодирования C, выдаваемую кодировщиком, в декодер, и декодер, в свою очередь, переведет следующее слово i+1 в соответствии с текущим переведенным словом 1~i, как показано на следующем рисунке. В процессе использования при переводе в слово i+1 слово после i+1 необходимо покрыть операцией Mask.
Прогноз декодера трансформатора
Декодер на приведенном выше рисунке получает матрицу кодирования C кодировщика, а затем сначала вводит начальный символ преобразования «
2. Вход трансформатора
Входное представление x слова в Transformer получается добавлением слова Embedding и позиции Embedding.
Входное представление трансформатора
2.1 Встраивание слов
Встраивание слов можно получить разными способами, например, его можно получить с помощью алгоритмов предварительного обучения, таких как Word2Vec и Glove, или его можно получить с помощью обучения в Transformer.
2.2 Встраивание местоположения
В дополнение к Embedding слова в Transformer, позиция Embedding также должна использоваться для указания позиции, в которой слово появляется в предложении. Поскольку Transformer не использует структуру RNN, а использует глобальную информацию, он не может использовать информацию о порядке слов, а эта часть информации очень важна для НЛП. Таким образом, Transformer использует встраивание позиции для сохранения относительной или абсолютной позиции слова в последовательности.
Позиция Embedding представлена PE, а размерность PE такая же, как у слова Embedding. PE можно получить путем тренировок, а можно рассчитать по определенной формуле. Последний используется в Transformer, и формула расчета выглядит следующим образом:
Среди них pos представляет позицию слова в предложении, d представляет размерность PE (такую же, как и слово Embedded), 2i представляет четную размерность, а 2i+1 представляет нечетную размерность (т.е. 2i≤d, 2i+ 1≤г). Использование этой формулы для расчета PE имеет следующие преимущества:
Сделать PE способным адаптироваться к предложениям длиннее, чем все предложения в обучающем наборе.Предполагая, что самое длинное предложение в обучающем наборе имеет 20 слов, и вдруг приходит предложение длиной 21, 21-е предложение может быть рассчитано с использованием метода вычисления формулы. Немного встраивания. Это позволяет модели легко вычислять относительное положение, а для шага фиксированной длины k PE(pos+k) можно рассчитать с помощью PE(pos). Поскольку Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B) . Добавляя слово Embedding слова и позицию Embedding, можно получить вектор представления x слова, а x является входом преобразователя.
3. Self-Attention
Трансформаторный кодер и декодер
На приведенном выше рисунке показана схема внутренней структуры преобразователя в документе с блоком кодировщика слева и блоком декодера справа. Часть в красном круге — это внимание с несколькими головками, которое состоит из нескольких самостоятельных внимания.Вы можете видеть, что блок кодировщика содержит внимание с несколькими головками, а блок декодера содержит два внимания с несколькими головками (один из которых использует В маске). Существует также слой «Добавить и норма» над «Вниманием нескольких головок».Добавить представляет остаточное соединение (Остаточное соединение) для предотвращения деградации сети, а норма представляет нормализацию уровня, которая используется для нормализации значения активации каждого уровня.
Поскольку внимание к себе находится в центре внимания Transformer, мы сосредоточимся на многоголовом внимании и само-внимании.Во-первых, давайте подробно рассмотрим внутреннюю логику само-внимания.
3.1 Структура внутреннего внимания
Структура собственного внимания
На приведенном выше рисунке показана структура Самовнимания, и в расчетах необходимо использовать матрицу Q (запрос), K (значение ключа), V (значение). На практике Self-Attention получает ввод (матрица X, состоящая из вектора представления слова x) или вывод предыдущего блока Encoder. А Q, K, V получаются линейным преобразованием входа Самовнимания.
3.2 Расчет Q, K, V
Вход Само-Внимания представлен матрицей X, тогда Q, K, V могут быть рассчитаны с использованием матрицы линейной эволюции WQ, WK, WV. Расчет показан на рисунке ниже, обратите внимание, что каждая строка X, Q, K, V представляет собой слово.
Расчет Q, К, В
3.3 Вывод собственного внимания
После получения матриц Q, K, V можно рассчитать выход Самовнимания по формуле расчета.
Выход собственного внимания
В формуле вычисляется внутренний продукт каждого вектора-строки матрицы Q и K. Чтобы внутренний продукт не был слишком большим, он делится на квадратный корень из dk. После умножения Q на транспонирование K число строк и столбцов полученной матрицы равно n, а n — количество слов в предложении Эта матрица может представлять интенсивность внимания между словами. На рисунке ниже показано транспонирование Q, умноженное на K, где 1234 представляет слова в предложении.
Расчет QKT
После получения QKT используйте Softmax для расчета коэффициента внимания каждого слова к другим словам.Softmax в формуле заключается в выполнении Softmax для каждой строки матрицы, то есть сумма каждой строки становится равной 1.
Softmax каждой строки матрицы
После получения матрицы Softmax ее можно умножить на V, чтобы получить конечный результат Z.
Выход собственного внимания
Первая строка матрицы Softmax на приведенном выше рисунке представляет коэффициент внимания слова 1 и всех остальных слов, а окончательный вывод Z1 слова 1 равен значению всего слова i. Значение Vi получается путем сложения вместе пропорции коэффициентов внимания, как показано на следующем рисунке:
Zi метод расчета
3.4 Multi-Head Attention
На предыдущем шаге мы уже знаем, как рассчитать выходную матрицу Z с помощью самовнимания, а многоголовое внимание формируется комбинацией нескольких самовниманий.На следующем рисунке показана структурная схема многоголового внимания в бумага.
Multi-Head Attention
Как видно из рисунка выше, Multi-Head Attention содержит несколько слоев Self-Attention.Во-первых, вход X передается h различным Self-Attentions, и вычисляются h выходных матриц Z. На следующем рисунке показан случай, когда h=8, и в это время будет получено 8 выходных матриц Z.
Множественное внимание к себе
После получения 8 выходных матриц от Z1 до Z8 Multi-Head Attention объединяет их вместе (Concat), а затем передает линейный слой, чтобы получить окончательный результат Z Multi-Head Attention.
Вывод многоголового внимания
Можно видеть, что матрица Z, выводимая Multi-Head Attention, имеет ту же размерность, что и ее входная матрица X.
4. Структура энкодера
Transformer Encoder block
Красная часть приведенного выше рисунка представляет собой структуру блока кодировщика преобразователя, которая, как видно, состоит из многоголовочного внимания, добавления и нормирования, прямой связи, добавления и нормирования. Теперь, когда вы узнали о процессе вычисления многоголового внимания, давайте взглянем на разделы «Добавить и нормализовать» и «Поделиться вперед».
4.1 Add & Norm
Слой Add & Norm состоит из двух частей, Add и Norm, формула расчета которых выглядит следующим образом:
Формула добавления и нормы
Где X представляет входные данные Multi-Head Attention или Feed Forward, а MultiHeadAttention(X) и FeedForward(X) представляют выходные данные (выходные данные совпадают с входным измерением X, поэтому их можно добавить).
Добавить относится к X+MultiHeadAttention(X), которое является остаточным соединением.Обычно используется для решения задачи обучения многослойной сети.Это позволяет сети сосредоточиться только на текущей разнице, что часто используется в ResNet.
остаточное соединение
Нормирование относится к нормализации слоев, которая обычно используется в структурах RNN.Нормализация слоев преобразует входные данные каждого слоя нейронов, чтобы они имели одинаковую среднюю дисперсию, что может ускорить сходимость.
4.2 Feed Forward
Слой Feed Forward относительно прост. Это двухуровневый полносвязный слой. Функция активации первого слоя Relu, а функция активации второго слоя не используется. Соответствующая формула выглядит следующим образом.
Feed Forward
X — это вход, а размер выходной матрицы, окончательно полученный с помощью Feed Forward, согласуется с X.
4.3 Состав энкодера
С помощью описанных выше функций Multi-Head Attention, Feed Forward, Add & Norm можно создать блок кодировщика, который получает входную матрицу X(n×d) и выводит матрицу O(n×d). Кодировщик может быть сформирован путем наложения нескольких блоков кодировщика.
Вход первого блока кодировщика представляет собой векторную матрицу представления слов предложения, вход последующего блока кодировщика является выходом предыдущего блока кодировщика, а выход матрицы последнего блока кодировщика представляет собой информационную матрицу кодирования C, которая будет использоваться в декодере позже.
Кодировщик кодирует информацию о предложении
5. Структура декодера
Transformer Decoder block
Красная часть рисунка выше — это структура блока декодера преобразователя, которая похожа на блок кодировщика, но есть некоторые отличия:
Содержит два слоя Multi-Head Attention. Первый слой Multi-Head Attention использует операцию Masked. Матрицы K, V второго уровня Multi-Head Attention рассчитываются с использованием матрицы C информации кодирования кодировщика, тогда как Q вычисляется с использованием выходных данных предыдущего блока декодера. Наконец, есть слой Softmax, который вычисляет вероятность следующего переведенного слова.
5.1 Первое многоголовое внимание
Первый блок Multi-Head Attention of the Decoder использует операцию Masked, поскольку в процессе перевода он транслируется последовательно, то есть после перевода i-го слова может быть переведено i+1-е слово. Маскированная операция не позволяет i-му слову знать информацию после i+1 слова. Давайте возьмем перевод «У меня есть кошка» на «У меня есть кошка» в качестве примера, чтобы понять операцию «Маска».
В следующем описании используется концепция, аналогичная принудительному использованию учителей.Дети, которые не знакомы с принудительным обучением учителей, могут обратиться к модели Seq2Seq в предыдущей статье ниже. При использовании декодера необходимо решить наиболее вероятный перевод на основе предыдущего перевода, как показано на следующем рисунке. Первое слово прогнозируется как «I» на основе ввода «
Предсказание декодера
Декодер может использовать форсировку учителя во время обучения и распараллелить обучение, т. е. передать декодеру правильную последовательность слов ( У меня есть кошка) и соответствующий вывод (У меня есть кошка ). Затем при прогнозировании i-го вывода необходимо скрыть слова после i + 1. Обратите внимание, что операция «Маска» используется перед «Софтмаксом собственного внимания». Далее используется 0 1 2 3 4 5 для представления " соответственно. У меня есть кот ".
Первый шаг: входная матрица декодера и матрица маски.Входная матрица содержит вектор представления пяти слов « У меня есть кошка» (0, 1, 2, 3, 4), а маска представляет собой матрицу 5 × 5 . В маске можно обнаружить, что слово 0 может использовать только информацию слова 0, а слово 1 может использовать информацию слов 0, 1, то есть можно использовать только предыдущую информацию.
Входная матрица и матрица маски
Шаг 2: Следующая операция такая же, как предыдущая Само-Внимание, и матрицы Q, K, V получаются путем вычисления входной матрицы X. Затем рассчитайте QKT, произведение Q и KT.
QKT
Шаг 3: После получения QKT необходимо выполнить Softmax для расчета оценки внимания. Перед Softmax нам нужно использовать матрицу маски для блокировки информации после каждого слова. Операция блокировки выглядит следующим образом:
Маска перед Софтмакс
После получения Mask QKT выполните Softmax на Mask QKT, и сумма каждой строки равна 1. Но оценки внимания слова 0 на словах 1, 2, 3, 4 равны 0.
Шаг 4: Используйте маску QKT, чтобы умножить матрицу V, чтобы получить выход Z, тогда выходной вектор Z1 слова 1 содержит только информацию слова 1.
Вывод после маски
Шаг 5: С помощью описанных выше шагов вы можете получить выходную матрицу Zi самоконтроля маски, а затем, аналогично кодировщику, соединить несколько выходов Zi через внимание нескольких головок, а затем вычислить выходные данные Z, Z первого мультиголовки. Внимание То же, что и при вводе измерения X.
5.2 Второе многоголовое внимание
Второй Multi-Head Attention блока Decoder практически не меняется, главное отличие состоит в том, что матрицы K и V Self-Attention рассчитываются не с использованием выходных данных предыдущего блока Decoder, а рассчитываются с использованием матрицы информации кодирования C кодировщика.
Вычислите K, V в соответствии с выходом C кодировщика и вычислите Q в соответствии с выходом Z предыдущего блока декодера (если это первый блок декодера, используйте входную матрицу X для расчета), а последующий метод вычисления аналогично предыдущему описанию.
Преимущество этого в том, что во время декодера каждое слово может использовать информацию обо всех словах в кодировщике (данная информация не требует маски).
5.3 Softmax предсказывает выходные слова
Последняя часть блока декодера - использовать Softmax для предсказания следующего слова.На предыдущем сетевом уровне мы можем получить окончательный вывод Z. Из-за существования маски вывод Z0 слова 0 содержит только информацию о слове 0 следующим образом.
Z перед декодером Softmax
Softmax предсказывает следующее слово на основе каждой строки выходной матрицы
Предсказание декодера Softmax
Это определение блока декодера.Как и кодировщик, декодер состоит из нескольких блоков декодера.
6. Резюме трансформатора
Трансформеры, в отличие от RNN, относительно хорошо поддаются параллельному обучению.
Сам Transformer не может использовать информацию о порядке слов, поэтому необходимо добавить позицию Embedding на вход, иначе Transformer будет моделью мешка слов.
В центре внимания Transformer находится структура Self-Attention, где используемые матрицы Q, K и V получаются путем линейного преобразования вывода.
В Multi-Head Attention в Transformer есть несколько самостоятельных внимания, которые могут фиксировать показатель внимания коэффициента корреляции в нескольких измерениях между словами.
использованная литература
Документ: Внимание — это все, что вам нужно Блог Джея Аламмара: The Illustrated Transformerpytorch transformer Code: The Annotated Transformer