Архитектура трансформатора решает обе проблемы с помощью механизма внимания. Механизм внимания позволяет модели взвешивать важность различных входных токенов при создании каждого выходного токена. Это похоже на генерирование ответов, ссылаясь на любую страницу в книге. В то время как механизм внимания часто ассоциируется с моделью трансформатора, он был представлен за три года до статьи о трансформаторе. Механизм внимания также может быть использован с другими архитектурами. В 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. Однако существуют методы, которые увеличивают длину контекста модели без увеличения числа индексов позиции.
Выходной слой после трансформаторных блоков сопоставляет выходные векторы модели с вероятностями маркеров, используемыми для выборки выходных данных модели (обсуждается в разделе «Выборка» на стр. 88). Этот модуль обычно состоит из одной матрицы, которая также называется слоем отвержения. Некоторые люди называют выходной слой головкой модели, так как это последний слой модели перед генерацией выходных данных.
Размер модели трансформатора определяется размерами его строительных блоков. Вот некоторые из ключевых ценностей: размерность модели определяет размеры матриц проекции ключа, запроса, значения и вывода в блоке трансформатора; количество трансформаторных блоков; размер слоя прямой связи; объем словарного запаса.
Чем больше значения размеров, тем больше размеры модели. Обратите внимание, что хотя увеличенная длина контекста влияет на объем памяти, занимаемый моделью, она не влияет на общее количество параметров модели.
Несмотря на то, что модель трансформера доминирует в ландшафте, это не единственная архитектура. С тех пор, как в 2012 году AlexNet возродил интерес к глубокому обучению, многие архитектурные архитектуры то входили, то выходили из моды. Seq2seq был в центре внимания в течение четырех лет (2014–2018). GAN (генеративно-состязательные сети) захватили коллективное воображение немного дольше (2014–2019). По сравнению с архитектурами, которые были до него, трансформатор липкий. Он существует с 2017 года. Сколько времени пройдет, прежде чем появится что-то лучшее? Разработать новую архитектуру, способную превзойти трансформаторы, непросто. С 2017 года трансформатор подвергается серьезной оптимизации. Новая архитектура, которая призвана заменить трансформатор, должна будет работать в том масштабе, который важен для людей, на оборудовании, которое их интересует.
Тем не менее, надежда есть. В то время как модели, основанные на трансформаторах, доминируют, несколько альтернативных архитектур набирают обороты.
Одной из популярных моделей является RWKV, модель на основе RNN, которую можно распараллелить для обучения. Из-за своей природы RNN, теоретически, она не имеет такого же ограничения по длине контекста, как модели на основе трансформаторов. Однако на практике отсутствие ограничений по длине контекста не гарантирует хорошей производительности при длительном контексте. Моделирование длинных последовательностей остается основной проблемой при разработке LLM. Архитектура, которая показала большие перспективы в области памяти дальнего действия, – это SSM (модели пространства состояний). С момента появления архитектуры в 2021 году было внедрено несколько методов, которые делают архитектуру более эффективной, лучше справляется с обработкой длинных последовательностей и масштабируется для моделей больших размеров. Вот некоторые из этих методов, чтобы проиллюстрировать эволюцию новой архитектуры: S4 был разработан для повышения эффективности SSM; H3 включает в себя механизм, который позволяет модели вспоминать ранние лексемы и сравнивать лексемы в разных последовательностях, назначение этого механизма схоже с назначением механизма внимания в архитектуре трансформатора, но он более эффективен; Mamba масштабирует SSM до трех миллиардов параметров. По моделированию языка Mamba-3B превосходит трансформаторы того же размера и соответствует трансформаторам в два раза больше по размеру. Авторы также показывают, что вычисления вывода Mamba масштабируются линейно с длиной последовательности (по сравнению с квадратичным масштабированием для трансформаторов), его производительность демонстрирует улучшение на реальных данных с последовательностями длиной до миллиона; Jamba чередует блоки слоев transformer и Mamba для дальнейшего масштабирования SSM. Авторы выпустили смешанную модель с 52 млрд общих доступных параметров (12 млрд активных параметров), предназначенную для размещения в одном графическом процессоре емкостью 80 ГБ. Jamba демонстрирует высокую производительность в тестах стандартной языковой модели и оценке длинного контекста при длине контекста до 256 тыс. токенов. Он также занимает мало памяти по сравнению с ванильными трансформаторами.
Несмотря на то, что сложно разработать архитектуру, которая превосходит трансформатор по своим характеристикам, учитывая его многочисленные ограничения, для этого есть много стимулов. Если другая архитектура действительно обгонит трансформатор, некоторые методы адаптации моделей, обсуждаемые в этой книге, могут измениться. Тем не менее точно так же, как переход от инженерии машинного обучения к инженерии искусственного интеллекта оставил многие вещи неизменными, изменение архитектуры базовой модели не изменит фундаментальные подходы.
Большая часть прогресса в области искусственного интеллекта в последние годы может быть связана с увеличением размера модели. Сложно говорить о моделях фундаментов, не сказав о количестве их параметров. Количество параметров обычно добавляется в конце названия модели. Например, Llama-13B относится к версии Llama, модельного семейства, разработанного компанией Meta, с 13 миллиардами параметров.
В целом, увеличение параметров модели увеличивает ее способность к обучению, что приводит к улучшению моделей. При наличии двух моделей одного и того же семейства моделей, модель с 13 миллиардами параметров, скорее всего, будет работать намного лучше, чем модель с 7 миллиардами параметров. По мере того, как сообщество лучше понимает, как обучать большие модели, модели нового поколения, как правило, превосходят модели старого поколения того же размера. Например, Llama 3-8B (2024) превосходит даже Llama 2-70B (2023) в бенчмарке MMLU.
Количество параметров помогает нам оценить вычислительные ресурсы, необходимые для обучения и запуска этой модели. Например, если модель имеет 7 миллиардов параметров, и каждый параметр хранится с использованием 2 байт (16 бит), то мы можем вычислить, что память графического процессора, необходимая для вывода с использованием этой модели, будет составлять не менее 14 миллиардов байт (14 ГБ). Количество параметров может ввести в заблуждение, если модель разрежена. Разреженная модель имеет большой процент нулевых параметров. Модель с 7B-параметрами, которая на 90% разрежена, имеет только 700 миллионов ненулевых параметров. Разреженность позволяет более эффективно хранить данные и выполнять вычисления. Это означает, что для большой разреженной модели может потребоваться меньше вычислительных ресурсов, чем для небольшой модели с высокой плотностью.
Одним из типов разреженных моделей, который приобрел популярность в последние годы, является смесь экспертов (MoE). Модель МО делится на различные группы параметров, и каждая из них является экспертной. Только подмножество экспертов активно (используется для) обработки каждого токена.
Например, Mixtral 8x7B – это смесь из восьми экспертов, каждый из которых обладает семью миллиардами параметров. Если нет двух экспертов с общим параметром, то он должен иметь 8 × 7 миллиардов = 56 миллиардов. Однако из-за того, что некоторые параметры являются общими, у него всего 46,7 миллиарда.
На каждом слое, для каждого токена, активны только два эксперта. Это означает, что для каждого токена активны только 12,9 млрд параметров. Хотя эта модель имеет 46,7 миллиарда параметров, ее стоимость и скорость такие же, как у модели с 12,9 миллиардами параметров.
Большая модель также может уступать по производительности меньшей модели, если она не обучена на достаточном количестве данных. Представьте себе модель 13B-параметров, обученную на наборе данных, состоящем из одного предложения: «Мне нравятся ананасы». Эта модель будет работать намного хуже, чем модель гораздо меньшего размера, обученная на большем количестве данных.
При обсуждении размера модели важно учитывать размер данных, на которых она была обучена. Для большинства моделей размеры наборов данных измеряются количеством обучающих выборок. Например, Flamingo от Google был обучен с использованием четырех наборов данных, один из которых имеет 1,8 миллиарда пар (изображение, текст), а другой – 312 миллионов пар (изображение, текст).
Для языковых моделей обучающей выборкой может быть предложение, страница в Википедии, беседа в чате или книга. Книга стоит гораздо больше, чем предложение, поэтому количество обучающих выборок больше не является хорошей метрикой для измерения размеров наборов данных. Более точным показателем является количество токенов в наборе данных.
Количество токенов также не является идеальным измерением, так как разные модели могут иметь разные процессы токенизации, в результате чего один и тот же набор данных имеет разное количество токенов для разных моделей. Почему бы просто не использовать количество слов или количество букв? Поскольку маркер – это единица, с которой работает модель, знание количества маркеров в наборе данных помогает нам измерить, сколько модель потенциально может извлечь уроков из этих данных.
LLM обучаются с использованием наборов данных в размере триллионов токенов. Meta использовала все более крупные наборы данных для обучения своих моделей лам: 1,4 триллиона токенов для Llama 1; 2 триллиона токенов для Llama 2; 15 триллионов токенов для Llama 3.
Набор данных с открытым исходным кодом Together RedPajama-v2 содержит 30 триллионов токенов. Это эквивалентно 450 миллионам книг или в 5400 раз большему размеру Википедии. Однако, поскольку RedPajama-v2 состоит из неразборчивого контента, объем высококачественных данных значительно ниже.
Количество маркеров в наборе данных модели не совпадает с количеством маркеров обучения. Количество обучающих маркеров измеряет маркеры, на которых обучается модель. Если набор данных содержит 1 триллион токенов и модель обучается на этом наборе данных в течение двух эпох (эпоха – это проход по набору данных), то количество токенов для обучения составляет 2 триллиона.
Хотя основное внимание уделяется масштабу данных, важно не только количество. Качество и разнообразие данных также имеют значение. Количество, качество и разнообразие – вот три золотые цели для обучающих данных.
Для предварительного обучения больших моделей требуются вычислительные ресурсы. Один из способов измерить объем необходимых вычислительных ресурсов – рассмотреть количество машин, например, графических процессоров, центральных процессоров и TPU. Однако разные машины имеют очень разную мощность и стоимость. Графический процессор NVIDIA A10 отличается от графического процессора NVIDIA H100 и процессора Intel Core Ultra.
Более стандартизированной единицей измерения требований к вычислительным ресурсам модели является FLOP или операция с плавающей запятой. FLOP измеряет количество операций с плавающей запятой, выполненных для определенной задачи. Например, крупнейшая модель PaLM-2 от Google была обучена с использованием 10^22 FLOP. GPT-3-175B обучали с использованием 3,14 × 10^23 FLOPs.
Множественное число FLOP, FLOPS, часто путают с FLOP/s, операциями с плавающей запятой в секунду. FLOP измеряет потребность в вычислительных ресурсах для выполнения задачи, в то время как FLOP/s измеряет пиковую производительность машины. Например, графический процессор NVIDIA H100 NVL может выдавать максимум 60 терафлопс/с: 6 × 10^13 флопс в секунду или 5.2 × 10^18 FLOP в день. Будьте бдительны из-за запутанных обозначений. FLOP/s часто записывается как FLOPS, что похоже на FLOPS. Чтобы избежать этой путаницы, некоторые компании, в том числе OpenAI, используют FLOP/s-day вместо FLOP для измерения требований к вычислительным ресурсам: 1 FLOP/s-day = 60 × 60 × 24 = 86 400 FLOPs.
Чаще используются FLOP для подсчета операций с плавающей запятой и FLOP/s для FLOP в секунду. Предположим, что у вас есть 256 процессоров H100. Если вы сможете использовать их на полную мощность и не допустите ошибок при тренировке, вам потребуется (3,14 × 1023) / (256 × 5,2 × 1018) = ~236 дней, или примерно 7,8 месяцев, чтобы обучить GPT-3-175B.
Тем не менее, маловероятно, что вы сможете использовать свои машины на максимальной мощности все время. Коэффициент использования измеряет, какую часть максимальной вычислительной мощности вы можете использовать. То, что считается хорошим использованием, зависит от модели, рабочей нагрузки и оборудования. Как правило, если вы можете получить половину заявленной производительности, 50% использования, у вас все в порядке. Все, что превышает 70% использования, считается отличным. Не позволяйте этому правилу помешать вам получить еще более высокую загрузку.
При использовании 70% и 2 долларах в час за один H100, обучение GPT-3-175B будет стоить более 4 миллионов долларов: $2/H100/час × 256 H100 × 24 часа × 256 дней / 0.7 = $4142811.43
Таким образом, три числа указывают на масштаб модели: количество параметров, которое является показателем способности модели к обучению; количество токенов, на которых была обучена модель, которое является показателем того, сколько модель обучила; количество FLOP, которое является показателем стоимости обучения.
О проекте
О подписке
Другие проекты