Практический обзор

Введение

Архитектура Transformer [1] сыграла важную роль в некоторых из крупнейших прорывов в области глубокого обучения за последние годы. Особенно в области обработки естественного языка (NLP) предварительно обученные модели автокодирования (такие как BERT [2]) и авторегрессионные модели (такие как GPT-3 [3]) постоянно превосходят современные и достичь человеческого уровня генерации текста. Одним из наиболее важных нововведений Transformer является использование уровней внимания в качестве основного способа маршрутизации информации.

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

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

Учебник по вниманию

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

Внимание к себе – особый вид внимания. Разница между обычным вниманием и само-вниманием заключается в том, что вместо того, чтобы связывать ввод с выходной последовательностью, само-внимание фокусируется на одной последовательности. Это позволяет модели позволить последовательности узнавать информацию о себе. Например, возьмем предложение «Человек пошел к берегу реки и съел бутерброд». В отличие от предыдущих методов встраивания, таких как TF-IDF и word2vec [4], самостоятельное внимание позволяет модели узнать, что «берег реки» отличается от «финансового банка» (зависит от контекста). Кроме того, это позволяет модели узнать, что «он» относится к «мужчине» (может узнать зависимости).

Самостоятельность можно объяснить следующим образом. Предположим, у нас есть последовательность x длины n. Каждый элемент в x представлен d-мерным вектором. В случае НЛП x будет вложением слов в предложение. x проецируется через три (обученные) весовые матрицы WQ, WK и WV, в результате чего получаются три матрицы: Q, K и V, все размерности n*d. Само-внимание может быть определено следующей общей формулой:

Наиболее часто используемой функцией оценки является softmax. Взятие softmax и применение коэффициента масштабирования приводит к масштабируемому точечному произведению внимания (SDP), как предложено в [2]:

Здесь внимание входа x вычисляется путем умножения Q на KT (сопоставление каждого элемента с каждым другим элементом), применения коэффициента масштабирования, взятия softmax по строкам (нормализация каждой строки) и умножения каждого значения в V на его значение. вычисляем внимание, так что наш результат снова равен n*d. Таким образом, Q и K используются для связывания каждого элемента с любым другим элементом, а V используется для назначения вывода softmax каждому отдельному элементу.

Авторы утверждают, что при больших значениях d_k скалярные произведения становятся очень большими, что, в свою очередь, толкает функцию softmax в области, где градиенты чрезвычайно малы. По этой причине скалярное произведение масштабируется путем деления его на √(d_k). Обратите внимание, что это не влияет на сложность вычислений, так как в них преобладает вычисление softmax(QK). По этой причине он будет исключен из общей формулировки.

Как вы уже могли видеть, у этой формулы есть проблема: умножение Q и K приводит к матрице n*n. Взятие softmax по строкам матрицы n * n имеет сложность O (n²). Это проблематично как для среды выполнения, так и для использования памяти, поскольку n может быть очень большим. Для многостраничных документов быстро становится невозможным вычислить внутреннее внимание по полному входу, что означает, что входные данные должны быть усечены или разделены на части. Оба этих метода устраняют одно из основных преимуществ само-внимания: долгосрочный контекст. Этот тип внимания, когда каждый элемент умножается на любой другой элемент, называется «глобальным вниманием», которое можно визуализировать следующим образом:

Здесь каждый элемент по диагонали (темно-синий) смотрит на все остальные элементы в своей строке и столбце (выделены голубым цветом).

Для простоты в дальнейшем будут использоваться следующие определения:

Здесь P относится к матрице n * n, которая является результатом умножения Q и K, а A (матрица внутреннего внимания) относится к softmax P. Обратите внимание, что в большинстве статей используется собственное определение, которое может немного сбивать с толку.

Для более подробного разъяснения внимания рекомендую прочитать Иллюстрированный трансформер.

Альтернативы

Основное предположение в снижении сложности SDP заключается в том, что не все части ввода одинаково важны, и некоторые токены не должны учитывать другие конкретные токены.

Чтобы избежать привлечения глобального внимания, есть несколько альтернатив:

  • Разреженное внимание. Методы разреженного внимания разрежают глобальную матрицу внимания, чтобы уменьшить количество токенов, которые должны уделять внимание друг другу.
  • Матричная факторизация: методы матричной факторизации основаны на том, что матрица внимания имеет низкий ранг и может быть разложена и аппроксимирована матрицей более низкого ранга без потери слишком большого количества информации.
  • Хеширование с учетом местоположения.Хеширование с учетом местоположения обеспечивает быстрый способ вычисления поиска ближайшего соседа. Это можно применить непосредственно к матрице внимания, чтобы выбрать, какие токены должны уделять внимание друг другу.
  • Внимание ядра:методы внимания ядра интерпретируют функцию softmax как ядро ​​и используют это для более эффективного вычисления матрицы внутреннего внимания.

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

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

