Введение
В последнее время только ленивый не говорит про революцию ИИ (искусственный интеллект), искусственные нейронные сети позволяют создавать сервисы, которые 10 лет назад показались бы фантастикой. Ведение диалогов, генерация и редактирование медиа-контента, написание программного кода, анализ и синтез речи и даже сдача университетских экзаменов — впечатляющий и далеко не полный перечень того, что научились делать ML-модели (Machine Learning) за считанные годы. Важную роль в этом сыграло появление "внимания-на-себя" (self-attention) и архитектуры трансформер (Transformer) для обработки последовательностей, которые позволили решить сразу несколько ключевых проблем, присущих доминировавшим в области RNN. Рождение трансформера совпало с началом активного внедрения переноса обучения (transfer learning) в области обработки текстов (Natural Language Processing), и довольно быстро предобученный (pre-trained) трансформер с возможностью дообучения (fine-tuning) стал стандартом как в индустрии, так и в науке. За последние 4-5 лет было выпущено множество работ, посвященных
обучению новых моделей на новых датасетах;
разработке архитектурных улучшений исходного трансформера и его частей;
оптимизации работы self-attention;
симбиозу фрагментов трансформера и других архитектур;
увеличению длины обрабатываемых последовательностей;
поиску новых способов дообучения и настройки моделей;
применению трансформеров на нетекстовых данных;
созданию мультимодальных моделей.
Ориентироваться в потоке статей, моделей и подходов стало непросто даже вовлечённым специалистам. 2022 год получился крайне богатым на новинки, 2023 идёт в том же русле. Некоторое время назад я понял, что надо бы а) внимательнее изучить те работы, что я пропустил или проглядел мельком; б) лучше структурировать всю информацию о моделях и разных практических техниках, которая у меня накопилась за последние годы. К моменту завершения этой созидательной деятельности родилась мысль как-то оформить хотя бы часть результатов и поделиться с сообществом, что и привело к созданию этой статьи.
Первая и наиболее очевидная идея — собрать структурированный список моделей на основе архитектуры трансформера, которые были созданы и опубликованы за последние несколько лет для разных предметных областей и типов данных. Об этом дальше и пойдёт речь.
Несколько моментов, которые стоит предварительно отметить.
Список моделей в природе далеко не первый: когда я задумался о публикации и решил поискать материалы по теме, то нашел эту статью, дополняющую её таблицу, вот этот репозиторий (и наверняка я ещё плохо искал). Они полезны, но я бы хотел дать чуть больше информации о моделях и сделать это именно на русском языке. Указанные ресурсы, как и другие подобные, не использовались явно при написании этой статьи, она полностью авторская и оригинальная.
Это обзор для специалистов и людей, у которых ни одно из написанных ранее слов не вызвало вопросов. Если хочется просто разобраться в том, как работает трансформер, или почитать очередной верхнеуровневый пост про ChatGPT в бизнесе, то стоит обратиться к соответствующим статьям.
Основной источник информации — публикации работ на arXiv, на них даются ссылки. Естественно, есть ещё исходный код, документация и поясняющие статьи на хабре, medium и подобных ресурсах, но они скорее уточняли моё понимание в неоднозначных случаях, чем привнесли какой-то содержание, так что отдельных ссылок на них не будет, если эти источники не являются основными.
В качестве исключения не могу не сослаться на прекрасный телеграм-канал gonzo-обзоры ML статей, посты которого помогли мне разобраться в нескольких особенно непонятных моментах.
Работы разбиты по категориям, которые я посчитал более-менее логичными для себя, они условны, и некоторые модели могли бы честно относиться сразу к нескольким из них. Поэтому лучше воспринимать это разделение как просто способ группировки, а не реальную категоризацию.
В обзоре есть далеко не все модели, созданные за эти годы (особенно это касается раздела об анализе речи, в котором я не специалист). Тем не менее, их много, и для понимания картины этого должно быть достаточно.
Контент — не полные карточки моделей, а, скорее, минимальный набор стандартной информации плюс (и это главное) всё то, что показалось мне интересным для понимания сути и ценности каждой модели, в умеренно свободной форме.
Часть методов и подходов, представленных в работах, я кратко описываю, но многое остаётся за кадром, иначе можно было бы писать книгу. Может быть, попозже соберу другую статью
(очередной cheatsheet)на основе того, что разобрал и систематизировал для себя, но даже если нет, всё это по отдельности легко находится в сети или есть в статьях по ссылкам.Работы сравниваются на разных бенчмарках, как публичных (например, GLUE, SuperGLUE или BIG-bench), так и закрытых. Эта информация в обзоре не раскрывается, она не критична для понимания и легко может быть найдена в исходных публикациях. По той же причине отсутствует (за исключением ситуаций, в которых я посчитал это нужным) детальная информация о размерах, составе и наименовании наборов данных, на которых производилось обучение и дообучение моделей.
Структура статьи:
BERT-like модели для текстов
GPT-like и T5-like модели для текстов
Instruct-модели для текстов
Модели, демонстрирующие оптимизацию внимания
Модели для текстов, использующие внешние ресурсы
Модели, ориентированные на программный код
Модели для CV
Модели для генерации изображений по тексту и изображениям
Модели для генерации текста по тексту и изображениям
Модели для анализа звука и ASR
Везде ниже "Информация о модели" включает в себя последовательно
организацию, создавшую модель (если их несколько, то ключевые) и год первой публикации;
название статьи-ссылку на эту первую публикацию;
архитектуру и число параметров в миллионах (M), миллиардах (B) и триллионах (T) (может отсутствовать или варьироваться немного в разных источниках, если нет точных цифр в статье; часть моделей проверял руками);
содержательную информацию с описанием и деталями (после разделителя).
Итак, поехали.
BERT-like модели для текстов
Первый блок посвящён моделям на основе кодировщика Transformer, которые применяются для векторизации, классификации, разметки последовательностей, QA (Question Answering), NER (Named Entity Recognition) и т.д., в кросс / мультиязычных постановках.
BERT
Информация о модели
Google / 2018
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Transformer Encoder / 100M, 340M
Кодировщик трансформера, токенизация Wordpiece (словарь 30К). Входной эмбеддинг формируется из трёх векторов: вектор токена, обучаемый позиционный вектор и вектор сегмента (1-й текст или 2-й). Вход модели — эмбеддинг CLS-токена, эмбеддинги 1-го текста и эмбеддинги второго.
Две задачи обучения: Masked Language Modeling (MLM) и Next Sentence Prediction (NSP). В MLM 15% токенов статически маскируются, из них 80% заменяются токеном MASK, 10% заменяются на случайный токен, 10% остаются неизменными. Модель предсказывает верный токен, лосс считается только на этих 15% токенов. В NSP модель предсказывает, следует ли 2-й текст за 1-м. Предсказание делается на выходном векторе CLS-токена.
Для ускорения обучения 90% времени длина последовательности была 128 токенов, затем 10% времени модель училась на 512 токенах для получения валидных позиционных эмбеддингов. 16Гб обучающих данных.
RoBERTa
Информация о модели
Facebook / 2019
RoBERTa: A Robustly Optimized BERT Pretraining Approach
Transformer Encoder / 115M, 360M
Улучшенная версия BERT без радикальных изменений. Учится только на MLM (NSP признана малополезной), обучающие последовательности более длинные (но максимум тоже 512). Используются динамические маски (т.е. при повторном проходе по тем же данным маскируются другие токены), на порядок больше обучающих данных. В целом аккуратно подобраны гиперпараметры обучения.
XLM
Информация о модели
Facebook / 2019
Cross-lingual Language Model Pretraining
Transformer Encoder
Один из подходов к обучению мультиязычных моделей, может использовать с разными базовыми моделями (наиболее популярная сейчас модель XLM-R на основе RoBERTa). В исходной XLM общий словарь BPE на все языки.
Две задачи обучения: MLM и Translate LM. TLM — по сути тот же MLM на паре текстов, но тексты являются параллельными переводами друг друга, маскирование случайное, эмбеддинг сегмента кодирует язык.
Transformer-XL
Информация о модели
Carnegie Mellon University / 2019
Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
Transformer Encoder / 41M, 88M, 151M, 257M, 277M
Модель ориентирована на обработку длинных последовательностей. Две основные идеи: рекурентная обработка сегментов и относительное позиционное кодирование.
Длинный текст разбивается на сегменты, обработка производится по одному сегменту за раз. При этом выходы предыдущего сегмента кэшируются на всех слоях. При подсчёте self-attention в текущем сегменте ключи и значения считается на основании как выходов для текущего сегмента, так и для предыдущего (они просто конкатенируются). Градиенты идут только в рамках текущего сегмента.
Такая схема не может работать с абсолютными позициями. Вместо добавления к входным эмбеддингам позиционных векторов информация о позиции добавляется напрямую в self-attention, для этого в модели репараметризуется формула подсчёта весов внимания. Абсолютные векторы заменяются на фиксированную матрицу на основе значений синусов от расстояний между позициями токенов и пару обучаемых векторов, общих для всех позиций.
ERNIE
Информация о модели
Tsinghua University, Huawei / 2019
ERNIE: Enhanced Language Representation with Informative Entities
Transformer Encoder / 114M
Встраивание в BERT информации об именованных сущностях из графа знаний. На входе набор токенов текста и набор токенов сущностей текста (вся сущность - токен). Токены текста кодируются BERT. Поверх BERT идёт набор блоков K-encoder (~3% параметров сети). В них
обновлённые векторы токенов текста и исходные векторы токенов сущностей сперва проходят через self-attention независимо;
векторы сущностей сопоставляются первым токенам их вхождений в текст;
внутри линейного слоя с активацией GeLU они совместно используются для получения новых скрытых представлений токенов текста (для токенов с вектором сущности — по двум векторам, для прочих токенов — только по их вектору);
из скрытого представления получаются новые векторы и токенов, и сущностей, которые идут на вход следующему блоку K-encoder.
На предобучении три лосса: MLM, NSP и предсказание сущности по токенам (типа denoising Auto Encoder). Для последнего
в 5% случаев сущность заменяется на неверную, но сопоставление сохраняется, модель должна предсказать верную;
в 15% случаев удаляется сопоставление, модель должна предсказать сущность просто по тексту;
в прочих случаях всё проставляется.
Предобученная модель быть дообучена как и обычный BERT (есть CLS-токен). Для определения связей между сущностями и их типов предлагается отдельная процедура дообучения.
XLNet
Информация о модели
Carnegie Mellon University / 2019
XLNet: Generalized Autoregressive Pretraining for Language Understanding
Transformer Encoder / 110M, 340M
У процедуры обучения BERT есть проблемы:
при обучении на сэмпле градиент течёт только через максированные токены;
маскируются только отдельные токены, предсказание одних маскированных токенов не влияет на предсказание прочих;
в реальной жизни нет токена MASK, который модель активно видит при обучении.
XLNet основан на Transformer-XL, дополнительно предлагается учить на задачу Permutation LM (PLM, вместо MLM и NSP): предсказывать токены в их коротких контекстах вместо прямого использования MASK. Это обеспечивает течение градиента через все токены и избавляет от спецтокена маски.
Токены в контексте перемешиваются (т.е. i-й может предсказываться на основании (i-2)-го и (i+1)-го), но при этом их позиции остаются известными. Этого нельзя добиться текущим позиционным кодированием (в т.ч. из Transformer-XL): пытаясь предсказывать вероятность токена при условии части его контекста, модель, очевидно, не должна знать сам токен, но должна знать позицию в рамках контекста, в которой токен находится. Для решения этой проблемы можно разбить self-attention на два потока:
на каждой позиции токена два вектора вместо одного: вектор контента и вектор запроса;
вектор контента содержит полную информацию о токене, вектор запроса — только о позиции;
оба вектора для токена вычисляются на основе векторов контекста, но для вектора контента в self-attention запрос Q считается по прошлому вектору контента, а у вектора запроса — по прошлому вектору запросов;
таким образом, вектор запроса не получает информации о контенте соответствующего ему токена, но знает всё про контекст, а вектор контента содержит полную информацию.
На этапе fine-tuning векторы запросов могут игнорироваться, и модель будет работать как обычный Transformer-XL.
PLM ощутимо сложнее MLM, по факту контексты приходится делать достаточно длинными, чтобы модель смогла нормально выучиться. Учится на том же объёме данных, что и RoBERTa, результаты схожие, но из-за сложности реализации модель не стала такой популярной, как RoBERTa.
ALBERT
Информация о модели
Google / 2019
ALBERT: A Lite BERT for Self-supervised Learning of Language Representations
Transformer Encoder / 12M, 18M, 60M, 235M
Попытка облегчить BERT, не потеряв в качестве:
в разных блоках кодировщика используются общие параметры, при этом показано, что разделять веса слоёв self-attention можно, а в случае полносвязных весов это приводит к падению качества;
используются меньшие входные эмбеддинги, и большие векторы скрытого слоя, чем в BERT. Это возможно за счёт использования дополнительной проекционной матрицы на входе сети: она позволяет отвязать размер эмбеддингов от размера скрытых представлений;
в результате у модели в 18 раз меньше параметров и в 1.7 раз выше скорость работы.
Учится на MLM и Sentence Order Prediction (SOP, предсказание порядка следования текстов). В MLM маскируются не только отдельные токены, но и N-граммы (один из недостатков BERT). В качестве обучающих данных используются датасеты XLNet и RoBERTa.
DistilBERT
Информация о модели
Hugging Face / 2019
DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter
Transformer Encoder / 66M
Ещё один подход к оптимизации BERT — дистилляция:
число блоков кодировщика уменьшается вдвое (берётся каждый 2-й);
три компоненты лосса: MLM, кросс-энтропия на сглаженных выходах-вероятностях большой модели-учителя и косинусное расстояние между соответствующими выходами слоёв.
В результате модель на 40% меньше учителя, на 60% быстрее, сохраняет 97% качества на разных задачах.
LaBSE
Информация о модели
Google / 2020
Language-agnostic BERT Sentence Embedding
Transformer Encoder / 471M
Мультиязычная модель на основе BERT для векторизации предложений. Сперва учится на MLM и TLM (маскируются 20% токенов), затем дообучается приближать векторы параллельных переводов. Поддерживает 100+ языков при словаре в 500К токенов.
ELECTRA
Информация о модели
Google, Stanford University / 2020
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
Transformer Encoder / 14M, 110M, 335M
Ускорение обучения BERT с помощью генеративно-состязательного подхода:
учится две BERT-like модели: маленький генератор и основной дискриминатор;
генератор учится на MLM, после чего заполняет маскированные токены;
дискриминатор учится предсказывать оригинальность текстов после генератора (задача Replaced Token Detection);
после обучения генератор убирается, дискриминатор используется для fine-tuning.
В отличие от MLM, градиент течет через все токены, а не только через маскированные. Модели используют общие веса эмбеддингов.
Объём обучающих данных такой же, как у RoBERTa или XLNet, модель учится до аналогичного уровня качества быстрее, чем BERT, RoBERTa и ALBERT. Если учить дольше, то работает лучше.
DeBERTa
Информация о модели
Microsoft / 2020
DeBERTa: Decoding-enhanced BERT with Disentangled Attention
Transformer Encoder / <1B, 1.5B
Ещё модель, в которой контентная и позиционная составляющие вектора токена разделяются на два отдельных вектора (disentangled attention):
позиционные векторы общие для всех слоёв и относительные, т.е. их по одному на каждое возможное расстояние между токенами;
для них добавляются две новые весовые матрицы K_pos и Q_pos (в дополнение к имеющимся матрицам для контента K_cont и Q_cont);
подсчёт весов внимания модифицируется и сводится к сумме трёх произведений: Q_cont * K_cont + Q_cont * K_pos + K_cont * Q_pos (без учета транспонирований).
Enhanced Mask Decoder — абсолютные позиционные эмбеддинги, которые не хочется использовать во внимании, но которые могут быть полезны при предсказании токена, добавляются после всех слоёв перед softmax. Как и в ALBERT, используется проекционная матрица для отвязки размера эмбеддинга от размера вектора скрытого представления токена.
GPT-like и T5-like модели для текстов
Самый большой блок из генеративных моделей на основе полного трансформера или его декодировщика. Сфера применений обширна: к задачам из предыдущего раздела добавляются ведение диалога, машинный перевод, логический и математический вывод, анализ и генерация кода, да и вообще всё, что можно свести к генерации текста по тексту. Наиболее крупные и "умные" модели обычно создаются именно на основе архитектуры декодировщика. Такие модели часто умеют хорошо работать без дообучения во few- и zero-shot режимах.
GPT-2
Информация о модели
OpenAI / 2018
Language Models are Unsupervised Multitask Learners
Transformer Decoder / 117M, 345M, 762M, 1.5B
Декодировщик трансформера, учится на задачу Causal LM (предсказание следующего токена по левому контексту). С т.з. архитектуры есть небольшие изменения: из каждого блока декодировщика удаляется слой cross-attention (очевидно) и используется pre-LayerNorm — слой нормализации ставится на входе каждого блока и дополнительно на выходе последнего слоя self-attention.
Токенизация byte-level BPE (словарь 50К) с запретом похожих подстрок ("dog", "dog!", "dog.") при формировании. Максимальная длина последовательности 1024. Выходы слоёв кэшируются для всех уже сгенерированных токенов.
T5
Информация о модели
Google / 2019
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
Full Transformer / 60M, 220M, 770M, 3B, 11B
Полный трансформер, предобучаемый на MLM (15% токенов маскируются), спаны маскируются одним уникальным кодом-маской (<X>, <Y>, ...). на выходе предсказывается последовательность <X>спан<Y>спан...
LayerNorm ставится перед входом self-attention и полносвязных слоёв. Используется относительное позиционное кодирование:
позиция кодируется обучаемыми эмбеддингами, при этом каждый "эмбеддинг" — просто скаляр, добавляемый к соответствующему логиту при подсчёте весов внимания (B — матрица этих скаляров):
матрица B общая для слоёв, но своя у разных голов self-attention;
на одном слое учитывается 128 расстояний между токенами, прочие 0, это позволяет делать инференс на последовательностях с длиной, большей, чем на обучении.
Токенизация SentencePiece (словарь 32К), предобучение с максимальной длиной последовательности 512. После идёт дообучение на ряд NLP-задач с подходящими промптами ("translate", "TL;DR", ...).
BART
Информация о модели
Facebook / 2019
Full Transformer / 140M, 406M
Ещё один полный трансформер, только ReLU заменена везде на GeLU. Учится предсказывать по зашумлённому тексту исходный (denoising AE), типы зашумлений:
маскирование токенов;
удаление токенов;
заполнение (сэмплирование спанов токенов с длиной >=0 и замена их на один токен MASK);
перемешивание предложений;
ротация по токену (сдвиг, в результате которого случайный токен становится началом последовательности).
Токенизация byte-level BPE (словарь 50К).
CTRL
Информация о модели
Salesforce / 2019
CTRL: A Conditional Transformer Language Model for Controllable Generation
Transformer Decoder / 1.6B
Декодировщик трансформера с возможностью управления генерацией с помощью префиксных токенов-кодов (пример входа: <Horror> input text ...). Коды проставляются подходящим текстам на обучении и далее используются на инференсе для генерации в соответствующем стиле. Обучение на Causal LM, дополнительные лоссы не используются. Токенизация BPE (словарь 250К).
GPT-3
Информация о модели
OpenAI / 2020
Language Models are Few-Shot Learners
Transformer Decoder / 125M, 350M, 760M, 1.3B, 2.7B, 6.7B, 13B, 175B
В основе GPT-2 с использованием разреженного внимания из Sparse Transformer и увеличенной до 2048 длиной последовательности. Для оптимизации обучения и инференса модель раскладывается на разные GPU и в ширину, и в глубину.
mT5
Информация о модели
Google / 2020
mT5: A massively multilingual pre-trained text-to-text transformer
Full Transformer / 300M, 580M, 1.2B, 3.7B, 13B
Основана на модели T5, обучение аналогичное, но с использованием мультиязычных данных. Вероятность выбора языка при формировании батчей на обучении пропорциональна доле сэмплов этого языка в корпусе с степени 0.3.
Активация ReLU заменяется на GeGLU, словарь расширен до 250К токенов.
M2M100
Информация о модели
Facebook / 2020
Beyond English-Centric Multilingual Machine Translation
Full Transformer / 418M, 1.2B, 12B
Модель для перевода, работает в режиме many-to-many, а не через английский язык. Ко входу кодировщика добавляется токен исходного языка, ко входу декодера — токен целевого языка. Токенизация SentencePiece (словарь 128К).
GPT-J
Информация о модели
EleutherAI / 2021
GPT-J-6B: 6B JAX-Based Transformer
Transformer Decoder / 6B
Open-source аналог GPT-3 6.7B, учится на Causal LM, особенности:
не используется модифицированный подсчёт внимания;
х2 размерность выхода одной головы self-attention;
rotary позиционное кодирование;
полносвязный и self-attention слои вычисляются параллельно.
За счёт обучающих данных (Pile) может использоваться для генерации программного кода. Токенизатор и словарь как в GPT-2.
Jurassic-1
Информация о модели
AI21 Labs / 2021
Jurassic-1: Technical Details and Evaluation
Transformer Decoder / 7B, 178B
Ещё одна GPT-like модель, в большой модели меньше слоёв, но больше размерности эмбеддингов. Токенизация SentencePiece (словарь 256К). Обучение с использованием DeepSpeed и MegatronLM.
Switch Transformer
Информация о модели
Google / 2021
Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity
Full Transformer / 7B, 26B, 395B, 1.57T
Идея работы в том, чтобы выучивать модель с огромным числом параметров, но на инференсе использовать только небольшую их часть. Полносвязный слой в блоках трансформера заменяется на Mixed-of-Experts (MoE):
в MoE учится много (десятки) полносвязных слоёв-экспертов и один полносвязный слой-гейт, предсказывающий для токена вероятности лучших экспертов;
выход: взвешенная с вероятностями сумма выходов K лучших экспертов (в этой модели берётся K=1);
у каждого эксперта есть максимальная capacity, т.е. сколько токенов он может обрабатывать, если он выбирается слишком часто и capacity превышается, то токены пробрасываются дальше как есть, без обработки;
слои-эксперты распределяются по разным GPU/TPU.
В целях экономии памяти все параметры и активации хранятся в float16, для стабильности входы гейта и его операции проводятся в float32, но затем тоже переводятся в float16.
Предобучение такое же, как в T5, ещё обучается в мультиязычном режиме на данных mT5. Дистиллированная в T5, такая модель работает лучше обычной.
GLAM
Информация о модели
Google / 2021
GLaM: Efficient Scaling of Language Models with Mixture-of-Experts
Transformer Decoder / 1.9B, 20B, 27B, 53B, 105B, 143B, 1.2T
Идейно похожа на Switch Transformer, но больше ориентирована на работу во few-shot режиме, а не на fine-tuning. В моделях разных размеров используется от 32 до 256 слоёв экспертов с K=2. Позиционное кодирование относительное из Transformer-XL. При обработке токена активируется менее 10% параметров сети.
LaMDA
Информация о модели
Google / 2021
LaMDA: Language Models for Dialog Applications
Transformer Decoder / 2B, 8B, 137B
GPT-like модель, активации Gated GELU, относительное позиционное кодирование в self-attention, как в T5. Модель диалоговая, предобученная на Causal LM и дообученная на генеративные и дискриминативные задачи. Формат входа "<контекст><префикс><ответ>[<атрибут><значение>]", пример "как дела? ОТВЕТ хорошо ЦЕННОСТЬ 0", лоссы считаются только на ответе и значении. Дообучение шло в две стадии:
модель учится и генерировать, и оценивать качество своих ответов по заданным критериям;
далее она используется фильтрации обучающих датасетов;
после повторно учится на этих данных более качественной генерации.
Также модель дообучается на использование вызовов внешних систем (поиск, калькулятор и переводчик). При генерации префискса TS происходит вызов всех систем, их выходы конкатенируются. На основе этой информации и истории диалога происходит либо формирование итогового ответа, либо повторный уточняющий запрос во внешние системы.
Объективно это очень крутая работа и модель, уверен, что моего объяснения тут недостаточно даже для поверхностного понимания, лучше сразу идти изучать оригинальную статью.
Gopher
Информация о модели
DeepMind / 2021
Scaling Language Models: Methods, Analysis & Insights from Training Gopher
Transformer Decoder / 44M, 117M, 417M, 1.4B, 7.1B, 280B
Декодировщик с относительным позиционным кодированием из Transformer-XL, вместо LayerNorm используется RMSNorm. Обучение обычное на Causal LM, длина последовательности 2048.
Использует model-параллелизм и разделение состояния оптимизатора при обучении. У больших версий модели и для весов, и для активаций используется bfloat16.
GPT-NeoX-20B
Информация о модели
EleutherAI / 2022
GPT-NeoX-20B: An Open-Source Autoregressive Language Model
Transformer Decoder / 20B
Схожа с GPT-J, тоже использует rotary позиционное кодирование. В токенизатор добавляются токены повторяющихся пробелов (до 24 штук) для уменьшения числа токенов в тексте кода. Веса модели используют представление float16. Максимальная длина последовательности 2048, разделение состояния оптимизатора при обучении (ZeRO), tensor- и pipeline-параллелизм.
Обычно в моделях 2 слоя LayerNorm в блоке обычно разделяют параметры, но в этой модели из-за ошибки веса получились раздельным. Авторы показали, что это не оказывает на качество существенного влияния.
Megatron-Turing NLG
Информация о модели
NVIDIA, Microsoft / 2022
Transformer Decoder / 530B
Конкурент Gopher и GPT-3 на разных задачах. Основная особенность — подход к оптимизации обучения с помощью DeepSpeed и MegatronLM, комбинация data-, pipeline- и tensor-параллелизма (3D parallelism).
В целом работа показательная: в более ранних статьях упор делался на архитектурные особенности и типы задач на предобучении. В этой и подобных публикациях последних двух лет рост размеров моделей приводит к смещению фокус внимания на эффективность обучения и последующего инференса.
В работе очень много технических деталей, связанных с ускорением и масштабированием обучения, имеет смысл изучить.
YALM
Информация о модели
Yandex / 2022
Transformer Decoder / 100B
Большая open-source англо-русская модель, особенности обучения:
fusion attention CUDA-ядра, ZeRO для разделения состояния оптимизатора, отключение дропаута;
оптимизатор LAMB (вместо стандартных Adam и AdamW);
pre-LayerNorm + LayerNorm после первого слоя эмбеддингов;
bfloat16 для весов и активаций, но TensorFloat для softmax, LayerNorm, residual и all_reduce-операций.
BLOOM
Информация о модели
BigScience / 2022
BLOOM: A 176B-Parameter Open-Access Multilingual Language Model
Transformer Decoder / 560M, 1.1B, 1.7B, 3B, 7.1B, 176B
Самая большая open-source модель для 46 языков и 13 языков программирования. Для её обучения был агрегирован большой датасет ROOTS, включивший в себя ~500 открытых наборов данных. Особенности:
позиционные эмбеддинги ALiBi;
LayerNorm до self-attention, до полносвязных слоёв, после последнего блока и после первого слоя эмбеддингов;
обычный, не sparse, attention с длиной последовательности 2048;
оптимизация обучения с помощью 3D параллелизма на DeepSpeed и MegatronLM (как в Megatron-Turing NLG);
токенизация byte-level BPE (словарь 250К);
тип данных bfloat16.
Chinchilla
Информация о модели
DeepMind / 2022
Training Compute-Optimal Large Language Models
Transformer Decoder / 70B
Основная идея: размеры модели должны соответствовать объёму обучающих данных, многие модели недообучены или могли бы быть уменьшены без потери качества. Архитектура и процесс обучения аналогичны Gopher (только уменьшены число голов attention и батчи и вместо AdamW используется Adam). При аналогичном объёме вычислений удаётся получить модель, которая в разы меньше и работает лучше.
PaLM
Информация о модели
Google, 2022
PaLM: Scaling Language Modeling with Pathways
Transformer Decoder / 8B, 62B, 540B
Большая мультиязычная декодерная модель, детали:
функция активации SwiGLU;
параллельное вычисление полносвязных и self-attention слоёв (ускорение на 15% без потери качества);
позиционное кодирование RoPE;
Multi-Query Attention (K и V общие для всех голов attention, Q - свои);
Causal LM + дополнительный лосс-регуляризатор (логарифм знаменателя softmax на выходе сети приближается к 0).
Обучение с помощью Adafactor, на предобучении дропаут выключен, а fine-tuning 0.1. При расхождениях обучение рестартует с с валидного чекпойнта с пропуском 200-500 батчей.
Токенизатор SentencePiece (словарь 256К), длина последовательности 2048. Хорошо походит для генерации и исправления программного кода.
LLaMA
Информация о модели
Meta / 2023
LLaMA: Open and Efficient Foundation Language Models
Transformer Decoder / 7B, 13B, 30B, 65B
Открытая для научных исследований большая GPT-like LM, на основе которой обучили несколько instruct-моделей. Используются pre-LayerNorm, активации SwiGLU и RoPE позиционные эмбеддинги.
При обучении тяжёлые активации (как выходы линейных слоёв) кэшируются на forward-шаге для ускорения backward. Это растит потребление памяти, поэтому используются model- и sequence-параллелизм. Токенизация BPE с bytes fallback (словарь 32К).
Pythia
Информация о модели
EleutherAI / 2023
Pythia: A Suite for Analyzing Large Language Models Across Training and Scaling
Transformer Decoder / 70M, 160M, 410M, 1B, 1.4B, 2.8B, 6.9B, 12B
Ещё одна open-source декодерная модель со стандартным набором практик:
параллельное вычисление self-attention и полносвязных слоёв (как в PaLM);
нет разреженного подсчёта внимания, для ускорения обучения используется Flash Attention;
RoPE позиционные эмбеддинги, длина последовательности 2048;
обучение с data- и tensor-параллелизмом, ZeRO для распределения состояния оптимизатора.
FRED-T5
Информация о модели
SberDevices / 2023
FRED-T5. Новая SOTA модель для русского языка от SberDevices
Full Transformer / 820M, 1.7B
Одна из лучших на текущий момент моделей для русского языка. Архитектурно T5 с активацией Gated GeLU. Учится на 7 задач:
6 задач предсказания скрытых спанов (T5), задачи отличаются длиной спанов и долей скрываемых токенов;
дополнительная задача Prefix LM (по началу текста предсказать конец);
у каждой задачи есть спецтокен-префикс, выставляемый в начале входа;
все задачи равноправны и имеют одинаковый объём данных.
Обучение шло в 4 этапа, на первом префиксов не было, далее их добавили. До последнего этапа использовался Adafactor, далее AdamW. Токенизация Byte-level BPE (словарь 50К).
Из-за ошибки первые 2 этапа модель училась только на 1% данных, но качество дала высокое, дальнейшее дообучение на всём не сильно его увеличило.
Instruct-модели для текстов
Работы этого блока представляют собой модернизированные версии декодерных моделей из предыдущего. К ним были применены дообучение для следования инструкциям и (опционально) дополнительные методы коррекции выхода моделей (типа RLHF) для повышения качества ответов в ходе ведения диалога и решения поставленных задач.
RLHF на пальцах
Базовая LLM обучается на обычные задачи (чаще всего Causal LM), в т.ч. на диалоговые и instruct-данные.
Асессоры подготавливают разнообразные промпты, по которым модель что-то генерирует.
Асессоры ранжируют и оценивают эти ответы (есть разные подходы).
На этих размеченных текстах и промптах учится reward-модель (RLM, это тоже ёмкая и качественная языковая модель), они оценивает по тексту его качество скалярным значением.
-
Модель LLM обучается с помощью RL:
две копии LLM: обучаемая (А) и фиксированная референсная (B);
policy — LLM (A), получает на вход промпт, возвращает текст;
action space — все токены словаря;
observation space — всевозможные последовательности токенов на входе;
reward function — ответ RLM + штраф за сильное отклонение ответа (A) от (B);
для заданного промпта обеими моделями генерируются ответы;
reward модели (A) оценивается, после чего происходит обновление её параметров;
последовательности токенов текстов (A) и (B) сравниваются по KL-дивергенции (не сами токены, а породившие их выходные распределения) и (A) штрафуется за сильный уход от (B);
обновление производится по заданному алгоритму (PPO у OpenAI или A2C у DeepMind).
InstructGPT
Информация о модели
OpenAI / 2022
Training language models to follow instructions with human feedback
Transformer Decoder / 1.3B, 6B, 175B
Адаптация GPT-3 к качественному выполнению инструкций. Сперва модель проходят fine-tuning на набор данных с промптами и ответами, которые люди по набору критериев посчитали хорошими. Таким образом получается базовая модель, к которой применяется RLHF. Reword-модель ("награда") — GPT-3 6B. Полученная модель даёт более качественные ответы, на основе InstructGPT была создана модель ChatGPT.
Flan-PaLM
Информация о модели
Google / 2022
Scaling Instruction-Finetuned Language Models
Transformer Decoder / 8B, 62B, 540B
Модель PaLM, дообученная на выполнение инструкций:
с примерами и в zero-shot;
с простым ответом или с пошаговым пояснение ответа (Chain-of-Thought);
с текстовой инструкцией или только с примерами.
Модель дообучается на 1800 задач: диалог, синтез кода, ответы на вопросы и т.д. Предполагается, что дообученная модель должна справляться и с новыми задачами, подаваемыми в аналогичном стиле. Оценки качества выставляют люди, для ряда задач оценивается только качество ответа, для других — пошаговое пояснение. Показан монотонный рост среднего качества на бенчмарках при росте и размера модели, и числа instruct-задач для дообучения.
Дообучение PaLM производится с помощью Adafactor, на него затрачено всего 0.2% от объёма вычислений, потраченных на основное обучение, а качество модели на целом ряде бенчмарков сильно выросло.
Flan-T5
Информация о модели
Google / 2022
Scaling Instruction-Finetuned Language Models
Full Transformer / 80M, 250M, 780M, 3B, 11B
Обучение Flan-PaLM, применённое к T5, аналогично за исключением небольших технических деталей. В ряде задач Flan-T5 11B работает лучше, чем PaLM 62B без такого дообучения. Эти модели были выложены в open-source.
Sparrow
Информация о модели
DeepMind / 2022
Improving alignment of dialogue agents via targeted human judgements
Transformer Decoder / 70B
Большая работа про повышение надёжности диалоговой модели. Базовая модель получается путём дообучения Chinchilla на отобранных качественных диалогах, при тюнинге заморожены первые 80% слоёв. Затем производится дообучение для выполнения инструкций под чат-бота с RLHF, модель при этом запускается с большим промптом, настраивающим на диалог. Reward-моделей несколько, они тоже обучаются поверх Chinchilla (со своими 20% последних слоёв) и оценивают качество ответа и соответствие его разнообразным правилам.
Модель имеет возможность обращаться к поисковой системе и получать оттуда сниппет до 500 символов, который может стать ответом.
На инференсе reward-модели используются для ранжирования кандидатов. Кандидаты либо генерируются моделью, либо получаются из поиска, после чего лучший становится ответом.
Ещё одна крутая и интересная работа, которая подлежит внимательному изучению.
Alpaca
Информация о модели
Stanford University / 2023
Alpaca: A Strong, Replicable Instruction-Following Model
Transformer Decoder / 7B, 13B
Instruct fine-tuning LLaMA. Основной интерес работы — в процессе формирования выборки с помощью GPT-3:
требуется получить набор троек Task-Input-Output, Input может быть пустым;
люди генерируют 175 задач-промптов с ответами, которые подаются в GPT-3, она генерирует новые задачи;
процесс генерации итеративный, на каждом шаге в качестве примеров подаются несколько задач от людей, несколько — из сгенерированных ранее;
GPT-3 классифицирует сгенерированные Task-и на задачи классификации и нет, в зависимости от этого по-разному генерируются Input и Output;
Тройки фильтруются по качеству и несхожести с уже имеющимися в базе.
В сумме сгенерировано 52К уникальных троек, на которых дообучается LLaMA 7B.
Koala
Информация о модели
Berkeley University / 2023
Koala: A Dialogue Model for Academic Research
Transformer Decoder / 7B, 13B
Ещё одна работа про дообучение LLaMA на instruct-данные, но, в отличие от Alpaca, не только сгенерированные большой моделью типа GPT-3. Состав выборки:
30К сэмплов инструкций и ответов по математике, поэзии и диалогам;
52К сэмплов набора данных модели Alpaca;
160K пар ответов моделей с указанием предпочтения юзеров о пользе и вреде;
20К пар ответов моделей с вопросом и оценкой ответов от юзеров;
93К суммаризаций с оценкой их качества от юзеров.
Продемонстрировано, что данные сверху ответов GPT-3 добавляют немного качества. Тем не менее, в слепом тесте пользователи предпочитают ответы Koala ответам Alpaca.
Dolly-2
Информация о модели
Databricks / 2023
Transformer Decoder / 2.8B, 6.9B, 12B
Open-source модель, полученная из Pythia путём дообучения на 15К инструкциях-ответах, сгенерированных людьми. Эти данные покрывают разнообразные задачи, включающие классификацию, CDQA, ODQA, суммаризацию. Модель не является SoTA, ещё в разработке, зато допускает коммерческое использование.
Vicuna
Информация о модели
Berkeley University, Carnegie Mellon University &\\, Stanford University, UC San Diego / 2023
Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90%* ChatGPT Quality
Transformer Decoder / 7B, 13B
Одна из лучший на текущий момент моделей, полученных путём дообучения LLaMA. Используются 70К диалогов, собранных из сервиса ShareGPT. Данные прошли простую фильтрацию после парсинга, длинные диалоги разделены на более короткие. Выросла максимальная длина последовательности (до 2048). Для компенсации роста памяти используются чекпойнты градиентов и Flash Attention. Лосс при дообучении считается только для ответов модели.
Качество модели оценивается автоматически в сравнении с конкурентами с помощью GPT-4. Vicuna в версии 13B получила более высокую оценку, чем аналогичная Alpaca (92% vs. 76%).
В работе предлагается и используется менеджер обучения с использованием спотовых машин в облаке для уменьшения стоимости обучения.
Модели, демонстрирующие оптимизацию внимания
В этой категории представлены модели, которые созданы скорее не для использования as is, а для демонстрации оптимизаций (в первую очередь подсчёта механизма self-attention для его ускорения и увеличения длины обрабатываемых последовательностей) с целью дальнейшего внедрения в другие модели.
Sparse Transformer
Информация о модели
OpenAI, 2019
Generating Long Sequences with Sparse Transformers
Transformer Decoder / 59M, 95M, 152M
Знаковая работа, идеи из которой нашли применение в других моделях от OpenAI. Рассматриваются разные проблемы оптимизации обучения и инференса декодировщика трансформера, причём при обработке любых последовательностей, включая изображения, в которых объекты имеют две пространственные размерности.
Хранение результатов forward-прохода для последующего подсчёта градиентов: хранить всё затратно по памяти, пересчитывать всё медленно. Предлагается тяжеловесные веса self-attention и активации полносвязных слоёв пересчитывать, а прочие тензоры хранить в памяти GPU.
Оптимизация подсчёта весов внимания: квадратичная сложность self-attention ограничивает длину обрабатываемых последовательностей, при подсчёте весов для токена предлагается смотреть не на всю предшествующую последовательность, а только на часть, определяемую ядром. Возможные варианты: сегмент до текущего токена (по горизонтали или вертикали для двумерного входа) или фиксированные токены, с которыми могут взаимодействовать все токены, идущие после них (например, каждые 128 токенов можно брать по 8 таких токенов, т.е. более поздние токены будут смотреть на большее число фикисрованных токенов). Параметры можно подобрать так, чтобы свести сложнос с O(n^2) до O(n * sqrt(n)).
Формат хранения модели: веса сети предлагается хранить в float32, активации и градиенты в float16, при этом ключи и запросы при вычислении переводятся в float32.
Longformer
Информация о модели
Allen Institute for AI / 2020
Longformer: The Long-Document Transformer
Transformer Encoder / 41M, 102M
В основе лежит модель RoBERTa, предлагается разделение механизма внимания на две части: глобальное и локальное.
Для глобального выделяется набор токенов (CLS, в случае задачи QA — вопрос), которые считаются важными, они обращают внимание на всех, все обращают на них.
В локальном внимании токен смотрит на N соседей с каждой стороны, это могут быть как ближайшие соседи, так и взятые с каким-то шагом для увеличения длины покрываемого контекста (но так делается только на верхних слоях, нижние обрабатывают узкий локальный контекст). N растёт линейно с ростом номера слоя.
У глобального и локального внимания свои отдельные веса для подсчёта Q, K и V.
Reformer
Информация о модели
Berkeley University, Google / 2020
Reformer: The Efficient Transformer
Transformer Encoder
Предлагается считать self-attention не между всему ключами и запросами, а только между близкими. Для этого
обучается общая для ключей и запросов весовая матрица;
ключи собираются в LSH-индекс;
для запроса ищется ближайший в индексе центроид.
внимание для запроса считается только с соседями центроида.
Дополнительно предлагается использовать подход RevNet для экономии памяти (за счёт увеличения объема вычислений). Подход позволяет пересчитывать выходы слоя по выходам следующая слоя при backpropagation. Таким образом, можно хранить только выходы последнего слоя, прочие вычисляя на лету. Вычисления при этом можно производить блоками (в т.ч. и на полносвязном слое), что тоже приводит к уменьшение потребления памяти.
Performer
Информация о модели
Google, Cambridge University, DeepMind / 2020
Rethinking Attention with Performers
Transformer Encoder
Идея этой работы заключается в том, что вместо упрощения подсчёта внимания можно аппроксимировать его подсчёт, не делая никаких дополнительных предположений. Используя специальные ядра, можно провести следующую аппроксимацию self-attention с помощью новых Q' и K' для небольшого r (размерность новых признаков):
Сложность вычисления падает с O(n^2 * d) до O(n * r * d). Обновлённый подсчёт внимания можно встраивать в любую модель.
В работе много теоретических выкладок и теорем, которые можно изучить для понимания деталей использования ядер для перехода в новое признаковое пространство.
Linformer
Информация о модели
Facebook / 2020
Linformer: Self-Attention with Linear Complexity
Transformer Encoder
Ещё одна модификация RoBERTa с оптимизацией внимания. Предлагается использовать низкоранговое разложение матриц ключей и значений с помощью обучаемых и общих для всех блоков линейных слоёв:
Сложность подсчёта внимания снижается с O(n^2 * d) до O(n * k * d), k << n. В работе приводится теоретическое обоснование подхода.
BigBird
Информация о модели
Google / 2020
Big Bird: Transformers for Longer Sequences
Transformer Encoder
Подход реализован на основе RoBERTa, подсчёт self-attention предлагается разбить на три компоненты:
локальное внимание в пределах контекста токена;
внимание на случайный разреженный набор токенов по всему тексту;
глобальное внимание (принцип схож с Longformer).
Сниженная до линейной сложность подсчёта внимания позволила вырастить длину последовательности в 8 раз. Модель учится на MLM (15% маскируемых токенов).
Используются активации GeLU, токенизация SentencePiece (словарь 50К), длина локального контекста 64-86 в каждую сторону от токена.
LongT5
Информация о модели
Google / 2021
LongT5: Efficient Text-To-Text Transformer for Long Sequences
Full Transformer
Модель с оптимизацией внимания на основе T5. Внимание локальное и глобальное:
локальное: каждый токен смотрит на 127 токенов в каждую сторону от себя;
-
глобальное:
вход делится на блоки по 16 токенов;
все эмбеддинги токенов в блоке суммируются, образуя глобальный для блока токен;
все токены смотрят на все глобальные токены.
В остальном обычная модель T5, словарь 32К. Максимальная длина входной последовательности — до 32К, выходной — 512.
Модели для текстов, использующие внешние ресурсы
Пара моделей, демонстрирующих способности Transformer по взаимодействию с внешними источниками информации и инструментами. Такого рода возможности используют в своей работе большие языковые модели.
RETRO
Информация о модели
DeepMind / 2021
Improving language models by retrieving from trillions of tokens
2 x Transformer Encoder + Transformer Decoder / 172M, 425M, 1.5B, 7.5B
Основная идея работы — использование внешнего источника информации при подсчёте внимания: генерация очередного токена должна идти с оглядкой на релевантные данные из базы.
Источник информации:
основа — база текстов, содержащих полезную для модели информацию;
из каждого текста берется префикс с длиной r, и префикс с длиной 2r;
первые префиксы векторизуются с помощью небольшой предобученной модели BERT;
строится KNN-индекс, в котором ключами являются полученные векторы, а значениями — соответствующие вторые, более длинные префиксы.
Принцип работы модели:
Основная модель — декодировщик — получает на вход текст, который разбивается на блоки (chunk).
Блоки векторизуются BERT, для каждого из них извлекается 2 ближайших по вектору-ключу текста-значения из KNN-индекса.
Параллельно в декодировщике блоки проходят через self-attention.
Результаты шагов 2 и 3 используются в блоке chunked cross-attention (CCA): self-attention, в котором запросы получаются из выхода шага 3, а ключи и значения — из выходов шага 2. При этом для получения запросов используется не сам блок, а последний его элемент и весь следующий блок, кроме последнего элемента.
Итоговые векторы проходят через полносвязные слои.
Детали:
соседи конкатенируются и обрабатываются параллельно;
блоки с CCA вставляются между обычным блоками декодировщика (через 3 с 9-го);
используется относительное позиционное кодирование из Transformer-XL;
слои нормализации LayerNorm заменяются на RMSNorm;
ZeRO для разделения состояния оптимизатора при обучении;
KNN-индекс — SCANN.
Toolformer
Информация о модели
Meta / 2023
Toolformer: Language Models Can Teach Themselves to Use Tools
Transformer Decoder / 124M, 355M, 775M, 1.6B, 6.7B
Модель построена на основе уже обученной GPT-J. Основная идея — научить модель в нужных местах делать вызов API и использовать результат вызова при дальнейшей генерации.
Используется разновидность self-suprvised подхода:
модели ставится задача сгенерировать в текстах вызовы API в виде [api(inp) -> out] в местах, в которых она посчитает нужным
вызовы делаются, их результаты вставляются в тексты в виде префикса-промпта (сами вызовы удаляются), после чего обновлённые прогоняются через модель и для них считается CE-лосс L_pos
ещё CE-лоссы считаются для исходного текста без префикса и исходного текста с вызовом, минимальный из них берётся как L_neg
из всех сэмплов со вставленными вызовами API эти вызовы сохраняются только у тех, у которых L_neg - L_pos > t
итоговая модель получается дообучением на обновлённых данных (и с API, и без)
При инференсе модель может сгенерировать токен "[", означающий вызов API, после этого генерация останавливается, производится вызов нужного API, вставка результата и токена "]", после чего генерация продолжается.
Инструменты, к которым осуществляются вызовы: календарь, калькулятор, QA, переводчик и поиск по Википедии.
Модели, ориентированные на программный код
Крупные языковые модели умеют в числе прочего анализировать и генерировать код, но есть класс моделей поменьше, ориентированных чисто на это. Основные задачи связаны с генерацией кода по словесному описанию и наоброт, продолжением и вставкой кода.
PLBART
Информация о модели
University of California, Columbia University / 2021
Unified Pre-training for Program Understanding and Generation
Full Transformer / 140M
Модель основа на BART-base и на три задачи денойзинга (на выходе должен быть весь восстановленный текст):
маскирование токенов;
удаление токенов;
маскирование спанов одним токеном-маской.
Данные на предобучении: тексты-описания на английском и код на Python и Java. Fine-tuning на генерацию, суммаризацию, перевод кода, классификацию дубликатов и поиск уязвимостей. Токенизация SentencePiece (словарь 50К).
CODEX
Информация о модели
OpenAI / 2021
Evaluating Large Language Models Trained on Code
Transformer Decoder / 12M, 25M, 42M, 85M, 300M, 679M, 2.5B, 12B
Fine-tuning GPT-3 для улучшения генерации кода на Python. Качество оценивается по числу проходимых юнит-тестов, метрика pass@k: для задачи генерируется и проверяется k сэмплов, оценивается доля решённых задач лучшим решением. Помимо просто кода из репозиториев, модель дополнительно доучивали на отдельных функциях (сигнатура + docstring + код), она может работать в режиме генерации docstring по коду. Для сокращения длины последовательности в токенизатор добавлены токены наборов пробелов разной длины.
CodeT5
Информация о модели
Salesforce / 2021
Full Transformer / 60M, 220M
Дообучение T5 на три равнозначные кодовые задачи. Формат входа: "CLS, токены текста, SEP, токены кода", текст может быть пустым. У каждого токена кода есть маска, определяющая, является ли он идентификатором (имя функции, переменная) или нет. Это получается за счёт синтаксического парсинга кода и анализа полученного дерева.
Задачи предобучения:
предсказание спанов (1-5 токенов) как в Т5: на выходе номер MASK и ответ
предсказание метки идентификатора для всех токенов
замена всех идентификаторов на MASK и предсказание их названий
Затем модель учится генерировать код по docstring и наоборот одновременно. В модели используется собственный токенизатор, на кодовых данных последовательности получаются на 30-45% короче, чем у оригинального токенизатора T5. Предобученная модель дообучается на задачи суммаризации, генерации и перевода кода, качество оценивается метрикой BLEU.
AlphaCode
Информация о модели
DeepMind / 2022
Competition-Level Code Generation with AlphaCode
Full Transformer / 284M, 1.1B, 2.8B, 8.7B, 41.1B
Попытка обучить модель, способную решать кодовые олимпиадные задачи по их описаниям для человека. Метрикой является n@k: доля решенных задач при генерации k сэмплов, из которых на тестах валидируется n <= k. Это даёт возможность сгенерировать много решений, и предварительно оценить их перед тем, как прогонять юнит-тесты, что ставит модель в более конкурентные условия.
В кодировщик подаётся текст задания, декодировщик генерирует решение. В среднем тексты заданий длинее решения, поэтому длина входа кодировщика 1536, а декодировщика — 768.
Сперва предобучение на данных с GitHub: MLM для кодировщика и Causal LM для декодировщика. Дообучение на задачах из Codeforces с доступом к тегам сложности и описанию подхода к решению (ни того, ни другого нет на инференсе). Используются те же лоссы плюс:
value conditioning: даем хорошие/плохие решения и отмечаем это тегом (на инференсе тег всегда хороший);
value prediction: маленькая модель по последнему слою предсказывает качество решения (на инференсе не используется);
tempering: T = 0.2 в софтмакс для регуляризации (на инференсе T другой);
равномерная оптимизация различных решений одной и той же задачи с использованием RL.
В модели используется Multi Query Attention: ключей и значений во внимании меньше, чем запросов и они разделяются запросами. Для обучения двух больших моделей используется model-параллелизм и формат данных bfloat16.
На инференсе решение генерируется так
сэмплируется много кандидатов, часть фильтруется на публичном тесте;
прочие кластеризуются по схожести выходов для одних и тех же входов;
из кластеров набирается по одному решению, пока не получится 10.
Генерация решения:
генерируется много кандидатов, часть фильтруется на публичном тесте;
прочие кластеризуются р\по схожести выходов на одних входах;
из кластеров выбирается по одному решению, пока не получится 10;
для этих решения производится прогон скрытых юнит-тестов.
В результате значения метрики 10@(1K/10K/100K/1M) получились от 7 до 28% для разных моделей.
CodeGen
Информация о модели
Salesforce / 2022
CodeGen: An Open Large Language Model for Code with Multi-Turn Program Synthesis
Transformer Decoder / 350M, 2.7B, 6.1B, 16B
Модель для поэтапной генерации кода, обучение производится по порядку на следующих данных
англоязычные описания + код на разных языках
код на разных языках
код на Python
Идея — в многошаговой генерации кода по частям:
по промпту P1 генерируется часть кода C1
по промпту P1 C1 P2 генерируется часть кода C2
и т.д.
На выходе код C1 C2 ... должен работать корректно на входных данных. Для обучения этому был подготовлен специальный набор данных с входами, выходами и 3+ шагами-промптами.
InCoder
Информация о модели
Meta / 2022
InCoder: A Generative Model for Code Infilling and Synthesis
Transformer Decoder / 1.3B, 6.7B
Цель работы — научить модель не только генерировать и продолжать код, но и делать вставки в него. Для этого в промпте часть сниппетов заменяется на маски, содержимое которых модель должна далее предсказать.
Токенизация byte-level BPE с токенам-пробелами разной длины и токенами-частыми конструкциями (import numpy as np), основной упор на Python. В результате получается на 45% меньше токенов для кода на Python, чем у токенизатора GPT-2. Максимальная длина последовательности 2048.
Хорошо работает в zero-shot режиме и на продолжение кода, и на вставку, для генерации кода на нужном языке используется промпт вида <| file ext=.py|>.
SantaCoder
Информация о модели
Hugging Face, ServiceNow / 2023
SantaCoder: don't reach for the stars!
Transformer Decoder / 1.1B
Ещё одна open-source модель для кода с поддержкой Java, JS и Python. GPT-like, веса в формате float16, Byte-BPE (словарь 49К). При обучении используется Multi Query Attention (для ускорения с небольшими потерями качества) и Fill-in-the-Middle (FIM).
FIM используется для обучения модели вставкам кода посередине:
документ (или их набор, если документы короткие) случайно делится на примерно раные 3 части: prefix, middle и suffix
при обучении он подаётся в виде "<prefix>prefix<suffix>suffix<middle>middle"
лосс считаются на всех частях последовательности, как и обычно
на инференсе вход "<prefix>prefix<suffix>suffix<middle>", модель предсказывает middle
такая перестановка при обучении используется у половины сэмплов
модель с FIM работает на left-to-right задачах чуть хуже, чем без него
В работе опробованы разные подходы к чистке данных:
минимум 5 звезд на GitHub (ухудшает качество)
токенизатор конвертирует достаточно много текста в токены (неважно)
в коде достаточно много комментариев (работает)
различные дедубликации (работает)
Модели для CV
Успех трансформеров в обработке текстовых последовательностей привёл к попыткам (вполне успешным) их применения для обработки изображений. В этом разделе собраны модели, использующие в своём составе элементы архитектуры Transformer и решающие различные задачи компьютерного зрения (CV): векторизация и классификация изображений, сегментация, детекция объектов и т.д.
Image GPT
Информация о модели
OpenAI / 2020
Generative Pretraining from Pixels
Transformer Decoder / 76M, 455M, 1.4B, 6.8B
Работа основа на GPT-2, ставится задача генерации качественных признаков для задач CV. В качестве токенов используются пиксели, для сокращения огромного размера контекста вход ограничивается разрешением 32х32, а 3 восьмибитных цветовых канала (3x256) аппроксимируются одним девятибитным (1x512). После предобучения на Causal LM проивзодится либо fine-tuning, либо обучение головы поверх выходов модели.
ViT
Информация о модели
Google / 2020
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Transformer Encoder / 86M, 307M, 632M
Популярная и часто переиспользуемая в дальнейшем работа на основе кодировщика трансформера. Картинка разбивается на квадраты, которые становятся токенами.
Используется pre-LayerNorm, есть CLS-токен для предсказания класса картинки на предобучении, при дообучении голова заменяется на новую. На предобучении используются изображения в меньшем разрешении, на fine-tuning — в большем. С учётом фиксированности квадратов это приводит к более длинным последовательностям.
В модели используются обучаемые позиционные эмбеддинги, при увеличении длины последовательности используется их 2D-интерполяция с учётом позиции квадрата.
DeiT
Информация о модели
Facebook, Sorbonne University / 2020
Training data-efficient image transformers & distillation through attention
Transformer Encoder / 5M, 22M, 86M
Идея в дистилляции в ViT любой более крупной модели, в т.ч. CNN. На обучении в ViT добавляется похожий на CLS токен дистилляции, который предсказывает не верный ответ, а ответ большой модели. На выходе добавляется линейная голова.
BEiT
Информация о модели
Microsoft, Harbin Institute of Technology / 2021
BEiT: BERT Pre-Training of Image Transformers
Transformer Encoder / 86M, 307M
Ещё одна модель для CV на основе кодировщика. Изображение разбивается на квадраты 14х14, для каждого квадрата формируется два представления:
на основе пикселей (квадрат преобразуется в вектор, дальше как с текстом)
на основе внутренних представлений VAE (вектор из предобученного VAE)
В VAE 8К токенов-векторов, модель учится заранее или берется чужая (DALL-E). BEiT предобучается на Masked Image Model (MIM): на входе векторы пикселей, для масокированных токенов предсказываются их векторы представлений VAE.
Далее fine-tuning на целевую задачу или сеть-адаптер.
Swin Transformer
Информация о модели
Microsoft / 2021
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
Transformer Encoder / 29M, 50M, 88M, 197M
По аналогии с ViT изображение разбивается на квадраты-токены, преобразуемые в векторы, которые подаются на вход кодировщику. На входе квадраты имеют размер 4х4 пикселя, далее они постепенно сливаются и увеличиваются. При слиянии векторы квадратов конкатенируются, и размерность результирующего вектора понижается. При обработке квадратов используется локальный self-attention, что делает сложность подсчёта линейной по числу пикселей.
В модели используются парные блоки кодировщика трансформера для реализации внимания со сдвигом. В первом блоке разбиение на наборы квадратов для локального внимания равномерное. Во втором блоке делается сдвиг, чтобы друг на друга смогли посмотреть другие квадраты.
Позиционные эмбеддинги представлены обучаемой матрицей скаляров (как в T5). Модель предобучается на задачу классификации изображений.
Swin Transformer V2
Информация о модели
Microsoft / 2021
Swin Transformer V2: Scaling Up Capacity and Resolution
Transformer Encoder / 658M, 3B
Вторая версия модели призвана решить проблемы первой:
быстрый рост значений активаций на глубоких слоях из-за residual connections, приводящий к расхожденмю обучения при масштабировании сети до 660М параметров
низкое качество обработки изображений с разрешениями, большими, чем на обучении, при бикубической интерполяции позиционных эмбеддингов
Предлагаются следующие изменения:
поставить LayerNorm после self-attention и полносвязных слоёв
заменить в подсчёте внимания скалярное произведение (которое на пикселях выучивает сильно вырожденные веса) на cos(q, k) / tau + B_ij, где tau — обучаемый скаляр, B — позиционная матрица
вместо явной матрицы B обучается линейный слой на разности координат, разности при этом логарифмируются [log(dx + 1)] для улучшения экстраполяции
Модель предобучается классификацию небольших изображений (для скорости). Дообучается на классификацию более больших (но в меньшем количестве). Дообучается и на другие дискриминативные задачи на разных датасетах. При обучении используется сохранение только чекпойнтов активаций (меньше потребление памяти, дольше обучение) и ZeRO.
CLIP
Информация о модели
OpenAI / 2021
Learning Transferable Visual Models From Natural Language Supervision
Transformer Encoder + Transformer Decoder (Image + Text) / 150M, 426M
Основная идея работы в получении zero-shot классификатора изображений, работа которого регулируется промптами. Модель состоит из двух кодировщиков, один для изображений (ResNet с вниманием или ViT) и один для текста (GPT-2). Их выходы агрегируются в один вектор для изображения и один для текста.
На этапе обучения между векторами считается близость и CE-лосс по батчу пар изображение-текст описания.
На этапе инференса подаётся N текстов-промптов вида "это собака/кот/машина/...", вектор изображения умножается на векторы всех промптов и ответ выбирается по лучшему значению.
У GPT-2 токенизация byte-level BPE (словарь 49K), длина последовательности 76. Близость между векторами для стабильности обучения умножается на exp(t), где t — обучаемый параметр. Модель в zero-shot работает хорошо, но только на тех доменах и классах, которые видела при обучении.
ViTMAE
Информация о модели
Facebook / 2021
Masked Autoencoders Are Scalable Vision Learners
Transformer Encoder / 86M, 304M, 632M
В данной работе предлагается решать задачу маскирования, сделав её сопоставимой по сложности с MLM для текстов. Изображение разбивается на квадраты, как в ViT, 75% квадратов равномерно случайно маскируются (это ещё и ускоряет обучение). Кодировщик получает на вход только немаскированные квадраты (если подавать их, перемежая векторами масок, то качество падает).
Декодеровщик (тоже ViT, но маленький, 10% от кодировщика), получает выходные представления кодировщика вместе с масками и должен восстановить всё, предсказывая пиксели маскированных квадратов. Эта задача оказалась лучше предсказания токенов-векторов из BEiT / DALL-E. После обучения декодировщик удаляется.
При дообучении размораживается только часть блоков кодировщика вплоть до одного последнего.
PoolFormer
Информация о модели
Sea AI Lab, National University of Singapore / 2021
MetaFormer Is Actually What You Need for Vision
Transformer Encoder / 12M, 21M, 31M, 56M, 73M
Ещё одна работа по кодированию изображений. Как и в прочих работах, изображение разбивается на квадраты, преобразуемые в токены-векторы. Векторы проходят 4 этапа обработки, на каждом квадраты сливаются с понижением размерности, происходит уменьшение числа токенов и изменение их размерности (по аналогии с Swin Transformer).
Attention заменяется на простой пулинг между соседними токенами в окне размера 3-7, число токенов сохраняется за счёт паддинга. GeLU вместо ReLU, GroupNorm c числом групп 1 вместо LayerNorm. Предобучение на задачу классификации.
ConvNeXt
Информация о модели
Meta, Berkeley University / 2022
CNN / 29M, 50M, 89M, 198M, 350M
Строго говоря, модели этого типа не являются трансформерами, скорее, это CNN (в данном случае ResNet-50), улучшенные с помощью техник из Swin Transformer.
Изменения:
перераспределение числа блоков свёрток на разных уровнях сети
изменение начального блока свёртки (с 7х7 на 4х4)
обратный bottleneck: в трансформерах в MLP идёт проекция x -> 4x -> x, а в CNN x -> x -> 4x, тут тоже число свёрток изменили на обратный bottleneck
активации GeLU вместо ReLU
нормализации LayerNorm вместо BatchNorm
меньше слоёв-активаций
VAN
Информация о модели
Tsinghua University, Nankai University / 2022
Transformer Encoder / 4M, 14M, 27M, 45M, 60M, 90M, 200M
Учёт информации в последовательности может производится свёртками (локальный контекст) или self-attention (глобальный контекст). Учитывать глобальный контекст также можно большими свёртками, но это вычислительно затратно.
VAN основывается на идее использования больших свёрток с их декомпозицией в тройки более легковесных. Нейросеть на входе получает целое изображение, как в CNN. Свёртки дают веса attention (без softmax) за О(n), которые умножаются на вход, в остальном используется обычный блок кодировщика трансформера с нормализацией BatchNorm. Используется оследовательное уменьшение разрешения входов блоков (как в Swin Transformer) с увеличением количества каналов.
ConvNeXt V2
Информация о модели
KAIST, Meta / 2023
ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
CNN / 4M, 5M, 9M, 16M, 29M, 89M, 198M, 659M
Вторая версия ConvNeXt тоже основана на CNN. Идея обучения основана на Masked AE с иерархическим кодировщиком (как в ViTMAE), но в качестве базовой архитектуры используется ConvNeXt.
Изображение разбивается на квадраты 32х32, 60% квадратов маскируются и подаются в иерархический ConvNeXt в понижением размерности. В ViTMAE на вход кодировщику идут только немаскированные квадраты, с CNN так не получится — нужно сохраняться 2D-структуру входа. При этом использовать какие-то обучаемые токены-маски не хочется — это портит качество, и на инференсе масок нет. Поэтому маскировать предлагается использованием разреженного представления изображений и разреженными свёртками на них, которые покрывают только нужные районы пикселей. Обученные разреженные свёртки конвертируются в обычные после обучения.
В качестве декодировщика используется один плоский блок ConvNeXt, на выходе все пиксели, лосс обучения — MSE на маскированных блоках пикселей.
У первой версии ConvNeXt были проблемы:
получается много карт признаков с затухшими по всем каналам активациями
между вытянутыми в векторыми картами признаков на одном слое для разных каналов (свёрток) косинусные расстояния получаются малыми
В качестве решения в новой версии предлагается использовать для карты признаков новый слой Global Response Normalization (GRN). Для это сперва вычисляется величина gx, равная L2-норме матрицы карты признаков для канала (аналог пулинга). Далее nx, равная отношению gx и его среднему по каналам (относительная важность канала). После этого итоговое преобразование получается по формуле (преобразование + сдвиг + residual connection)
Параметры и
— обучаемые. GRN используется и при предобучении, и при дообучении, качество получается выше.
Модели для генерации изображений по тексту и изображениям
В этом блоке собраны модели, собравшие больше всего хайпа в 2022 году до релиза ChatGPT: генераторы изображений по текстовым описаниям. На текущий момент в области доминируют диффузионные модели в связке с трансформерами, они позволяют не только генерировать изображения, но и изменять их содержимое или повышать разрешение.
Diffusion Models на пальцах
Суть в итеративном добавлении в изображение нормального шума, который модель обучается предсказывать с целью его удаления
Модель учится предсказывать шум по изображению и номеру итерации зашумления
На обучении подаётся много пар "изображение - шаг зашумления", предсказывается шум (по MSE), шаг зашумления — обучаемый вектор на каждый номер итерации от 0 до Т
Вывод формул производится через reparametrization trick и вариационную нижнюю оценку ELBO, формулы позволяют применять шум не последовательно, а сразу для шага t, что ускоряет процесс обучения
На инференсе входом является изображние-шум и вектор шага T, модель итеративно выделяет шум, который удаляется из входа, что приводит к получению выходного изображения
Процесс может быть обусловлен, например, на текстовый промпт
Для ускорения можно работать не на уровне пикселей, а в латентном пространстве меньшей размерности
DALL-E
Информация о модели
OpenAI / 2021
Zero-Shot Text-to-Image Generation
VAE + Transformer Decoder / 12B
Работа выполняется в два этапа: сперва обучаются токены для изображений, после чего выучивается совместная генеративная модель на текстах и изображениях.
На первом этапе обучается dVAE, в котором изображение переводится из пространства 256x256x3 в 32x32xdim и обратно, где dim — размерность вектора скрытого представления. Всего таких векторов-токенов 8192, они дальше и используются в модели.
В качестве основной модели используется декодировщик Sparse Transformer. На вход подаются токены текста и токены изображения, модель выучивает совместное распределение (Causal LM) и после может генерировать по тексту токены изображения. По этим же токенам dVAE генерирует изображение. Вес лосса на текстах 1/8, на токенах изображения — 7/8.
У текстовых токенов эмбеддинги обычные и позиционные, у токенов изображений — обычный, позиционный по столбцу и позиционный по строке. Максимальная длина последовательности текстовых токенов 256, токенизация BPE (словарь 16К).
Используется несколько видов self-attention:
токены текста могут обращать внимание на все входные токены
токены изображения могут обращать внимание на все токены текста
токены изображения могут обращать внимание друг на друга через два типа внимания: на соседей по вертикали и по горизонтали.
Для регуляризации используется BPE дропаут для токенов текста при обучении. Основная часть весов и активаций в float16, иногда для стабильности (например, в residual connections) делается переход в float32.
GLIDE
Информация о модели
OpenAI / 2021
GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
2 x [U-Net + Transformer Encoder] / 3.5B + 1.5B
Диффузионная модель (DM), работающая на уровне пикселей, с текстовым управлением. Основана на архитектуре U-Net со свёртками, внимание и residual connection. В работе используются разные подходы к управлению генерацией. Среднее предсказываемого шума можно смещать в сторону градиента заданной функции от текста, сила смещения определяет trade-off между качеством и разнообразием. Тип управления зависит от используемой функции, варианты:
предсказание вероятности некоторого классификатора от текста
скалярное произведение вектора изображения и вектора текста, полученные с помощью CLIP
classifier-free guidance: модель одновременно учится на обычных и обусловленных данных, для чего в обычных данных используется одинаковый фиксированный вектор условия (означающий отсутствие условий). Далее обычное значение шума смещается в сторону разности между своим обусловленным и обычным значениями.
CLIP (ViT Large) учится на изображениях с разным уровнем шума для адекватности векторов.
Модель композитная, состоит из диффузионной модели с текстовым контролем на изображениях 64х64, кодировщика текстовых промптов для этой модели и upscale диффузионной модели для повышения разрешения результата первой модели до 256х256.
Тексты инкорпорируются в модель так:
текст проходит через кодировщик трансформера для генерации представление токенов и CLS
вектор CLS конкатенируется с эмбеддингом шага t
векторы токенов добавляются в attention-слои на всех слоях U-Net
Помимо генерации с нуля модель умеет дорисовывать изображения в отмеченном маской регионе в соответствии с заданным текстовым условием. При обучении этому
случайные части изображения затираются и не показываются модели на входе
к RGB добавляется канал маски, который указывает на то, что затёрто, и ещё три дополнительных RGB-канала
для upscale-модели входное изображение в разрешении 64х64 подаётся полным, а выходное в разрешениее 256х256 - маскированным
Latent Diffusion [Stable Diffusion]
Информация о модели
CompVis [Stability AI] / 2021 [2022]
High-Resolution Image Synthesis with Latent Diffusion Models
U-Net + VAE + Transformer Encoder / 170M-400M, 1.45B
Основная идея в том, что диффузионная модель, работающая в пространстве пикселей, сперва обучается переводить всё в латентное более низкоразмерное представление, после уже работает в нём. Поэтому имеет смысл сразу учить её в таком пространстве, а не на пикселях.
Для этого обучается две модели:
автокодировщик VAE для понижения размерности и генерации из латентного пространства
DM на его внутренних представлениях
Автокодировщик учится в стиле GAN с дискриминатором на его результатах, применяется дополнительная регуляризация на близость представлений к стандартному нормальному распределению.
Условная генерация может производиться на основании текстов, изображений, семантических карт. Любой из этих объектов должен кодироваться своей моделью-кодировщиком в один или несколько векторов. Результат идёт в каждый шаг декодирования DM в латентном пространстве: если условие вектор, то он конкатенируется с латентным вектором на входе шага, если последовательность векторов — то используется в cross-attention на разных слоях U-Net. Для текстов промптов используется текстовый кодировщик из CLIP.
Обучается общая модель для разных задач: text-to-image, coloring, inpainting, super resolution.
DALL-E 2 (unCLIP)
Информация о модели
OpenAI / 2022
Hierarchical Text-Conditional Image Generation with CLIP Latents
3 x U-Net + Transformer Encoder + Transformer Decoder / 3.5B + 700M + 300M + 630M + 1B
Общий процесс работы новой версии DALL-E следующий
Текстовый кодировщик из CLIP кодирует описание изображения в вектор
На основании этого вектора prior-модель генерирует вектор изображения (такой, какой генерируется в CLIP по изображению)
По этому вектору и, опционально, вектору текста, диффузионная модель-декодировщик генерирует итоговое изображение
Декодировщик основан на тех же принципах, что и GLIDE:
CLIP-вектор текста проецируется и добавляется к вектору шага диффузии
дополнительно этот вектор переводится в 4 токена, которые конкатенируются с выходом текствого кодировщика GLIDE, и все токены идут в cross-attention в слоях U-Net
Декодировщик (основная DM) генерирует изображение 64х64, параллельно учатся две повышающие модели 64 -> 256 -> 1024. Повышающие модели при обучении обуславливаются на повреждённые картинки, с нормальным размытием и шумом, это улучшает качество их работы.
При обучении основной DM используется classifier-free guidance: CLIP-вектор текста зануляется в 10% случаев, текстовый промпт удаляется в 50% случаев.
Prior-модель может быть либо авторегрессионной, либо тоже диффузионной, DM работает лучше при аналогичных размерах моделей.
Imagen
Информация о модели
Google / 2022
Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
3 x U-Net + Full Transformer / 2B + 600M + 400M + 11B
В основе Imagen лежит идея о том, что рост размера текстового кодировщика может привнести в генеративную модель больше, чем рост размера DM. Поэтому CLIP был заменён на обычную T5-XXL, которая выдаёт набор эмбеддингов, отправляемых в cross-attention всех обучаемых DM. Их, как в других работах, используется три: одна основная, две повышающие разрешение (64 -> 256 -> 1024).
Основное изображние получается из шума, обусловленного на вектор текста, повышающие разрешение модели при обучении обуславливаются на повреждённые изображения с нормальным размытием и шумом.
Для контроля генерации используется classifier-free guidance, векторы текста зануляется в 10% случаев. Сама базовая архитектура U-Net в работе была оптимизирована по скорости работы и потребляемой памяти.
Модели для генерации текста по тексту и изображениям
Модели этого раздела обычно называют мультимодальными, они генерируют текст, но при этом могут принимать на вход и анализировать данные разной природы. Чаще всего это тексты и двумерные изображения, но иногда могут обрабатываться и сложные описания сред и сцен. Выходной текст при этом может быть как языком, так и набором команд, например, для робота.
SimVLM
Информация о модели
Google / 2021
SimVLM: Simple Visual Language Model Pretraining with Weak Supervision
Full Transformer / 86M, 307M, 632M
На входе кодировщика токены изображения и токены префикса текста описания, на выходе декодировщика предсказываются токены суффикса текста описания (Prefix LM).
Изображение разбивается на квадраты и векторизуется с помощью CNN (три первых блока ResNet). У токенов изображения и текста на входе свои обучаемые позиционные эмбеддинги. Ко всем токенам применяется обычный self-attention. У токенов изображений дополнительно есть относительный 2D attention в блоке кодировщика.
Модель предобучается одновременно на 800Гб текстов и 1.8 миллиардах пар изображений и их описаний. Дообучение производится на 6 задач с настройкой всех параметров модели.
Словарь 32К, максимальная длина последовательности 256 и для кодировщика, и для декодировщика. Изображения на входе имеют разрешение 224х224, разбиение производится на квадраты 14х14.
CoCa
Информация о модели
Google / 2022
CoCa: Contrastive Captioners are Image-Text Foundation Models
Transformer Encoder + Transformer Decoder / 86M + 297M, 303M + 484M, 1B + 1.1B
Отдельный кодировщик для изображений (ViT или CNN) + общий декодеровщик, в котором первая половина обрабатывает текст, вторая — совместно текст и выход кодировщика изображений.
Изображение 288х288 нарезается на квадраты 18х18, которые кодировщик переводит в векторы + общий вектор из attention pooling на основе всех этих векторов.
На выходе первой половины декодировщика векторы текста и вектор CLS токена в конце последовательности, токенизация SentencePiece (словарь 64К). Векторы текста и изображения объединяются во второй части декодировщика через cross-attention.
Используются два лосса с весами 1 и 2 соответственно:
близость между вектором из attention pooling изображения и вектором CLS-токена текста для пары изображение-описание
авторегрессионный лосс на выходе всего декодировщика (уже обусловленный на изображение)
При дообучении можно замораживать кодировщик изображений и доучивать тольуо attention pooling.
BEiT-3
Информация о модели
Microsoft / 2022
Image as a Foreign Language: BEiT Pretraining for All Vision and Vision-Language Tasks
Transformer Encoder / 1.9B
Использование MoE на основе полносвязных слоёв для изображений, текстов и пар изображений-текстов. Модель состоит из блоков кодировщика трансформера:
на входе векторизованные квадраты изображения и токены соответствующего текста
сперва блоки кодировщика содержат общий self-attention и отдельные полносвязные слои для изображений и текстов
в трёх последних блоках и self-attention, и полносвязные слои общие
Изображения 224х224 нарезаются на квадраты 14х14, применяются аугментации: обрезка, растяжение, изменения цветов. Токенизация текста SentencePiece (словарь 64К).
Модель предобучается на задачу Masked Data Modeilng (аналог MLM) на 21М пар изображение-текст, 14М изображений и 160Гб текстов.
Flamingo
Информация о модели
DeepMind / 2022
Flamingo: a Visual Language Model for Few-Shot Learning
CNN + Transformer Decoder / 630M + 3.2B, 630M + 9.3B, 630M + 80B
Flamingo — предобученные кодировщик изображений и большая языковая модель (Chinchilla), которые замораживаются и дополняются обучаемыми параметрами. Формат входа языковой модели "<img> текст <img> текст ...", соответствующие токенам <img> изображения же идут на вход кодировщику.
Изображения кодируются NormalizerFree ResNet, 2D выходы переводятся в одномерные, видео переводится в фреймы, каждый кодируется в 2D + обучаемый эмбеддинг времени, после чего всё тоже переводится в одномерные векторы.
На выходах кодировщика изображения ставится Perceiver Resampler, который преобразует любую последовательность векторов в набор из 64 векторов. Для этого входы идут в обучаемый слой cross self-attention, где переводятся в ключи и значения, а запросы получаются из 64 обучаемых латентных векторов. Результирующие 64 вектора проходят через полносвязные слои и после идут в языковую модель.
В LLM между замороженными слоями добавляются новые блоки следующего вида:
cross self-attention: ключи и значения из токенов изображения, запросы из токенов текста
полносвязный слой
результат проходит через tanh-гейт, пропускная сила которого зависит от параметра
, который изначально равен 0 (не пропускать ничего) и при обучении постепенно растёт
residual connection от входа блока
В декодировщике токен текста может смотреть в self-attention только на токены текста до него и токены только последнего до него изображения (не на все), это позволяет обобщение на разное число изображений в одном сэмпле.
В разных версиях модели обучаемые слои добавляются в LLM после каждого 1-го, каждого 4-го и каждого 7-го замороженного слоя.
Модель учится на Prefix LM (по всему входу предсказать текстовый суффикс). Используются model параллелизм и ZeRO. Все обучаемые параметры в float32, все активации, градиенты и замороженные параметры в bfloat16.
PaLI
Информация о модели
Google / 2022
PaLI: A Jointly-Scaled Multilingual Language-Image Model
Transformer Encoder + Full Transformer / 1.8B + 1.2B, 1.8B + 13B, 3.9B + 13B
Обычный подход с кодировщиком изображения (своя версия ViT большего размера и с доработками) и текстовой моделью (mT5) с cross-attention на выходы кодировщика изображения.
ViT учится на изображениях 224x224, большая модель дообучается дополнительно на 588х588. Далее модель замораживается, в основном обучении настраивается только mT5.
Задачи основного предобучения (кросс-язычные, если это возможно):
MLM (15% слов выкидывается), спаны маскируются одним токеном, предсказывается последовательность значений этих токенов (Т5)
две задачи дополнения и генерации alt-text (текстовый placeholder изображения)
генерация текста OCR по изображению
генерация по изображению и тексту вопроса текст ответа на вопрос (VQA)
определение наличия объектов на изображении / генерация списка объектов (только для английского языка)
определение наличия объекта в указанных границах на изображении
Все задачи, кроме MLM обучаются с текстовыми промптами ("Generate OCR ..."). По сути во всех задачах Prefix LM — предсказать по общему входу текстовый суффикс.
Gato
Информация о модели
Deepmind / 2022
CNN + Transformer Decoder / 79M, 364M, 1.2B
Идея: модели плохо обобщаются на задачи, не похожие на те, что они видели при обучении, поэтому лучше учить на максимально большой набор задач. Все типы данных кодируются и подаются на вход в одной последовательности-промпте. Способы кодирования зависят от данных:
текст — SentencePiece (словарь 32К), порядок слева направо
изображения — блок ResNet (квадраты 16х16), порядок слева направо и сверху вниз
дискретные и вещественные значения действий (например, роботов) — в целочисленные векторы
Для не-изображений обучаются матрица эмбеддингов и позиционные эмбеддинги. Для квадрата изображения эмбеддинг получается из ResNet, к нему обучается эмбеддинг позиции в изображении.
Примеры типов задач: ведение диалога, управление манипулятором робота, игры Atari, описание изображений. Для игр Atari входом является изображение-состояние игры, происходит предсказание действия, после чего всё повторяется с уже следующим состоянием. Везде обучение ведётся на Prefix LM. Максимальная длина последовательности 1024. При инференсе используется подход из Transformer-XL для увеличения длины.
BLIP-2
Информация о модели
Salesforce / 2023
2 x Transformer Encoder (Image + Q-former) + [Transformer Decoder | Full Transformer] / 300M + 190M + 2.7B, 300M + 190M + 3B, 1B + 190M + 2.7B, 1B + 190M + 3B, 1B + 190M + 6.7B, 1B + 190M + 11B
В работе предлагается заморозить предобученные кодировщик изображение и LLM, а между ними поместить обучаемый блок (Q-former), который будет "переводить" изображение и текст промпта для LLM, генерирующей итоговые ответ.
Q-former извлекает из изображения фиксированное количество векторов (в работе 32) за счёт обучения заданного количества векторов-запросов Q, он состоит из блоков следующего вида
блок BERT, на входе векторы Q и векторы T текста промпта, оба входа проходят через self-attention (в ряде задач совместно, в ряде — независимо, в каких как — будет понятно далее)
векторы Q далее идут в cross-attention, на их основании получаются запросы, ключи и значения получаются из векторов изображения после его кодирования
после выходные Q и T проходят через свои полносвязные слои, результат идёт в LLM
Всего в Q-former ~190M параметров, включая сами векторы-запросы. Предобучение производится в два этапа: кодировщик изображения + Q-former и они же + декодировщик.
Задачи первого этапа:
-
близость между парой текст-изображение:
Q и T кодируются независимо
на выходе вычисляется косинусная близость между всеми Q и вектором CLS-токена T, выбирается лучшее значение
эта величина считается между всеми векторам в Q и T в батче, для верной пары она должна быть высокой, для прочих — ниже
-
генерация текста по изображению (Conditional Causal LM):
векторы Q могут в self-attention смотреть только на себя
векторы T могут смотреть на все векторы Q и на своих предшественников в T
DEC-токен заменяет CLS-токен как первый в T для сигнала о декодировании
-
сопоставление (matching) изображения и текста:
все векторы в self-attention могут смотреть на всех
выходные представления Q отдельно подаются в линейный классификатор, их логиты усредняются и из них получается итоговое значение качества соспоставления
для обучения классификатора используются hard negative samples
для верной пары значение должно быть высоким, для прочих — ниже
Итоговые Q проецируются обучаемым полносвязным слоем в размерность LLM. Они ставятся перед токенами промпта, и вся последовательность становится входом декодировщика.
Декодировщик может быть либо GPT-like, либо T5-like моделью, что определяет задачу: генерация текста по изображению или генерация суффикса текста по изображению и тексту-префиксу.
Для обучения использовались как реальные пары изображение-текст, так и с синетическими подписями. Изображения кодируются в разрешении 224x224 моделью типа CLIP ViT без последнего слоя, в качестве LLM используются OPT и Flan-T5. Замороженные веса хранятся в float16 / bfloat16.
PaLM-E
Информация о модели
Google / 2023
PaLM-E: An Embodied Multimodal Language Model
Transformer Encoder + Transformer Decoder / 4B + 8B, 22B + 62B, 22B + 540B
Модель в целом схожа с GaTo. Изображения кодируются ViT, выходные векторы с векторами токенов текстов и команд подаются в PaLM, генерирующую выходные тексты. Кодируемые объекты:
векторы текстов
векторы изображений
векторы объектов и их состояний на изображениях-сценах
векторы Object Scene Representation Transformer (ещё одно представление для 3D сцен)
векторы токенов obj_j для явного указания объектов на сцене по номерам
Во всех задачах используется Prefix LM, задачи: VQA, object detection, robot manipulation.
GPT-4
Информация о модели
OpenAI / 2023
Transformer Decoder + (?)
Закрытая модель с небольшим количеством известных деталей. Предположительно декодер с sparse attention и мультимодальным входом. Авторегрессионное обучение, дообучение на RLHF, длина последовательности в моделях от 8K до 32К.
Протестирована на сдаче человеческих экзаменов в zero- и few-shot, многое сдаёт на уровне людей. Решает задачи по картинке (в т.ч. математику) как и другие ММ-модели, как сразу, так и пошагово, понимает и объясняет картинки, анализирует и генерирует код. Работает на разных (в т.ч. low-resources) языках.
Kosmos-1
Информация о модели
Microsoft / 2023
Language Is Not All You Need: Aligning Perception with Language Models
Transformer Encoder + Transformer Decoder / 300M + 1.3B
Относительно небольшая мультимодальная модель с кодировщиком для изображений и декодировщиком трансформера для генерации. Для фиксации количества токенов одного изображения используется Resampler из Flamingo. Декодировщик основан на архитектуре трансформера Magneto. Для кодирования позиций используются xPos эмбеддинги.
Формат входа (всё в виде векторов):
"<s> Text1 <image> Image1 </image><image> Image2 </image> Text2 ... </s>".
Данные: тексты, изображения, пары текст-изображение, тексты со вставками изображений. Модель учится Prefix LM: по мультимодальному входу с частью текста предсказывать оставшийся текст.
Обучение инструкциям встроено в процесс основного обучения (~120K сэмплов), сэмплы только текстовые. Изображения 224x224 кодируются предобученным и замороженным до последнего слоя CLIP ViT. Максимальная длина последовательности 2048, токенизация SentencePiece (словарь 64К).
Модели для анализа звука и ASR
В финальном блоке собраны модели для ASR. Как правило, они основаны на предобучении на неразмеченных данных для генерации эффективных признаков с последующим дообучением на разметке под целевые задачи (ASR, перевод речи, определение языка). В обработке звуковых дорожек активно применяется связка CNN и кодировщика трансформера: свёрточная сеть (или отдельные слои) используются для извлечения локальных признаков, а трансформер (self-attention) отвечает за глобальную обработку в рамках всей последовательности аудиофреймов.
Conformer
Информация о модели
Google / 2020
Conformer: Convolution-augmented Transformer for Speech Recognition
Conformer (Transformer Encoder + CNN) / 10M, 30M, 118M
В работе предлагается блок Conformer, представляющий собой блок трансформера со встроенным свёрточным блоком. Составные части:
FF-модуль: pre-LayerNorm + 2 полносвязных слоя с активацией Swish + дропауты
Attention-модуль: pre-LayerNorm + multi-head self-attention + дропаут
CNN-модуль: 2 pointwise Conv + 1D Depthwise Conv + Layer / Batch norm + активации (Swish, Glu) + дропаут
Блок Conformer представляет собой цепочку 0.5 * FF-модуль + Attention-модуль + CNN-модуль + 0.5 * FF-модуль, все с residual connection, сверху LayerNorm.
Итоговая модель (снизу вверх):
SpecAug
Conv subsampling
полносвязный слой + дропаут
N блоков Conformer
LSTM поверх выходов для декодирования
T-T
Информация о модели
Microsoft / 2020
Developing Real-time Streaming Transformer Transducer for Speech Recognition on Large-scale Dataset
Conformer (Transformer Encoder + CNN) + LSTM / 80M
Развитие Conformer. Входной сигнал (акустические признаки) нарезается на фреймы, которые подаются на вход кодировщику с блоками Conformer (с небольшими изменениями).
Позиционное кодирование относительное (lookup-таблица), вектор от индексов i и j прибавляется к векторам ключей в self-attention.
В силу длины последовательностей нужно уменьшать область работы внимания:
используется маска внимания, которая разделяется всеми слоями
фреймы собираются в блоки без пересечений
внутри блока фреймы обращают внимания друг на друга все
фреймы из левого блока не могут видеть фреймы из правого
фреймы из правого блока могут смотреть на фреймы из левого при попадание в окно фиксированного размера
Поверх выходов LSTM-предиктор предсказывает вектор ответа на текущем фрейме на основании предыдущего ответа, этот вектор суммируется с выходом кодировщика. Полученный вектор идёт в полносвязный слой и softmax, из которого предсказывается ответ для текущего фрейма.
Для оптимизации используется кэширование ключей и значений и обработка блока фреймов за раз за счёт небольшой задержки предсказания для отдельных фреймов этого блока.
Wav2Vec2
Информация о модели
Facebook / 2020
wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations
CNN + Transformer Encoder / 95M, 317M
Идея в предобучении на неразмеченных записях в стиле BERT с дообучением на размеченных.
На входе модели центрированный сырой WAV сигнал, к которому применяются temporal convolution + LayerNorm + GeLU для получения латентных векторов на его частях. К результату применяется CNN (позиционное кодирование) с GeLU. Выход CNN складывается со скрытыми векторами, и всё через LayerNorm идёт к кодировщик трансформера.
Для обучения нужен как-то unsupervised таргет. Для этого используются квантизованные представления, получаемые с помощью модуля квантизации:
заводится G словарей обучаемых кодов-векторов, по V кодов каждом
для входного вектора подбирается по одному лучшему коду из каждого словаря (для предсказания лучшего используется hard Gumbel softmax)
G векторов конкатенируются и проецируются в размерность входа, получается квантизованное представление исходного вектора
векторы-коды учатся в процессе предобучения всей модели
Задача предобучения:
часть входов трансформера заменяется вектором маски (N спанов по M векторов, могут быть перекрытия), N=6.5% от длины, M=10
для всех маскированных входов генерируется квантизованные векторы
лосс считается для центрального токена спана
кодировщик должен выдать для этого токена вектор, который будет по косинусу ближе к квантизованному вектору этого токена, чем к квантизованным векторам K других маскированных токенов (дистракторов)
общий лосс = взвешенная сумма этого лосса и лосса разнообразия, который максимизирует энтропию в распределениях на вектора-кодах (т.е. все коды должны участвовать)
Fine-tuning:
квантизация убирается, добавляется полносвязный слой на выходах трансформера
на выходах этого слоя производится supervised обучение на размеченных аудиозаписях
Модель показывает бьёт конкурентов при обучении на аналогичных объёмах данных. Но основное достижение в том, что с относительно небольшими потерями можно сокращать объёмы размеченных данных на этапе дообучения в 10-1000 раз.
XLSR
Информация о модели
Facebook / 2020
Unsupervised Cross-lingual Representation Learning for Speech Recognition
CNN + Transformer Encoder / 95M (?), 317M
Wav2Vec2, обученная на мультиязычных данных для повышения качества:
учится G=2 словаря по V=320 векторов-кодов в каждом
максирование: 6.5% спанов от длины, длина спана 10 (с перекрытием)
все веса и квантизованные векторы общие для разных языков
L2-регуляризация на выходы CNN-генератора признаков для стабилизации
Фреймы по 25ms, stride 20ms
K=100 сэмплов-дистракторов из маскированных токенов на каждый целевой
Hubert
Информация о модели
Facebook / 2021
HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Units
CNN + Transformer Encoder / 95M, 317M, 964M
Модель, идейно схожая с Wav2Vec2: учится для маскированных фреймов предсказывать представления, полученные с помощью другого метода.
Архитектура:
CNN-кодировщик аудиосигнала (7 512-канальных слоёв)
кодировщик траснформера
полносвязный слой проекции и слой векторов-кодов
Обучение в 2 этапа: учится K-means и затем на нём учится основной кодировщик.
Первый этап (K-means):
аудиосигнал WAV нарезается на аудиофреймы, которые переводятся в векторы MFCC-признаков (dim=39)
на них учится K-means (K=100), векторы кластеров — векторы-коды
каждый фрейм входного сигнала можно сопоставить с вектором-кодом
Второй этап (кодировщик):
маскирование как в Wav2Vec2 (8% спанов от длины, длина спана 10)
CNN даёт векторы признаков для фреймов в 20ms
маскированные заменяются на обученный вектор маски
вход подаётся в энкодер, выход проецируется в размерность векторов-кодов
между выходным вектором и всеми векторами-кодами считается косинусное расстояние, все они подаются в softmax с температурой
на этом распределении для маскированных токенов считается CE лосс
Этапы повторяются итеративно, начиная со 2-й итерации обучение K-means производится не на векторах MFCC-признаков, а на векторах представлений с промежуточного слоя последней версии кодировщика.
Разбиение на два этапа упрощает и стабилизирует обучение, больше не требуется сложный лосс, как в Wav2Vec2.
Предобученная модель дообучается (с замороженной CNN) на размеченных записях.
XLS-R
Информация о модели
Meta / 2021
XLS-R: Self-supervised Cross-lingual Speech Representation Learning at Scale
CNN + Transformer Encoder / 317M, 965M, 2162M
Ещё одна попытка обучить Wav2Vec2 на мультиязычных данных:
больше языков (> 100 vs. > 10), данных и параметров сети, чем в XLSR
длина последовательности 20 секунд
сэмплирование языка/датасета в батч из p ~ sqrt(доля языка в корпусе)
Whisper
Информация о модели
OpenAI / 2022
Robust Speech Recognition via Large-Scale Weak Supervision
CNN + Transformer Encoder + Transformer Decoder / 39M, 74M, 244M, 769M, 1550M
На текущий момент одно из лучших открытых решений для распознавания речи, которое стоит несколько в стороне от предыдущих работ этого раздела. Ключевые идеи:
unsupervised предобучение с дообучением под конкретный датасет и слабый декодером плохо генерализируется и не работает в zero-shot
хорошо размеченных данных мало, но можно брать размеченные плохо, их тоже немного, но можно попытаться их нагенерировать автоматически
можно учить модель только на размеченных (плохо или хорошо) данных без какого-либо unsupervised предобучения, и в этом случаем модель будет работать в zero-shot режиме без
Сбор и подготовка данных для Whisper:
-
данные набираются из сети, предварительная фильтрация и обработка:
удаление ASR
записи, в которых язык текста не совпадает с языком звука, переносятся в отдельный набор данных
записи без текста тоже складываются в отдельный набор
записи нарезаются на файлы по 30 секунд с соответствующей транскрибацией
-
в результате получается несколько наборов данных:
текст-запись (с метками времени и без) на английском и других языках
текст или запись (не обязательно с голосом)
текст-запись (с метками времени и без), в которых записи на разных языках, а текст на английском
после первой итерации обучения данные повторно фильтруются на основании анализа качества работы модели
Архитектура модели:
на входе Log-Mel-спектрограмма на фреймах 25ms со stride 10ms, исходный аудисигнал нормируется в [-1, 1] со средним около 0 по датасету
CNN-кодировщик (2 свёрточных слоя с активацией GeLU)
к выходам добавляются синусоидальные позиционные эмбеддинги
кодировщик трансформера с pre-LayerNorm + LayerNorm на итоговых выходах сети
декодировщик трансформера на текстах с обучаемыми позиционными эмбеддингами и cross-attention на выходах кодировщика
токенизация byte-level BPE из GPT-2, переобучена для мультиязычности без изменения размера словаря
Задачи обучения (используется универсальный входной формат для всех):
распознавание английской речи в английский текст
распознавание речи на языке Х в текст на языке Х (не английский)
детекция речи
При обучении используется data-параллелизм и чекпойнты активаций, формат данных float16.
Заключение
Ниже короткие выводы из представленного материала. Они могут быть смещёнными, неполными или просто неверными, лучше анализировать самостоятельно. Но если компетенция в области пока не позволяет, и хочется с чего-то начать, то отталкиваться можно от моих мыслей.
Модели растут. Простые добавления слоёв и рост датасетов периодически разбавляются разными альтернативными техниками, позволяющими получить прирост качества (работа с внешними данными и инструментами, усовершенствование структуры сети и новые техники дообучения), но пока все улучшения не заменяют, а дополняют рост размеров промышленных решений. Тем не менее, open-source модели стремительно догоняют гигантов по качеству, имея в десятки раз меньше параметров, так что скоро ситуация вполне может измениться.
С одной стороны, OpenAI сейчас идёт в направлении close-source, с другой стороны, они уже пытались когда-то не выкладывать веса GPT-2, ничего из этого не вышло. Опять-таки, тренд последних месяцев в усовершенствовании и оптимизации стоимости дообучения и скорости инференса open-source моделей в значительной степени обесценивает большие приватные модели как продукты.
Все больше работ демонстрируют превалирование качества обучающих данных над их количеством: правильные отбор и формирование датасетов позволяют сократить время обучения и повысить качество результата.
-
Очевидно, что значительная часть рассмотренных моделей уже стала или скоро станет историей, не выдерживая конкуренции, но на некоторые стоит обратить больше внимания. Если коротко:
в блоке моделей-кодировщиков признаными надёжными мультиязычными решениями являются варианты моделей XLM-RoBERTa и LaBSE;
среди открытых генеративных моделей наибольший интерес представляют LLaMA и модели от EleutherAI (и те, и те со всеми своими дообученными вариантами), Dolly-2, BLOOM (опять же с вариантами instruct-обучения);
для русского языка интересны open-source модели от Сбера (русские GPT-3, FRED-T5) и опять же LLaMA с подходящим дообучением;
из открытых работ для кода можно смотреть в сторону SantaCoder, но в целом все эти модели ощутимо уступают в качестве работы ChatGPT/GPT-4;
Transformer-XL и Sparse Transformer внедряют техники, используемые в других работах, на них стоит посмотреть внимательнее;
также стоит изучить те важные, на мой взгляд, работы, которые отмечены курсивными комментариями в конце: LaMDA, Megatron-Turing NLG, Sparrow.
Спасибо за внимание и успехов!
Мурат Апишев, руководитель NLP RnD команды в Just AI.
Спасибо компании Just AI и моим коллегам за поддержку, благодаря которой статья была написана, а также Екатерине Артёмовой за рецензирование итогового материала и ценные комментарии.