Руководство по трансформерам — модели, которая произвела революцию в обработке естественного языка (NLP)

Трансформеры — это относительно недавняя модель, которая вышла на передний план в области машинного обучения (ML). Впервые они были представлены пять лет назад в статье 2017 года Внимание — это все, что вам нужно. Броское название, которое говорит само за себя — преобразователи, в отличие от других моделей преобразования, полагаются исключительно на механизмы самоконтроля для вычисления выходных данных без использования каких-либо других типов методов (например, свертки).

Но как это работает? Что делают трансформеры и почему они стали такими популярными? В этой статье мы немного углубимся в основы!

До трансформаторов - модели Sequence to Sequence (Seq2Seq)

До трансформеров типичная модель, используемая, например, в языковом переводе, представляла собой стандартную архитектуру кодер-декодер, построенную с использованием рекуррентных нейронных сетей. Это то, что Google использует для Google Translate! Модель получает последовательности, кодирует их и из этого представления выводит последовательность — в данном случае — переведенное предложение.

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

Хорошо, отлично — так в чем ограничение? Почему это было широко заменено трансформаторами? Как мы видим на изображении выше, вся закодированная последовательность переходит в один вектор. По мере увеличения длины последовательности возрастает и сложность сбора всей информации в один вектор. Мы видим, что с увеличением длины последовательности производительность модели падает — части забываются. Это так называемая проблема бутылочного горлышка. Базовая схема ниже для наглядности. Не хорошо!

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

Внимание

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

Давайте разберем механизм внимания в трансформерах шаг за шагом.

  1. Ввод встраивания

→ Думайте об этом как о справочной таблице. Если вход представляет собой последовательность слов, каждое слово будет представлено как выученный вектор.

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

→ Затем мы вставляем позиционную информацию во вложения. Для каждого нечетного индекса входного вектора создается вектор с помощью функции cos. Для каждого четного индекса создается вектор с помощью функции sin. Эти векторы добавляются к их вложениям. Теперь в сети есть информация о позиционировании вектора.

3. Слой кодировщика

→ Этот бит немного сложнее. Этот уровень содержит 2 подмодуля, многоголовое внимание, а затем полностью подключенную сеть. Далее следует нормализация слоя. Не волнуйтесь, давайте разберем это дальше.

Начнем с того, что представляет собой компонент многоголового внимания слоя.

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

Здесь вступает в действие само-внимание. Как я упоминал выше, модель свяжет каждое слово в последовательности с другими разными словами в последовательности. Например, «вы» может быть связано с «есть». Самостоятельное внимание опирается на 3 полностью связанных входных слоя.

  1. Запрос (клавиша Q)
  2. Ключи (К)
  3. Векторы значений (V)

Запрос сопоставляется с набором ключей, а затем представляет наиболее подходящие значения. Лучший пример, который я встречал в других статьях, — это аналогия с Youtube.

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

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

Затем мы масштабируем их, разделив значения на квадратный корень из измерения запроса и ключа, за которым следует softmax этих новых оценок. Результатом являются значения вероятности от 0 до 1.

После этого мы умножаем значения вероятностей внимания на вектор значений, чтобы получить выходной вектор. Более высокие значения из вычисления softmax сохранят значение слов и определят их как более важные. Прежде чем мы, наконец, начнем с самоконтроля, мы должны разделить запрос, ключ и значение на N-векторов. Каждый вектор, проходящий через процесс само-внимания, известен как голова. Теоретически каждая головка будет изучать что-то по-своему и придаст модели кодировщика больше возможностей представления. Затем эти выходные векторы объединяются в один вектор.

Это наш многосторонний вектор вывода внимания. Он помещается в исходное позиционное встраивание (остаточное соединение), и его вывод проходит нормализацию.

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

Декодер

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

Сделав несколько шагов назад, вот как это выглядит в целом:

И это все на сегодня!