Методы разреженного внимания уменьшают сложность, рассматривая только подмножество вычислений в n * n матрице само-внимания P. Идея состоит в том, что токены не должны обращать внимание на каждый другой токен, а вместо этого могут сосредоточиться на более важных токенах и игнорировать остальных. Тогда возникает вопрос: как мы выбираем, на какие токены обращать внимание?

Местное вниманиеO(n*W)

Локальное внимание, также известное как «оконное»/скользящее внимание, — это простой, но эффективный метод разрежения матрицы само-внимания. В локальном внимании жетоны обращаются только к своему локальному соседству или окну W. Таким образом, глобальное внимание больше не вычисляется. Рассматривая только токены в W, он снижает сложность с n*n до n*W. Это можно представить, как показано на рисунке 2.

Случайное вниманиеO(n*R)

При случайном внимании жетоны обращаются только к случайным другим жетонам. Сложность зависит от количества выбранных случайных жетонов (R), которое представляет собой соотношение всех жетонов. Это можно представить, как показано на рисунке 2.

Разреженный преобразовательO(n√n)

Разреженный преобразователь [5] был одной из первых попыток уменьшить сложность самоконтроля. Авторы предлагают два шаблона разреженного внимания: пошаговое внимание и фиксированное внимание, которые снижают сложность до O(n√n). Их два типа внимания можно определить с помощью следующих функций:

  • Внимание: i-я позиция может обслуживать j-ю позицию, если
    (i+s) › j › ( i-s) или (i-j) mod s = 0
  • Фиксированное внимание: i-я позиция может обслуживать j-ю позицию, если этаж(j/s) = этаж(i/s) или (j mod s) ≥ (s-c)

Где s — шаг (который равен √n), а c — гиперпараметр. Сложность этих алгоритмов составляет O(n*s), что приводит к O(n√n), когда s установлено равным √n. Пошаговое внимание похоже на локальное внимание с шагом, которое, по мнению авторов, важно для обучения на данных с периодической структурой, таких как изображения или музыка. Однако для данных без периодической структуры (например, текста) этот шаблон может не направить информацию к удаленным элементам. Фиксированное внимание — решение этой проблемы. Это позволяет некоторым элементам обслуживать весь столбец и создавать «сводку», которая распространяется на другие элементы. Визуализация двух разных шаблонов показана на рисунке 3.

Длинный формат O(n)

Longformer [6] использует комбинацию скольжения (или локального), расширенного скольжения и глобального внимания. Расширенное скользящее внимание основано на идее расширенных CNN. Целью расширенного скользящего внимания является постепенное увеличение рецептивного поля для каждого слоя. Авторы предлагают использовать локальное внимание в слоях более низкого уровня с малым окном W (которое можно рассматривать как расширенное скользящее окно внимания с зазором d, равным 0) и увеличивать W и d в слоях более высокого уровня.

Глобальное внимание добавляется только для определенных токенов. Выбор, какие токены сделать глобальными, остается за пользователем. Логичным выбором для классификации является сделать токен [CLS] глобальным, в то время как для задач контроля качества все токены вопросительного знака можно сделать глобальными. Сложность их алгоритма составляет (n*W + s*n), которая масштабируется линейно относительно длина последовательности n и, таким образом, упрощается до O (n).

Обратите внимание, что для реализации Longformer требуется специальное ядро ​​CUDA, поскольку современные графические процессоры оптимизированы для умножения плотных матриц. Авторы предоставляют специальное ядро ​​CUDA, которое позволяет эффективно вычислять предлагаемые ими умножения разреженных матриц на графическом процессоре в PyTorch и Tensorflow.

Матричная факторизация

В методах матричной факторизации (или декомпозиции) матрица P считается низкоранговой, что означает, что не все элементы в матрице независимы друг от друга. Поэтому его можно разложить и аппроксимировать меньшей матрицей. Таким образом, матрица n*n может быть уменьшена до n*k (где k ‹ n), что позволяет нам гораздо эффективнее вычислять A (результат softmax).

Линформер O(n)

