Seq2Seq&Внимание&Трансформатор, нажмите для просмотра~

NLP
Seq2Seq&Внимание&Трансформатор, нажмите для просмотра~

"Это второй день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

последовательная модель

sequence-to-sequenceкороткое имяSeq2Seq, представляет собой модель преобразования последовательности, широко используемую в машинном переводе, распознавании речи и других областях, обычно использующую структуру Encoder-Decoder. энкодер (энкодер) нейронная сетьПосимвольно обрабатывать предложение и сжимать его в векторное представление.; Затем нейронная сеть декодера (декодера) выводит предсказанное значение символ за символом в соответствии с состоянием кодировщика и использует ранее предсказанный символ в качестве входных данных каждого шага, как показано на следующем рисунке?

Вход кодировщика — исходная последовательность, а скрытое состояние — семантическая кодировка. Декодер — это генеративная языковая модель, а инициализация — это скрытое состояние кодировщика.<bos>является начальным символом в качестве первого ввода в сочетании со скрытым состоянием для предсказания первого слова. Следующим входом является целевая последовательность в сочетании со скрытым состоянием предыдущего нейрона для предсказания следующего слова до тех пор, пока<eos>(терминатор). Наконец, сравните с целевой последовательностью и рассчитайте функцию потерь.

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

Принцип перевода показан на следующем рисунке:

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

Attention

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

1)Кодер предоставляет больше данных декодеру., кодировщик предоставит декодеру скрытое состояние всех узлов, а не только скрытое состояние последнего узла кодировщика.

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

  • Определите, какое скрытое состояние наиболее тесно связано с текущим узлом

  • Рассчитать балл для каждого скрытого состояния

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

Модель Attention не просто слепо выравнивает первое слово вывода с первым словом ввода. Суть функции «Внимание» можно описать так:Карта из запроса в серию пар (ключ-значение-значение).

Есть три основных шага в подсчете внимания:

  1. Рассчитайте сходство между запросом и каждым ключом, чтобы получить вес.Обычно используемые функции подобия скалярного произведения, сплайсинга, персептрона и т.д.;
  2. Нормализуйте эти веса, используя функцию softmax;
  3. Вес и соответствующее значение ключа взвешиваются и суммируются, чтобы привлечь окончательное внимание.

В настоящее время в исследованиях НЛП ключ и значение часто совпадают, то есть ключ = значение.

Модель трансформер

Общая структура трансформатора

Как и в модели Attention, в модели Transformer также используется архитектура кодер-декодер. Но его структура сложнее, чем Attention, и уровень кодировщика и уровень декодера сложены по 6 кодировщиков. ?

Внутренняя упрощенная структура каждого кодировщика и декодера выглядит следующим образом?

Для кодировщика есть два уровня:

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

как показано на рисунке:

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

процесс кодировщика:

  1. Модель должна выполнятьоперация встраивания

  2. Вход в слой кодировщика,данные обработки собственного внимания

  3. Отправьте данные в нейронную сеть с прямой связью,Расчет нейронных сетей с прямой связьюможно распараллелить

  4. Вычисленный результат нейронной сети с прямой связью будетввод в следующий энкодер.

Self-Attention

Трансформер использует внимание к себеПреобразование «понимания» других родственных слов в слова, которые мы обычно понимаемИдея, давайте рассмотрим пример:The animal didn't cross the street because it was too tired.здесьitЧто это представляетanimalвсе ещеstreetНу, нам легко судить, а машинам судить трудно,Самовнимание позволяет машинам ассоциировать его с животными.

Multi-Headed Attention

Не просто инициализируйте набор матриц Query, Key, Value, ноИнициализировать несколько групп, преобразователь использует 8 групп, поэтому конечный результат — 8 матриц.

Весь процесс многоголового внимания можно кратко описать так:

img

  1. Запрос, ключ, значение проходят черезЛинейное преобразование
  2. Входные данные для масштабирования внимания скалярного произведения(Обратите внимание, что здесь делается h раз, что на самом деле является так называемой длинной головкой, каждый раз считается одна головка, а параметр W линейного преобразования Q, K и V каждый раз разный)
  3. Масштабируйте скалярное произведение внимания в h разобъединение результатов
  4. сделай это один разЛинейное преобразованиеПолученное значение используется как результат многоголового внимания

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

Так как же используется внимание во всей модели?

Как показано ниже:

transformer

Во-первых, для подключения кодировщика к декодеру используется внимание с несколькими головками.Ключ, значение и запрос соответственноВыходной слой кодировщика(здесь K=V) иВвод многоголового внимания в декодер. На самом деле, как и внимание в основной модели машинного перевода, внимание декодера и кодировщика используется для выравнивания перевода.

Самовнимание есть K=V=Q.Например, если введено предложение, то каждое слово в нем должно быть со вниманием сосчитано со всеми словами в предложении.Цель состоит в том, чтобы изучить зависимости слов в предложениях и уловить внутреннюю структуру предложений.

Positional Encoding

До сих пор модель-трансформер такжеОтсутствие способа интерпретировать порядок слов во входной последовательности. Чтобы справиться с этим, преобразователь добавляет дополнительный вектор на вход слоев кодировщика и декодера.Positional Encoding, размер такой же, как размер встраивания, этот вектор использует очень уникальный метод, позволяющий модели изучить это значение,Этот вектор может определять положение текущего слова, который фиксирует информацию о порядке слов (проще говоря, расстояние между разными словами в предложении). Вектор кодирования положения трансформатора не требует обучения, имеет регулярный метод генерации и множество специфических методов расчета.

Layer normalization

В преобразователе за каждым подуровнем (самовосприятие, ffnn) следует остаточный модуль, и естьLayer normalization.

inside

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

Mask

mask представляет собой маску, которая маскирует определенные значения,сделать так, чтобы он не действовал при обновлении параметра. В модели Трансформера задействованы две маски, а именноpadding maskиsequence mask.

Среди них маска заполнения должна использоваться во всех масштабируемых скалярных произведениях внимания, а маска последовательности используется только при самостоятельном внимании декодера.

Padding Mask

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

конкретная практикаДа, добавьте очень большое отрицательное число (отрицательная бесконечность) к значению этих позиций, чтобы после софтмакса вероятность этих позиций была близка к 0! И наша маска заполнения на самом деле является тензором, каждое значение является логическим значением,Там, где значение равно false, мы собираемся выполнить обработку.

sequence mask

маска последовательностиЧтобы декодер не видел будущую информацию. То есть для последовательности, когда time_step равно t, наш вывод декодирования должен зависеть только от вывода до t, но не от вывода после t. Поэтому нам нужно подумать о том, какСкрыть информацию после t.

Так как это сделать конкретно? Это тоже очень просто: сгенерируйте верхнюю треугольную матрицу, и значения верхнего треугольника все равны 0. Применяя эту матрицу к каждой последовательности, мы можем достичь нашей цели.

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

Не паникуйте, смотрите картинки и говорите ?

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

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

выходной слой

Когда слой декодера весь выполнен, как сопоставить полученный вектор с нужным нам словом?

очень простой,Просто добавьте еще один полносвязный слой в конце иsoftmaxЭтаж. Если наш словарь состоит из 1w слов, то в конце концовsoftmaxВероятность того, что будет введено 1w слов,Соответствующее слово с наибольшим значением вероятности является нашим конечным результатом..

Добро пожаловать в гигантский путеводитель~

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

Поймите BERT в одной статье (принцип) - Используйте древесные отходы для самосовершенствования