Подробный обзор различных компонентов трансформаторных блоков

Общий обзор и информацию о seq2seq RNN см. в этом блоге.

Seq2Seq RNN с вниманием: краткая интуиция для понимания основ

Введение

ChatGPT – это чат-бот с искусственным интеллектом (созданный OpenAI), который превосходно выполняет удивительные задачи на человеческом уровне, включая ответы на вопросы, диалоги, написание эссе, почту и даже программирование. .

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

Статья — https://arxiv.org/pdf/1706.03762.pdf

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

В этом блоге я расскажу о каждом компоненте трансформатора в отдельности. Впоследствии мы объединим все наши знания, чтобы создать окончательный блок трансформатора.

Вход в модель

У нас есть задача языкового перевода. Мы обсудим работу и концепцию на примере X( без пакетной загрузки). Предположим, мы выполнили всю необходимую предварительную обработку текста.

Прежде всего, у нас есть токенизированный вектор в качестве входных данных. Эти входные данные проходят через матрицу встраивания, за которой следует позиционное кодирование (зачем нам нужна информация о положении? Мы обсудим это ниже), чтобы преобразовать его в плотные векторы. Теперь входные данные X, подаваемые в блок преобразования, имеют вид [Tx Dmodel], где T — последовательность слов, а Dmodel — это вектор признаков для слова.

Ключ, запрос, значение и концепция с несколькими головками

Эта концепция в области глубокого обучения является новой. Мы пропускаем ввод через 3 различных линейных слоя узлов Dk. Эти выходные данные называются «ключ K», «запрос Q» и «значение V». Каждая фигура [Tx Dk].

Посмотреть я

Давайте говорить в матричном смысле.

  • Сначала мы берем скалярное произведение запроса и ключевого вектора/матрицы. Результирующая матрица QK будет иметь вид [Tx T].

Обучение кодировщика-преобразователя строит матрицы весовых параметров Wq и Qk таким же образом, как Q и K строит систему запросов. который отвечает на вопрос «Что такое k для слова q».

Кроме того, это скалярное произведение, сопровождаемое нормализацией, связывает формулу корреляции Пирсона с нулевым средним значением. Это означает, что в конечном итоге мы находим матрицу взаимосвязи для каждого слова с другими словами во входных данных.

Эта матрица веса внимания QK позволяет модели понимать контекст вокруг слов. Возьмите интуицию из примера удара, как слово «НЛП» связано с другими словами в последовательности.

  • Мы умножаем матрицу QKвнимания на вектор «Value V», чтобы получить конечный промежуточный результат X формы [ T x Dv]. (ПРИМЕЧАНИЕ Dk=Dv=Dq)

Многоголовое внимание

  • Независимый стек вычисления собственного внимания, описанный в приведенных выше пунктах, известен как система внимания с несколькими головками.

Нам нужны множественные само-внимание многослойные модули, потому что может случиться так, что наша модель узнает «Почему мы используем nlp?» в одном блоке самоконтроля и «что является частью машинного обучения?» в другом блоке.

Вид II

  1. Преобразователь принимает последовательность входных векторов и применяет механизм внимания для вычисления взвешенной суммы входных векторов.
  • Механизм внимания состоит из трех компонентов: запрос, ключ и значение.
  • Запрос — это вектор, представляющий текущую позицию во входной последовательности. Он используется для определения взаимосвязи между текущей позицией и другими позициями во входной последовательности.
  • Ключ – это вектор, представляющий каждую позицию во входной последовательности. Он используется для определения выхода (значения) механизма внимания.
  • значение является результатом вычисления внимания и используется для вычисления выходных данных преобразователя.

Чтобы вычислить внимание, преобразователь вычисляет скалярное произведение вектора запроса с ключевыми векторами для каждой позиции во входной последовательности. Эти скалярные произведения затем используются для вычисления весов для каждого вектора значений, которые затем используются для вычисления взвешенной суммы векторов значений.

Обратите внимание: все описанные выше операции носят линейный характер

Маска внимания инелинейность в модели [сложное понимание]

Прежде чем умножать QK на матрицу/вектор «Value V» для получения промежуточного значения, обратите внимание, что существует параметр с именем «Mask». У нас фиксированная длина ввода. Эта маска внимания похожа на эту входную последовательность. «1» для позиции, где есть фактическое слово. «0» для мягкого положения.

Затем выходные данные всех сложенных модулей внутреннего внимания (внимание с несколькими головками) объединяются. Результирующая форма (h*[Tx Dv]): [Tx h.Dv]. Затем следует линейная операция (форма матрицы весов [h.Dv x Dmodel]) с нелинейной активацией. Результирующая выходная форма на этом этапе — [Tx Dmodel].

В заключение, Multi-Head Attention Block принимает 3 входа K, Q, V, все они имеют одинаковую форму ввода, то есть [T x Dk] и выводит [T x Dmodel].

Компиляция всех блоков

ПРИМЕЧАНИЕ. Вход и выход блока в одной и той же [Tx Dmodel]. ИТАК, мы можем сложить этот блок «N» раз.

Входные данные добавляются с самим объявлением с несколькими заголовками, за которым следует норма слоя. Затем снова переходим к нелинейному слою со скип-соединением.

Позиционное кодирование

Механизм внутреннего внимания не имеет никакой информации об относительном или абсолютном положении входных токенов в последовательности.

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

Существует несколько способов создания позиционных кодировок, но один из распространенных подходов заключается в использовании синусоидальных функций разных частот для создания набора векторов, которые можно добавить к входным вложениям. Синусоиды выбираются таким образом, чтобы результирующие векторы имели разную периодичность, что позволяет кодировать в них информацию о положении токенов в последовательности.

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

Архитектура SOTA, в которой используется трансформаторный блок

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

1. BERT (представление двунаправленного энкодера от трансформаторов)

BERT называется двунаправленной моделью, поскольку она обучена учитывать контекст как слева, так и справа от каждого слова во входном тексте (моделирование маскированного языка).

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

2. GPT (генеративный предтренировочный преобразователь)

GPT — это модель, обученная генерировать человекоподобный текст. Его можно настроить для широкого круга задач по созданию языка, таких как машинный перевод, реферирование и диалоговые системы.

GPT обучается с помощью метода, называемого неконтролируемое языковое моделирование, при котором модели предоставляется большой набор данных текста, и от нее требуется предсказать следующее слово в последовательности с учетом контекста предыдущих слов. Это модель трансформатора декодера.

Открыт для любой помощи и предложений.

Спасибо