Это 24-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления
В моделях языка на основе слов мы используем рекуррентные нейронные сети. Его вход представляет собой последовательность неопределенной длины, а выход имеет фиксированную длину, например, вход: Они есть, а выход может быть наблюдающим или спящим. Однако результатом многих задач является последовательность неопределенной длины. Возьмем в качестве примера машинный перевод: входные данные представляют собой абзац английского языка, выходные данные представляют собой абзац французского языка, а ввод и вывод имеют переменную длину, например.
Английский: наблюдают
Французский: lls уважительно
Когда входные и выходные последовательности имеют переменную длину, мы можем использовать кодировщик-декодер или seq2seq. Они основаны на двух работах 2014 года:
- Cho et al., Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
- Sutskever et al., Sequence to Sequence Leaerning with Neural Networks
Две вышеупомянутые работы по существу используют две структуры рекуррентной нейронной сети, называемые кодировщиком и декодером соответственно. Кодер соответствует входной последовательности, а декодер соответствует выходной последовательности.
кодер-декодер
Кодер и декодер соответствуют двум рекуррентным нейронным сетям входной последовательности и выходной последовательности соответственно. Обычно мы добавляем специальный символ '
Кодер
Роль кодировщика заключается в преобразовании входной последовательности переменной длины в вектор фонового слова фиксированной длины.. Вектор фонового слова содержит информацию о входной последовательности. Обычно используемые кодировщики представляют собой рекуррентные нейронные сети.
Сначала просмотрите знания о следующей рекуррентной нейронной сети. Предположим, что единицей рекуррентной нейронной сети является,существуетВвод времени. Предположениеявляется результатом одного вывода на уровне внедрения, например.Соответствующий горячий векторс матрицей параметров слоя внедренияпродукт. скрытая переменная слоя
Вектор фона кодировщика
Простой фоновый вектор можно рассматривать как переменную скрытого слоя в конце сети.. Мы называем здесь рекуррентную нейронную сеть кодировщиком.
Двунаправленная рекуррентная нейронная сеть
Вход в кодировщик может быть как прямым, так и обратным проходом. Если входная последовательность, в прямом проходе переменная скрытого слоя
В процессе обратного переноса вычисление переменных скрытого слоя становится
Мы можем использовать двунаправленную рекуррентную нейронную сеть, когда хотим, чтобы вход кодировщика содержал информацию как о прямом, так и о обратном проходе. Например, если задана входная последовательность, согласно прямому проходу, их переменные скрытого слоя в рекуррентной нейронной сети соответственно; согласно обратному распространению, их переменные скрытого слоя в рекуррентной нейронной сети соответственно. В двунаправленной рекуррентной нейронной сети моментПеременная скрытого слоя — этоисоединены вместе, напр.
import numpy as np
h_forward = np.array([1, 2])
h_backward = np.array([3, 4])
h_bi = np.concat(h_forward, h_backward, dim=0)
# [1, 2, 3, 4]
декодер
Кодер наконец выводит фоновый вектор, фоновый вектор интегрирует входную последовательность
Предположим, что выходная последовательность в обучающих данных равна, мы хотим представить каждыйВыходной вектор в данный момент зависит как от предыдущего вывода, так и от фонового вектора. Потому что мы можем максимизировать совместную вероятность выходной последовательности
и получить функцию потерь для этой выходной последовательности
Для этого в качестве декодера используем другую рекуррентную нейронную сеть. Функция использования декодерадля представления одного выходаВероятность
один из нихзаСкрытая переменная слоя декодера на данный момент. Переменная скрытого слоя
где функция g — единица рекуррентной нейронной сети
Важно отметить, что кодеры и декодеры обычно используютМногослойная рекуррентная нейронная сеть
механизм внимания
В приведенном выше дизайне декодера в каждый момент используется один и тот же фоновый вектор.. Что, если бы в разные моменты работы декодера можно было бы использовать разные векторы фона?
Взяв в качестве примера англо-французский перевод, учитывая пару входной последовательности «Они смотрят» и выходной последовательности «lls resent», декодер может использовать больше фоновых векторов, кодирующих информацию «Они» в момент времени 1, для генерации «lls», в то время как время от времени еще 2 фоновых вектора, кодирующие «наблюдаемую» информацию, могут использоваться для генерации «регардента». Это выглядит так, как будто декодер уделяет разное внимание разным моментам во входной последовательности в каждый момент времени. Это также источник механизма внимания.
Теперь небольшая модификация приведенного выше декодера. мы предполагаем моментФоновый вектор. то декодер на данный моментСкрытая переменная слоя
пусть кодер будетСкрытая переменная слоя во время, декодер находится вФоновый вектор момента
То есть, учитывая текущий момент декодера, нам нужно взять средневзвешенное значение переменных скрытого слоя в разное время в кодировщике. Веса также называются весами внимания. Его формула расчета
иФормула расчета
где функцияСуществует несколько подходов к дизайну. существуетБумага Богдановасередина
в,,Веса и смещения, а также параметры слоя встраивания в двух рекуррентных нейронных сетях кодировщика и декодера — все это параметры модели, которые необходимо изучать одновременно.
существуетБумага БогдановаВ статье и энкодер, и декодер используют ГРУ.
В дешифраторе нужно немного изменить конструкцию ГРУ, предположивявляется результатом одного вывода на уровне внедрения, например.Соответствующий горячий векторс матрицей параметров слоя внедренияпродукт. Гипотетический моментФоновый вектор. то декодер на данный моментодна скрытая переменная слоя
Среди них шлюз сброса, шлюз обновления и скрытое состояние кандидата соответственно.
Суммировать
- На вход и на выход кодера-декодера (seq2seq) могут быть как последовательности переменной длины
- Применение механизма внимания к декодеру позволяет декодеру использовать другой фоновый вектор в каждый момент времени. Каждый фоновый вектор эквивалентен назначению разного внимания разным частям входной последовательности.