Почему нам нужен полносвязный слой после части сложения и нормализации многоголового внимания в кодировщике?

Вопрос или проблема

Я пытаюсь понять несколько аспектов архитектуры трансформера на основе этого изображения:
enter image description here

Предположим, $n$ — это количество токенов, $d_e$ — размерность эмбеддингов, а $d_m$ — размерность модели. Насколько я понимаю, матрицы позиционного кодирования и входных эмбеддингов имеют размеры $n\times d_e$ и складываются, образуя $A$.

Далее рассматриваем 3 разные матрицы: $d_e\times d_q$, $d_e\times d_k$ и $d_e\times d_v$, где $d_q, d_k, d_v$ — размеры для запроса, ключа и значения соответственно. Соединяем их по последней размерности, чтобы получить матрицу $d_e\times(d_q+d_k+d_v)$ $B$.

Умножаем $A$ на $B$, чтобы получить матрицу ($n\times(d_q+d_k+d_v)$), которая на самом деле представляет из себя матрицы $Q,K,V$, соединенные вместе. Разделяем их и умножаем на матрицы линейного отображения (на самом деле соединенные линейные матрицы для каждой головы — с размерами $d_q\times hd_m$, $d_k\times hd_m$, $d_v\times hd_m$), чтобы преобразовать их в размерности модели $n\times d_m$ (размерности в версии с многоими головами будут $n\times hd_m$).

Затем механизм самовнимания выдает матрицу размером $n\times hd_m$. Обычно $hd_m=d_e$, но если это не так, то это можно осуществить через другой линейный слой. Далее происходит сложение и нормализация. Мой вопрос: на данном этапе у нас уже есть энкодинг, который инкапсулирует обучение самовнимательной головы, позиционное кодирование и исходные эмбеддинги токенов. Зачем нам нужен дополнительный линейный слой в верхнем левом углу?

Аналогично, зачем нам нужен дополнительный линейный слой в правом верхнем углу (в конце правого блока “Nx”)? Наконец, я предполагаю, что линейный слой в самом конце (прямо перед softmax в правом верхнем углу) необходим для проекции уменьшенного в размерах вектора $d_e$ в вектор $d_V$ (где $V$ — размер словаря). Есть ли еще какая-то причина для этого дополнительного линейного слоя, кроме этой?

.

Ответ или решение

Теория: В трансформаторной архитектуре каждый слой выполняет конкретную роль в обработке данных, подготавливая их для последующих этапов. Основной задачей добавления полносвязного слоя (Feed Forward Layer) после части Add & Norm в энкодере является добавление нелинейности и способности модели улавливать более сложные зависимости между входными данными. Ключевая концепция заключается в разрыве “линейности”, который был бы присущ модели без этого слоя, поскольку все предыдущие операции, такие как линейные проекции и нормализация, являются в своей сути линейными операциями.

Пример: Рассмотрим, как полносвязный слой работает на практическом уровне в сети трансформеров. После выполнения механизмов многоголового внимания, Add & Norm обеспечивает стабилизацию и консолидацию информации. Следующим шагом, полносвязный слой применяет две линейные трансформации с функцией активации ReLU между ними, которые помогают модели учитывать нелинейные взаимосвязи в данных. Эффективным результатом является способность модели захватывать более сложные абстракции и связи, что существенно улучшает её производительность в задачах обработки естественного языка.

Применение: Полносвязный слой, расположенный после механизма многоголового внимания в энкодере и декодере, представляет собой важную часть архитектуры трансформера. Он помогает модели не только улучшать качество представлений данных, но и предотвращать возможное вырождение в линейные операции, которые могут не улавливать богатства структуры информации. Интересный момент: в конце модели трансформера также располагается линейный слой перед softmax. Эта операция необходима для преобразования промежуточных представлений в вероятности классов в контексте моделирования языковых задач, что позволяет получать прогнозы по размерности вокабуляра.

Подводя итог, можно утверждать, что полносвязные слои необходимы для повышения мощности и выразительности модели, способствуя её способности решать сложные задачи в сложных данных.

Оцените материал
Добавить комментарий

Капча загружается...