Трансформатор, на мой взгляд, не сложная система по сравнению с LSTM и ГРУ. Однако, даже если вы запускали код самостоятельно, вы можете не полностью осознавать, что делаете. Я модифицировал образцы кода TensorFlow в своих исследовательских проектах и ​​заметил, что сложность возникает из-за ключевого уравнения Transformer.

Если вы очень хорошо знакомы с линейной алгеброй, вам может быть легко понять смысл этого уравнения, но если нет, «Хорошо, умножьте две матрицы Q и K, затем умножьте еще одну матрицу V после softmaxing… и что?? где внимание реализовано??? В двух словах это умножение трех матриц, не так ли?»

Приведенное выше уравнение создает матрицу признаков, явно включающую все отношения между векторами элементов в Q и K, но как я могу это сказать? Мои подходы к пониманию того, что

  1. Рассмотрим Q и K как наборы векторов, и тогда Q, умноженное на K, будет матрицей скалярных произведений векторов.
  2. Рассмотрим QK как матрицу скалярных произведений и рассмотрим V как набор векторов, а затем выходная матрица представляет собой набор средневзвешенных векторов в V.

Давайте сначала подумаем о №1.

На рисунке 1 в качестве Q и K используются простые матрицы 2 x 2. Если мы изображаем векторы, заданные прямоугольниками с точечными линиями, окончательная матрица состоит из скалярных произведений всех комбинаций двух наборов векторов.

На рис. 2 наглядно показано, что умножение двух матриц дает матрицу скалярных произведений Q-векторов и K-векторов.

Хотя это может быть относительно очевидно.

Просто для простоты замените выходную матрицу простой матрицей, подобной приведенной ниже.

ХОРОШО. Тогда давайте подумаем о № 2 (Softmax и масштабирование с векторной размерностью d для простоты были проигнорированы).

Если мы рассматриваем QK (транспонированный) как матрицу, состоящую из весовых значений, и рассматриваем V как два вектора-строки, выходная матрица представляет собой средневзвешенное значение векторов V, как показано на рисунке 3.

Рисунок 4 наглядно поясняет тот же расчет. Первый вектор-строка в выходной матрице представляет собой среднее значение двух векторов-столбцов в транспонированном V, а веса являются двумя верхними значениями вывода из #1.

В результате QK интуитивно указывает отношения двух наборов векторов в Q и K, а умножение V генерирует векторы признаков с учетом каждого отношения к другим векторам.

Вы можете задаться вопросом, где оптимизировать в Transformer. Что оптимизировано в Transformer, так это преобразование входных векторов в K, Q и V.

В заключение, Transformer — это модель, которая генерирует векторы признаков, явно включающие все возможные отношения в векторах элементов.