Модель внимания использовалась в области НЛП, но я не понял основных принципов модели внимания.Прочитав много чужих статей, кажется, что я ее понимаю, но на самом деле, когда я действительно ее понимаю, Я просто не могу этого сказать, я придумал причину, поэтому написал статью со своим пониманием.
Модель кодировщик-декодер
Говоря о модели внимания, мы должны сначала поговорить о модели seq2seq, Проблема, решаемая seq2seq, состоит в том, чтобы просто решить проблему сопоставления одного предложения с другим предложением, например, в следующих сценариях приложений:
машинный перевод: Текстовая последовательность для перевода --> Переведенная текстовая последовательность
Распознавание речи: Последовательность акустических характеристик --> Распознать текстовую последовательность
Система ответов на вопросы: последовательность слов описания вопроса --> создать последовательность слов ответа
текстовое резюме: Текстовая последовательность --> Абстрактная последовательность
Базовая модель seq2seq в основном включает кодировщик, декодер и семантические векторы фиксированной длины.. Модель кодировщика-декодера предлагается в «Обучение от последовательности к последовательности с помощью нейронных сетей». Возьмите машинный перевод в качестве примера, чтобы показать основные принципы модели Encoder-Decoder.
Кодер и декодер - это нейронные сети, которые могут быть RNN или LSTM и т. д. Мы берем RNN в качестве примера для расширения модели Процесс показан на следующем рисунке.
Encoder
,
,
,
входная последовательность, если это задача машинного перевода, то
,
,
,
Просто введите слова для перевода.
Кодер — это нейронная сеть, которую можноРНН, ЛСТМЖдать.
Взяв в качестве примера RNN, RNNТекущее скрытое состояние — это скрытое состояние предыдущего ввода, и текущий ввод определяет, так:
Текущий расчет состояния скрытого узла RNN
Указывает текущее скрытое состояние RNN.
Представляет скрытое состояние предыдущего ввода
Указывает текущий вход
В конце ввода, после получения состояний скрытого слоя всех входов, генерируется окончательный семантический вектор C.
Вычисление семантического вектора C
Семантический вектор C представляет собойФиксированная длинаВектор , этот вектор будет использоваться как вход декодера.
Decoder
Точно так же часть декодера может быть RNN или LSTM, а вход части декодера является выходом кодировщика.,
Это результат, декодированный декодером.Если это задача машинного перевода, то это результат, возвращаемый машиной.
На этом этапе задан семантический вектори выходная последовательность, которая была сгенерирована
,
,...,
, предсказывая следующее выходное слово yt
также могу написать
Предполагатьявляется скрытым состоянием RNN, то может быть сокращено как
то есть текущий выходимеет предыдущий вывод
, скрытое состояние предыдущего вывода
, семантический вектор, выдаваемый Encoder
,проходить через
Получается работа функции, где
— нелинейная нейронная сеть, здесь RNN
Однако у этого подхода есть недостатки: из-заСемантический вектор, выдаваемый кодировщиком, имеет фиксированную длину.Для относительно длинных входных данных некоторая информация будет потеряна, что приведет к плохим результатам декодера.В ответ на эту проблему KyungHyun Cho и др. модифицировали модель кодировщика-декодера и предложили раннюю модель внимания (НЕЙРОННЫЙ МАШИННЫЙ ПЕРЕВОД ПУТЕМ СОВМЕСТНОГО ОБУЧЕНИЯ ВЫРАВНИВАТЬ И ПЕРЕВОДИТЬ).
Модель внимания:
Чтобы решить проблему потери информации, вызванной семантическими векторами фиксированной длины, KyungHyun Cho и др. представили модель Attention.Механизм модели Attention аналогичен идее перевода статей людьми.Все они Сосредоточьтесь на словах, которые нужно перевести, и переводите их в соответствии с контекстом. Модель «Внимание» будет искать несколько слов, соответствующих исходному предложению, и комбинировать слова, которые были переведены, для выполнения соответствующего перевода. Например: когда мы переводим машинное обучение, при переводе на машину внимание будет сосредоточено на «машине», так что декодер может видеть информацию о каждом слове кодировщика, не ограничиваясь скрытым вектором фиксированной длины, что приводит к потере информации.
Конкретный процесс выглядит следующим образом:
для приговора,
,...,
1,код входной последовательности, сначала получить вектор слова определенным методом, а затем ввести его в Encoder для кодирования, и получить закодированный вектор, который записывается как,
,...,
, Здесь мы можем использовать RNN или LSTM для метода кодирования, а вот RNN в качестве примера.
2,Расчет весов внимания, для удобства записи определим вес внимания как, вектор после Decoder равен
,
,...,
, где i — индекс входной последовательности предложений
Для вектора qi, который в настоящее время требует декодера, его соответствующий вес внимания,
,...,
через функцию
Вычисленный, мы также можем использовать вектор после декодера как запрос, а декодированный вектор как поле, Здесь мы используем запрос, чтобы найти соответствующий вес поля.
3.вычислить семантический вектор ,
(в,
вес внимания,
вектор, полученный для кодировщика)
4.Следующий вывод декодераСогласно семантическому вектору C, выход предыдущего декодера, скрытое состояние выхода предыдущего декодера предсказывает следующий выход.
После добавления механизма Внимание добавляются два отличия
1. Вес внимания необходимо рассчитывать каждый раз, когда декодер представляет собой слово.
2. Каждому декодеру нужно пересчитывать семантический вектор
Для расчета веса внимания необходимы две части информации:
-
Вектор, полученный после Encoder
,
,...,
, этот вектор содержит информацию обо всех словах после декодирования, мы можем рассматривать его как словарь
-
Вектор, полученный i-1-м дешифратором
.
Возьмите первый пример, чтобы объяснить,
Во-первых, после того, как входной текст «машинное обучение» проходит через кодировщик RNN, получается скрытое состояние.,
,
,
Второй шаг - рассчитать вес внимания.В начале скрытого состояния декодера нет.Обычно фиксированный стартовый токен
После получения веса внимания в соответствии со скрытым состоянием, полученным кодировщиком,
,
,
, и соответствующие веса внимания вычисляются для получения семантического вектора
, и, наконец, Декодер получает результирующую машину
Когда Декодер является вторым словом, шаги такие же, разница в том, что при вычислении веса во внимании используется скрытое состояние, полученное Декодером.
Тогда вот проблема,Что это за функция _F_?? В целом, существуют следующие методы расчета весов внимания.
- Билинейный метод
Непосредственное построение с помощью весовой матрицыи
Реляционное отображение является относительно прямым, а скорость вычислений выше.
- Dot Product
Этот метод является более прямым, экономит вес и напрямую устанавливаети
Преимущество реляционного отображения в том, что скорость вычислений выше, и параметры не требуются, что снижает сложность модели. но нужно
и
размеры должны быть одинаковыми.
- scaled-dot Product
Есть проблема с вышеописанным методом скалярного произведения, то есть по мере увеличения размерности вектора будет увеличиваться и конечный вес.Для повышения эффективности вычислений и предотвращения переполнения данных он масштабируется.
Обсуждение дешево, покажите мне код!!! В следующей статье будет работа над реализацией модели.