Краткий обзор будущего развития современных архитектур для NLP.
Фото:Jocelyn MoralesonUnsplash
На дворе 2017 год, и в документе «Внимание — это все, что вам нужно» представлена новая многообещающая архитектура НЛП: Преобразователь. Четыре года спустя — вечность в глубоком обучении — Transformer по-прежнему представляет собой современную архитектуру, используемую для множества задач НЛП. Но мир не стоит на месте — по крайней мере, в этой области, и многие газеты подхватили Трансформер и предложили новые пути для дальнейшего развития. Я хотел бы обсудить некоторые перспективные здесь.
Начнем с статей, уже опубликованных в 2019 году:Transformer XL: Attentive Language Models Beyond a Fixed-Length Context".Следующая статья будет"Реформатор. высокоэффективный преобразователь", а затем самая последняя статья (июнь 2021 г.)".Упаковка. На пути к 2-кратному ускорению NLP BERT"Будет обсуждаться.
Есть еще много многообещающих работ по «Трансформерам», но мне пришлось сделать выбор, чтобы эта не вышла за рамки. Надеюсь, я не был несправедлив к авторам ни одной из статей ?!
Трансформер-XL. Внимательные языковые модели за пределами контекстов фиксированной длины
В этой статье обсуждаются ограниченные возможности Transformer для обработки текста, не имеющего фиксированной длины. Стандартный Transformer использует максимальную длину, усечение и заполнение для обработки различной длины последовательности. В то же время эта фиксированная длина является препятствием для расширенного обучения зависимостям, при котором механизм внимания схватывает связи за пределами этого предела.
Хотя краткосрочные зависимости могут не быть проблемой для большинства случаев использования, ограничение фиксированной длины может снизить производительность из-за усечения и его свойства не соблюдать семантические границы. Авторы называют это фрагментацией контекста.
Их решение звучит просто: не вычисляя скрытое состояние с нуля, последнее состояние можно использовать в качестве состояния памяти для текущего сегмента. При таком постоянном соединении информация не теряется, а передается из одного состояния в другое. Это, очевидно, решает проблему потери семантической информации и приводит к долговременным зависимостям.
По сравнению с воображаемым преобразователем его изменение можно найти в слое внимания. Ключи и значения будут расширены кешем в предыдущем сегменте. Я не буду вдаваться в подробности. Но я настоятельно рекомендую вам прочитать главу _Повторение на уровне сегментов с повторным использованием состояния_ в документе Transformer XL.
Использование кеша предыдущих фрагментов в слое внимания требует некоторых дополнительных изменений. Вопрос автора: "[…] Как мы можем сохранить информацию о местоположении согласованной при повторном использовании состояния?"(Dai, et al. 2019). Хотя в "Трансформерах" по умолчанию порядок следования обеспечивается позиционным кодированием. При использовании кеша позиционное кодирование предыдущего состояния (о котором мы только что говорили) не учитывается .. Это приводит к снижению производительности. Чтобы решить эту проблему, подход авторов состоит в том, чтобы кодировать только информацию об относительном положении в скрытом состоянии и вводить ее в показатель внимания. С их точки зрения, этот подход более интуитивен.
Например, когда вектор запроса qτ,i фокусируется на ключевом вектореkКогда τ,≤i, ему не нужно знать абсолютное положение каждого ключевого вектора, чтобы идентифицировать временной порядок сегментов.(Dai, et al. 2019)
Относительных расстояний достаточно, векторы запросов могут различать элементы по разным расстояниям. Кроме того, абсолютное положение также может быть получено из относительного расстояния. Пожалуйста, прочитайте больше об этом в оригинальной статье.
Подведем итог: улучшение механизма внимания за счет кеширования предыдущего сегмента кажется многообещающим шагом. Не только это, но и увеличение долгосрочных зависимостей, а также борьба с проблемой контекстной поломки, которая возникает из-за сегментации текста.
Фото:Jocelyn MoralesonUnsplash
Реформа. Эффективное преобразование
Трансформеры – это огромные модели с большим количеством параметров. Обучить их с нуля на самом деле может только промышленность или аналогичные крупные корпорации. К счастью, мы можем использовать предварительно обученную модель, такую как BERT. Но даже 24-уровневую версию BERT сложно обучить на системе с одним GPU. Преобразователи должны стать более эффективными, если мы не хотим, чтобы эта модель в конечном итоге обучалась и управлялась только крупными сотрудничающими учреждениями.
Китаев, Кайзер и Левшая — авторы статьи «Реформатор» — вносят три изменения, которые должны решить вышеуказанные проблемы.
- При использовании обратимого слоя для всей модели сохраняется только одна копия активаций. Это уменьшит объем памяти, необходимый для хранения активаций, в _N раз. _
- Разделение активаций внутри слоев прямой связи и их обработка в виде блоков помогает уменьшить объем памяти, необходимой для этих слоев. Уровни прямой связи обычно намного шире, чем уровни внимания и т. д., и поэтому несут ответственность за высокий уровень использования памяти.
- Используя зависящее от положения хеш-внимание, измените коэффициент внутри слоя внимания с _O(L²)_ на _O(L log L)_
Авторы убеждены в том, что «_ [...] эти методы [...] имеют незначительное влияние на процесс обучения по сравнению со стандартными деформациями» (Kitaev, et al. 2020). Я собираюсь поговорить о первых и последних идеях - они самые интересные на мой взгляд. Чтобы не идти слишком далеко, второй метод не будет обсуждаться.
Инверторный трансформатор
в их бумаге.Обратимая остаточная сеть работает. гОбратимые остаточные сети (RevNets) были предложены omez et al. Идея состоит в том, что каждая активация может быть получена со следующего уровня без необходимости хранения во время обратного распространения — обмен вычислений на больший объем памяти. Остаточные слои (также называемые пропускными соединениями) выполняют функцию, которая работает с одним входом и одним выходом.
Обратимый слой работает на двух входах.
с этими уравнениями (и обращенными через подслои).
В контексте обратимого _преобразователя_ это означает, что уровень прямой связи_(G_) и уровень внимания_(F_) объединены в обратимом блоке.
Y₁ = X₁ + Внимание (X₂) and Y₂ = X₂ + прямая связь (Y₁)
В этой реализации больше не требуется активация хранилища, что позволяет экономить память. Даже если это означает немного больше вычислений.
Хеширование внимания с учетом местоположения
Ядром преобразователя является механизм внимания. Недаром оригинал статьи назывался _Внимание — это все, что вам нужно. _ Поэтому разработка методов повышения эффективности этого механизма является лишь вопросом времени.
В стандартном Transformer внимание используется для масштабирования умножения точек.
Входные данные содержат запрос, ключ и значение. Скалярный продукт всех запросов и ключей вычисляется перед масштабированием. После этого применяется функция softmax. Наконец, матричное умножение промежуточной матрицы и матрицы ценности дает оценку внимания.
Авторы искали более эффективный механизм внимания и предложили _Location Sensitive Hash Attention (LSH).идея. Его цель — уменьшить сложность с _O(L²)до _O (L log L). _ Грубо говоря, цель этого алгоритма состоит в том, чтобы сгруппировать точки данных в так называемые сегменты, чтобы точки данных, которые находятся близко друг к другу, получили одинаковое значение хеш-функции — с высокой вероятностью. По сравнению с другими методами хэширования коллизии хэшей максимизируются, а не минимизируются. С помощью ближайших соседей мы можем сосредоточиться на ключах, близких к запросу.
Ниже вы можете увидеть внимание LSH, предложенное в документе.
Уравнение для одной позиции запроса i
_P"_ относится к набору, в котором находится "_i"_,"z "Представляет функцию распределения.LSHИдея, лежащая в основе элементов коллекции _P_, ограничивается сосредоточением внимания на отдельных элементах хэш-контейнера.
LSHВ качестве приближения к полному вниманию можно уменьшить использование памяти за счет увеличения вычислительных затрат, которые увеличиваются с увеличением количества хэшей. Мы надеемся, что это упростит использование больших конвертеров, а не только учреждений, работающих на нескольких графических процессорах.
Упаковка. На пути к 2-кратному ускорению NLP BERT
Как уже говорилось, предварительное обучение BERT возможно только для крупных промышленных или исследовательских учреждений из-за его большой потребности в вычислительной мощности. Авторы Косек, Фу и Крелл надеются уменьшить этот барьер, удалив наполнители для повышения эффективности. Они предлагают алгоритм, который ускоряет предварительное обучение в 2 раза, используя набор данных Википедии.
Работа с символами заполнения может рассматриваться как вычислительная трата. Чем шире распределение длины текста, тем больше вычислений теряется в процессе. Метод-оболочка предполагает, что каждая длина последовательности будет полностью дополнена, поэтому необходимость заполнения отпадает. Идея основана на предположении, что последовательности взаимозаменяемы, поэтому порядок не имеет значения. Методы переноса — классическая проблема программирования.(бин-упаковкаилипроблема с раскроем запаса). Поскольку проблема специфична для НЛП, предлагаются два алгоритма.
- Самая короткая упаковка для первой упаковки гистограммы (SPFHP)
- Пакет гистограмм неотрицательных наименьших квадратов (NNLSHP).
Не важно разбираться в деталях этих алгоритмов, важнее анализировать проблемы, вызванные упаковкой. Авторы проделывают большую работу, подробно рассматривая эти вопросы. Давайте поговорим о них.
Как следует из названия, BERT (представления двунаправленного кодировщика от трансформаторов) использует двунаправленное внутреннее внимание. Однако упаковка — для заполнения сегментов, не оставляя места для заполнения — создает сегменты без соответствующих последовательностей. Языковые модели со случайным вниманием, такие как GPT3, не сталкиваются с этой проблемой, поскольку они замечают только предыдущие токены. В документе вводится маска для слоя внимания, чтобы предотвратить загрязнение между различными последовательностями. Давайте взглянем на часть кода, представленного в статье.
mask = np.array([[1, 1, 1, 2, 2]]) # input
#for use with softmax:
Эта реализация создает блочную диагональную маску с уменьшенным отступом, которую можно легко реализовать с помощью таких фреймворков, как numpy. _
Другой задачей для упаковки - это расчет потери и точности. В Берте потерю кросс-энтропии вычисляется последовательно. Когда используется упаковка, потеря больше не рассчитывается для последовательностей. Модель сходится к другому оптимальному состоянию. Решить эту проблему, идея автора есть.
«Чтобы добиться потери для каждой последовательности, мы эффективно «распаковываем» входящий журнал и метки, используя потери для каждой метки. Мы вычисляем потери для всех меток, принадлежащих первой последовательности, затем для тех, последовательность и так далее"(Косек и др., 2021 г.).
В статье есть хороший пример кода, объясняющий, как они реализованы — посмотрите его.
В отличие от двух других статей метод упаковки направлен на оптимизацию предварительной подготовки. Несмотря на то, что этот процесс может занять много времени и денег, показанные здесь улучшения являются многообещающими.
Теперь, когда мы рассмотрели различные способы улучшения Transformer, следует сказать, что все они являются эксклюзивными идеями для оптимизации производительности, а не качества вывода. Вероятно, это связано с моим выбором, а также с тем, что Transformer как перспективная архитектура все чаще используется только крупными компаниями или, по крайней мере, создается ими. GTP3 является ярким примером этого.
Я надеюсь, что эти описания понятны и просты для понимания. Некоторые из объясненных понятий не особенно просты для понимания, поэтому само объяснение — не самая простая задача. Спасибо, что дочитали до конца. Увидимся в следующий раз - пока.