Модель Transformer на самом деле предложена в статье «Внимание - это все, что вам нужно» и используется для генерации контекстного кодирования текста. Большая часть традиционного контекстного кодирования выполняется RNN. Однако у RNN есть два недостатка:
1. Расчет выполняется последовательно и не может быть распараллелен, например: для текстовой последовательности из 10 слов, если мы хотим получить результат обработки последнего слова, мы должны сначала вычислить результат обработки первых 9 слов.
**Во-вторых, RNN — это последовательное вычисление, и происходит затухание информации**, поэтому трудно обрабатывать информацию между двумя далеко разнесенными словами, поэтому RNN обычно используется в сочетании с вниманием.
В ответ на недостатки RNN компания «Внимание — это все, что вам нужно» предложила модель Transformer для решения этой проблемы. Трансформатор состоит из многоголового внимания, кодирования положения, нормализации слоев и нейронной сети с прямой связью по положению.
Сколько бы вы ни говорили, лучше сразу посмотреть на более четкую картину и взглянуть на схему сетевой структуры Transformer.
Преобразователь, как и модель seq2seq, состоит из двух частей: кодировщика и декодера, из которых левая часть — кодировщик, а правая — декодер. Модель в основном состоит из многоголового внимания и нейронной сети с прямой связью.
Здесь есть ключевой момент — ** кодировка позиции. **При использовании RNN для обработки каждый вход, естественно, имеет атрибут местоположения, но это также является одним из недостатков RNN. Расположение текстовых слов тесно связано с семантикой текста, поэтому положение текста является очень важной характеристикой, поэтому в модели Transformer добавлено кодирование положения для сохранения информации о положении слов.
Ниже мы объясняем каждую часть Transformer:
Раздел энкодера:
1. Многонаправленное внимание
Многоголовое внимание является важной частью модели Трансформера.С помощью следующего рисунка давайте посмотрим на структуру многоголового внимания.
Многоголовное внимание является расширением внимания к себе. Если вы не знакомы с вниманием к себе, вы можете обратиться кПодробное объяснение внимания к себе, По сравнению с самовниманием, многоголовое внимание улучшилось в двух аспектах:
1. Расширена способность модели обращать внимание на разные позиции в текстовой последовательности.. По сравнению с само-вниманием конечный результат само-внимания содержит мало информации о других словах, и в его весе внимания в основном преобладает само слово, то есть запрос.
2. Уделяйте внимание множеству подвыражений. Используя механизм внимания с несколькими головками, у нас будет несколько наборов матриц параметров Q, K и V (Transformer использует 8 головок, поэтому будет 8 наборов матриц параметров).
Давайте посмотрим, как рассчитывается механизм многоголового внимания в Transformer.
Сначала он будет разбит на 8 головок, и будет получено 8 групп матриц параметров Q, K, V
Затем нам нужно рассчитать веса внимания, у нас есть 8 наборов матриц, поэтому веса в выходном внимании также имеют 8 матриц.
Здесь возникает проблема, следующий слой — нейронная сеть с прямой связью, на вход подается только одна матрица, а на выходе наш механизм многоголового внимания выводит 8. Итак, мы хотим сжать эти 8 матриц в одну матрицу.
Как это сделать? Этот алгоритм настолько изобретателен, что я должен отдать колено большим парням,
в два шага
- Пучок
объединить, чтобы получить новую матрицу
- Пучок
Умножить полученную матрицу на матрицу весов параметров
, чтобы получить окончательный вывод
Наконец, используйте рисунок, чтобы обобщить процесс расчета многоголового внимания.
2. Позиционное вложение
Как упоминалось ранее, Transformer проектирует позиционное встраивание, чтобы сохранить позиционную информацию слов.Каждой позиции назначается уникальная позиционная кодировка.Ниже приведена позиционная кодировка, определяемая тригонометрическими функциями:
в,Позиционное кодирование слова, представляющего позиции pos в текстовой последовательности.
Значение компонента измерения. в,
Указывает позицию текущего слова в предложении,
Представляет индекс каждого значения в текущем векторе
Предполагая, что векторное измерение слова равно 4, фактическое кодирование положения выглядит следующим образом:
То есть после того, как Positional Encoding будет рассчитан по формуле, значение positional Encoding и Embeding добавляется в качестве входных данных следующего слоя.
Три, нормализация слоя (нормализация слоя)
Обучение нейронной сети имеет высокую степень вычислительной сложности.Чтобы сократить временные затраты на обучение и ускорить скорость сходимости сети, можно использовать метод нормализации слоев.
Операция нормализации слоя применяется ко входу слояВыполните операцию нормализации, чтобы получить
. Формула операции нормализации вычислительного слоя выглядит следующим образом:
в,параметр,
нелинейная функция
В сетевой архитектуре Encoder преобразователя есть еще одна деталь, на которую нужно обратить внимание.Существует остаточное соединение (остаточное соединение) в каждом подуровне (самовнимание, ffnn) кодировщика, и остаточное соединение добавит вход и выход сетевого уровня.
Детали расчета собственного внимания, нормализации уровня, остаточного соединения и соединения друг с другом дополнительно отображаются, как показано на следующем рисунке:
Подсетевой уровень в декодере также состоит из внутреннего внимания, нормализации уровня и остаточного соединения, в то время как преобразователь в основном состоит из кодировщика и декодера. Затем внутренние детали Transformer можно показать следующим образом:
Во-вторых, часть декодирования (декодера)
Теперь мы разобрались с различными компонентами Encoder и связанными с ними концепциями/. Компоненты Decoder также похожи на Encoder, поэтому мы в основном знаем компоненты Decoder, давайте посмотрим на их общий рабочий процесс.
После того, как входной текст является Embedded и позиционным Embedded, он вводится в кодировщик для обработки. В конце верхний кодировщик выведет набор вниманияВектор, который будет использоваться в декодере, чтобы помочь декодеру сосредоточиться на соответствующем месте входного текста.
Шаги декодирования показаны на следующем рисунке, и этот шаг на рисунке будет повторяться до тех пор, пока не встретится терминатор.В процессе декодирования вывод каждого текущего декодирования будет использоваться как ввод следующего декодирования.. В кодировщике позиционное кодирование будет добавлено к встраиванию слова как вход следующего слоя, то же самое верно и в декодере.Позиционное кодирование каждого слова также добавляется к соответствующему внедрению в качестве входных данных декодера.
Mask
маска представляет собой маску. То есть некоторые значения маскируются, не участвуют в расчете и не будут влиять на обновление параметра. Когда декодер вычисляет внимание, чтобы декодер не мог видеть информацию о будущем, информацию о будущем необходимо скрыть. Например, когда time_step равен t, расчет декодирования внимания должен зависеть только от вывода до t, но не от вывода после t. Следовательно, нам нужно найти способ скрыть информацию после t. Вот что делает маска.
Конкретный метод заключается в добавлении очень отрицательного числа (-INF) к этим позициям при расчете шага внимания перед расчетом softmax, чтобы вероятность прохождения через softmax этих позиций была близка к 0.
Линейный и softmax
Конечным результатом декодера является вектор данных с плавающей запятой.Как нам преобразовать этот вектор в слово? Это то, что делают Linear и softmax.
Линейный слой — это полносвязная нейронная сеть, и количество выходных нейронов обычно равно размеру нашего словаря. Выходной результат декодера будет введен в линейный слой, а затем преобразован с помощью softmax для получения вектора размера словаря.Каждое значение вектора соответствует вероятности того, что текущий декодер является соответствующим словом.Мы только нужно взять то с наибольшей вероятностью.Слово является результатом декодера текущего слова.
Были объяснены основные модули и связанные с ними принципы работы Transformer. Я надеюсь помочь вам. Председатель Мао сказал: Практика — единственный критерий проверки истины, а код — лучший материал для изучения алгоритмов (я сказал), следующая статья Давайте внимательно проанализируем код реализации модели-трансформера, а затем воспользуемся моделью-трансформером для дальнейшего понимания принципа работы модели.
Кодировать слова непросто. Если это поможет вам, я надеюсь, что вы поставите лайк и поддержите меня~^_^