Внимание, Самостоятельное внимание, Многоголовое внимание, Маскированное многоголовое внимание, Трансформаторы, BERT и GPT

В предыдущем рассказе я объяснил, что такое механизм внимания, а также некоторые важные ключевые слова и блоки, связанные с трансформерами, такие как «самовнимание», «запрос», «ключи и значения» и «многоголовое внимание».

Чтобы узнать больше об этих темах, посетите Часть 1 этой статьи — Все, что вам нужно знать о «Внимании и Трансформерах — Глубокое понимание — Часть 1».

В этой части я объясню, как эти блоки Внимания помогают создать сеть Преобразователя, и подробно рассмотрю все блоки в сети.

Содержание:

  1. Проблемы RNN и то, как модели-трансформеры могут помочь преодолеть эти проблемы (рассмотрено в части 1)
  2. Механизм внимания — самовнимание, запрос, ключи, значения, многоголовое внимание (рассмотрено в части 1)
  3. Трансформаторная сеть
  4. Основы GPT (будет рассмотрено в части 3)
  5. Основы BERT (будет рассмотрено в части 3)

3. Трансформаторная сеть

Бумага — Внимание — это все, что вам нужно (2017)

На рис. 1 показана сеть Transformer. Эта сеть заменила RNN как лучшую модель для НЛП и даже для компьютерного зрения (Vision Transformers).

Сеть состоит из двух частей — кодера и декодера.

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

3.1 Блоки энкодера

Сеть кодировщика начинается с входов. Здесь все предложение подается сразу. Затем они встраиваются в блок input embedding. Затем к каждому слову в предложении добавляется «позиционная кодировка». Эта кодировка необходима для понимания положения каждого слова в предложении. Без позиционного встраивания модель будет рассматривать все предложение как просто мешок, полный слов, без какой-либо последовательности или значения.

Подробно:

3.1.1 Внедрение входных данных. Слово «собака» в предложении может использовать пространство встраивания для получения векторного встраивания. Встраивание — это просто преобразование слова на любом языке в его векторное представление. Пример показан на рисунке 3. В пространстве вложения похожие слова имеют аналогичные вложения, например, слово «кошка» и слово «котенок» будут находиться очень близко в пространстве вложения, а слова «кошка» и « эмоция» упадет дальше в пространстве.

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

Слово в разных предложениях может иметь разное значение. Например, слово собака в a. У меня есть симпатичная собака (животное/домашнее животное — позиция 5) и б. Какая ты ленивая собака! (никчемные - позиция 4), имеют разное значение. Чтобы помочь с этим, приходят позиционные кодировки. Это вектор, который дает информацию на основе контекста и положения слова в предложении.

В любом предложении слова следуют одно за другим, чтобы иметь значимое значение. Если слова в предложении перепутаны, то предложение не будет иметь смысла. Но когда преобразователь загружает предложения, он делает это не последовательно, а параллельно. Поскольку архитектура преобразователя не включает порядок слов при параллельной загрузке, мы должны явно определить положение слов в предложении. Это помогает преобразователю понять, что в предложении одно слово следует за другим. Вот где позиционные вложения пригодятся. Это своего рода векторное кодирование, определяющее положение слова. Это позиционное вложение добавляется к входному встраиванию перед входом в сеть внимания. Рисунок 4 дает интуитивное представление о встраивании входных данных и позиционном встраивании до того, как они будут переданы в сеть внимания.

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

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

После того, как встраивание слова/ввода и позиционное встраивание завершены, встраивания передаются в наиболее важную часть кодировщика, которая содержит два важных блока — блок «многоголовое внимание» и блок «feed-forward.

3.1.3 Многозадачное внимание

Это основной блок, где происходит волшебство. Чтобы понять Multi-Head Attention, перейдите по этой ссылке — 2.4 Multi-Head Attention.

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

На рисунке выше показано масштабированное скалярное произведение внимания. Это точно так же, как самовнимание с добавлением двух блоков (Масштаб и Маска). Чтобы узнать подробнее о Само-Внимании, перейдите по этой ссылке — 2.1 Само-Внимание.

Масштабированное внимание, как показано на рисунке 6, точно такое же, за исключением того, что оно добавляет масштаб после первого матричного умножения (Matmul).

Масштабирование показано ниже,

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

