Предварительные требования:

  • Знание нейронных сетей.
  • Существует так называемый механизм внимания, и вам не нужно знать, что такое внимание.
  • Ваш RNN / LSTM не работает.

Внимание - все, что вам нужно, написанное А. Васвани и соавторами, считается одним из достижений в устранении ограничений хорошо известных архитектур LSTM / RNN в области глубокого обучения. В статье представлено использование преобразователей для задачи последовательности sequence2. В статье умно использовано использование механизма внимания из Нейронный машинный перевод путем совместного обучения выравниванию и переводу Д. Bahdanau et al. Несколько примеров здесь, здесь и здесь явно и с изысканной степенью тщательности объясняют математику и применение механизма внимания.

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

Представьте, что вы создаете учебную задачу seq to seq и хотите разработать модель, которая будет принимать входное предложение на английском языке и переводить его на язык гуджарати.
Все животные равны, но некоторые более равны, чем другие → Badhā prāṇī'ō samāna chē parantu kēṭalāka an'ya karatā vadhu samāna chē.
Первые шаги для вас - взять это входное предложение, запустить токенизатор, который преобразует его в числа, а затем пропустите его через слой встраивания, который, вероятно, добавит дополнительное измерение к каждому слову в этом предложении. При запуске RNN или LSTM в скрытых состояниях сохраняется информация об относительном положении слов в предложении. Однако в сети преобразователя, если кодер состоит из сети прямого распространения, то передача только встраивания слов будет составлять добавление ненужной турбулентности к вашей модели, поскольку последовательная информация о предложении не фиксируется в вложениях слов. Чтобы справиться с этой проблемой относительного положения слов, приходит идея позиционного кодирования.

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

Самый простой способ подумать о позиционном кодировании - это присвоить каждому слову уникальный номер . Или присвойте каждому слову действительное число в диапазоне [0,1] . Это будет обрабатывать большие значения, если входное предложение длинное. Однако оба вышеупомянутых метода не фиксируют точность временных шагов между словами. Чтобы преодолеть это, в статье используется позиционное кодирование в виде функций sin и косинуса.

Чтобы построить аналогию, последовательность, которую мы будем вводить в модель, будь то предложение, видеопоследовательность или данные о цене на фондовом рынке, всегда будет сигналом во временной области. И лучший способ представить сигнал во временной области - использовать синусоидальное уравнение sin (ωt). Если мы грамотно воспользуемся этим волновым уравнением, мы сможем зафиксировать время, а также размерную информацию встраивания слова за один снимок.

Давайте взглянем на это уравнение и на следующих шагах попытаемся визуализировать то же самое.

Давайте рассмотрим простое предложение, которое токенизируется, а затем извлекаются его вложения слов. Длина предложения - 5, а размер встраивания - 8. Поэтому каждое слово представлено как вектор 1x8.

Теперь давайте возьмем одну последовательность во временном измерении и добавим синусоидальный PE-вектор к этому вектору вложения.

Далее мы проделываем аналогичную операцию для остальных векторов по измерению dims.

Согласно статье, синусоидальные синусоидальные синусоиды и косинусоиды альтернативно добавляются к векторам вложения. Серия sin добавляется, если dims четно, и серия косинусов добавляется, если dims нечетно.

Это очень хорошо отражает информацию по измерению времени (или измерению pos, как описано в уравнении. Я бы использовал pos и время взаимозаменяемо, поскольку они означают одно и то же.) Но как также зафиксировать относительную позиционную информацию по измерению затемнения? Ответ здесь также заключается в самом уравнении. Термин ω.

По мере увеличения i от 0 до d_embedding / 2 частота также уменьшается с 1 / 2π до 1 / (2π.10000)

Таким образом, мы видим, что вдоль каждого вектора в направлении dims фиксируется уникальность позиции. В документе также показана надежность этого типа кодирования. Однако я все еще не мог понять, почему именно число 10000 использовалось для позиционных кодировок (может быть, это гиперпараметр?). Это объяснение примерно показывает, насколько правдоподобно и эффективно использование синусов и косинусов для понимания модели. На рисунке ниже показано, как позиционное кодирование меняется в зависимости от положения (времени) и размеров.

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

Это был мой взгляд на позиционные кодировки, используемые в механизме внимания. В следующих выпусках я постараюсь написать о кодировке-декодере, уделив внимание реальной проблеме масштабирования. К тому времени вроде поделитесь и реализуйте!

Плавник!