реклама
Бургер менюБургер меню

Денис Соломатин – Искусственный интеллект от А до Б (страница 32)

18

Наиболее доминирующей архитектурой для моделей оснований, основанных на языке, является архитектура трансформера (Vaswani с соавторами, 2017), которая основана на механизме внимания. Он устраняет многие ограничения предыдущих архитектур, которые способствовали его популярности. Однако архитектура трансформатора имеет свои ограничения. В этом разделе анализируется архитектура трансформатора и ее альтернативы. Поскольку он углубляется в технические детали различных архитектур, он может быть технически сложным. Если вы обнаружите какую-либо часть слишком глубоко в сорняках, не стесняйтесь пропустить ее.

Чтобы разобраться в трансформаторе, давайте посмотрим на проблему, для решения которой он был создан. Архитектура трансформатора была популяризирована вслед за успехом архитектуры seq2seq (sequence-to-sequence). На момент своего появления в 2014 году seq2seq обеспечил значительное улучшение в решении сложных на тот момент задач: машинный перевод и обобщение. В 2016 году Google включил seq2seq в Google Translate, обновление, которое, по их утверждению, дало им «самые большие на сегодняшний день улучшения качества машинного перевода». Это вызвало большой интерес к seq2seq, что сделало его незаменимой архитектурой для задач, связанных с последовательностями текста.

На высоком уровне seq2seq содержит энкодер, который обрабатывает входные данные, и декодер, который генерирует выходы. Как входы, так и выходы представляют собой последовательности токенов, отсюда и название. Seq2seq использует RNN (рекуррентные нейронные сети) в качестве кодировщика и декодера. В своей самой простой форме кодировщик обрабатывает входные токены последовательно, выводя окончательное скрытое состояние, представляющее входные данные. Затем декодер последовательно генерирует выходные маркеры, обусловленные как конечным скрытым состоянием входа, так и ранее сгенерированным маркером.

Есть две проблемы с seq2seq, которые решают Vaswani с соавторами (2017). Во-первых, ванильный декодер seq2seq генерирует выходные токены, используя только окончательное скрытое состояние входа. Интуитивно это похоже на генерирование ответов о книге с помощью краткого описания книги. Это ограничивает качество генерируемых выходных данных. Во-вторых, кодировщик и декодер RNN означают, что обработка и генерация входных данных и вывода выполняются последовательно, что замедляет работу при работе с длинными последовательностями. Если вход имеет длину 200 токенов, seq2seq должен дождаться завершения обработки каждого входного токена, прежде чем перейти к следующему.

Архитектура трансформатора решает обе проблемы с помощью механизма внимания. Механизм внимания позволяет модели взвешивать важность различных входных токенов при создании каждого выходного токена. Это похоже на генерирование ответов, ссылаясь на любую страницу в книге. В то время как механизм внимания часто ассоциируется с моделью трансформатора, он был представлен за три года до статьи о трансформаторе. Механизм внимания также может быть использован с другими архитектурами. В 2016 году Google использовал механизм внимания в своей архитектуре seq2seq для своей модели GNMT (Google Neural Machine Translation). Тем не менее только после того, как статья о трансформаторе показала, что механизм внимания может быть использован без RNN, он взлетел.

Архитектура трансформатора полностью исключает использование RNN. С помощью трансформаторов входные токены могут обрабатываться параллельно, что значительно ускоряет обработку входных данных. В то время как трансформер устраняет узкое место последовательного ввода, языковые модели на основе авторегрессии на основе трансформеров по-прежнему имеют узкое место последовательного вывода.

Таким образом, вывод для языковых моделей, основанных на трансформерах, состоит из двух этапов:

1. Предварительное заполнение.

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

2. Расшифровывание.

Модель генерирует по одному выходному маркеру за раз.

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

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

Вектор запроса (Q) представляет текущее состояние декодера на каждом шаге декодирования. Используя тот же пример с кратким изложением книги, этот вектор запроса можно представить как человека, ищущего информацию для создания резюме.

Каждый ключевой вектор (K) представляет предыдущую лексему. Если каждый предыдущий токен является страницей в книге, то каждый вектор ключа подобен номеру страницы. Обратите внимание, что на данном этапе декодирования предыдущие маркеры включают как входные маркеры, так и ранее созданные маркеры.

Каждый вектор значений (V) представляет фактическое значение предыдущего маркера, полученное моделью. Каждый вектор значений подобен содержимому страницы.

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

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

Давайте разберемся, как работает функция внимания. Для входных данных x векторы ключа, значения и запроса вычисляются путем применения матриц ключей, значений и запросов к входным данным. Пусть WK, WV и WQ будут матрицами ключей, значений и запросов. Векторы ключа, значения и запроса вычисляются следующим образом: K = xWK; V = xWV; Q = xWQ. Матрицы запросов, ключей и значений имеют измерения, соответствующие скрытому измерению модели. Например, в Llama 2-7B размер скрытой размерности модели равен 4096, что означает, что каждая из этих матриц имеет размерность 4096 × 4096. Каждый результирующий вектор K, V, Q имеет размерность 4096.

Механизм внимания почти всегда многоголовый. Несколько головок позволяют модели одновременно обслуживать разные группы предыдущих токенов. При многоголовом внимании векторы запроса, ключа и значения разбиваются на более мелкие векторы, каждый из которых соответствует голове внимания. В случае ламы 2-7B, поскольку у нее 32 головы внимания, каждый вектор K, V и Q будет разбит на 32 вектора размерности 128. Это связано с тем, что 4096 / 32 = 128. Attention(Q, K, V ) = softmax( Q K T )V.

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

Трансформаторный блок. Теперь, когда мы обсудили, как работает внимание, давайте посмотрим, как оно используется в модели. Архитектура трансформатора состоит из нескольких трансформаторных блоков. Точное содержимое блока варьируется от модели к модели, но, в целом, каждый трансформаторный блок содержит модуль внимания и модуль MLP (многослойный персептрон). Каждый модуль внимания состоит из четырех весовых матриц: запроса, ключа, значения и проекции вывода. Модуль MLP состоит из линейных слоев, разделенных нелинейными функциями активации. Каждый линейный слой представляет собой весовую матрицу, которая используется для линейных преобразований, в то время как функция активации позволяет линейным слоям изучать нелинейные закономерности. Линейный слой также называется слоем с прямой связью.

Распространенными нелинейными функциями являются ReLU, выпрямленная линейная единица (Agarap, 2018) и GELU (Hendrycks and Gimpel, 2016), которая использовалась в GPT-2 и GPT-3 соответственно. Функции действий очень просты. Например, все, что делает ReLU, – это преобразует отрицательные значения в 0. Математически это записывается как: ReLU(x) = max(0, x).

Количество трансформаторных блоков в модели трансформатора часто называют количеством слоев в этой модели. Языковая модель, основанная на трансформерах, также снабжена модулем до и после всех блоков трансформеров. Встраиваемый модуль перед трансформаторными блоками состоит из матрицы вложения и матрицы позиционного встраивания, которые преобразуют токены и их позиции в векторы вложения соответственно. Наивно считается, что количество индексов позиции определяет максимальную длину контекста модели. Например, если модель отслеживает 2 048 позиций, ее максимальная длина контекста равна 2 048. Однако существуют методы, которые увеличивают длину контекста модели без увеличения числа индексов позиции.