На рис. 7 показано представление нейронной сети блока внимания. Вложения слов сначала передаются в некоторые линейные слои. Эти линейные слои не имеют термина «смещение» и, следовательно, представляют собой не что иное, как умножение матриц. Один из этих слоев обозначается как «ключи», другой — как «запросы», а последний — как «значения». Если матричное умножение выполняется между ключами и запросами, а затем нормализуется, мы получаем веса. Затем эти веса умножаются на значения и суммируются, чтобы получить окончательный вектор внимания. Этот блок теперь можно использовать в нейронной сети, он известен как блок «Внимание». Можно добавить несколько таких блоков внимания, чтобы обеспечить больше контекста. И самое приятное то, что мы можем получить обратное распространение градиента для обновления блока внимания (веса ключей, запросов, значений).

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

Более простое объяснение: основной вектор (предложение) содержит подвекторы (слова) — каждое слово имеет позиционное вложение. Вычисление внимания обрабатывает каждое слово как «запрос» и находит некоторые «ключи», которые соответствуют некоторым другим словам в предложении, а затем берет выпуклую комбинацию соответствующих 'значения'. При многозадачном внимании выбираются несколько значений, запросов и ключей, что обеспечивает множественное внимание (лучшее встраивание слов в контекст). Эти несколько обращений объединяются, чтобы получить окончательное значение внимания (комбинация контекста для всех слов из всех множественных обращений), что работает намного лучше, чем использование одного блока внимания.

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

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

3.1.4 Добавление и нормирование и прямая связь

Следующий блок — это «Добавить и нормализовать», который принимает остаточную связь исходного встраивания слова, добавляет его к встраиванию из многоголового внимания, а затем нормализует его, чтобы оно имело нулевое среднее и дисперсия 1.

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

Все блоки внимания и прямой связи с несколькими головками повторяются n раз (гиперпараметры) в блоке кодировщика.

3.2 Блоки декодера

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

Затем он подается в часть декодера трансформаторной сети, как показано на рис. 9. Цель декодера — произвести некоторый выходной сигнал. В статье Attention is All You Need этот декодер использовался для перевода предложений (скажем, с английского на французский). Таким образом, кодировщик примет английское предложение, а декодер переведет его на французский. В других приложениях декодерная часть сети не нужна, поэтому я не буду подробно останавливаться на этом.

Шаги в блоке декодера —

  1. При переводе предложения блок декодера принимает французское предложение (для перевода с английского на французский). Как и в кодировщике, здесь мы добавляем встраивание слов и встраивание позиций и передаем их в блок внимания с несколькими головками.

2. Блок само-внимания будет генерировать вектор внимания для каждого слова во французском предложении, чтобы показать, насколько одно слово связано с другим в предложении.

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

4. В последних слоях декодер предсказывает перевод английского слова в наиболее вероятное французское слово.

5. Весь процесс повторяется несколько раз, чтобы получить перевод всех текстовых данных.

Блоки, используемые для каждого из вышеперечисленных шагов, показаны на рисунке 10.

В декодере есть один новый блок — Masked Multi-head Attention. Все остальные блоки мы уже видели ранее в энкодере.

3.2.1 Замаскированное многоголовое внимание

Это блок внимания с несколькими заголовками, в котором некоторые значения замаскированы. Вероятности замаскированных значений обнуляются или не выбираются.

Например, при декодировании выходное значение должно зависеть только от предыдущих выходов, а не будущих выходов. Затем мы маскируем будущие выходы.

3.3 Результаты и заключение

В статье было проведено сравнение языкового перевода с английского на немецкий и с английского на французский с другими современными языковыми моделями. BLEU — это мера, используемая при сравнении языковых переводов. На рисунке 11 мы видим, что большая модель Transformer получает более высокий балл BLEU для обеих задач перевода. Что они также значительно улучшают, так это стоимость обучения.

Подводя итог, можно сказать, что модель Transformer может снизить затраты на вычисления, но при этом получить самые современные результаты.

В этой части я объяснил блоки кодировщика и декодера сети Transformer и то, как каждый блок используется в языковом переводе. В следующей и последней части (Часть 3) я расскажу о некоторых важных сетях Transformer, которые стали чрезвычайно известными в последнее время, таких как BERT (представление двунаправленного кодировщика от трансформаторов) и GPT (преобразователь общего назначения).

Использованная литература:

Ашиш Васвани, Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Ллион Джонс, Эйдан Н. Гомес, Лукаш Кайзер и Илья Полосухин. 2017. Внимание — это все, что вам нужно. В материалах 31-й Международной конференции по системам обработки нейронной информации (NIPS’17). Curran Associates Inc., Ред-Хук, Нью-Йорк, США, 6000–6010.