Авторы Linformer [7] предлагают использовать низкоранговую факторизацию матрицы внимания для достижения сложности O(n). Авторы сначала эмпирически показывают, что A может быть восстановлен из его первых нескольких наибольших сингулярных значений при применении разложения по сингулярным значениям (SVD), предполагая, что он имеет низкий ранг. Затем они доказывают, что A можно аппроксимировать как матрицу низкого ранга Ã с очень малой ошибкой, используя лемму Джонсона-Линденштрауса (JL), которая гласит:

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

Авторы отмечают, что вычисление SVD для каждой матрицы внутреннего внимания добавляет дополнительную сложность. Вместо этого авторы добавляют две матрицы линейной проекции после V и K, которые эффективно проецируют исходные (n*d) матрицы на более низкие (k*d)-мерные матрицы, где k — уменьшенная размерность. Это можно представить, как показано на рисунке 4:

Предлагаемая ими новая формула внимания показана в уравнении 3:

Здесь Ei и Fi — две матрицы линейной проекции. Обратите внимание, что для уменьшения A с n*n до Ã (n*k) нужно спроецировать только K на размерность k. Поскольку V по-прежнему имеет размерность n*d, V также проецируется на размерность k, чтобы гарантировать, что окончательная выходная матрица имеет размерность n*d (что является ожидаемой размерностью для следующего слоя).

Что это эффективно делает, так это уменьшает длину последовательности n на линейную проекцию. Это имеет смысл для НЛП, так как не все слова в предложении (одинаково) релевантны.

Последний шаг — выбор значения k. Авторы показывают, что для k достаточно значения dlog(d), что приводит к сложности O(nk). Поскольку d не увеличивается по отношению к входной длине n, сложность механизма внутреннего внимания становится равной O(n).

НистрёмформерO(n)

Нистрёмформер [8] использует метод Нистрёма для аппроксимации матрицы само-внимания. Идея состоит в том, чтобы переписать матрицу P как матрицу из четырех частей: B, которая равна m*m, где m — некоторое число ‹ n), C, D и E. Это показано слева на рисунке 5:

Согласно методу Нистрёма, P можно аппроксимировать как P̃, заменив E на DB⁺C (где B⁺ — псевдообратное отношение Мура-Пенроуза к B), которое затем можно уменьшить, как показано на рисунке 5. Исходное n*n матрица теперь разлагается как произведение двух матриц n*m и матрицы m*m. Это значительно сокращает объем вычислений, поскольку для создания этого разложения необходимо умножать только выбранные строки K и столбцы Q (вместо всех строк и столбцов).

Чтобы лучше понять, как это работает, давайте аппроксимируем один элемент eᵢ,ⱼ в нашей подматрице E, используя метод Нистрёма. Предположим, что P представляет собой матрицу 5*5, и мы выбираем B в качестве нашей первой ячейки (1,1), C в качестве первой строки (от 2,1 до 5,1) и D в качестве первого столбца ( 1,2 до 1,5). Это можно визуализировать, как показано на рисунке 6. Допустим, мы хотим узнать значение e₃,₃, которое является произведением c₃,₃ и d₃,₃ (в SDP это будет умножение одного значения в В и К). В P̃ у нас больше нет фактического умножения c₃,₃ и d₃,₃, но мы знаем значения c₃,₁и d₁,₃ (поскольку они находятся в выбранной нами строке и столбце). Чтобы аппроксимировать e₃,₃, мы умножаем значения c₃,₁и d₁,₃ и умножаем на величину, обратную B. Как видите, мы можем аппроксимировать любое значение в E всего лишь результатом одной строки в Q и одной колонна К.

Хотя для этого примера были выбраны первая строка и столбец из Q и K, также можно выбрать несколько строк и столбцов, называемых «ориентирами», что и делается в статье. Эти ориентиры выбираются с использованием сегментных средних, которые аналогичны локальному среднему объединению (разделение входных данных на сегменты и получение среднего значения каждого сегмента).

Однако все еще остается проблема: чтобы вычислить матрицу внимания A, сначала необходимо вычислить P, потому что операция softmax нормализует элементы A, беря содержимое всей строки в P. Поскольку цель состоит в том, чтобы избежать вычисления P, авторы предлагают обходной путь: они выполняют softmax над тремя подматрицами в P̃ и умножают их, как показано в уравнении 3:

Здесь Z * является приближением B⁺.

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

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

