Обобщить внимание и позиционные встраивания

Из-за того, как работает механизм внимания, у него нет способа определить, где находится токен в предложении, потому что каждое предложение рассматривается как набор слов, поэтому мы обычно добавляем позиционные вложения (фиксированные или обучаемые)
Это может можно сделать двумя способами: добавить позиционное кодирование или объединить с встраиванием слов.

С технической точки зрения наихудший случай для добавления — это то, что сеть узнает ноль на стороне внедрения и ноль на стороне ввода, следовательно, повторяя конкатенацию, как показано на рисунке.

При обычном внимании мы выводим Key и Querry из X (входная последовательность) интуитивно KEY говорит, о какой информации этот токен, а запрос говорит, какую информацию он запрашивает у других токенов

Таким образом, мы добавляем контент и позицию вместе, и сеть должна выяснить, как их использовать. Таким образом, A – это то, сколько токенов я уделяю токену J.

Иск Деберты

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

Итак, вот предложение статьи. Учитывая последовательность жетонов I, внимание Aij можно рассчитать как

Следовательно, каждый токен теперь создает контент [темно-синий], а также позиционное встраивание [светло-синий].

Предложенный Дебертой механизм разделения внимания

Итак, теперь у нас есть 4 матрицы C-C C-P P-C и P-P
[P = позиция и C = содержимое]

Контент к содержанию: это классическое внимание
Например, я есть слово есть, и я запрашиваю всю информацию от существительных предложения, потому что я глагол

Содержание для позиции:- Я слово «есть», и я хочу знать токены вокруг меня, чтобы слово могло обращать внимание на мое окружение.
Например, сеть поняла, что это не вопрос, и, следовательно, она может не захотеть информация из токенов перед «есть», потому что это, вероятно, «я»

Позиция к содержанию: - это немного странно, поэтому в основном я нахожусь в позиции, которая находится через два слова после меня, какую информацию я хочу от нее, так как она обращает внимание на содержание, это может зависеть от того, какое это слово

От позиции к позиции: - поскольку Деберта использует относительное кодирование с контекстом длины N, и эта матрица касается относительности позиции токена, поэтому эта матрица бесполезна и не включается в расчеты.

Наконец, мы добавляем все 3 из них, чтобы получить матрицу внимания Aij, поэтому, в итоге, речь идет о том, что я есть слово «есть». Я нахожусь в позиции 2. Я запрашиваю много информации от других существительных, а также мне нужна информация вещи, которые на 1 или 2 слова впереди меня, а также, поскольку я на позиции 2, меня интересует подлежащее предложения

А остальное уже история, я имею в виду классическое внимание :P

Итак, у нас есть новые позиционные векторы P, умноженные на их скрытые векторы, и мы передаем их каждому слою в Деберте, а не только первому слою.

Таким образом, это двузапутанная позиционная кодировка, потому что на каждом уровне мы явно добавляем позиционную кодировку в сочетании с новым механизмом внимания.

Какие-то новые проблемы с подходом и исправлением?

Проблема с позиционным кодированием

В объекте MLM:- дано предложение — Новый магазин открылся рядом с новым торговым центром
Тогда в локальном контексте будет невозможно различить торговый центр и магазин с использованием относительного кодирования

Следовательно, они загружаются в обычном кодировании в стиле Берта в конце, непосредственно перед слоем softmax, что они критиковали как концепцию, аналогичную концепции CONVS, которая лучше, чем MLP.

Рекомендации

ссылка на документ: - https://arxiv.org/abs/2006.03654