Трансформеры

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

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

Так что же такое Трансформеры и почему они чаще используются вместе с механизмом внимания?

Transformer в NLP - это новая архитектура, которая нацелена на решение задач от последовательности к последовательности с легкостью обработки зависимостей на большие расстояния. Трансформатор был предложен в статье Все, что вам нужно. Рекомендуется прочитать всем, кто интересуется НЛП.

Цитата из статьи:

«Трансформатор - это первая модель преобразования, полностью основанная на внимании к себе для вычисления представлений своих входных и выходных данных без использования выровненных по последовательности RNN или свертки».

Здесь «преобразование» означает преобразование входных последовательностей в выходные последовательности. Идея Transformer состоит в том, чтобы полностью обрабатывать зависимости между вводом и выводом с вниманием и повторением.

Механизм внимания

Механизм внимания был фактически предложен Богданау и др. В статье под названием Нейронный машинный перевод путем совместного обучения выравниванию и переводу в 2015 году. До этого нейронный машинный перевод был основан на кодировщика-декодере RNN / LSTM. Но столкнулся с проблемой проблемы долгосрочной зависимости RNN / LSTM, а также с другой проблемой, заключающейся в том, что нет способа придать большее значение некоторым входным словам по сравнению с другими, в то время как перевод предложения. Механизм внимания появился как усовершенствование в этом аспекте по сравнению с системой нейронного машинного перевода на основе кодера-декодера при обработке естественного языка (NLP). Механизм внимания имеет бесконечное ссылочное окно, в отличие от RNN, LSTM, которые имеют более короткое ссылочное окно, поэтому, когда предложение становится длиннее, RNN не могут получить доступ к слову, сгенерированному ранее в последовательности.

«Bahdanau et al (2015) придумали простую, но элегантную идею, в которой они предложили не только учитывать все входные слова в векторе контекста, но и придавать относительную важность каждому из них».

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

Чтобы узнать больше о моделях Seq2Seq (кодировщика-декодера), прочтите этот блог от Jalammar:



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

Что такое трансформаторы

Трансформеры штурмом захватывают мир НЛП. Трансформаторы заменили традиционные RNN, LSTM, GRU и т. Д., И лишь некоторые из них - это BERT, GPT-2, GPT-3 и т.д. текстовое резюме и т. д.

Как они работают?

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

Давайте возьмем пример для лучшего понимания.

Мы могли бы рассмотреть вариант разговорного чат-бота, который принимает «Привет, как дела?» в качестве входных и выходных данных «Я в порядке».

Давайте шаг за шагом сломаем механику сети.

Трансформатор Энкодер

Шаг 1. Передача наших данных на слой встраивания слов.

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

Шаг 2. Добавьте позиционную информацию во вложения

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

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

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

Модуль многоголового внимания

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

Чтобы привлечь внимание, мы подаем входные данные на 3 отдельных полностью связанных (FC) слоя для создания векторов «Запрос», «Ключ» и «Значение».

Хорошее объяснение этому можно найти в заявлении stackexchange:

«Концепции« ключ / значение / запрос »исходят из поисковых систем. Например, когда вы вводите запрос для поиска какого-либо видео на Youtube, поисковая система сопоставляет ваш запрос с набором ключей (название видео, описание и т. Д.) связанных с видео-кандидатами в базе данных, а затем представит вам наиболее подходящие видео (значения) ».

Итак, как это связано с самовниманием?

Queries & Keys подвергается умножению матрицы скалярного произведения для создания матрицы оценок.

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

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

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

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

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

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

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

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

Шаг 4. Остаточное соединение, нормализация слоев и точечная передача данных

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

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

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

Трансформаторный декодер

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

Шаг 5. Встраивание вывода и позиционное кодирование

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

Шаг 6. Декодер Multi-Headed Attention 1

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

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

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

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

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

Шаг 7. Декодер Multi-Headed Attention 2

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

Шаг 8. Линейный классификатор

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

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

Итак, это Трансформеры для вас, дамы и господа.

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

References:
1. The A.I. Hacker - Michael Phi:https://www.youtube.com/watch?v=4Bdc55j80l8&feature=emb_logo
2. Peltarion- https://www.youtube.com/watch?time_continue=539&v=-9vVhYEXeyQ&feature=emb_logo
3. https://www.analyticsvidhya.com/blog/2019/06/understanding-transformers-nlp-state-of-the-art-models/
4. https://www.analyticsvidhya.com/blog/2019/11/comprehensive-guide-attention-mechanism-deep-learning/