Хеширование с учетом местоположения (LSH) — это метод, который можно использовать для эффективного приближенного поиска ближайшего соседа. Идея LSH состоит в том, что можно выбрать такие хеш-функции, что для любых двух точек многомерного пространства p и q, если p близко к q, тогда хеш(p) == хэш(q). С помощью этого свойства все точки можно разбить на хеш-ковши. Это позволяет намного эффективнее находить ближайших соседей для любой точки, поскольку необходимо вычислять только расстояние до точек в одном и том же хэш-корзине. В контексте самоконтроля это можно использовать для ускорения вычисления P, применяя LSH к Q и ​​K и умножая только элементы, которые близки друг к другу после применения LSH, вместо выполнения полного вычисления QK.

Реформатор O(nlog(n))

Авторы Reformer [9] первыми предложили использовать LSH для эффективного самовнимания. Они отмечают, что, поскольку в softmax преобладают самые большие элементы, для каждого запроса qi в Q qi нужно сосредоточиться только на ключах в K, которые находятся ближе всего к qi (или в том же сегменте хеширования).

Чтобы лучше понять, как это работает, давайте рассмотрим пример. Представьте, что у нас есть двумерное пространство с несколькими точками, как показано слева на рис. 7. В случае само-внимания этими точками будут элементы в P. Цвета обозначают точки, расположенные близко друг к другу. Чтобы разделить элементы на хэш-сегменты, через начало координат проводится несколько случайных гиперплоскостей, как показано справа на рис. 7. В этом случае рисуются две гиперплоскости, называемые H1 и H2. Любая гиперплоскость имеет положительную сторону (1) и отрицательную сторону (0). Затем элементы помещаются в хэш-сегменты (в данном случае 4) в зависимости от того, с какой стороны они появляются относительно w.r.t. каждой гиперплоскости. Таким образом, количество сегментов хеширования определяется количеством нарисованных гиперплоскостей. После этого элементы должны только вычислить расстояние до элементов в пределах их собственного хэш-сегмента (или, в контексте самоконтроля, обращать внимание на элементы в том же хэш-сегменте).

Как видно из результирующих хэш-сегментов справа на рис. 7, возможно, что элементы, расположенные близко друг к другу, по-прежнему попадают в разные хеш-сегменты. Чтобы смягчить это, можно выполнить несколько раундов хеширования и присвоить каждое значение хешу, в котором оно чаще всего оказывается. Однако это усложняет алгоритм. Авторы показывают, что с 8 раундами хеширования модель достигает производительности, аналогичной модели глобального внимания.

Авторы используют вариант, называемый угловым LSH [10], который использует косинусное расстояние для вычисления расстояния между любыми двумя точками. Они показывают, что с высокой вероятностью две точки, расположенные близко друг к другу, окажутся в одном сегменте.

После разделения точек на корзины точки сортируются по корзинам. Однако некоторые ведра могут быть больше других. Самая большая корзина по-прежнему будет доминировать в требованиях к памяти, что является проблемой. По этой причине авторы разбивают сегменты на фиксированные фрагменты, так что требования к памяти зависят от размера фрагмента. Обратите внимание, что элементы могут оказаться не в том же блоке, что и другие элементы в своем сегменте. Элементы могут обслуживать все элементы в блоке, в котором они должны были оказаться, но не могут обслуживать самих себя (что добавляет небольшую постоянную стоимость к сложности), как показано в последней строке рисунка 7:

Это эффективно снижает сложность до O(n log n). Важно отметить, что большая константа 12⁸² введена из-за 8 раундов хеширования, которые удалены из сложности, поскольку она не зависит от n, что фактически приводит к тому, что реформатор становится более эффективным только тогда, когда входная последовательность очень длинный (›2048).

Внимание ядра

Ядро — это функция, которая принимает в качестве входных данных скалярное произведение двух векторов x и y в пространстве меньшей размерности и возвращает результат скалярного произведения в пространстве большей размерности. Это можно обобщить как функцию K (x, y) = φ (x) ᵀ φ (y), где K - функция ядра, а φ - отображение из пространства низкой размерности в пространство высокой размерности. Машины опорных векторов (SVM) являются хорошо известным примером этого в контексте машинного обучения. В частности, для эффективного само-внимания методы ядра основаны на представлении о том, что Softmax можно интерпретировать как ядро ​​и переписать так, чтобы мы могли избежать явного вычисления матрицы внимания A.

ИсполнительO(n)

Performer [11] основан на механизме, называемом быстрое внимание с помощью положительных ортогональных случайных признаков (или FAVOR+). Идея состоит в том, что мы можем использовать метод ядра для аппроксимации функции softmax.

