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

Главной особенностью Attentions является тот факт, что их работа не ограничивается локальностью, как CNNS и т. д., но мы увидим, что в некоторых случаях нам понадобится модель для рассмотрения локальности и т. д. в процессе их обучения.

1. Полное внимание

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

Структура не сложная, что не мешает разобраться. Я также добавил код Python, чтобы помочь вам лучше понять.

На рис. 1 (слева) схематично показан механизм Scaled Dot-Product Attention. Когда у нас есть более одного внимания, мы называем это многоголовым вниманием (так очевидно😅). Давайте погрузимся в математику, стоящую за этим; Основная формула внимания – уравнение 1.

Здесь Q(Запрос), K(Ключ) и V(значения) считаются его входными данными, а dₖ (входное измерение) используется для уменьшения сложности и вычислительные затраты. Эта формула является ключевой точкой в этом блоке в глубоком обученииэпоха. Итак, давайте посмотрим на его код, чтобы понять это.

Я также выполнил проект, в котором предложил TransformerEncoder на основе Attention в библиотеке Tensorflow для прогнозирования временных рядов. Вы можете найти его на моем GitHub (github.com/yazdanfarreza/PEM_FuelCell-Performance).

2. Проблемное внимание

Мы можем изменить уравнение 1 с помощью информации из «Расчленение трансформера: единое понимание внимания трансформера через призму ядра» к уравнению 2. Кроме того, внимание i-го запроса описывается как сглаживание ядрав вероятностной форме, как показано ниже:

Из уравнения 2 мы можем определить измерение разреженности i-го запроса, как показано ниже:

И, наконец, окончательная формула блока внимания — уравнение 4.

Кроме того, код Python:

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

3. LogSparse Внимание

У полного внимания, о котором мы говорили ранее, есть два недостатка: 1. независимость от местности(интересно, не правда ли? ) 2. Узкое место в памяти. Чтобы справиться с этими двумя задачами, исследователи использовали операторы свертки и преобразователи LogSparse.

Вместо ядра свертки размером 1 с шагом 1 (умножение матриц) они использовали казуальную свертка (чтобы гарантировать, что модель не имеет доступа к будущим точкам)из ядраразмера kс шагомот 1 до преобразовывать входные данные в запросы и ключи.

Вы можете найти его исходный код здесь.

4. ЛСХ Внимание

Исследователи представили Reformerкак эффективный преобразователь в своем основном исследованиипутем реализации двух методов . 1. Замена скалярного произведения внимания (раздел 1) локальным чувствительнымблоком 2. Использование обратимого остаточные слои, а не стандартные.

Мы начинаем с двух тензоров (вместо одного тензора в разделе 1 полного внимания), Q=K и V с формой [batch_size, length, dₘₒ𝒹ₑₗ]. Расчет внимания аналогичен его исходной формуле (уравнение 1), где важна только часть функции softmax, а не все остальное. Пока мы беспокоимся о softmax, посколькуон эффективен в формуле для каждого запроса(qᵢ) мы просто сосредотачиваемся на ключевых значениях(K em>), которые ближайшие к qᵢ.

Хеширование с учетом местоположения

Мы используем хэширование с учетом местоположения(LSH), чтобы ближайшие соседибыстро найти в многомерных пространствах,что в некоторой степени трудно. В этом случае нам нужно, чтобы близлежащие векторыполучали тот же самый хэшс высокой вероятностью и что хэш-сегменты имеют аналогичный размерс высокая вероятность.

Здесь развернуты случайные проекции, как показано на рисунке 4.

Мы фиксируем случайную матрицу R размером [dₖ, b/2], чтобы получить b хэшей. Затем мы описываем h(x) = argmax([xR;-xR]), где [u;v] указывает конкатенацию двух векторов. (Метод схемы LSH).

Мы должны формализовать внимание LSH. Мы переписываем уравнение 1 для позиции запросаi за один раз:

Мы можем схематически проиллюстрировать внимание LSH по сравнению с полным вниманием на рисунке 5.
а) Матрица внимания для полного внимания обычно разрежена, но не полезна для вычислений
б) Отсортированные ключи и запросы на основе их хэша ведро
c) В отсортированной матрице внимания пары одного и того же кластера ведра замыкают диагональ
d) В соответствии с пакетным подходом куски m последовательных запросов обслуживают друг друга и один фрагмент назад.

Код структуры этого вида внимания: github.com/google/trax/blob/master/trax/models/research/configurable_transformer.py

Я не добавлял сюда код, чтобы не удлинять статью.

Основные ссылки:

1. Китаев Н., Л. Кайзер и А. Левская, Реформатор: эффективный трансформатор. Препринт arXiv arXiv:2001.04451, 2020.

2. Ли С. и др., Улучшение локальности и устранение узких мест в памяти преобразователя при прогнозировании временных рядов. Достижения в системах обработки нейронной информации, 2019 г. 32 .

3. Чжоу Х. и соавт. Informer: эффективный преобразователь для прогнозирования временных рядов с длинными последовательностями. в Протоколы AAAI. 2021.

4. Васвани А. и др., Внимание — это все, что вам нужно. Достижения в системах обработки нейронной информации, 2017 г. 30.

Обратите внимание, что этот пост для моего исследования в будущем, чтобы оглянуться назад и просмотреть материалы по этой теме. Если вы обнаружите какие-либо ошибки, пожалуйста, дайте мне знать. Тем временем вы можете напрямуюсвязаться со мной в Twitterздесь или LinkedInздесь по любой причине.