Введение в Transformer и подробное руководство | От нуля до героя в современном НЛП с Transformer

Трансформеры штурмом захватывают мир НЛП, поскольку это мощный двигатель в понимании контекста. Эти невероятные модели бьют множество рекордов НЛП и продвигают новейшие разработки. Они используются во многих приложениях, таких как машинный перевод, разговорные чат-боты и даже для улучшения поисковых систем. В наше время трансформеры очень популярны в сфере глубокого обучения, Но как они работают? Почему они превзошли предыдущего короля проблем последовательности, такого как RNN, GRU и LSTM? Вы, наверное, слышали о различных известных моделях преобразователей, таких как BERT, GPT и GPT2. В этом посте я расскажу обо всем на более позднем этапе, в настоящее время я сосредотачиваюсь на Трансформатор - все, что вам нужно, бумага - внимание.

Введение

Всякий раз, когда возникают долгосрочные зависимости (проблемы обработки естественного языка), мы знаем, что RNN (даже при использовании таких хаков, как двунаправленные, многослойные шлюзы на основе памяти - LSTM / GRU) страдают от проблемы исчезающего градиента. Кроме того, они обрабатывают последовательность входов 1 на 1, слово за словом, что препятствует распараллеливанию процесса.

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

Вот здесь и проявляется внимание! (Механизм внимания)

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

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

Наш вклад: «Песня Энрике Байландо - Испанская версия и мой электронный идентификатор ».

Трансформаторный выход: танцы, танцы, танцы, танцы
Ваше и мое тело заполняют пустоту
Вверх и вниз (вверх и вниз)
(Танцы, танцы, танцы , танцы)
Этот огонь внутри меня сводит с ума, он меня насыщает.
Мой электронный адрес - [email protected]

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

Внимание - это все, что вам нужно - пошаговое руководство

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

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

Вложения входов

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

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

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

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

Слой кодировщика - «Топливо для двигателя трансформатора»

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

Чтобы разобраться в этом, давайте сначала рассмотрим модуль многогранного внимания.

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

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

Векторы запроса, ключа и значения

Чтобы достичь самовнимания, мы передаем входные данные в 3 отдельных полностью связанных слоя для создания векторов запроса, ключа и значения.

Точечный продукт запроса и ключ

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

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

Уменьшение показателей внимания

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

Softmax масштабированных баллов

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

Умножение вывода Softmax на вектор значений

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

Вычисление многоголового внимания

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

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

Остаточные соединения, нормализация уровней и прямая сеть

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

Нормализованный остаточный выход проецируется через точечную сеть прямой связи для дальнейшей обработки. Точечная сеть с прямой связью представляет собой пару линейных слоев с активацией ReLU между ними. Выходные данные затем снова добавляются к входу точечной сети с прямой связью и далее нормализуются.

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

Сводка кодировщика

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

Слой декодера

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

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

Давайте пройдемся по этапам декодирования.

Вложения входов декодера и позиционное кодирование

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

Первое внимание к декодерам

Этот многоглавый слой внимания работает несколько иначе. Поскольку декодер является авторегрессионным и генерирует последовательность слово за словом, вам необходимо предотвратить его преобразование в будущие токены. Например, при вычислении оценки внимания к слову «я» у вас не должно быть доступа к слову «отлично», потому что это слово является будущим словом, которое было сгенерировано после. Слово «am» должно иметь доступ только к самому себе и к словам перед ним. Это верно для всех других слов, где они могут относиться только к предыдущим словам.

Нам нужен метод, предотвращающий вычисление оценок внимания для будущих слов. Этот метод называется маскировкой. Чтобы декодер не смотрел на будущие токены, вы применяете маску просмотра вперед. Маска добавляется перед вычислением softmax и после масштабирования оценок. Давайте посмотрим, как это работает.

Маска предвидения

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

Причина маски заключается в том, что как только вы берете softmax замаскированных оценок, отрицательные бесконечности обнуляются, оставляя нулевые оценки внимания для будущих токенов. Как вы можете видеть на рисунке ниже, оценка внимания для «am» имеет значения для себя и всех слов перед ним, но равна нулю для слова «отлично». По сути, это говорит модели не акцентировать внимание на этих словах.

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

Второе многоголовое внимание декодера и уровень прямой связи по точкам

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

Линейный классификатор и окончательный Softmax для вероятностей вывода

Выходные данные последнего точечного слоя с прямой связью проходят через последний линейный слой, который действует как классификатор. Классификатор такой же большой, как и количество ваших классов. Например, если у вас есть 10 000 классов для 10 000 слов, вывод этого классификатора будет иметь размер 10 000. Выходные данные классификатора затем передаются в слой softmax, который дает оценки вероятности от 0 до 1. Мы берем индекс наивысшей оценки вероятности, который равен нашему предсказанному слову.

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

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

И это …………… .Фуууу.

Так работает Transformer и его очень мощный

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

GPT, GPT2, GPT3, Bert, Albert, RobertA, Distil Bert, T5, BART, Electra.

Они будут рассмотрены позже….

Спасибо вам всем

Для кода для различных сценариев использования трансформаторов

Следуйте на github https://github.com/yashugupta786

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

  1. Внимание - это все, что вам нужно от Васвани
  2. Джей Аламмар - Transformer Post
  3. Gif из гида Майкла Фи по Transformer
  4. Стэнфордский онлайн-курс на внимание
  5. Минсук Хео Пост на Tranformer