Легко понять принцип внимания

NLP

Это 16-й день моего участия в Gengwen Challenge, пожалуйста, проверьте подробности мероприятия:Обновить вызов

Недостатки Seq2Seq

Хотя в Seq2Seq есть много методов для улучшения эффекта, у него есть большой недостаток: когда входная последовательность слишком длинная, конечный вектор выходного состояния h трудно запомнить исходное содержимое или какое-то ключевое содержимое.

seq2seq_blue.jpg

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

Seq2Seq с вниманием

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

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

Принцип внимания

attention.jpg

Как показано на рисунке, процесс кодировщика находится слева, а процесс декодера - справа. Обе части могут использовать структуру, состоящую из RNN и ее вариантов. Здесь SimpleRNN используется для введения принципа внимания. После того, как кодировщик захватит входные объекты, как обычно, он выводит вектор состояния h в каждый момент времени.i, и преобразовать h последнего моментаmкак начальный вектор состояния s декодера0, процесс Deocder в это время выглядит следующим образом:

а) Сначала вычислите первое декодирование, сначала мы вычислим s в декодере0с каждым вектором состояния h в EncoderiВычислить вес (метод расчета веса будет представлен ниже), каждый вектор состояния hiсоответствует весу аi,Какиеiозначает чiс с0, то для всех [a1,a2,...,am] Сделайте преобразование Softmax и станьте весом [a1,a2,...,am] , то мы используем новые веса [a1,a2,...,am] и соответствующий вектор состояния [h1,h2,...,hm] Возьмите средневзвешенное значение, чтобы получить c0. Затем мы используем х'1,от0и с0Рассчитано с1, формула выглядит следующим образом:

s1 = tanh( A' * contact(x'1 ,c0, s0) + b)

【Объяснение ключа】потому что с0является взвешенной суммой векторов состояния в кодировщике за все время, поэтому он знает полную входную информацию кодировщика, что решает проблему забывания Seq2Seq. плюс текущий вход x'1и информация о состоянии предыдущего момента0, поэтому можно предсказать выход вектора состояния s в текущий момент1.

б) Второе декодирование аналогично предыдущему, вычисляем s в Decoder1со всеми векторами состояния h в Encoderiвеса для каждого вектора состояния hiсоответствует весу аi,Какиеiозначает чiс с1, то для всех [a1,a2,...,am] Сделайте преобразование Softmax и станьте весом [a1,a2,...,am] , то мы используем новый aiи соответствующий hiВозьмите средневзвешенное значение, чтобы получить c1. Затем мы используем х'2,от1и с1получить с2, формула выглядит следующим образом:

s2 = tanh( A' * contact(x'2, c1, s1) + b)

【Объяснение ключа】потому что с1является взвешенной суммой векторов состояния в кодировщике за все время, поэтому он знает полную входную информацию кодировщика, что решает проблему забывания Seq2Seq. плюс текущий вход x'2и информация о состоянии предыдущего момента1, поэтому можно предсказать выход вектора состояния s в текущий момент2.

c) Аналогично повторению описанного выше процесса декодирования до конца.

Два метода расчета веса

В общем, есть два способа вычислить s в Decoder.iсо всеми векторами состояния h в Encoderiразмер веса.

Первый — это метод, описанный в исходной статье, как показано на рисунке ниже. На рисунке с0со всеми векторами состояния h в EncoderiВозьмем, к примеру, расчет веса. поставь чiи с0После склеивания, а затем умножения на матрицу параметров W он преобразуется нелинейной функцией th, и, наконец, полученный результат сравнивается с матрицей параметров vTУмножьте, чтобы получитьi, так как есть m входов, кодировщик имеет m векторов состояния, поэтому ему нужно вычислить m a , и, наконец, [a1,a2,...,am] После изменения Softmax [a нового параметра веса получается1,a2,...,am]. Здесь W и vTпараметры, которые необходимо тренировать.

similarity1.jpg

Второй — это метод, принятый в модели Transformer, как показано ниже. по-прежнему заканчиваются на s0со всеми векторами состояния h в EncoderiРассчитайте вес в качестве примера, установите WKс чiУмножьте, чтобы получить ki, с ВтQс с0Умножьте, чтобы получить q0, то поставь кTiс д0Скалярный продукт рассматривается как подобие ai. Поскольку есть m входов, кодировщик имеет m векторов состояния, поэтому ему нужно вычислить m a и, наконец, [a1,a2,...,am] После изменения Softmax получаются новые параметры веса [a1,a2,...,am]. ГдеKи ВтQпараметры, которые необходимо тренировать.

similarity2.jpg

временная сложность

Если входная длина m , целевая длина t .

После того, как мы ввели механизм внимания, мы получили m векторов состояния в кодировщике.В следующем процессе декодера вычисляются m a для каждого декодирования, и процесс декодера выполняется t раз, и, наконец, вычисляется общее количество m*. ta , поэтому временная сложность равна O(m+m*t). Таким образом, несмотря на то, что введение Attention в Seq2Seq может значительно улучшить производительность и избежать проблемы с забыванием, цена заключается в огромном количестве вычислений.

И Seq2Seq, который не вводит механизм внимания, потому что кодировщик вычисляет только m векторов состояния, а декодер декодирует t раз, поэтому временная сложность составляет всего O (m + t).

Визуализация веса

weights_visualization.jpg

Вот пример перевода с английского на французский.С точки зрения визуализации мы можем интуитивно объяснить смысл, выраженный параметрами веса.Толщина фиолетовой линии на рисунке указывает на степень веса. При переводе в зону слова в процессе декодера он будет вычислять параметр веса с каждым входом в кодировщик, Мы видим, что, хотя зона имеет вес со всеми входными словами, значение веса со словом Площадь, очевидно, самое большое, Это означает, что при переводе zone особое внимание следует уделить слову Area, то есть слово Area имеет наибольшее влияние на перевод zone, ведь значения zone во французском языке и Area в английском схожи. Это также происхождение имени Внимание. Другой пример: при переводе французского Européenne вам нужно обратить особое внимание на европейский язык в английском языке, и причина та же, что и выше.

кейс

Я использовал интересный небольшой случай, который я реализовал сам, чтобы перевести случайные написанные строки на английский язык с подробными аннотациями и реализовал два метода расчета веса.Наггетс.Талант/пост/695060…