Обычно при применении метода ядра мы хотим вычислить скалярное произведение в пространстве более высокой размерности. Этого можно добиться, используя соответствующую функцию ядра K (как мы делаем, например, в SVM ядра). Однако Performer делает обратное: мы уже знаем, что такое наша функция K (нелинейный softmax), и мы хотим найти φ, чтобы мы могли вычислить φ(x)ᵀφ(y) (которая является линейной). Мы можем визуализировать это, как показано на рисунке 8. В левой части мы видим нашу матрицу L*L A, умноженную на V (обратите внимание, что это всего лишь формула softmax(QKT)*V), и авторы ссылаются на длина последовательности как L вместо n). Вместо этого предлагаемый метод использует φ для прямого вычисления φ(Q) = Q’ и φ(K) = K’, что позволяет нам сначала умножить K и V и избежать дорогостоящего вычисления матрицы A.

Главный вопрос исследования становится следующим: как найти φ? Идея основана на случайных функциях Фурье [12]. Авторы указывают, что большинство ядер можно смоделировать с помощью общей функции, как показано в уравнении 4:

Здесь h — некоторая функция от x, m — параметр, определяющий точность аппроксимации, ω₁…ωₘ — случайные векторы (отсюда и случайная часть в FAVOR+), взятые из некоторого распределения D, а f₁…fₗ — детерминированные функции. Более высокое значение m приводит к лучшему приближению, поскольку оно определяет количество вычерченных ω.

Авторы доказывают, что ядро ​​Softmax можно аппроксимировать, выбрав значения, показанные в уравнении 5:

Теперь мы можем передать наши Q и K через функцию φ и взять скалярное произведение полученных матриц. Результатом этого будет то, как если бы мы сначала их перемножили, а потом взяли softmax. Поскольку мы можем независимо провести Q и K через φ, теперь мы можем сначала умножить K и V.

Однако есть еще одна проблема. В отличие от softmax, sin и cos могут иметь отрицательные значения, что приводит к тому, что дисперсия аппроксимации становится высокой, когда фактическое значение softmax близко к 0. Поскольку многие значения собственного внимания близки к 0, это проблема. . По этой причине авторы предлагают использовать различные функции, а именно те, что показаны в уравнении 6, которые выводят только положительные значения (отсюда и положительная часть в FAVOR+).

Наконец, авторы объясняют, что ортогональность ω приводит к еще меньшей дисперсии (отсюда и ортогональная часть в FAVOR+).

Альтернативы вниманию к себе

Очевидно, что существует множество исследований, посвященных повышению эффективности внимания к продуктам с масштабируемыми точками. Однако есть и другая альтернатива: вообще не использовать самовнимание, а вместо этого использовать более простой подход к обмену информацией между нашими токенами. Эта идея недавно была предложена во многих статьях ([13], [14], [15]). Мы обсудим один, так как общая идея очень похожа для всех этих работ.

FNetO(n)

FNet [15] представляет собой альтернативную архитектуру Transformer, которая полностью заменяет блоки внутреннего внимания дискретным преобразованием Фурье (DFT). Следовательно, больше нет обучаемых параметров, кроме слоев прямой связи. ДПФ разлагает сигнал на составляющие его частоты. Он определяется, как показано в уравнении 7:

Где N - количество компонентов. Когда N бесконечно, мы можем точно создать исходный сигнал. В контексте НЛП наш сигнал представляет собой последовательность токенов. По сути, каждый компонент n содержит некоторую информацию о каждой лексеме во входной последовательности.

Что интересно в их методе, так это не столько тот факт, что они используют DFT, сколько то, что они применяют линейное преобразование для смешивания своих токенов. Они также попробовали линейный энкодер, который очень похож на то, как работают модели синтезаторов, и даже полностью случайный энкодер. Хотя линейный энкодер имеет немного более высокую производительность, он имеет обучаемые параметры, что делает его медленнее, чем FNet. BERT-Base по-прежнему имеет значительно более высокий средний балл по GLUE, но они сообщают об ускорении обучения примерно в 7 раз. Поскольку существует множество возможных линейных преобразований, существует интересный открытый исследовательский вопрос о том, какое из них наиболее подходит для Трансформеров.

Ориентиры

Хотя все статьи, обсуждаемые в этом посте, сообщают о своих теоретических сложностях в отношении длины входной последовательности n, на практике некоторые из них все еще могут быть непрактичными из-за больших констант (например, Reformer) или из-за неэффективных реализаций. С этой целью Xformers использовался для расчета использования памяти и времени выполнения для различных длин последовательностей для ряда методов. Обратите внимание, что не все обсуждаемые методы реализованы в Xformers, а BlockSparse, к сожалению, не работал на моем GPU (RTX 3090).

