Трансформатор, на мой взгляд, не сложная система по сравнению с LSTM и ГРУ. Однако, даже если вы запускали код самостоятельно, вы можете не полностью осознавать, что делаете. Я модифицировал образцы кода TensorFlow в своих исследовательских проектах и заметил, что сложность возникает из-за ключевого уравнения Transformer.
Если вы очень хорошо знакомы с линейной алгеброй, вам может быть легко понять смысл этого уравнения, но если нет, «Хорошо, умножьте две матрицы Q и K, затем умножьте еще одну матрицу V после softmaxing… и что?? где внимание реализовано??? В двух словах это умножение трех матриц, не так ли?»
Приведенное выше уравнение создает матрицу признаков, явно включающую все отношения между векторами элементов в Q и K, но как я могу это сказать? Мои подходы к пониманию того, что
- Рассмотрим Q и K как наборы векторов, и тогда Q, умноженное на K, будет матрицей скалярных произведений векторов.
- Рассмотрим 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 — это модель, которая генерирует векторы признаков, явно включающие все возможные отношения в векторах элементов.