Длинные последовательности (512, 1024, 2048):

Короткие последовательности (128, 256):

Очевидно, что все методы значительно более эффективны, чем SDP, для более длинных последовательностей. Хотя все сравниваемые здесь механизмы внимания (за исключением SDP) масштабируются линейно по отношению к длине последовательности, интересно видеть, что между механизмами все еще существуют заметные различия из-за констант и других факторов масштабирования. Примечательно, что Линформер не так хорошо масштабируется, как другие методы. Еще одним интересным результатом является использование памяти и время выполнения Nystromformer. Хотя он очень хорошо масштабируется, как видно на графиках для длин последовательностей (512, 1024, 2048), на самом деле это самый неэффективный метод для коротких последовательностей (128 и 256). Вероятно, это связано с количеством выбранных ориентиров, которое было сохранено на уровне 64, как это было предложено в [8].

Интересно отметить, что SDP работает очень похоже на другие методы для длин последовательностей до 512. Единственный метод, который заметно более эффективен, чем любой другой метод, — это FNet (внимание к смеси Фурье). Он почти полностью не зависит от длины последовательности, но при этом не имеет существенных констант для рассмотрения.

Заключение

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

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

[1] Ашиш Васвани, Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Ллион Джонс, Эйдан Н. Гомес, Лукаш Кайзер и Илья Полосухин. Внимание - это все, что вам нужно, 2017.

[2] Девлин, Дж., Чанг, М., Ли, К., и Тутанова, К. БЕРТ: Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка, 2018.

[3] Браун, Т. Б., Манн, Б., Райдер, Н., Суббиа, М., Каплан, Дж., Дхаривал, П., Нилакантан, А., Шьям, П., Састри, Г., Аскелл, А. ., Агарвал С., Крюгер Г., Хениган Т., Чайлд Р., Рамеш А., Зиглер Д. М., Ву Дж., Винтер К., Гессе К., . . . Амодей, Д. . Языковые модели — это малоуспешные учащиеся, 2020 г.

[4] Томас Миколов, Кай Чен, Грег Коррадо и Джеффри Дин. Эффективная оценка представлений слов в векторном пространстве, 2013.

[5] Чайлд Р., Грей С., Рэдфорд А. и Суцкевер И. Создание длинных последовательностей с помощью разреженных преобразователей, 2019 г.

[6] Из Бельтаги, Мэтью Э. Питерс и Арман Кохан. Longformer: трансформер длинных документов, 2020 г.

[7] Ван, С., Ли, Б.З., Хабса, М., Фанг, Х., и Ма, Х. Линформер: Самостоятельное внимание с линейной сложностью, 2020.

[8] Xiong, Y., Zeng, Z., Chakraborty, R., Tan, M., Fung, G., Li, Y., & Singh, V. Nystromformer: основанный на Nystrom алгоритм для аппроксимации собственного внимания. . 2021.

[9] Никита Китаев, Лукаш Кайзер и Ансельм Левская. Реформер: эффективный трансформатор, 2020.

[10] Александр Андони, Петр Индик, Тейс Лаарховен, Илья Разенштейн и Людвиг Шмидт. Практичная и оптимальная лш по угловому расстоянию, 2015.

[11] Хоромански К., Лихошерстов В., Дохан Д., Сонг Х., Гейн А., Сарлос Т., Хокинс П., Дэвис Дж., Мохиуддин А., Кайзер, Л., Белэнджер Д., Колвелл Л. и Веллер А. Переосмысление внимания с помощью исполнителей, 2020 г.

[12] Али Рахими, Бенджамин Рехт. Случайные функции для крупномасштабных машин с ядром, 2007 г.

[13] Тай, Ю., Бахри, Д., Мецлер, Д., Хуан, Д., Чжао, З. и Чжэн, К. Синтезатор: переосмысление само-внимания в моделях-трансформерах. 2020.

[14] Толстихин И., Хоулсби Н., Колесников А., Бейер Л., Жай X., Унтертинер Т., Юнг Дж., Штайнер А., Кейзерс Д., Ушкорейт, Дж., Лучич М. и Досовицкий А. MLP-Mixer: полностью основанная на MLP архитектура для машинного зрения, 2021 г.

[15] Эйнсли, Дж., Экштейн, И., и Онтанон, С. FNet: смешивание токенов с преобразованиями Фурье, 2021.