Esc
Горячие клавиши
?Show this help ⌘KSearch tToggle dark/light theme nOpen notes j / kScroll down / up bBack to top /Focus search EscClose panels
Все курсы
GenAI System Design
ENRUUZ
Заметки
Current chapter
0 chars
Highlight color
Глава 1

Введение и обзор

~38 мин чтения

Эта книга предназначена для того, чтобы помочь инженерам машинного обучения (ML) и специалистам по данным успешно пройти собеседования по проектированию ML-систем с акцентом на генеративный ИИ (GenAI). Она дополняет предыдущую книгу «ML System Design Interview» [1], охватывающую фундаментальные темы: системы поиска и рекомендаций. Данная книга исследует приложения GenAI и уникальные задачи проектирования подобных систем. Она также служит руководством для тех, кто хочет понять, как GenAI применяется на практике.

В этой главе рассматриваются две ключевые темы. Во-первых, даётся обзор GenAI — его фундаментальных концепций и приложений. Затем вводится комплексный фреймворк для построения ML-систем, необходимый как для реальных приложений, так и для подготовки к собеседованиям. Этот фреймворк послужит основой для разработки популярных GenAI-систем в последующих главах.

Приступим.

Обзор GenAI

Что такое ИИ и ML?

ИИ — это раздел информатики, направленный на создание систем, способных выполнять задачи, обычно требующие человеческого интеллекта: рассуждение, планирование, решение проблем. ML — это подраздел ИИ, использующий алгоритмы для обучения на данных, а не на основе предопределённых правил. Эти алгоритмы анализируют данные, выявляют паттерны и делают предсказания или генерируют новый контент на основе усвоенных закономерностей. Такие приложения, как рекомендательные системы, обнаружение мошенничества, автономные транспортные средства и чат-боты, как правило, работают на ML-моделях.

ML-модели в целом делятся на две категории:

  • Дискриминативные
  • Генеративные
Image represents a nested Venn diagram illustrating the relationship between Artificial Intelligence (AI), Machine Learning (ML), and two types of ML models: Discriminative and Generative.  The outermost, largest oval is labeled 'Artificial Intelligence,' encompassing a slightly smaller, gray-filled oval labeled 'Machine Learning.' Within the 'Machine Learning' oval are two smaller, non-overlapping ovals: one light red labeled 'Discriminative' and one light green labeled 'Generative.'  The arrangement shows that both Discriminative and Generative models are subsets of Machine Learning, which in turn is a subset of Artificial Intelligence.  No information flows between the components; the diagram solely depicts a hierarchical classification of concepts.
Рисунок 1: Взаимосвязь между ИИ и ML
Дискриминативные модели

Дискриминативные модели классифицируют данные, обучаясь различиям между классами на основе входных признаков. Формально они изучают условные вероятности P(Y|X), где Y — целевая переменная, а X — входные признаки.

Дискриминативные модели применяются как для классификации — определения класса входных данных, так и для регрессии — предсказания непрерывного значения. Например, в системе обнаружения мошенничества дискриминативная модель классифицирует транзакции как легитимные или мошеннические, анализируя такие признаки, как сумма транзакции и история покупок. Аналогично в рекомендациях фильмов модель предсказывает оценку пользователя на основе его исторических взаимодействий.

Распространённые алгоритмы дискриминативных моделей включают:

  • Логистическая регрессия: линейная модель, предсказывающая вероятность бинарного исхода на основе входных признаков.
  • Метод опорных векторов (SVM): находит гиперплоскости, наилучшим образом разделяющие классы в пространстве признаков. Может быть расширен для нелинейных границ с помощью ядровых функций [2].
  • Деревья решений: эти модели и их вариации, например случайные леса, рекурсивно разбивают данные на подгруппы на основе целевой переменной.
  • Метод k ближайших соседей (KNN): непараметрический метод, классифицирующий образец на основе преобладающей метки среди ближайших соседей в пространстве признаков.
  • Нейронные сети: состоят из слоёв взаимосвязанных нейронов. Используют взвешенные входы, функции активации и обратное распространение ошибки для обучения и аппроксимации сложных функций для задач классификации и регрессии.

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

Генеративные модели

Генеративные модели стремятся понять и воспроизвести лежащее в основе распределение данных. Формально они моделируют распределение P(X) при фокусе исключительно на входных данных (например, генерация изображений) или совместное распределение P(X, Y) при учёте и входных данных, и целевой переменной (например, генерация изображений по тексту). Это позволяет генерировать новые экземпляры данных путём выборки из усвоенных распределений.

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

Генеративные алгоритмы делятся на два класса: классические и современные. Классические хорошо обучаются паттернам структурированных данных, но могут испытывать трудности с более сложными или неструктурированными данными. К распространённым классическим генеративным алгоритмам относятся:

  • Наивный байесовский классификатор: вероятностная модель, основанная на теореме Байеса [3].
  • Модели гауссовых смесей (GMM): представляют данные как смесь гауссовых распределений [4].
  • Скрытые марковские модели (HMM): моделируют совместную вероятность наблюдаемых последовательностей и скрытых состояний, генерирующих эти последовательности [5].
  • Машины Больцмана: энергетические модели, используемые для обучения признакам или снижения размерности [6].

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

  • Вариационные автоэнкодеры (VAE): тип автоэнкодера, моделирующий распределение данных путём кодирования в скрытое пространство (latent space) и последующей реконструкции исходных данных с помощью decoder.
  • Генеративно-состязательные сети (GAN): класс нейронных сетей, в котором генератор и дискриминатор обучаются одновременно. Генератор создаёт реалистичные данные, а дискриминатор пытается отличить реальные данные от сгенерированных.
  • Диффузионные модели: модели, изучающие сложные распределения данных через обратный процесс диффузии. Широко используются для генерации изображений и видео.
  • Авторегрессионные модели: генерируют данные, предсказывая каждый элемент последовательности на основе предшествующих элементов. Широко применяются при генерации текста и прогнозировании временных рядов.

Дискриминативные и генеративные модели используются для разных целей. Дискриминативные обычно применяются для классификации или предсказания; генеративные — для создания новых образцов. На рисунке 2 показаны популярные задачи, решаемые с помощью генеративных и дискриминативных моделей.

Image represents a hierarchical tree diagram categorizing machine learning (ML)-powered tasks.
Рисунок 2: Популярные ML-задачи

Что такое GenAI и почему он набирает популярность?

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

GenAI стал очень популярным по двум основным причинам. Во-первых, эти модели могут выполнять разнообразные задачи в разных областях: генерировать текст, создавать реалистичные изображения, сочинять музыку. Эта многозадачность делает их ценными в различных отраслях — от творческих искусств и развлечений до здравоохранения и разработки программного обеспечения.

Во-вторых, GenAI-приложения существенно повышают производительность. Например, в создании контента эти модели могут генерировать черновики, предлагать улучшения или даже создавать финальные материалы, экономя значительное время и ресурсы. Другой пример — использование больших языковых моделей (LLM), таких как ChatGPT [7], для ответов на сложные вопросы и ведения осмысленных диалогов. По данным недавнего отчёта McKinsey [8], ожидается, что GenAI обеспечит «рост производительности труда на 0,1–0,6% ежегодно вплоть до 2040 года».

Почему GenAI становится таким мощным?

Модели GenAI в последнее время демонстрируют впечатляющие возможности и становятся всё более мощными. Три ключевых фактора этого прогресса:

  • Данные
  • Ёмкость модели
  • Вычислительные ресурсы
Данные

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

Одним из ключевых факторов успеха GenAI является самообучение без учителя. В отличие от классических моделей, хорошо работающих на размеченных данных, GenAI-модели могут обучаться на неразмеченных данных. Этот подход позволяет использовать огромные наборы данных из интернета без необходимости дорогостоящей и трудоёмкой разметки.

Image represents a data architecture diagram comparing two types of data sources.
Рисунок 3: Сравнение масштабов данных для обучения чат-бота и диагностики заболеваний

Благодаря лёгкому доступу к очень большим наборам данных из интернета современные GenAI-модели могут обучаться на массивных наборах данных, иногда превышающих миллиарды текстовых документов или изображений. Например, модель Llama 3 от Meta [9] обучалась на 15 триллионах токенов — порядка 50 терабайт данных; модель Flamingo от Google [10] обучалась на 1,8 миллиарда пар (изображение, текст). Обучение на этом огромном объёме данных помогает моделям усваивать сложные паттерны и нюансы, что обеспечивает высокое качество результатов.

Ёмкость модели

Ещё одним ключевым фактором эффективности ML-моделей является их способность к обучению. Ёмкость модели измеряется двумя способами:

  • Количество параметров
  • Число FLOP
Количество параметров

Параметры — это значения внутри модели, усваиваемые в процессе обучения. Количество параметров является ключевым показателем способности модели обучаться на данных.

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

Название моделиПараметры
Google's PaLM [11]540B
OpenAI's GPT-3 [12]175B
Google's Flamingo [10]80B
Meta's Llama 3 [9]405B
Google's Imagen [13]2B

Таблица 1: Популярные GenAI-модели и их количество параметров

Число FLOP

FLOP (Floating Point Operations — операции с плавающей точкой) измеряет вычислительную сложность модели путём подсчёта операций с плавающей точкой, необходимых для одного прямого прохода. Включает базовые арифметические операции — сложение, умножение и другие, выполняемые при прохождении данных через слои модели.

Для лучшего понимания числа FLOP рассмотрим простой пример.

Image represents a graphical depiction of a weighted directed graph.
Рисунок 4: Простой полносвязный слой и арифметические вычисления для одного выходного нейрона

Рассмотрим полносвязный слой с 4 входными нейронами и 3 выходными. Каждый выходной нейрон вычисляется путём умножения входных нейронов на соответствующие веса и суммирования результатов. Это даёт 4 умножения и 3 сложения для каждого выходного нейрона, как показано на рисунке 4. Следовательно, общее число FLOP равно 3×(4+3)=21.

Если количество параметров измеряет размер модели, то FLOP указывает на число арифметических вычислений и даёт представление о вычислительной сложности модели. Хотя модель с большим числом параметров часто имеет более высокое число FLOP, это не всегда так. Архитектура играет ключевую роль — плотные слои обычно требуют больше FLOP, чем разреженные связи, даже при одинаковом числе параметров. Понимание этого различия критично при оптимизации модели, так как требует баланса между параметрами и FLOP.

Вычислительные ресурсы

По мере роста ёмкости модели её производительность, как правило, улучшается, но обучение таких крупных моделей требует огромных вычислительных ресурсов. Необходимые для обучения вычисления часто измеряются в FLOP, представляющих суммарное число выполненных операций. Например, модель PaLM-2 от Google обучалась с использованием 10²² FLOP [14].

Вычислительная мощность обычно обеспечивается таким аппаратным обеспечением, как CPU, GPU (Graphics Processing Units) и TPU (Tensor Processing Units). Nvidia, например, предлагает передовые GPU: H100, A100 и A10, каждый с разной стоимостью и вычислительными возможностями. Производительность этих машин часто измеряется в FLOP/S (операций с плавающей точкой в секунду). Например, Nvidia H100 может обеспечить до 60 терафлопс в секунду (60 TFLOP/S) [15].

Обучение передовых GenAI-моделей обходится дорого: требуются тысячи GPU в течение нескольких недель. Для понимания вычислительных требований к моделям наподобие PaLM-2 рассчитаем необходимое количество GPU H100. Предполагая пиковую производительность H100 в 60 TFLOP/S, он может выполнить примерно 5,18 эксафлоп в день. Учитывая, что PaLM-2 потребовала 10²² FLOP, одному GPU H100 понадобилось бы около 5,5 лет для завершения необходимых вычислений. Поэтому стоимость обучения крупных моделей чрезвычайно высока и нередко превышает десятки миллионов долларов. Например, Сэм Альтман, генеральный директор OpenAI, заявил, что стоимость обучения GPT-4 превысила 100 миллионов долларов [16].

Обучение модели с миллиардами параметров (например, GPT-4, Llama 3) было невозможно ещё несколько лет назад. Сдвиг в возможностях произошёл главным образом благодаря развитию аппаратного обеспечения — специализированным чипам, таким как GPU и TPU, разработанным для задач глубокого обучения. Распределённое обучение также сыграло ключевую роль, позволяя распределять нагрузку между сотнями и даже тысячами машин параллельно. Это значительно ускоряет процесс, делая осуществимым обучение очень крупных моделей на огромных наборах данных. Эти улучшения инфраструктуры и методов обучения позволили обучать GenAI-модели в беспрецедентных масштабах.

Закон масштабирования

В рамках бюджета вычислений (измеряемого в FLOP) какое оптимальное сочетание размера модели и объёма обучающих данных (измеряемого числом токенов) даёт наименьшие потери? Это фундаментальный вопрос, на который исследователи стремятся ответить с помощью законов масштабирования.

В 2020 году исследователи OpenAI провели обширные эксперименты по обучению LLM, изучая различные факторы: размеры моделей (N), размеры наборов данных (D), вычислительные ресурсы (C), архитектуры моделей и длины контекста [17]. Их выводы выявили два ключевых наблюдения. Во-первых, влияние масштабирования на производительность модели значительно более выражено, чем влияние архитектурных вариаций. Во-вторых, по мере увеличения размера модели, объёма набора данных или вычислительных ресурсов наблюдается соответствующее и предсказуемое улучшение производительности, следующее степенному закону.

Image represents a tripartite graph showing the relationship between compute, dataset size, and model parameters on the test loss.
Рисунок 5: Закон масштабирования OpenAI (Credit: [17])

В 2022 году исследователи DeepMind расширили это понимание, показав, что многие существующие LLM были недообучены — модели были недостаточно велики для объёма данных, на которых они обучались [18]. Они обнаружили, что объём данных должен масштабироваться линейно с размером модели для достижения оптимальной производительности.

С недавним выходом GPT o1 [19] исследователи начали строить предположения о существовании закона масштабирования и в процессе инференса [20].

Риски и ограничения GenAI

GenAI быстро развивается, стимулируя прогресс во многих отраслях за счёт создания реалистичных текстов, изображений и видео. Однако он также несёт серьёзные риски и ограничения, требующие тщательного рассмотрения. Решение этих проблем является ключом к обеспечению ответственного и устойчивого развития. К распространённым проблемам относятся:

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

Каждая из этих областей представляет серьёзную проблему в разработке GenAI-приложений. Для решения этих рисков требуется мультидисциплинарный подход, включающий не только технические решения, но и этические рамки, правовые нормы и осведомлённость общества.

Фреймворк для собеседований по проектированию ML-систем

Многие инженеры воспринимают ML-алгоритмы — например, авторегрессионные Transformer или диффузионные модели — как всю ML-систему целиком. Однако построение и развёртывание GenAI-систем предполагает гораздо большее, чем просто обучение модели. Эти системы сложны и включают такие компоненты, как конвейеры данных для обработки и предобработки крупных наборов данных, механизмы оценки качества и безопасности результатов, инфраструктуру для масштабной доставки контента, сгенерированного ИИ, и мониторинг для обеспечения стабильной производительности со временем.

На собеседовании по проектированию ML-систем, особенно ориентированном на GenAI, вам нередко придётся сталкиваться с открытыми вопросами. Например, вас могут попросить разработать чат-бот для обслуживания клиентов или инструмент редактирования изображений на базе ИИ для творческих людей. Единственно верного ответа не существует. Интервьюер интересуется вашим подходом к сложным проблемам, пониманием концепций GenAI, процессом проектирования системы и обоснованием принятых решений.

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

  • Уточнение требований
  • Формулировка задачи как ML-задачи
  • Подготовка данных
  • Разработка модели
  • Оценка
  • Общий дизайн ML-системы
  • Развёртывание и мониторинг
Image represents a flowchart depicting the stages of a machine learning (ML) project.
Рисунок 6: Этапы проектирования ML-системы

Рассмотрим каждый этап подробнее, изучая ключевые соображения и темы для обсуждения при проектировании GenAI-системы.

Уточнение требований

Приступая к разработке ML-системы для решения конкретной задачи, вы часто располагаете минимальной информацией. Аналогично на собеседованиях вопросы по проектированию ML-систем зачастую расплывчаты и содержат мало деталей. Например, вас могут попросить «разработать систему генерации изображений». Первый шаг — задать уточняющие вопросы. Но какие именно?

Ваши вопросы должны помочь понять область проблемы и конкретные цели, которых система должна достичь. Они делятся на два типа:

  • Функциональные требования
  • Нефункциональные требования

Функциональные требования

Функциональные требования описывают, что система должна делать — её основные возможности. Например, «генерировать изображение и настраивать его стиль на основе запроса пользователя» является функциональным требованием для системы text-to-image. В контексте проектирования GenAI-системы функциональные требования имеют решающее значение, так как формируют высокоуровневую архитектуру системы. Они направляют разработку основных компонентов и функциональностей, необходимых системе для удовлетворения потребностей пользователей.

Нефункциональные требования

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

Вот несколько вопросов для начала:

  • Бизнес-цель: какова основная цель системы? Какому конкретному назначению она будет служить? Например, при проектировании системы создания подписей к изображениям необходимо знать, будет ли она использоваться для генерации подробных описаний товаров на платформе электронной торговли или для предложения коротких подписей к фотографиям в социальных сетях.
  • Функции системы: какие функции должна поддерживать система, которые могут повлиять на ML-дизайн? Например, при проектировании системы генерации изображений важно знать, смогут ли пользователи оставлять отзывы или оценивать сгенерированные изображения, поскольку эти взаимодействия могут улучшить модель. Аналогично при проектировании LLM важно знать, какие языки должны поддерживаться.
  • Данные: каковы источники данных? Насколько велик набор данных? Размечены ли данные? Эти вопросы критичны, поскольку качество и количество данных могут влиять на дизайн.
  • Ограничения: каковы доступные вычислительные ресурсы? Система будет облачной или разработанной для работы на локальных устройствах?
  • Масштаб системы: сколько пользователей ожидается? Сколько изображений нужно генерировать и какой ожидается рост спроса? Эти вопросы важно прояснить, потому что система, разработанная для генерации изображений для небольшой группы пользователей, не потребует такого же уровня масштабируемости, как система, рассчитанная на обслуживание миллионов пользователей.
  • Производительность: насколько быстро должен генерироваться контент? Требуется ли генерация в реальном времени? Что имеет больший приоритет: качество контента или скорость генерации?

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

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

Формулировка задачи как ML-задачи

Если интервьюер просит вас разработать функцию автоматического обобщения электронных писем, перед вами стоит задача. Но вы не можете просто попросить ИИ обобщать письма. Вместо этого вам нужно сформулировать задачу так, чтобы её могли решить ML-методы. Формулировка задачи как ML-задачи является ключевым этапом в проектировании ML-систем, поскольку определяет весь последующий дизайн.

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

Следующие два шага полезны для формулировки задачи как ML-задачи:

  • Определить входные и выходные данные системы
  • Выбрать подходящий ML-подход

Определение входных и выходных данных системы

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

Image represents a simplified system diagram illustrating a user interaction with a chatbot.
Рисунок 7: Вход и выход чат-бота

Выбор подходящего ML-подхода

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

Image represents a hierarchical tree diagram categorizing machine learning (ML) algorithms.
Рисунок 8: Распространённые ML-алгоритмы

Существуют разные способы выбора подходящего ML-алгоритма, и критерии выбора варьируются от приложения к приложению. Следующие шаги помогут сузить варианты при выборе наиболее подходящего алгоритма:

  • Дискриминативный vs. генеративный: сначала определите, требует ли задача дискриминативной или генеративной модели. Это легко установить по выходным данным системы. Например, в задаче обнаружения объектов, где выход — класс входного изображения, задача является дискриминативной. Напротив, проектирование чат-бота, производящего текст на выходе, — это генеративная задача. Рисунок 9: Шаг первый при выборе подходящего ML-подхода
  • Определите тип задачи: далее определите конкретный тип задачи для дальнейшего сужения выбора алгоритмов. Двумя наиболее распространёнными задачами дискриминативных моделей являются классификация и регрессия. Генеративные модели обычно решают задачи генерации текста, изображений, аудио и видео. Выход системы может помочь определить тип задачи. Например, система создания подписей к изображениям генерирует текст — это задача генерации текста; система генерации лиц создаёт изображения — это задача генерации изображений; система обнаружения объектов, выдающая класс объекта, является задачей классификации. Рисунок 10: Шаг второй при выборе подходящего ML-подхода
  • Выберите подходящий алгоритм: наконец, выберите алгоритм, наиболее подходящий исходя из требований. Рассмотрите такие факторы, как способность обрабатывать различные модальности входных данных, эффективность и ожидания по качеству. Например, в системе text-to-image алгоритм должен обрабатывать текст на входе и генерировать изображение на выходе; поэтому VAE или GAN могут быть не идеальными, несмотря на их способность генерировать изображения. Этот шаг — идеальное время для оценки различных вариантов и обсуждения их компромиссов.

В последующих главах мы рассмотрим различные ML-подходы, используемые в популярных GenAI-приложениях.

Темы для обсуждения

  • Каковы входные и выходные данные системы исходя из требований?
  • Какие модальности данных (текст, изображение, аудио, видео) модель должна понимать и обрабатывать? Как модель будет работать с разными модальностями?
  • Должна ли одна модель обрабатывать все модальности входных данных, или эффективнее использовать несколько моделей для разных модальностей? Каковы преимущества и недостатки единой модели по сравнению со специализированными моделями для каждой модальности?
  • Какой генеративный алгоритм (например, диффузионные модели, VAE, GAN) наиболее подходит для данной задачи и почему? Каковы конкретные компромиссы между разными алгоритмами с точки зрения качества, эффективности и простоты использования?
  • Каковы последствия выбора одного алгоритма вместо другого с точки зрения производительности, стабильности и ресурсов?
  • Достаточно ли выбранный подход масштабируем и гибок для адаптации к будущим изменениям или дополнениям возможностей системы? Насколько легко система может адаптироваться при введении новых модальностей входных данных или выходов?

Подготовка данных

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

Типы данных

В ML данные обычно делятся на два типа: структурированные и неструктурированные.

Image represents a hierarchical classification of data.
Рисунок 11: Категории данных

Структурированные данные: этот тип данных можно организовать в таблицы со строками и столбцами, например базу данных или электронную таблицу. Финансовые записи и данные о клиентах — примеры структурированных данных. Структурированные данные можно дополнительно разделить на следующие категории:

  • Категориальные данные: данные, представляющие отдельные группы или категории (например, пол или цвет).
  • Числовые данные: данные, представляющие измеримые величины (например, количество проданных товаров, цена дома).
  • Порядковые данные: данные с предопределённым порядком (например, рейтинги удовлетворённости).

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

Традиционные ML-модели обычно обучаются на структурированных данных. Напротив, модели, лежащие в основе GenAI-приложений, в основном работают с неструктурированными данными: изображениями, текстом и видео. В результате акцент в подготовке данных существенно различается между традиционными моделями, работающими со структурированными данными, и генеративными моделями, работающими с неструктурированными данными.

Подготовка данных в традиционном ML

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

Image represents a data processing pipeline.
Рисунок 12: Процесс подготовки данных для структурированных данных
Инженерия данных

Инженерия данных включает построение и поддержку систем для сбора, хранения, извлечения и обработки данных. Основным компонентом является ETL (Extract, Transform, Load) [21] — процесс извлечения данных из различных источников, преобразования их в пригодный формат и загрузки в хранилище данных или другую систему хранения. Инженерия данных обеспечивает чистоту, надёжность и доступность данных.

Инженерия признаков

Инженерия признаков включает выбор и извлечение предиктивных признаков из сырых данных и их преобразование в формат, пригодный для ML-моделей. Этот процесс часто использует хранилища признаков, такие как Tecton [22] или Amazon SageMaker [23], которые предоставляют централизованную платформу для управления и обслуживания признаков в масштабе.

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

Поскольку эта книга посвящена GenAI, мы сосредоточимся в первую очередь на подготовке данных, специфичной для GenAI-моделей. Для более глубокого изучения инженерии данных и признаков обратитесь к [24].

Подготовка данных в GenAI

При подготовке неструктурированных данных для генеративных моделей акцент смещается с инженерии признаков на сбор огромных объёмов данных; обеспечение высокого качества и безопасности данных; использование инструментов для эффективного хранения и извлечения данных в масштабе.

Image represents a data processing pipeline.
Рисунок 13: Процесс подготовки данных в GenAI

Рассмотрим следующие ключевые этапы подготовки данных:

  • Сбор данных
  • Очистка данных
  • Эффективность работы с данными
Сбор данных

Продвинутые GenAI-модели имеют миллиарды параметров, позволяющих им обучаться на данных и обобщать полученные знания. Из-за своего размера эти модели требуют огромного объёма обучающих данных для выявления сложных паттернов. Например, Llama 3 обучалась на 15 триллионах токенов из различных интернет-источников — эквивалент 50 терабайт данных. Для понимания масштаба: человеку, читающему непрерывно со стандартной скоростью 250 слов в минуту, потребовалось бы около 85 000 лет, чтобы прочитать такой объём текста. Процесс сбора данных включает сбор крупных наборов данных путём сканирования текста из различных источников (веб-сайты, социальные сети, форумы).

По мере роста моделей наблюдается тенденция к дополнению обучающих наборов данных контентом, сгенерированным ИИ. Это предполагает использование существующих моделей для создания синтетических данных, которые затем используются для обучения другой GenAI-модели.

Image represents a data processing pipeline for generating synthetic data.
Рисунок 14: Дополнение обучающих данных данными, сгенерированными ИИ

Использование контента, сгенерированного ИИ, для обучения GenAI-моделей имеет ряд преимуществ и недостатков.

Преимущества:
  • Повышение разнообразия данных: контент, сгенерированный ИИ, добавляет разнообразие к существующим данным, тем самым улучшая способность модели к обобщению, особенно когда исходные данные ограничены или несбалансированы.
  • Масштабируемость: по мере роста потребности в данных, контент, сгенерированный ИИ, предоставляет масштабируемый способ создания крупных наборов данных, которые сложно собрать вручную.
Недостатки:
  • Проблемы качества: качество синтетических данных зависит от исходной модели. Некачественные данные могут приводить к распространению предвзятостей или ошибок.
  • Проблемы репрезентативности: синтетические данные могут плохо представлять исходные данные. Обеспечить разнообразие и репрезентативность синтетических данных может быть непросто.
  • Расхождение с реальными распределениями: данные, сгенерированные ИИ, могут не в полной мере отражать сложность реальных сценариев, рискуя упустить важные детали.

Использование данных, сгенерированных ИИ, для обучения GenAI-моделей — быстро развивающаяся область исследований. Постоянно разрабатываются новые методы для повышения качества и релевантности синтетических данных. Для получения дополнительной информации обратитесь к [25].

Очистка данных

Очень крупные наборы данных из интернета зачастую зашумлены и могут содержать низкокачественный или неприемлемый контент. Данные необходимо тщательно очищать, чтобы избежать внесения предвзятостей, дезинформации или вредоносных материалов в модель, что может негативно сказаться на её производительности. Кроме того, крайне важно иметь репрезентативные данные — это требует удаления дубликатов и обеспечения разнообразия и сбалансированности.

Image represents a data cleaning pipeline depicted as a flowchart.
Рисунок 15: Распространённые этапы очистки данных

На протяжении всей книги мы будем изучать ключевые методы очистки данных: фильтрацию вредоносного контента, обнаружение NSFW (Not Safe For Work), присвоение оценок качества и удаление дубликатов.

Эффективность работы с данными

Управление крупными наборами данных требует эффективных инструментов и методов хранения и извлечения. Рассмотрим каждый подробнее.

Эффективное хранение

Хранение огромных объёмов данных с традиционными инструментами может быть дорогостоящим и медленным. Распределённые системы хранения, такие как Hadoop Distributed File System (HDFS) [26] и Amazon S3 [27], созданы для хранения огромных объёмов данных на нескольких машинах. Эти системы особенно подходят для управления большими объёмами неструктурированных данных. Кроме того, колоночные форматы хранения, такие как Parquet [28] и ORC [29], идеальны для структурированных данных или неструктурированных данных, преобразованных в структурированную форму. Оптимизированные для аналитики, эти форматы обеспечивают лучшее сжатие и более высокую скорость обработки запросов.

Эффективное извлечение

Обучение ML-модели требует быстрого извлечения данных. К распространённым методам эффективного извлечения данных из крупных наборов относятся:

  • Шардирование: разбиение данных на несколько устройств обеспечивает параллельный доступ и ускоряет извлечение и обработку.
  • Индексирование: технологии, такие как Apache Lucene [30] или Elasticsearch [31], используются для индексирования данных, что упрощает и ускоряет поиск конкретных фрагментов информации.
  • Предварительная загрузка или кэширование: часто используемые данные предварительно загружаются в память для уменьшения задержек ввода-вывода при извлечении.

Темы для обсуждения

  • Источники данных: какие данные доступны и откуда их собирать? Насколько они разнообразны? Каков размер набора данных?
  • Чувствительность данных: насколько чувствительны данные (например, персональные, финансовые, медицинские)? Необходима ли анонимизация для защиты конфиденциальной информации?
  • Предвзятость: есть ли в данных изначально предвзятости (например, демографические, географические)? Как их обнаруживать и устранять для обеспечения справедливого представления?
  • Качество данных: как фильтровать низкокачественные, нерелевантные или зашумлённые данные? Есть ли в наборе данных выбросы или аномалии? Как с ними работать?
  • Неприемлемые данные: есть ли в наборе данных неприемлемый, вредоносный или NSFW-контент? Какие процессы предусмотрены для обнаружения и удаления таких данных?
  • Предобработка данных: как данные представляются в формате, понятном модели? При использовании текстовых данных — как они токенизируются и преобразуются в числовой формат (например, embedding)? При работе с мультимодальными данными (изображения, текст, аудио) — как они предобрабатываются для подачи в модель?

Разработка модели

Разработка модели — критически важный этап построения ML-систем. Он включает выбор подходящей архитектуры, обучение модели и, наконец, генерацию новых данных с помощью обученной модели. Рассмотрим каждый из этих компонентов подробнее.

Архитектура модели

На этом этапе следует подробно обсудить архитектуру модели. Для разных ML-алгоритмов может существовать несколько жизнеспособных архитектур. Например, диффузионные модели можно строить как на основе архитектуры U-Net, так и DiT. На собеседовании важно изучить различные архитектурные варианты и взвесить их преимущества и недостатки.

После выбора архитектуры полезно проанализировать её конкретные слои и изучить, как входные данные преобразуются в выходные. Например, в архитектуре U-Net выходные данные должны иметь тот же размер, что и входное изображение; поэтому проверка слоёв на соответствие этому требованию полезна.

Image represents a U-Net architecture for image processing.
Рисунок 16: Архитектура U-Net

Вам могут задать уточняющие вопросы и попросить модифицировать архитектуру для поддержки новой функциональности. Например, в модели генерации изображений может понадобиться изменить архитектуру, чтобы пользователи могли управлять стилем генерируемых изображений. Аналогично в модели text-to-video вас могут попросить управлять направлением движения (например, слева направо) в процессе генерации. Для реализации этих функций может потребоваться добавление или изменение компонентов архитектуры для интеграции векторов стиля или информации о движении.

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

Архитектура самовнимания Transformer

Transformer являются краеугольным камнем современного GenAI, особенно в обработке естественного языка и генерации изображений. С момента своего появления в 2017 году [32] они стремительно завоевали сообщество ИИ, став доминирующей архитектурой для широкого спектра задач: обработка естественного языка (NLP) [33][12], компьютерное зрение [34] и мультимодальное обучение [35][36].

В основе Transformer лежит механизм внимания. Изначально введённый в контексте машинного перевода [37], он стал фундаментальным компонентом различных архитектур нейронных сетей, особенно модели Transformer. Он устраняет ограничения традиционных последовательных моделей, таких как RNN и LSTM, позволяя модели более эффективно улавливать долгосрочные зависимости и контекстную информацию.

Самовнимание, также известное как масштабированное dot-product внимание — это наиболее распространённая форма механизма внимания в современных моделях. Оно позволяет каждому элементу входной последовательности фокусироваться на каждом другом элементе. Это достигается путём преобразования входных embedding для каждого токена в три вектора: запрос (Q), ключ (K) и значение (V). Эти векторы вычисляются с использованием обучаемых матриц весов WQ, WK и WV: где X представляет входную последовательность embedding.

Оценки внимания вычисляются путём взятия скалярного произведения вектора запроса Q со всеми векторами ключей K, с последующей операцией масштабирования и функцией softmax. Это можно представить как:

Здесь dK — размерность векторов ключей, а масштабирующий коэффициент 1/√dK используется для предотвращения слишком больших значений скалярного произведения, что могло бы привести к чрезвычайно малым градиентам при обратном распространении ошибки. Функция softmax применяется для нормализации оценок внимания, обеспечивая их суммирование в 1. В результате получается взвешенная сумма векторов значений V, где веса определяются релевантностью каждого входного токена в соответствии с оценками внимания.

Image represents a simplified diagram of the core computation within a self-attention mechanism.
Рисунок 17: Масштабированное dot-product внимание (Credit: [32])
Многоголовое внимание

Для улавливания различных типов зависимостей и контекстных связей механизм самовнимания часто расширяется до многоголового внимания. Вместо вычисления единственного набора векторов Q, K и V входные данные проецируются во множество наборов, или «голов» (heads), каждый со своими обучаемыми матрицами весов: где каждая голова внимания вычисляется независимо как:

Результаты разных голов конкатенируются и затем линейно преобразуются с помощью выходной матрицы весов WO. Это позволяет модели одновременно фокусироваться на информации из разных подпространств представлений и улавливать более богатые зависимости.

Image represents a simplified diagram of the Scaled Dot-Product Attention mechanism.
Рисунок 18: Многоголовое внимание (Credit: [32])

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

Обучение модели

Обучение модели — это процесс корректировки параметров модели (весов) для получения желаемых выходных данных. Ключевые аспекты для обсуждения в процессе обучения модели включают:

  • Методология обучения
  • Обучающие данные
  • ML-цель и функция потерь
  • Специфические задачи и их решения

Рассмотрим каждый подробнее.

Методология обучения

Каждая модель следует особому процессу обучения, соответствующему её архитектуре и назначению. Например, диффузионные модели постепенно удаляют шум из данных для генерации высококачественных образцов из шума. Напротив, GAN опираются на состязательное обучение, в котором генератор и дискриминатор конкурируют, совершенствуясь со временем.

Многие модели также проходят многоэтапное обучение для улучшения производительности. LLM, например, обычно проходят три этапа: предобучение на крупных наборах данных для усвоения общих паттернов; контролируемое fine-tuning для адаптации к конкретной задаче; этап согласования для обеспечения соответствия выходных данных человеческим ценностям или предполагаемым поведениям. Такой подход помогает моделям хорошо работать в различных приложениях.

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

Обучающие данные

Понимание обучающих данных необходимо для успешной разработки модели. Используемые данные могут различаться в зависимости от GenAI-приложения и также могут отличаться при многоэтапных подходах к обучению. Например, при обучении LLM публично доступные наборы данных, такие как Common Crawl [38], могут использоваться на этапе предобучения, тогда как аннотированные экспертами, тщательно отобранные данные — на этапе согласования.

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

ML-цель и функция потерь

ML-цель — это цель ML-задачи в процессе обучения. Например, для LLM ею может быть точное предсказание следующего токена (предсказание следующего токена). Напротив, для VAE ML-цель — реконструкция исходного изображения.

Image represents a generative model training pipeline.
Рисунок 19: Вычисление потерь между обучающими и сгенерированными данными

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

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

Специфические задачи и их решения

Разные задачи имеют свои специфические трудности, требующие особых решений. Например, обучение крупных моделей генерации видео очень ресурсоёмко, поскольку требует большой вычислительной мощности и огромных объёмов данных. Это означает, что обучение модели генерации видео может быть невозможным без надлежащих методов оптимизации — таких как методы распараллеливания [39][40][41], обучение со смешанной точностью [42] и латентные диффузионные модели [43]. Эти подходы помогают масштабировать модели генерации видео, сохраняя использование ресурсов и затраты на приемлемом уровне. Хотя специфические задачи и решения будут рассматриваться в будущих главах, кратко изучим методы повышения эффективности и оптимизации, применимые ко всему крупномасштабному обучению моделей.

Три наиболее распространённых метода обучения крупномасштабных моделей:

  • Gradient checkpointing
  • Обучение со смешанной точностью
  • Распределённое обучение
Gradient checkpointing

Gradient checkpointing [44] — метод сокращения использования памяти при обучении модели путём сохранения только выбранного подмножества активаций. При обратном проходе недостающие активации пересчитываются. Это значительно снижает использование памяти, что особенно полезно при обучении крупных моделей с ограниченной памятью GPU.

Обучение со смешанной точностью

Обучение со смешанной точностью — метод, использующий как 16-битные (полуточные), так и 32-битные (одинарной точности) числа с плавающей точкой для ускорения обучения модели и сокращения использования памяти. Оно сохраняет точность обучения, повышая эффективность за счёт выполнения большинства вычислений с меньшей точностью; критические операции выполняются с более высокой точностью по мере необходимости.

Автоматическое смешанное обучение (AMP) [45] — конкретная реализация обучения со смешанной точностью, предоставляемая такими фреймворками, как PyTorch и TensorFlow. AMP автоматически управляет переходом между полуточным и одинарным представлением, оптимизируя использование каждого типа точности и применяя методы масштабирования для поддержания числовой стабильности при обучении.

Распределённое обучение

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

Image represents a hierarchical tree diagram illustrating different types of parallelism in a system.
Рисунок 20: Методы параллелизма для распределённого обучения

Распространённые методы параллелизма:

  • Параллелизм данных
  • Параллелизм модели
  • Гибридный параллелизм
Параллелизм данных

При параллелизме данных набор данных распределяется по нескольким устройствам (например, GPU), каждое из которых хранит полную копию модели и обрабатывает часть данных параллельно. Каждое устройство обучается на своём подмножестве данных, а сервер параметров координирует обновление и распределение параметров модели по всем устройствам. Этот подход полезен при работе с крупными наборами данных, поскольку параллельная обработка данных эффективна и ускоряет обучение.

Image represents a distributed training system for a machine learning model.
Рисунок 21: Параллелизм данных

Существуют два основных метода обновления параметров модели на всех устройствах:

  • Синхронный: при этом подходе все устройства завершают вычисления и отправляют градиенты на сервер параметров. Сервер ждёт получения градиентов от всех устройств, затем агрегирует и обновляет модель перед отправкой обновлённых параметров обратно всем устройствам. Это обеспечивает согласованность, поскольку устройства всегда работают с одной и той же версией модели. Однако может быть медленнее, так как обновление ждёт самое медленное устройство.
  • Асинхронный: при асинхронном обновлении каждое устройство отправляет градиенты на сервер параметров сразу по завершении обработки своей части данных, а сервер обновляет модель немедленно при получении градиентов от любого устройства и отправляет новые параметры всем устройствам. Этот подход может быть быстрее, поскольку устройства работают независимо, но может приводить к несогласованности, так как устройства могут работать с несколько разными версиями модели в любой момент времени.

Для получения дополнительной информации о параллелизме данных обратитесь к [39].

Параллелизм модели

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

Параллелизм модели можно дополнительно разделить на типы:

  • Конвейерный параллелизм (межслойный)
  • Тензорный параллелизм (внутрислойный)

Конвейерный параллелизм (PP): при PP слои модели разделяются по нескольким устройствам, а вычисления выполняются конвейерным образом. При прямом проходе каждое устройство передаёт промежуточную активацию следующему устройству в конвейере, а при обратном проходе — отправляет градиент входного тензора предшествующему устройству.

Image represents a model parallel training setup across three GPUs.
Рисунок 22: Распределение слоёв модели по устройствам

PP особенно полезен при работе с очень глубокими моделями, поскольку позволяет нескольким устройствам работать одновременно, сокращая время простоя и повышая эффективность обучения. Для получения дополнительной информации о PP обратитесь к [40][41].

Тензорный параллелизм (TP): при TP операции внутри одного слоя модели распределяются по нескольким устройствам. Каждое устройство обрабатывает часть вычислений этого слоя, и выходные данные объединяются перед переходом к следующему слою. Например, при крупной операции матричного умножения разные части матрицы могут обрабатываться параллельно на нескольких устройствах — как путём поколончатого, так и построчного разбиения. Для получения дополнительной информации обратитесь к [46].

Image represents a comparison of two approaches to matrix multiplication within a neural network layer, illustrating tensor parallelism.
Рисунок 23: TP — разбиение тензора на части

TP особенно полезен, когда один слой слишком велик для размещения в памяти. Он помогает снижать использование памяти, распределяя вычислительную нагрузку по нескольким устройствам. Если вас интересует дополнительная информация о TP и его вариантах (например, параллелизм последовательностей), обратитесь к [47][48].

Гибридный параллелизм

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

В дополнение к гибридному параллелизму, такие методы, как ZeRO (Zero Redundancy Optimizer) [49] от Microsoft и FSDP (Fully Sharded Data Parallel) [50] от Meta, дополнительно оптимизируют использование ресурсов и эффективность коммуникации. Эти методы сокращают избыточность в памяти и вычислениях между устройствами, обеспечивая более эффективное обучение массивных моделей.

Рассмотренные в этом разделе методы являются неотъемлемыми компонентами современного проектирования ML-систем и широко применяются на практике. Сочетая методы параллелизма, такие как FSDP, методы экономии памяти, такие как gradient checkpointing, и оптимизации, такие как AMP, можно эффективно масштабировать обучение крупных сложных моделей. Твёрдое понимание этих методов и знание того, когда их применять, критически важно для построения масштабируемых и эффективных ИИ-систем.

Сэмплирование модели

После обучения модели следующий шаг — сэмплирование, предполагающее генерацию новых данных или выходов из обученной генеративной модели. Существуют различные методы сэмплирования для разных GenAI-приложений. Например, для LLM такие методы, как жадный поиск, лучевой поиск (beam search) [51] и сэмплирование top-k [52], имеют свои достоинства и недостатки. Beam search, например, склонен производить связный и релевантный текст, но может ограничивать разнообразие.

Image represents a data flow diagram showing a trained model distributing data to three different sample files.
Рисунок 24: Сэмплирование новых данных из обученной модели

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

Темы для обсуждения

  • Архитектуры моделей: каковы возможные архитектуры для выбранного ML-алгоритма? Каковы плюсы и минусы каждой? Каковы конкретные слои архитектуры и почему они именно такие?
  • Методология обучения: какова методология обучения? Как работает процесс обучения (например, процесс диффузии, состязательное обучение)?
  • Обучающие данные: откуда берутся обучающие данные? Насколько велик набор данных? Используются ли разные данные для различных этапов обучения (например, предобучение vs fine-tuning)?
  • ML-цели: каковы возможные ML-цели для данной задачи? Каковы плюсы и минусы каждой цели и как они влияют на производительность модели?
  • Функции потерь: какова функция потерь, соответствующая выбранной ML-цели? Используется одна функция потерь или несколько? Если несколько — как они комбинируются для оптимизации процесса обучения? В чём назначение каждой функции потерь?
  • Трудности обучения и их решения: каковы типичные трудности обучения, специфичные для выбранного ML-алгоритма? Как их можно преодолеть для обеспечения эффективного обучения?
  • Эффективность обучения: каковы основные методы повышения эффективности обучения? Как работает распределённое обучение и какие преимущества оно даёт? Как AMP повышает скорость и эффективность обучения? Как работают параллелизм данных, тензоров и конвейеров?
  • Сэмплирование: как работают различные методы сэмплирования (например, top-k, top-p)? Каковы плюсы и минусы каждого? Как влияют на качество и творческий потенциал выходных данных модели? Какие методы позволяют ускорить процесс сэмплирования без потери качества?

Оценка

После разработки модели следующим критическим этапом является оценка. Она включает использование различных метрик для оценки производительности ML-модели. В этом разделе рассмотрим два метода оценки: офлайн и онлайн.

Офлайн-оценка

Офлайн-оценка — это процесс оценки производительности модели или системы с использованием заранее собранных данных без её развёртывания в среде реального времени. Этот подход критичен для обеспечения эффективности модели до её использования реальными пользователями.

Офлайн-оценка различается для дискриминативных и генеративных моделей. Цель дискриминативных моделей — делать предсказания на оценочном наборе; оценка сравнивает эти предсказания с реальными метками. Традиционные метрики, такие как точность (precision), полнота (recall) и F1-мера, используются для количественной оценки производительности модели на основе этих сравнений. В таблице 2 перечислены распространённые метрики для различных дискриминативных задач, подробно рассмотренных в [1].

ЗадачаМетрики
КлассификацияPrecision, Recall, F1 score, Accuracy, Confusion matrix
РегрессияMSE, MAE, RMSE
РанжированиеPrecision@k, Recall@k, MRR, mAP, nDCG

Таблица 2: Популярные метрики в дискриминативных задачах

В генеративных моделях оценка более сложна. Вместо сравнения предсказаний с фиксированными реальными метками эти модели генерируют новый контент: текст или изображения. Оценка такого контента часто требует субъективных методов или участия человека для измерения соответствия ожиданиям и эталонам. В таблице 3 показаны часто используемые метрики для различных генеративных задач.

ЗадачаМетрики
Генерация текстаPerplexity, BLEU, METEOR, ROUGE, CIDEr
Генерация изображенийFID, IS, KID, SWD, PPL, LPIPS
Text-to-VideoFVD, CLIPScore, FID, LPIPS, KID

Таблица 3: Популярные метрики в генеративных задачах

На собеседованиях необходимо оценивать сгенерированный контент с нескольких сторон. Например, в модели text-to-image важно убедиться, что сгенерированное изображение как высококачественно, так и соответствует заданному текстовому запросу. Аналогично для чат-бота возможности модели следует оценивать по различным задачам: математика, здравый смысл и генерация кода. На протяжении книги мы подробно рассматриваем офлайн-оценку различных GenAI-приложений и изучаем большинство метрик из таблицы 3.

Онлайн-оценка

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

На практике компании обычно отслеживают несколько онлайн-метрик. На собеседовании следует сосредоточиться на выборе наиболее критичных для оценки воздействия системы. В отличие от офлайн-метрик, выбор онлайн-метрик более субъективен и часто предполагает участие владельцев продуктов и заинтересованных сторон. Этот шаг помогает интервьюеру оценить ваше бизнес-мышление. Полезно чётко формулировать обоснование и ход мыслей при выборе конкретных метрик. В таблице 4 перечислены некоторые метрики, широко используемые в онлайн-оценке.

МетрикаОписание
Click-Through Rate (CTR)Процент пользователей, кликнувших на контент или предложения.
Conversion RateПроцент пользователей, выполнивших желаемое действие (покупка, подписка) после взаимодействия с системой.
Latency (время инференса)Время, затрачиваемое моделью на генерацию контента.
Engagement RateПоказатель взаимодействия пользователей, например время, проведённое в системе.
Revenue Per UserСредний доход, генерируемый на одного пользователя.
Churn RateПроцент пользователей, прекративших использование системы за определённый период.
User SatisfactionПрямая обратная связь от пользователей об их опыте взаимодействия с контентом, сгенерированным ИИ.
User RetentionПроцент пользователей, продолжающих использовать систему в течение определённого периода.
Completion RateПроцент задач (генерация текста, изображений), успешно завершённых моделью.

Таблица 4: Распространённые метрики для онлайн-оценки

Темы для обсуждения

Ключевые темы для обсуждения на этапе оценки:

  • Офлайн-метрики: какие офлайн-метрики лучше всего оценивают качество и точность генеративной модели? Как эти метрики измеряют разнообразие, реалистичность и связность генерируемых выходных данных?
  • Онлайн-метрики: какие метрики критически важны для оценки эффективности генеративной модели в продакшне? Как эти метрики согласуются с бизнес-целями, такими как повышение творческого потенциала пользователей, увеличение вовлечённости или стимулирование инноваций в продукте?
  • Предвзятость: генеративные модели могут непреднамеренно отражать социальные предвзятости в отношении чувствительных атрибутов, таких как пол или раса. Как можно оценить предвзятость модели?
  • Надёжность и безопасность: насколько устойчива генеративная модель к состязательным атакам — намеренно вводящим в заблуждение входным данным, разработанным для эксплуатации слабых мест модели?
  • Оценка людьми: для генеративных моделей, особенно в творческих областях (генерация текста, синтез изображений), обратная связь от людей жизненно важна. Как рецензенты-люди могут дополнить автоматическую оценку? Какие методы (опросы, A/B-тестирование, экспертные отзывы) лучше всего подходят для оценки производительности модели? Как нивелировать влияние субъективности разных рецензентов?

Общий дизайн ML-системы

Следующий шаг фреймворка — предложить общий дизайн GenAI-системы. Такие системы включают гораздо больше, чем просто обучение модели; они требуют слаженной совместной работы нескольких конвейеров и компонентов. Например, в чат-боте помимо основной модели необходимы другие компоненты для обеспечения безопасности, например фильтрация вредоносного контента. Аналогично для системы генерации видео могут потребоваться дополнительные модели для повышения разрешения видео до желаемого качества. На этом этапе крайне важно интегрировать все компоненты, необходимые для функционирования системы по назначению. На протяжении книги мы рассмотрим несколько компонентов, часто используемых совместно с генеративной моделью.

Темы для обсуждения

  • Компоненты системы: каковы различные компоненты системы? Какова роль каждого компонента — основной модели, предобработки, фильтрации контента, постобработки и любых необходимых моделей масштабирования или повышения качества?
  • Механизмы безопасности: как в систему интегрированы безопасность и модерация контента? Например, как система обеспечивает безопасность и приемлемость генерируемого контента для пользователей? Опишите компоненты, такие как фильтры NSFW и вредоносного контента.
  • Обратная связь от пользователей и непрерывное обучение: как система использует обратную связь от пользователей для постоянного улучшения производительности модели? Обсудите механизмы обратной связи, позволяющие выполнять fine-tuning модели. Какие системы предусмотрены для переобучения моделей на обновлённых данных для повышения точности и релевантности со временем?
  • Масштабируемость: как система масштабируется с ростом спроса? Какие облачные или аппаратные ресурсы используются и как ими эффективно управлять? Как компоненты, такие как балансировщики нагрузки, распределённый инференс и параллелизм модели, способствуют масштабируемости системы?
  • Соображения безопасности: как система обеспечивает конфиденциальность пользователей, особенно при работе с чувствительными данными или генерации персонализированного контента? Какие протоколы безопасности реализованы для защиты от состязательных атак, фальсификации модели или утечки данных?
  • Предвзятость: генеративные модели могут непреднамеренно отражать социальные предвзятости в отношении чувствительных атрибутов, таких как пол или раса. Обсудите стратегии, включая алгоритмы обнаружения предвзятостей, аудит справедливости и фильтрацию предвзятых результатов. Как вы будете решать этические проблемы, если пользователи попытаются использовать генеративную модель для создания вредоносного, предвзятого или неприемлемого контента?
  • Надёжность и безопасность: насколько устойчива генеративная модель к состязательным атакам, например к намеренно вводящим в заблуждение входным данным, разработанным для эксплуатации слабых мест модели? Могут ли злоумышленники генерировать вредоносные или бессмысленные выходные данные? В продакшне как убедиться, что модель не используется в злонамеренных целях, таких как создание дипфейков, дезинформации или неприемлемого контента?

Развёртывание и мониторинг

Последний шаг — развернуть систему в продакшне и обслуживать миллионы пользователей. После развёртывания система может давать сбои по многим причинам. Мониторинг — это задача отслеживания, измерения и протоколирования различных метрик для обнаружения сбоев системы при их возникновении, чтобы устранять их как можно быстрее. Однако поскольку эта тема широка и не специфична для GenAI или какой-либо конкретной задачи, мы не будем углубляться в неё в этой книге. Мы рекомендуем обратиться к [53] или книге «ML System Design Interview» [1] для более глубокого изучения.

Резюме

В этой главе мы дали обзор GenAI и представили фреймворк для подхода к собеседованию по проектированию GenAI-системы. Хотя некоторые детали специфичны для GenAI, многие концепции применимы к проектированию ИИ-систем в целом. Мы сосредоточимся на аспектах, уникальных для GenAI, избегая общих тем, присущих всем ИИ-системам, таких как развёртывание, инфраструктура и мониторинг.

Наконец, не от каждого инженера ожидается экспертиза во всех областях жизненного цикла GenAI. Разные роли и компании могут делать упор на различных аспектах: инфраструктуре, мониторинге или разработке LLM. Этот фреймворк помогает кандидатам понять ожидания и адаптировать ответы в соответствии с акцентами конкретного собеседования.

Теперь, когда вы понимаете эти основы, мы готовы приступить к рассмотрению наиболее распространённых вопросов для собеседований по проектированию GenAI-систем.

Ссылки

[1] Machine Learning System Design Interview. https://www.aliaminian.com/books. [2] Support Vector Machines. https://scikit-learn.org/stable/modules/svm.html. [3] Bayes' theorem. https://en.wikipedia.org/wiki/Bayes%27_theorem. [4] Gaussian mixture models. https://scikit-learn.org/1.5/modules/mixture.html. [5] Hidden Markov model. https://en.wikipedia.org/wiki/Hidden_Markov_model. [6] Boltzmann machine. https://en.wikipedia.org/wiki/Boltzmann_machine. [7] OpenAI's ChatGPT. https://openai.com/index/chatgpt/. [8] Economic Potential of Generative AI. https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-economic-potential-of-generative-ai-the-next-productivity-frontier. [9] The Llama 3 Herd of Models. https://arxiv.org/abs/2407.21783. [10] Flamingo: a Visual Language Model for Few-Shot Learning. https://arxiv.org/abs/2204.14198. [11] PaLM: Scaling Language Modeling with Pathways. https://arxiv.org/abs/2204.02311. [12] Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165. [13] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. https://arxiv.org/abs/2205.11487. [14] PaLM2 Technical Report. https://arxiv.org/abs/2305.10403. [15] H100 Tensor Core GPU. https://www.nvidia.com/en-us/data-center/h100/. [16] GPT-4 training cost. www.wired.com/story/openai-ceo-sam-altman-the-age-of-giant-ai-models-is-already-over/. [17] Scaling Laws for Neural Language Models. https://arxiv.org/abs/2001.08361. [18] Training Compute-Optimal Large Language Models. https://arxiv.org/abs/2203.15556. [19] Introducing OpenAI o1. https://openai.com/index/introducing-openai-o1-preview/. [20] Large Language Monkeys: Scaling Inference Compute with Repeated Sampling. https://arxiv.org/abs/2407.21787. [21] ETL. https://aws.amazon.com/what-is/etl/. [22] Tecton. https://www.tecton.ai/feature-store/. [23] Amazon SageMaker. https://aws.amazon.com/sagemaker/. [24] ML System Design Interview. https://www.amazon.com/gp/product/1736049127/. [25] Comprehensive Exploration of Synthetic Data Generation: A Survey. https://arxiv.org/abs/2401.02524. [26] HDFS Architecture Guide. https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html. [27] Amazon S3. https://aws.amazon.com/s3/. [28] Apache Parquet. https://parquet.apache.org/. [29] Apache ORC. https://orc.apache.org/docs/. [30] Apache Lucene. https://lucene.apache.org/. [31] Elasticsearch. https://www.elastic.co/elasticsearch. [32] Attention Is All You Need. https://arxiv.org/abs/1706.03762. [33] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. https://arxiv.org/abs/1810.04805. [34] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. https://arxiv.org/abs/2010.11929. [35] Learning Transferable Visual Models From Natural Language Supervision. https://arxiv.org/abs/2103.00020. [36] Zero-Shot Text-to-Image Generation. https://arxiv.org/abs/2102.12092. [37] Neural Machine Translation by Jointly Learning to Align and Translate. https://arxiv.org/abs/1409.0473. [38] Common Crawl. https://commoncrawl.org/. [39] Data Parallelism. https://en.wikipedia.org/wiki/Data_parallelism. [40] Model Parallelism. https://huggingface.co/docs/transformers/v4.15.0/en/parallelism. [41] Pipeline Parallelism. https://pytorch.org/docs/stable/distributed.pipelining.html. [42] Mixed Precision Training. https://arxiv.org/abs/1710.03740. [43] High-Resolution Image Synthesis with Latent Diffusion Models. https://arxiv.org/abs/2112.10752. [44] Training Deep Nets with Sublinear Memory Cost. https://arxiv.org/abs/1604.06174. [45] Automatic Mixed Precision. https://pytorch.org/tutorials/recipes/recipes/amp_recipe.html. [46] Model parallelism. https://huggingface.co/docs/transformers/v4.17.0/en/parallelism. [47] Paradigms of Parallelism. https://colossalai.org/docs/concepts/paradigms_of_parallelism/. [48] Tensor Parallelism tutorial. https://pytorch.org/tutorials/intermediate/TP_tutorial.html. [49] ZeRO: Memory Optimizations Toward Training Trillion Parameter Models. https://arxiv.org/abs/1910.02054. [50] Introducing PyTorch Fully Sharded Data Parallel (FSDP) API. https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/. [51] Beam search. https://en.wikipedia.org/wiki/Beam_search. [52] Top-k sampling. https://docs.cohere.com/docs/controlling-generation-with-top-k-top-p. [53] Model monitoring for ML in production. https://www.evidentlyai.com/ml-in-production/model-monitoring.

Глава 2

Gmail Smart Compose

~33 мин чтения

Введение

Функция Smart Compose в Gmail [1] помогает пользователям, предлагая следующие несколько слов по мере написания письма. В этой главе рассматривается данная функция, а также архитектура Transformer, лежащая в основе большинства генеративных систем.

Image represents a Gmail compose window showing an email being drafted.  The window's title bar displays 'Taco Tuesdays' and close ('X') buttons. Below, the 'To' field shows 'Ethan Clarke' as the recipient.  A 'Cc Bcc' field is also visible, though empty. The 'Subject' line reads 'Taco Tuesdays.' The email body begins with 'Hey Ethan!' followed by 'What's up? Haven't seen you for a whil...'  A small, rectangular 'tab' button is present at the end of this line. A curved, reddish-brown arrow originates from near the 'tab' button and points to the text 'Suggested words' outside the email window, indicating that the 'tab' button likely triggers a suggestion of words to complete the sentence, providing contextual word completion or auto-suggestions based on the existing text.  The Gmail logo is visible in the top left corner.
Figure 1: Gmail's Smart Compose feature

Уточнение требований

Ниже представлен типичный диалог между кандидатом и интервьюером:

Кандидат: У разных пользователей могут быть разные стили письма. Должна ли система предоставлять персонализированные подсказки? Интервьюер: Для простоты давайте не будем включать персонализацию.

Кандидат: Должна ли система предлагать следующие несколько слов только тогда, когда она уверена в своём прогнозе? Интервьюер: Да.

Кандидат: Набор данных по электронным письмам должен быть достаточно большим для обучения модели. Известен ли нам приблизительный объём данных? Интервьюер: Предположим, что наш набор данных состоит примерно из одного миллиарда сообщений электронной почты.

Кандидат: При формировании подсказок можно использовать разные части данных. Например, прошлые письма пользователя или тему текущего письма. Чтобы упростить задачу, могу ли я использовать в качестве контекста только тело письма? Интервьюер: Хорошее замечание. На практике мы используем больше, чем то, что пользователь уже написал в текущем письме. Давайте начнём с тела письма. Если останется время, можно расширить контекст, включив другую релевантную информацию.

Кандидат: Какие языки должна поддерживать система? Интервьюер: Начнём с английского.

Кандидат: Нужно ли убедиться, что система не проявляет предвзятости? Интервьюер: Это важное требование для данной системы. Система не должна делать предвзятых предположений при формировании подсказок.

Кандидат: Сколько активных пользователей у Gmail? Является ли стоимость вычислений проблемой для этой функции? Интервьюер: У Gmail около 1,8 миллиарда пользователей, и один пользователь может отправлять до 500 писем в день. Мы заботимся о вычислительных затратах, но давайте сначала сосредоточимся на разработке системы. Оптимизацию эффективности можно провести в последующих итерациях.

Кандидат: Должна ли система формировать подсказки в режиме реального времени? Интервьюер: Да. Ожидаемая задержка должна быть незаметной; около 100 миллисекунд будет достаточно.

Формулировка задачи как задачи ML

В этом разделе мы формулируем функцию Smart Compose как задачу ML. Для этого необходимо понять входные и выходные данные системы и выбрать подходящий подход ML для решения задачи.

Определение входных и выходных данных системы

Входные данные модели — это последовательность слов, введённых пользователем. Выходные данные — продолжение этой последовательности. Модель генерирует слова, которые пользователь, вероятнее всего, напишет следующими.

Image represents a simple data flow diagram illustrating the functionality of a 'Smart Compose System.'  The diagram shows an input string, 'Hi John! I hope,'  connected via a solid black arrow to a light-orange, rounded-rectangle box labeled 'Smart Compose System.' This box represents the system's processing unit.  Another solid black arrow extends from the 'Smart Compose System' box to an output string, 'you are doing well!'  The arrows indicate the direction of data flow, showing that the input string is processed by the Smart Compose System, resulting in the output string.  A small text note at the bottom of the 'Smart Compose System' box reads 'Text is not SVG - cannot display,' indicating that the box's visual representation is not an SVG image.
Figure 2: Input and output of the Smart Compose system

Выбор подходящего подхода ML

Smart Compose генерирует текстовый контент, поэтому мы относим её к задачам генерации текста. Различные архитектуры ML предназначены для обработки последовательных данных, что необходимо для генерации текста. Две популярные архитектуры — рекуррентные нейронные сети (RNN) [2] и Transformer'ы [3].

Transformer'ы имеют ряд преимуществ перед RNN, из которых можно выделить два основных:

  • Параллелизм: в RNN результаты вычислений одного временного шага передаются на следующий, образуя цепочку операций, зависящих от времени. Transformer'ы, напротив, могут обрабатывать все входные токены одновременно благодаря механизму самовнимания (self-attention).
  • Лучшая обработка длинных последовательностей: Transformer'ы используют механизмы самовнимания, чтобы сосредоточиться на любой части последовательности, независимо от расстояния. RNN, напротив, плохо справляются с долгосрочными зависимостями из-за своей последовательной структуры и проблемы затухающего градиента.

Благодаря этим преимуществам Transformer'ы демонстрируют выдающиеся результаты в задачах генерации текста и поэтому используются в большинстве современных генеративных систем. Именно поэтому мы выбрали Transformer'ы для реализации функции Smart Compose.

FeatureRNN (GRU [4], LSTM [5])Transformer
ArchitectureSimpleComplex
Training efficiencyInefficient due to sequential processingEfficient due to parallel processing
EffectivenessLow as it struggles with long sequencesHigh as it handles long sequences
ScalabilityLimited scalabilityHighly scalable
ApplicationsSimple tasks such as time series modelingComplex tasks such as language completion or translation

Таблица 1: Сравнение архитектур RNN и Transformer

Хотя Transformer'ы лучше поддаются распараллеливанию благодаря отсутствию строгих последовательных зависимостей, их механизм самовнимания имеет вычислительную сложность O(n2)O(n^2)O(n2), где nnn — длина последовательности. Эта сложность обусловлена тем, что механизм самовнимания требует вычисления оценок внимания между каждой парой токенов в последовательности. Для снижения сложности внимания предложены различные методы. Подробнее см. Group Attention [6] и Flash Attention [7].

Подготовка данных

На этапе подготовки данных мы преобразуем исходные данные в формат, ожидаемый моделью ML. Сначала кратко рассмотрим доступные данные.

Для обучения модели доступны два источника данных: общие данные и данные электронной почты. Общие данные включают общедоступные тексты из таких источников, как книги, веб-сайты и публикации в социальных сетях. Эти данные важны для обучения языковых моделей, поскольку содержат разнообразный словарный запас, синтаксис и контексты.

Image represents a digitized page displaying two vertically-aligned columns of text.  Each column contains a poem, seemingly from the same source, with line numbers ('6' and '9') marking the end of the first and second stanzas respectively in each column. The left column's poem focuses on the fleeting nature of summer's beauty and the enduring sweetness that remains even in winter. The right column's poem uses musical metaphors to explore the themes of loneliness and the importance of connection, contrasting the solitary life with the vibrant fullness of a family.  The poems are presented in a serif typeface, typical of older printed works, with consistent line spacing and justification. No URLs or parameters are visible; the only additional elements are the line numbers, which serve as visual separators within the poems. The two columns are presented side-by-side without any explicit visual connection beyond their shared page layout.  The text flows vertically within each column, with each line representing a verse in the respective poem.
Figure 3: Example of general data from Shakespeare

Данные электронной почты, как указано в требованиях, состоят из одного миллиарда сообщений. Эти данные необходимы для того, чтобы модель усвоила стили написания писем и распространённые фразы. Таблица 2 показывает упрощённый пример данных электронной почты. На практике для каждого сообщения хранится больше метаданных.

Email IDSenderRecipientSubjectBody
4953[email protected][email protected]Catchup?Hey Mike, let's catch up this Sat. …
9356[email protected][email protected]Project DeadlineHi TA, I hope you are well. I am writing to you to …

Таблица 2: Пример данных электронной почты

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

  • Очистка и нормализация текста
  • Токенизация текста и индексация токенов

Очистка и нормализация текста

Очистка текста

Очистка текста удаляет ненужную или нерелевантную информацию. Распространённые методы включают:

  • Удаление неанглийского текста: используйте методы идентификации языка [8], такие как [9], для выявления и удаления неанглийского текста из общих данных и данных электронной почты.
  • Удаление конфиденциальной информации: письма могут содержать конфиденциальные данные, такие как номера телефонов и кредитных карт. Эти сведения необходимо удалить, чтобы модель не обучилась на них и не раскрыла их впоследствии. Мы заменяем личные имена, URL, адреса электронной почты и номера телефонов символами-заполнителями. Например, «[email protected]» заменяется на «##@gmail.com».
  • Удаление нерелевантных символов: удаление ненужных или нерелевантных символов и знаков, не несущих смысловой нагрузки. Например, такие символы, как «©», «™» или эмодзи, удаляются, поскольку они обычно не влияют на смысл текста.
  • Удаление дублирующихся данных: дублирующиеся данные — это одинаковые тексты из разных источников, которые встречаются в наборе данных несколько раз. Дубликаты удаляются, чтобы предотвратить смещение модели и искажение процесса её обучения.

Нормализация текста

Нормализация текста преобразует текст в единый формат. Например, она приводит различные способы записи номера телефона — «(123) 456-7890», «123.456.7890» и «123-456-7890» — к стандартному формату, например «1234567890». Нормализация текста обеспечивает единообразие и снижает сложность текстовых данных.

Далее мы преобразуем исходный текст в последовательность чисел с помощью токенизации текста и индексации токенов.

Токенизация текста и индексация токенов

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

Image represents a data processing pipeline illustrating text tokenization.  The pipeline begins with a dashed-line box labeled 'Raw text' containing the text string 'Hi I am Emilie'.  A solid arrow points from this box to a light green rounded-rectangle labeled 'Text Tokenization...'. This rectangle represents the process of converting raw text into numerical tokens.  Another solid arrow extends from the 'Text Tokenization...' block to a sequence of four adjacent boxes, each containing a number (3, 7, 11, 29). This final sequence is labeled 'Sequence of indices,' indicating that the numbers represent the indices or positions of the tokens in a vocabulary or embedding space.  The overall flow shows how raw text is transformed into a numerical representation suitable for machine learning models, where each number corresponds to a specific word or sub-word unit from the input text.
Figure 4: Converting raw text to a sequence of numbers

Рассмотрим каждый шаг подробнее.

Токенизация текста

Токенизация текста — это процесс разбиения текста на более мелкие единицы, называемые токенами. На рисунке 5 показано, как GPT-4 от OpenAI токенизирует предложение «Let's go to NYC».1

Image represents a simple flowchart illustrating the process of tokenization in natural language processing.  At the top, a rectangular box contains the input phrase 'Let's go to NYC'. A downward arrow connects this box to a second box labeled 'Tokenization,' indicating that the input phrase will undergo this process.  From the 'Tokenization' box, another downward arrow points to a horizontal arrangement of five smaller rectangular boxes. Each of these smaller boxes contains a single token from the input phrase: 'Let,' ''s,' 'go,' 'to,' and 'NYC.'  The arrangement visually demonstrates how the 'Tokenization' process breaks down the input sentence into its individual constituent words and punctuation marks, effectively separating the input string into its fundamental units.
Figure 5: Example of GPT-4 tokenization

Токенизация может выполняться на разных уровнях. Например, «Hello world» можно разбить на [«Hello», «world»] или на [«H», «e», «l», «l», «o», « », «w», «o», «r», «l», «d»]. В целом алгоритмы токенизации делятся на три категории:

  • Токенизация на уровне символов
  • Токенизация на уровне слов
  • Токенизация на уровне подслов

Понимание каждой категории токенизации и её достоинств и недостатков крайне важно для большинства интервью по ML. Рассмотрим их подробнее.

Токенизация на уровне символов

Токенизация на уровне символов разбивает текст на набор символов. Она проста в реализации, но модели сложно обучиться осмысленным представлениям для каждого токена. Например, труднее научиться осмысленному представлению буквы «g», чем слова «go», поскольку «go» имеет чёткое значение, тогда как «g» — нет. Из-за этого токенизация на уровне символов нередко приводит к снижению производительности.

Image represents a flowchart illustrating character-level tokenization.  At the top, a rectangular box contains the text 'Let's go!'. A downward arrow connects this box to the text 'Character-level tokenization,' indicating the process's starting point.  Below this, a series of nine rectangular boxes, resembling keyboard keys, are arranged horizontally. Each box contains a single character from the input string 'Let's go!', representing the individual tokens resulting from the character-level tokenization. The order of characters in the boxes mirrors the order in the input string: L, e, t, ', s,  g, o, !.  The arrow from 'Character-level tokenization' points to this row of character boxes, showing the output of the process.  A small text at the bottom indicates that the image is not an SVG and cannot be fully displayed.
Figure 6: Example of character-level tokenization
Токенизация на уровне слов

Токенизация на уровне слов разбивает текст на отдельные слова. Существуют разные алгоритмы для этого, однако простейший — разбиение текста по пробелам.

Image represents a simple data processing pipeline illustrating word-level tokenization.  A rectangular box at the top contains the input text string 'Let's go!'. A downward-pointing arrow connects this input box to a text label 'Word-level tokenization,' indicating a processing step.  This processing step outputs two rectangular boxes placed side-by-side, each containing a single token from the input string: 'Let's' in the left box and 'go!' in the right box.  The text 'Text is not SVG - cannot display' below the output boxes suggests that the image is a simplified representation and that a more detailed visualization of the tokenization process might be available in a richer format like SVG. The overall flow depicts the transformation of a single input string into individual word tokens.
Figure 7: Example of word-level tokenization

Преимущество токенизации на уровне слов состоит в том, что модели проще обучиться осмысленным представлениям для каждого токена. Однако главный недостаток — как правило, очень большой размер словаря. Например, Transformer-XL [10] использует токенизатор на уровне слов, что даёт словарь из 267 735 токенов. Большой размер словаря проблематичен, поскольку модели приходится обучать представления для сотен тысяч токенов. Это делает обучение трудоёмким и, следовательно, более затратным по сравнению с токенизацией на уровне символов.

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

Токенизация на уровне подслов

Токенизация на уровне подслов разбивает текст на более мелкие единицы, называемые подсловами. Она основана на принципе: часто используемое слово не следует разбивать на подслова, тогда как редкое слово следует разбивать на более мелкие значимые подслова. Например, «unhappily» может считаться редким словом и быть разбито на «unhappy» и «ly». Оба подслова встречаются в текстовых данных чаще, что упрощает обучение модели осмысленному представлению для каждого из них.

Image represents a simple illustration of subword-level tokenization.  A top rectangular box contains the input phrase 'Let's go!'. A downward-pointing arrow connects this box to the text 'Subword-level tokenization,' indicating a process is applied.  Another downward-pointing arrow leads from 'Subword-level tokenization' to four smaller, rectangular boxes arranged horizontally. Each smaller box represents a token resulting from the tokenization process: 'Let,' ''s,' 'go,' and '!'.  The arrangement shows the input phrase being broken down into its constituent subword units, demonstrating how subword tokenization works by splitting words and contractions into smaller meaningful units.
Figure 8: Example of subword-level tokenization

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

Таблица 3 ниже сравнивает характеристики трёх категорий токенизации.

CharacteristicsCharacter-levelWord-levelSubword-level
GranularityIndividual charactersIndividual wordsSubwords
Vocabulary sizeSmallLargeModerate
Algorithm complexitySimpleSimpleComplex
Handling unseen wordsDecomposes unseen words into charactersCannot easily handle unseen wordsDecomposes unseen words into known subwords
Vocabulary size~100~300,000+~50,000–150,000
PerformancePoor performanceHigh performance but not practicalHigh performance and practical

Таблица 3: Сравнение различных категорий токенизации

Какая токенизация подходит для функции Smart Compose?

Большинство передовых языковых моделей используют алгоритмы токенизации на уровне подслов, такие как Byte-Pair Encoding (BPE) [11] и SentencePiece [12]. Эти алгоритмы более эффективны и способны работать с несколькими языками. Например, GPT-4 от OpenAI использует вариант BPE [13], а Gemini от Google — SentencePiece [14].

Учитывая эффективность токенизации на уровне подслов, мы используем её в качестве текстового токенизатора для функции Smart Compose. Для токенизации текста мы опираемся на популярные Python-библиотеки: Tiktoken [13] от OpenAI или SentencePiece [15] от Google. Эти библиотеки надёжно реализованы и поддерживают различные алгоритмы токенизации.

В главе 3 мы подробно рассмотрим BPE и его алгоритмы. Для более глубокого изучения алгоритмов токенизации на уровне подслов см. [16].

Индексация токенов

Индексация токенов — это процесс преобразования текстовых токенов в целые числа.

В рамках подготовки к индексации токенов алгоритм токенизации сначала строит словарь — набор всех уникальных токенов — из обучающих текстовых данных и сохраняет его в таблице. На рисунке 9 показаны примеры словарей для различных категорий токенизации. Порядок и значения идентификаторов выбраны произвольно в демонстрационных целях.

Image represents three tables illustrating different vocabulary levels used in natural language processing.  The first table, labeled 'Character-level Vocabulary,' maps individual characters (e.g., 'a', 'b', 'A', 'B', '!', '<SPACE>') to unique numerical IDs (0, 1, 26, 27, 57, 105 respectively).  The second table, 'Word-level...', shows a mapping of whole words (e.g., 'a', 'about', 'after', 'all', 'also', 'zebra', '!') to IDs (0, 1, 2, 3, 4, 270030, 270131 respectively). The third table, 'Subword-level Vocabulary,' presents a mapping of subword units and special tokens (e.g., 'the', 'of', 'home', '##ing', '##ed', '##able', '<EOS>', '<SPACE>') to IDs (0, 1, 2, 50252, 50253, 50254, 50255, 50256 respectively).  Each table demonstrates a different granularity of tokenization, with character-level being the finest and subword-level offering a balance between character and word-level representations, often handling out-of-vocabulary words more effectively.  The ellipses (...) indicate that the tables are truncated and contain more entries than shown.
Figure 9: Examples of different vocabularies

После того как алгоритм токенизации построил словарь, можно преобразовать любой токен в число и любое число обратно в токен. На рисунке 10 показана индексация токенов с использованием словаря GPT-4 [17].

Image represents a process of tokenization and numerical ID assignment within a GPT-4 vocabulary.  The left side shows a flowchart.  A rectangular box labeled 'Let's go!' is at the top, pointing downwards to a row of four boxes representing the individual tokens: 'Let,' ''s,' 'go,' and '!'.  An arrow then points from the 'go' token to another row of four boxes, each containing a numerical ID: 10267, 596, 733, and 0.  These IDs correspond to the tokens above them. The right side displays a table labeled 'GPT-4 Vocabulary,' with two columns: 'Token' and 'ID.'  This table shows a partial list of tokens and their corresponding numerical IDs, including the tokens and IDs from the flowchart, illustrating the mapping between text tokens and their numerical representations used internally by the GPT-4 model.  The ellipses (...) indicate that the table contains more entries than are shown.
Figure 10: Example of token indexing

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

Разработка модели

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

Архитектура

Архитектура Transformer, представленная в статье «Attention Is All You Need» [3], предназначена для обработки последовательностей. Это делает её идеальной для задач, требующих понимания текста и взаимосвязей между его словами. Например, в функции Smart Compose модель обрабатывает последовательность слов, уже введённых пользователем, чтобы предложить следующие слова.

Transformer'ы имеют три основных варианта:

  • Только энкодер (encoder-only)
  • Только декодер (decoder-only)
  • Энкодер-декодер (encoder-decoder)

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

Только энкодер (encoder-only)

Transformer типа encoder-only используется для задач, требующих понимания общего смысла текста. Он обрабатывает входную последовательность целиком и делает прогнозы на её основе. Например, в задаче анализа тональности encoder-only Transformer предсказывает тональность входного предложения.

Image represents a simplified diagram of a sentiment analysis system.  The bottom component, enclosed in a dashed-line box, represents the input text: 'This product is very good'.  An arrow points upward from this input text to a larger, light-green, rectangular box labeled 'Encoder-only Transformer,' indicating that the input text is processed by this transformer model.  The transformer likely encodes the input text into a numerical representation suitable for sentiment analysis.  Finally, another upward-pointing arrow connects the output of the 'Encoder-only Transformer' to a small, square box labeled 'Sentiment: 1,' signifying that the model has assigned a sentiment score of '1' (presumably positive, given the input text) to the input sentence. The overall flow demonstrates the process of inputting text, transforming it using an encoder-only transformer, and generating a numerical sentiment score as output.
Figure 11: Encoder-only Transformer for sentiment analysis

Transformer'ы типа encoder-only широко применяются в таких задачах, как классификация предложений и распознавание именованных сущностей, которые сосредоточены на понимании входных данных, а не на генерации нового контента. BERT от Google [18] — известный пример Transformer'а типа encoder-only. Однако эти модели, как правило, не используются для генерации новых последовательностей. Transformer'ы типа decoder-only, напротив, специально разработаны именно для этой цели.

Только декодер (decoder-only)

Transformer типа decoder-only обрабатывает входную последовательность и итеративно генерирует новую последовательность.

Image represents a simplified architectural diagram focusing on a decoder-only Transformer model.  The central element is a rectangular box with a peach/light-orange fill and a gold border, clearly labeled 'Decoder-only Transformer.' This box represents the core of the generative AI system. Above and below this central box are dashed-line rectangles, representing unspecified input and output components respectively.  No arrows or explicit connections are shown between these components and the decoder-only Transformer, implying a general flow of information:  unspecified input feeds into the decoder-only Transformer, which then produces an unspecified output.  The lack of detail in the input and output boxes suggests a focus on the core Transformer architecture itself, rather than the specifics of data ingestion or post-processing.
Figure 12: Decoder-only Transformer for text completion

Transformer'ы типа decoder-only широко используются в генеративных задачах, включая генерацию текста, где модель генерирует последовательность по одному токену за раз на основе ранее сгенерированных токенов. Большинство больших языковых моделей (LLM), таких как GPT-4 от OpenAI [19], LLaMA от Meta [20] и Gemini от Google [14], основаны на Transformer'е типа decoder-only.

Энкодер-декодер (encoder-decoder)

Архитектура encoder-decoder использует как encoder-only, так и decoder-only Transformer'ы. Компонент-энкодер обрабатывает входную последовательность, а декодер использует эту обработанную информацию для генерации выходной последовательности.

Image represents a simplified diagram of a machine translation system.  A light-green rectangle labeled 'Encoder-only...' represents an encoder component of a neural machine translation model, which takes as input an English sentence 'I am graduating' enclosed in a dashed-line box labeled 'English:'.  An arrow indicates the flow of information from the English sentence to the encoder.  A light-orange rectangle labeled 'Decoder-only...' represents a decoder component, receiving the output from the encoder.  An arrow shows the data flow from the encoder to the decoder. Finally, an arrow points from the decoder to a dashed-line box labeled 'Japanese:' containing the Japanese translation '私は卒業します'. This illustrates the translation process: the encoder processes the English input, and the decoder generates the Japanese output.
Figure 13: Encoder-decoder Transformer used for language translation

Transformer типа encoder-decoder особенно подходит для задач, в которых выходные данные являются преобразованием входных. Например, в задаче перевода текста входное предложение на одном языке преобразуется в эквивалентное предложение на другом. Мы рассмотрим эту архитектуру в главе 3.

На рисунке 14 ниже показаны широко используемые модели, применяющие различные варианты Transformer'ов.

Image represents a classification of different transformer-based language models based on their architecture.  The diagram starts with a central node labeled 'Transformer,' branching into three main architectural types: 'Encoder-only,' 'Decoder-only,' and 'Encoder-decoder.'  The 'Encoder-only' branch connects to 'Meta's RoBERTa' and 'Google's BERT.' The 'Decoder-only' branch connects to 'OpenAI's GPT,' 'Anthropic's Claude,' 'Meta's LLaMA,' 'xAI's Grok,' and 'Google's Gemini.' Finally, the 'Encoder-decoder' branch connects to 'Meta's BART' and 'Google's T5.'  Each line represents a specific language model, indicating its architectural classification within the broader transformer family.  The arrangement visually demonstrates the relationships between different models and their underlying architectural designs.
Figure 14: Popular models for each variation of Transformers

Какой вариант Transformer подходит для функции Smart Compose?

Выбор между Transformer'ами типа encoder-only, decoder-only и encoder-decoder зависит от того, является ли задача генеративной или направленной на понимание. Smart Compose — это задача генерации текста, цель которой — завершить частично написанный текст. Поэтому Transformer типа decoder-only идеально подходит для этой задачи благодаря способности генерировать текст на основе заданной последовательности.

На собеседованиях по проектированию систем ML обычно акцент делается на концепциях высокого уровня и взаимодействии компонентов, а не на архитектурных деталях. Мы дадим краткий обзор архитектуры Transformer, не углубляясь в детали. Для более глубокого понимания архитектур Transformer см. [21] и [22].

Transformer типа decoder-only состоит из следующих компонентов:

  • Текстовые эмбеддинги
  • Позиционное кодирование
  • Transformer
  • Голова прогнозирования (prediction head)

Текстовые эмбеддинги

Компонент текстовых эмбеддингов преобразует каждый идентификатор токена в вектор фиксированной длины, называемый «эмбеддингом». Эмбеддинги обычно хранятся в таблице, как показано на рисунке 15, и обучаются в процессе тренировки модели.

Image represents a process of token embedding.  On the left is a vocabulary table with two columns: 'Token' and 'ID'.  The 'Token' column lists example words or symbols (!, ', go, etc.), while the 'ID' column assigns a unique numerical identifier to each token (0, 1, 733, etc.).  This table is labeled 'Vocabulary'.  To the right is an 'Embedding table...', which is a matrix containing numerical values (e.g., 0.25, 0.10, 0.75, etc.). Curved arrows connect the vocabulary table to the embedding table.  Specifically, an arrow labeled 'Token 0 embedding' connects the ID '0' from the vocabulary table to the first row of the embedding table, indicating that the embedding for token '!' (ID 0) is the vector [0.25, 0.10, 0.75]. Similarly, an arrow labeled 'Token 1 embedding' connects the ID '1' to the second row of the embedding table, showing the embedding for token ''' (ID 1) as the vector [0.18, -0.9, 0.34].  The embedding table represents a vector representation of each token from the vocabulary, where each row corresponds to a unique token ID and contains its embedding vector.
Figure 15: Embedding table representing tokens

Текстовые эмбеддинги играют ключевую роль в Transformer'е типа decoder-only. Разберёмся, почему.

В процессе подготовки данных мы токенизировали текст и преобразовали токены в идентификаторы. Однако в том, как представлен текст, есть два существенных ограничения:

  • Разреженность: словарь, как правило, включает десятки тысяч идентификаторов токенов. Представление этих идентификаторов с помощью унарного кодирования (one-hot encoding) порождает разреженные данные высокой размерности, что неэффективно.
  • Отсутствие семантической информации: идентификаторы токенов произвольны и не отражают никаких отношений между словами. Например, слова «happy» и «joyful» могут быть близки по смыслу, однако их идентификаторы не отражают этого сходства.

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

Кроме того, поскольку эмбеддинги обучаются в процессе тренировки модели, они фиксируют семантические значения. Например, эмбеддинги слов «happy» и «joyful» окажутся ближе друг к другу в пространстве эмбеддингов, чем эмбеддинги «happy» и «sad», как показано на рисунке 16.

Image represents a two-dimensional scatter plot with axes labeled X1 and X2.  The plot displays various words categorized into two distinct clusters.  The first cluster, encircled in red, is positioned towards the lower left and contains the words 'Sad' and 'Angry.' The second cluster, also encircled in red, is located towards the upper right and includes the words 'Joyful' and 'Happy.'  The remaining words—'Orange,' 'Apple,' 'Strawb...' (presumably 'Strawberry'), 'Cat,' 'Dog,' 'Car,' 'Bicycle,' and 'Bus'—are scattered across the plot, not clearly belonging to either cluster, suggesting they represent a different dimension or category not directly related to the emotional states represented by the clustered words.  There are no explicit connections or information flow lines drawn between the words; their positions relative to each other and the axes implicitly suggest a relationship based on an unspecified underlying data set.
Figure 16: Word embedding similarities (visualized in 2D for simplicity)

Позиционное кодирование

Transformer-ы изначально не учитывают порядок входных токенов. Если обратиться к формуле вычисления внимания, am, n=exp(qmknd)j=1Nexp(qmknd),

видно, что она инвариантна к перестановкам, то есть механизм внимания не принимает во внимание позиции токенов в последовательности. Например, Transformer не может различить фразы «инициализируй переменную, затем используй её» и «используй переменную, затем инициализируй её». Это снижает способность модели понимать или генерировать связный текст.

Чтобы преодолеть это ограничение, позиционное кодирование предоставляет Transformer-у информацию о положении каждого токена во входной последовательности. Без позиционного кодирования модель воспринимает входную последовательность как набор слов (bag of words), что проблематично. С позиционным кодированием позиция каждого токена кодируется с помощью функции позиционного кодирования, pi=f(i), где f(⋅)f(⋅)f(⋅) — функция позиционного кодирования, а iii — позиция токена. Это позволяет модели различать фразы «используй переменную, затем инициализируй её» и «инициализируй переменную, затем используй её».

Image represents a simplified diagram of a transformer model processing the input text 'I am home'.  The bottom layer shows the input text, which is tokenized into three tokens: 'I', 'am', and 'home'. Each token is represented by its corresponding token ID (40, 1097, and 2162 respectively). These IDs are then mapped to their respective token embeddings, which are represented as 3x3 matrices of numerical values (e.g., for 'I': 0.2, 0.5, -0.6; 0.9, -0.1, 0.9).  These embeddings are further augmented with positional embeddings (indicated by  `$e_.:.token i embedding` and `$p_.:.position i embeddi...`), which provide information about the token's position in the sequence. The combined token and positional embeddings are then fed into the transformer layers (represented by three stacked orange rectangles), which process the information. The output of the transformer (not explicitly shown) would be the model's representation of the input sentence.  Arrows indicate the flow of information from the input text through tokenization, embedding, and into the transformer.
Figure 17: Adding positional information to the Transformer's input sequence

Позиционное кодирование реализуется двумя распространёнными способами:

  • Фиксированное позиционное кодирование
  • Обучаемое позиционное кодирование
Фиксированное позиционное кодирование

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

Image represents a slide or a section of a document explaining sine-cosine positional encoding.  The top line displays the title 'Sine-cosine positional encoding'. Below this title, a partially shown mathematical equation is presented:  `$\begin{align*} PE_{(pos, 2i)} &= ...` This equation fragment suggests a formula for calculating positional encoding (PE), where `pos` likely represents the position of a token in a sequence, and `2i` likely indexes a dimension within the encoding vector. The ellipsis (...) indicates that the equation continues beyond what's shown.  The equation is written using LaTeX mathematical notation, implying a technical or academic context. The bottom line indicates that the underlying text is not an SVG image, explaining why a visual representation of the equation might be missing.  There are no other components, connections, or information flows depicted in the image beyond the title and the partial equation.
Figure 18: Sine-cosine positional encoding formula

Рисунок 19 иллюстрирует пример синусно-косинусного позиционного кодирования, показывая векторные представления для четырёх различных позиций. Для простоты в примере используется размерность вектора, равная четырём. На практике эта размерность обычно совпадает с размерностью эмбеддингов токенов, чтобы их можно было складывать (см. рисунок 17).

Image represents a table-like structure displaying the results of a sine and cosine calculation across multiple iterations.  The structure is organized into four columns and four rows. Each row represents a different iteration, indicated by the changing subscript in the variable names `$P_{ij}`. The first row initializes two variables, `$P_{00}` and `$P_{02}` to 0, and `$P_{01}` and `$P_{03}` to 1.0. Subsequent rows calculate the sine and cosine of increasing integer values (1, 2, 3...).  Specifically, columns 1 and 3 calculate the sine of the iteration number (e.g., `$P_{10} = sin(1...)`, `$P_{20} = sin(2...)`), while columns 2 and 4 calculate the cosine (e.g., `$P_{11} = cos(1...)`, `$P_{21} = cos(2...)`). The numerical results of these calculations are displayed in each cell, showing the computed sine and cosine values for each iteration.  The ellipses (...) in the formulas suggest that the actual calculations might involve more complex expressions than just `sin(x)` and `cos(x)`.  The `$p_...` prefix before each row seems to be a common identifier for the entire set of calculations.
Figure 19: Example of sine-cosine positional encoding

Рассмотрим плюсы и минусы фиксированного позиционного кодирования.

Плюсы:
  • Эффективность: фиксированные кодировки не добавляют в модель дополнительных обучаемых параметров, что делает их вычислительно более эффективными.
  • Поддержка длинных последовательностей: фиксированные методы способны отобразить любую позицию в представление. Эта гибкость позволяет модели обрабатывать последовательности, превышающие по длине те, что встречались в обучающих данных.
Минусы:
  • Предопределённые ограничения: некоторые методы фиксированного кодирования требуют заранее заданной максимальной позиции, что ограничивает их применимость последовательностями ниже этого максимума.
  • Неоптимальная производительность: в ряде задач фиксированные кодировки могут уступать обучаемым методам по качеству захвата позиционных зависимостей, что приводит к снижению производительности.
Обучаемое позиционное кодирование

В этом методе позиционные представления обучаются в ходе тренировки. Конкретно: инициализируется матрица весов P∈RN×dP \in \mathbb{R}^{N \times d}P∈RN×d, где NNN — максимальная длина последовательности, а ddd — размерность эмбеддингов. Эта матрица PPP рассматривается как обучаемый параметр и оптимизируется совместно с остальными параметрами модели.

The image represents a completely blank or empty space.  There are no visible components, no arrangement, no connections, and no information flow of any kind.  The image is simply a solid black rectangle, devoid of any diagrams, text, labels, URLs, parameters, or any other visual elements.
Figure 20: Trainable matrix representing positional encodings

Обучаемое позиционное кодирование имеет следующие плюсы и минусы.

Плюсы:
  • Оптимальная производительность: поскольку эмбеддинги обучаются на основе тренировочных данных, обучаемое позиционное кодирование может обеспечить оптимальное представление позиций для конкретной задачи.
Минусы:
  • Неэффективность: требует обучения дополнительных параметров, что увеличивает время обучения и вычислительные затраты.
  • Недостаточная обобщаемость: обученные эмбеддинги могут переобучиться под конкретные длины последовательностей, встречавшиеся при тренировке. Если модель в основном видела последовательности определённой длины, она может неэффективно представлять другие позиции, что снижает её способность к обобщению на разнообразные позиции.

Подводя итог: выбор между обучаемым и фиксированным позиционным кодированием зависит от ограничений задачи, в том числе от ожидаемого разнообразия длин последовательностей. Ряд работ, включая оригинальную статью о Transformer, применяет фиксированное позиционное кодирование ввиду его эффективности и лучшей обобщаемости. Следуя этой практике, для обучения функции Smart Compose мы используем фиксированное позиционное кодирование, в частности синусно-косинусное.

Transformer

Компонент Transformer принимает на вход последовательность эмбеддингов и преобразует её в обновлённую последовательность эмбеддингов.

Image represents a diagram of a transformer-based architecture, likely used in a natural language processing (NLP) model.  The diagram shows an input sequence represented by three vertical rectangles labeled 'Input sequ...', each representing a sequence element. These feed upwards into two stacked transformer blocks, each containing a 'Multi-head...' layer (represented by an orange rectangle) followed by a 'Feed Forward' layer (represented by a light blue rectangle).  The 'Multi-head...' layers likely represent multi-head attention mechanisms, and the 'Feed Forward' layers represent fully connected feed-forward networks.  Arrows indicate the flow of information between layers.  The output of the second transformer block, also represented by three vertical rectangles labeled 'Output...', is shown at the top, indicating the processed sequence.  The dashed lines enclose each transformer block, highlighting their modular structure.  The text 'Transformer...' is placed to the left of each transformer block, indicating that the entire block represents a single transformer unit.
Figure 21: A simplified Transformer structure

Архитектура Transformer состоит из стека блоков. Каждый блок содержит следующие элементы:

  • Многоголовое внимание (multi-head attention): этот слой обновляет каждый эмбеддинг с помощью механизма внимания. Механизм внимания фиксирует зависимости в последовательности, позволяя каждому эмбеддингу обращаться к предшествующим эмбеддингам. В силу природы своего механизма многоголовое внимание широко известно как само-внимание (self-attention) — именно этот термин будет использоваться далее по тексту книги.
  • Прямой проход (feed forward): этот слой независимо применяет к каждому эмбеддингу в последовательности два линейных преобразования с активацией ReLU между ними.

Архитектура Transformer включает такие детали, как остаточные соединения, нормализацию слоёв и слои дропаута. Для глубокого понимания этих компонентов рекомендуем обратиться к статье «Attention Is All You Need» [3] и [21].

Голова предсказания

Голова предсказания — финальный компонент decoder-only Transformer — преобразует выход Transformer в вероятности для каждого токена в словаре (рисунок 22). Эти вероятности используются для выбора наиболее вероятного следующего токена.

Image represents a diagram illustrating the process of text generation in a language model.  At the bottom, the input text 'How are' is fed into a 'Text Embedding' layer, which converts the words into numerical representations. These embeddings are then passed through a 'Positional Encoding' layer, adding information about the word order.  The output of this layer is fed into a 'Transformer' layer, the core of the model, which processes the encoded text to understand its meaning and context. The Transformer's output is then passed to a 'Prediction Head,' which predicts the probability of the next word.  The diagram shows a sequence of predicted words with associated probabilities: 'you' (0.94 probability) and 'zebra' (0.01 probability), with '<EOS>' (end of sequence) and 'able' (0.04 probability) appearing earlier in the sequence. A curved arrow points from the 'you' prediction to the text '94% probability fo...', indicating that the model assigns a high probability to 'you' as the next word in the sequence.  The entire architecture is a bottom-up flow, with information moving from the input text through the layers to the prediction head, which then outputs the predicted words and their probabilities.
Figure 22: Prediction head output probabilities

Обучение

Обучение корректирует параметры decoder-only Transformer с использованием данных электронной почты. По завершении процесса обучения модель способна предлагать вероятные варианты завершения текста.

Однако непосредственное обучение модели на задаче-специфическом наборе данных, например на данных электронной почты, не является хорошей стратегией. Такой прямой подход сопряжён с рядом трудностей:

  • Нехватка большого объёма обучающих данных: задаче-специфические наборы данных, как правило, невелики по размеру, что может мешать модели эффективно обучаться.
  • Риск переобучения: при обучении модели на задаче-специфическом наборе данных существует высокий риск переобучения. Переобучение происходит, когда модель запоминает обучающие данные настолько, что теряет способность обобщаться на новые данные.
  • Дорогостоящее и длительное обучение: обучение большой модели с нуля требует значительных вычислительных ресурсов и времени, поскольку модель должна освоить различные аспекты языка — сложный и ресурсоёмкий процесс.

Для решения перечисленных проблем широко применяется двухэтапная стратегия обучения: предобучение (pretraining) с последующей дообучением (finetuning). На этапе предобучения модель тренируется на большом объёме общих данных для изучения структуры языка. На этапе дообучения предобученная модель дополнительно обучается на данных, специфичных для конкретной задачи (например, на завершении электронных писем).

Эта двухэтапная стратегия использует форму переноса обучения (transfer learning): общие знания, полученные на этапе предобучения, передаются на этап дообучения. Перенос выгоден тем, что модели не нужно начинать с нуля при освоении новой задачи — вместо этого она адаптирует уже предобученные веса, что значительно эффективнее.

Image represents a two-stage machine learning model training pipeline.  Two cylindrical database icons, labeled 'General...' and 'Email...', represent the source data for the model.  Arrows indicate data flow.  'General...' data feeds into a rectangular box labeled '1. Pretraining,' which then outputs to a cloud-shaped box labeled 'Base...'.  Similarly, 'Email...' data feeds into a rectangular box labeled '2. Finetuning.'  A connection from the 'Pretraining' box to the 'Finetuning' box shows that the output of the pretraining stage is used as input for the finetuning stage.  Finally, the 'Finetuning' stage outputs to a cloud-shaped box labeled 'Final...', representing the final trained model.  The 'Base...' and 'Final...' labels suggest that these represent intermediate and final model versions, respectively.
Figure 23: Two-stage training strategy

Рассмотрим подробнее каждый этап и разберём необходимые обучающие данные, цели ML и функции потерь для каждого из них.

. Предобучение

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

Данные для предобучения

Данные для предобучения на этом этапе обычно представляют собой большой объём общих текстов из различных источников в интернете: веб-страницы, книги, социальные сети. Например, Common Crawl [23] — общедоступный набор данных, собранный путём обхода большого числа веб-страниц в интернете. Он содержит петабайты данных, регулярно собираемых с 2008 года.

Цель ML и функция потерь

Цель ML — это формализованная задача, которую стремится решить процесс обучения. В случае генерации текста наиболее распространённой целью ML является «предсказание следующего токена» (next-token prediction). При этой цели модель должна предсказать следующий токен по заданной последовательности предыдущих токенов. Например, в предложении «I hope you are __» модель должна присвоить высокую вероятность слову «well» как следующему токену.

Image represents a simplified illustration of a language model's prediction process.  A peach-colored rectangular box labeled 'Model' receives input from four smaller boxes containing the words 'I,' 'hope,' 'you,' and 'are.'  Arrows indicate the flow of information from these input words into the model. The model outputs a vertical column of numbers representing probabilities (0.02, 0.11, 0.86, 0.00, 0.01), which are then mapped to a bar chart titled 'Token probabilities.' This chart displays the probability distribution for four potential next words: '<EOS>' (end of sentence), 'able,' 'well,' and 'zebra.'  The bar for 'well' is significantly taller than the others, indicating an 86% probability, while 'able' has a 2% probability, and '<EOS>' and 'zebra' have much lower probabilities. A curved arrow connects the model's probability output to the bar chart, visually demonstrating how the model's numerical probabilities are translated into a probability distribution over possible next tokens.
Figure 24: Probability distribution in next-token prediction

Предсказание следующего токена хорошо подходит для задач генерации текста, поскольку после обучения модель способна строить предложения постепенно. Например, получив на вход «I ordered food because I», модель может предсказать «was» как следующее слово. Затем процесс повторяется с новой последовательностью «I ordered food because I was», что приводит к следующему предсказанию — возможно, «hungry». Этот итеративный процесс продолжается до тех пор, пока модель не предскажет «⟨\langle⟨EOS⟩\rangle⟩» — специальный токен, обозначающий конец последовательности. На рисунке 25 показан пошаговый процесс генерации текста с помощью предсказания следующего токена.

Image represents a sequence of autoregressive language models generating a sentence.  Each numbered section (1, 2, 3, and implied continuation) depicts a model's processing step.  A rectangular box labeled 'Model' (peach-colored with a gold outline) represents the core language model.  Below the 'Model' box are smaller, dashed-line boxes containing individual words ('How,' 'are,' 'you,' 'doing') which serve as input tokens to the model.  Arrows indicate the flow of information:  the model processes the input tokens and generates a new word as output, shown as a single word in a box above the 'Model' box.  Section 1 shows the model receiving 'How' as input and generating 'are' as output. Section 2 shows the model receiving 'How' and 'are' as input and generating 'you' as output. Section 3 shows the model receiving 'How,' 'are,' and 'you' as input and generating 'doing' as output.  The ellipsis (...) indicates that this process continues, with the model progressively generating the sentence word by word, using previously generated words as additional input in subsequent steps.
Figure 25: Incremental generation of text

Для оптимизации модели с целью корректного предсказания следующего токена определяется функция потерь, направляющая процесс обучения. Кросс-энтропийные потери [24] — широко используемая функция потерь для задачи предсказания следующего токена. Эта функция измеряет расхождение между предсказанными вероятностями и правильным токеном, позволяя оптимизатору обновлять параметры модели для получения более точных вероятностей в будущем.

Image represents a simplified model of a machine learning process, specifically focusing on the prediction and loss calculation.  At the bottom, two input tokens, 'How' and 'are,' feed into a 'Model' (represented as a peach-colored rectangle). The model processes these inputs and outputs a vector of predicted probabilities ('Predicted p...') represented as a column of five numbers: 0.02, 0.11, 0.86, 0.00, and 0.01.  These probabilities correspond to different possible outputs or classes. Simultaneously, a 'Correct...' vector (a column of five 0s and a single 1) represents the ground truth or actual target values.  A 'loss' arrow connects the predicted and correct vectors, indicating that a loss function compares these two vectors to quantify the difference between the model's prediction and the correct answer. This loss value is then used to adjust the model's parameters in subsequent training iterations (not shown in the image).
Figure 26: Loss calculation

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

Image represents a diagram illustrating the training process of a decoder-only Transformer model for text generation.  At the bottom, an 'Input sentence,' 'How are you?', feeds into the model.  The model processes this sentence, represented by the tokens '<BOS>', 'How', 'are', 'you', and '?'. These tokens are input to a horizontally oriented, orange-filled box labeled 'Decoder-only Transformer.'  The transformer processes each token individually, and outputs a set of predicted probability distributions, visually represented as vertically stacked boxes labeled 'Predicted pro...'.  These predictions are compared to the 'Correct tokens' ('How', 'are', 'you', '?', '<EOS>'), also represented as vertically stacked boxes. The difference between the predicted and correct tokens is calculated as a 'loss' for each token, represented by arrows pointing upwards from the predicted tokens to the corresponding correct tokens.  These individual losses are then used to update the weights of the Decoder-only Transformer during the training process, aiming to minimize the difference between predicted and correct token distributions.  The '<BOS>' token represents the beginning of the sentence, and '<EOS>' represents the end of the sentence.
Figure 27: Parallelizing loss computations over different lengths

. Дообучение

Дообучение предполагает адаптацию базовой модели, полученной на этапе предобучения, к конкретной задаче, например к завершению электронных писем. На этом этапе модель обучается мастерству в конкретной задаче на меньшем, задаче-специфическом наборе данных. В ходе дообучения модель сохраняет языковое понимание, приобретённое на этапе предобучения, и адаптируется к особенностям задачи.

Данные для дообучения

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

Цель ML и функция потерь

На этапе дообучения и цель ML, и функция потерь остаются неизменными. Целью ML по-прежнему является предсказание следующего токена, а обучение направляется функцией кросс-энтропийных потерь. Единственное отличие от этапа предобучения состоит в том, что потери вычисляются на основе данных электронной почты, ориентируясь на предсказание следующего токена в контексте письма.

Image represents a simplified system for generating email content.  At the bottom is a rectangular box labeled 'Partial email body' containing the text 'Hi Alex, I hope you a...', representing a fragment of an email's body text. An upward arrow connects this box to a larger, horizontally oriented, light orange box labeled 'Model,' indicating that this partial email body serves as input to the model.  A second upward arrow connects the 'Model' box to a smaller, rectangular box labeled 'work,' suggesting that the model's output is used for work-related tasks. The overall flow depicts a process where a partial email body is fed into a model, which then generates a complete email (implied by the connection to 'work').  The arrangement visually emphasizes the model as the central component processing the input and producing output for a specific task.
Figure 28: Example of email completion

Однако опираться исключительно на тело письма как на единственный входной сигнал не слишком эффективно, поскольку таким образом предсказать следующий токен удаётся не всегда. Представьте пользователя, который хочет ответить на письмо от Джона. Когда пользователь вводит «Дорогой», модель должна в идеале предложить «Джон». Если же эта информация не предоставлена на вход, модель не сможет предсказать «Джон» как вероятный следующий токен.

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

Image represents a simplified architecture diagram of a model, likely a machine learning model used for email processing or generation.  A large, horizontally oriented, light orange rectangle labeled 'Model' sits at the top, representing the core model itself.  Below it are five smaller, vertically oriented, white rectangles, each connected to the 'Model' rectangle via upward-pointing arrows, indicating data flow into the model. These rectangles represent input features to the model: two are labeled 'Email...', suggesting email content as input; one is labeled 'Sender...', indicating sender information as input; one is labeled 'Recipien...', likely representing recipient information; and the last is labeled 'Previous...', possibly representing previous email interactions or context.  The arrows show that the model receives these five types of data as input for processing or prediction.
Figure 29: Providing more context as the input for improved model predictions

Объединение различных входных данных

В традиционном ML архитектура модели, как правило, зависит от типа обрабатываемых данных. Это требует настройки предобработки и разработки признаков под разные типы данных: текст, изображения или таблицы.

В эпоху GenAI архитектура модели зачастую отделена от структуры входных данных. Это разделение повышает гибкость, позволяя одной и той же архитектуре модели обрабатывать разнообразные входные данные в рамках единой архитектуры, упрощая разработку и расширяя универсальность систем GenAI. Разделение достигается с помощью таких техник, как проектирование промптов (prompt engineering) [25]. В главе 6 мы подробно рассмотрим проектирование промптов.

Image represents a comparison of traditional Machine Learning (ML) and the Generative AI (GenAI) era.  The left side depicts traditional ML, showing a 'Model' at the top receiving input from multiple 'Features' (1 to N). Each feature is preprocessed individually ('Preprocessing +...') before being fed into the model.  Each preprocessing step receives an 'Input type...' as input.  The right side illustrates the GenAI era, where a 'Model' similarly sits at the top, but its input is a 'Long sequence of tokens.'  This sequence is generated by a 'Prompt Engineering' step, which in turn receives multiple 'Input type...' inputs.  Arrows indicate the flow of data, showing how preprocessed features are combined to feed the model in traditional ML, while in GenAI, multiple inputs are processed through prompt engineering to create a single token sequence for the model.  The overall structure highlights the shift from feature engineering in traditional ML to prompt engineering in the GenAI era.
Figure 30: Combining various inputs in traditional ML vs. GenAI era

Для объединения различных входных данных в Gmail Smart Compose, как показано на рисунке 31, мы объединяем несколько текстовых входных данных в одну последовательность с тегами, используя шаблон промпта. Нам не нужно беспокоиться об отсутствующих необязательных полях, если наш обучающий набор содержит подобные примеры. Модель обрабатывает различные комбинации входных данных вне зависимости от того, содержат ли они все детали или лишь частичную информацию. Эта гибкость демонстрирует продуманный дизайн модели, позволяющий генерировать контекстуально уместные выходные данные даже при неполных входных данных. Включая разнообразные сценарии в обучающие данные, мы обеспечиваем хорошую обобщаемость модели на различные структуры входных данных с получением надёжных результатов.

Image represents two rectangular boxes placed side-by-side, labeled 'Example 1' and 'Example 2' respectively, at the bottom.  Each box contains the text 'Inputs:...' centrally positioned, indicating that they represent placeholders for input data.  There are no visible connections or information flow between the two boxes; they are presented independently as two separate examples, likely illustrating different input scenarios or data structures for a system.  The boxes are empty except for the 'Inputs:...' text, suggesting that the specific input details are omitted for illustrative purposes.
Figure 31: Examples of combining text inputs

Преимущества двухэтапного обучения

Двухэтапная стратегия обучения имеет ряд преимуществ, в том числе:

  • Адаптируемость: одна и та же базовая модель, полученная на этапе предобучения, может быть адаптирована для различных задач.
  • Улучшенная обобщаемость: предобучение на больших и разнообразных текстовых данных позволяет модели выработать широкое понимание языка, что способствует лучшей обобщаемости на различные задачи.
  • Быстрое дообучение: модель усваивает общие знания на этапе предобучения, что ускоряет последующий процесс дообучения.
  • Работа с дефицитом данных: для задач, где большие наборы данных недоступны, знания, полученные в ходе предобучения, могут компенсировать их нехватку. Это позволяет модели хорошо работать даже при ограниченном объёме задаче-специфических данных.
  • Снижение риска переобучения: при обучении модели с нуля на небольшом задаче-специфическом наборе данных существует риск переобучения. В двухэтапном обучении предобучение выступает в роли регуляризации: модель сначала учится широко понимать язык, и лишь затем сосредотачивается на особенностях конкретной задачи.
  • Оптимизация ресурсов: разбивая процесс обучения на два этапа, мы выполняем вычислительно затратное предобучение один раз и можем повторно использовать одну и ту же модель для адаптации к разным задачам. Это снижает вычислительные затраты, поскольку нет необходимости повторять этап предобучения для каждой задачи.

Сэмплирование

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

В контексте Smart Compose сэмплирование предполагает генерацию вероятного завершения письма на основе частичного текста письма пользователя и другой релевантной информации. Как показано на рисунке 32, сэмплирование реализуется путём генерации токенов по одному. Например, когда модели передаётся «Hi Alex, does today», токен «work» выбирается как следующий на основе предсказанных вероятностей. Затем на вход модели подаётся «Hi Alex, does today work», и токен «for» выбирается как следующий. Этот процесс продолжается до тех пор, пока модель не предскажет токен ⟨\langle⟨EOS⟩\rangle⟩.

Image represents a simplified model of text generation, likely for email composition.  A large, horizontally oriented, peach-colored rectangle labeled 'Model' represents the core generative model. Below the model are several white boxes representing input tokens: an unlabeled box signifying initial context, followed by 'Hi,' 'Alex,' ',', 'does,' and 'today,' grouped and labeled 'Partial email body.'  Solid black arrows indicate the flow of these input tokens into the model. Above the model are more white boxes representing output tokens: 'work,' 'for,' 'you,' '?', and '<EOS>', with '<EOS>' signifying the end of the sequence. Dashed black arrows show the model's output tokens flowing upwards.  The arrangement visually depicts the model processing the input ('Initial context...' and 'Partial email body') and generating the output ('work,' 'for,' 'you,' '?', '<EOS>'), suggesting a sequential, left-to-right generation process.
Figure 32: Sampling email completion token by token

Существуют два основных типа стратегий генерации нового текста в генеративных моделях: детерминированные и стохастические. Рассмотрим каждый из них.

Детерминированный

Детерминированные методы генерируют текст детерминированным образом, то есть без случайности или вариативности в выходных данных. Например, на каждом шаге генерации токенов модель выбирает токен с наибольшей вероятностью из предсказанного распределения. Этот метод гарантирует, что при одинаковом входе сгенерированный текст всегда будет одинаковым, обеспечивая согласованность и воспроизводимость. На рисунке 33 показан «жадный поиск» (greedy search) — простой детерминированный метод генерации текста путём итеративного выбора следующего токена на основе наивысшей предсказанной вероятности.

Image represents a directed acyclic graph illustrating word probabilities in a sentence.  A thick horizontal line labeled 'How' connects to a box labeled '0.56' representing the word 'are'.  From '0.56', a thick line labeled 'you' connects to a box labeled '0.91'.  From '0.91', a thick line labeled 'doing' connects to a box labeled '0.39'.  Dashed lines represent weaker connections with associated probabilities.  A dashed line from '0.56' labeled 'am' connects to a box labeled '0.03'. Another dashed line from '0.56' labeled 'dog' connects to a box labeled '0.01'. A dashed line from 'How' labeled 'do' connects to a box labeled '0.26'. A dashed line from 'How' labeled 'come' connects to a box labeled '0.14'. A dashed line from '0.91' labeled 'work' connects to a box labeled '0.001'. A dashed line from '0.91' labeled '?' connects to a box labeled '0.38'.  The boxes contain numerical values, presumably representing probabilities or weights associated with the transitions between words in the sentence.  The graph visually depicts the probabilistic relationships between words, showing stronger connections with thicker lines and higher numerical values.
Figure 33: Greedy search
Плюсы:
  • Согласованность: для одинакового ввода сгенерированный текст всегда одинаков — желательное свойство для систем, требующих предсказуемых результатов.
  • Предсказуемые выходные данные: неожиданные выходные данные встречаются реже, поскольку на каждой итерации всегда выбирается наиболее вероятный токен.
Минусы:
  • Отсутствие разнообразия: модель может пропустить менее вероятные, но более интересные токены, что ведёт к снижению креативности генерируемого текста. Например, при генерации истории модель всегда выбирает наиболее распространённые фразы, получая предсказуемое, но менее интересное повествование.
  • Повторяющийся текст: текст может стать повторяющимся, поскольку один и тот же высоковероятный токен выбирается постоянно. Например, при генерации длинной статьи модель может многократно использовать определённые фразы. Реальный пример этого показан на рисунке 34.
Image represents a simple text generation system.  At the top is a rectangular box containing the input text prompt: 'I enjoy walking with my cute dog, but I'm not sure if I'll ever...'.  Below this, a vertical arrow points downwards labeled 'Greedy search,' indicating the search method used. This arrow connects to a light peach-colored rectangular box labeled 'GPT-2,' representing the GPT-2 language model used for text generation. The arrow's direction shows that the input prompt is fed into the GPT-2 model via a greedy search algorithm.  The overall structure depicts a straightforward pipeline where the input prompt is processed by the GPT-2 model using a greedy search to generate text, although the generated text itself is not shown in the image.
Figure 34: Text generated by GPT-2 language model using greedy search

Стохастическое сэмплирование

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

На рисунке 35 показаны два примера сэмплирования с одинаковым начальным токеном «How». В первом случае последовательность сгенерированных токенов приводит к «How are you»; во втором — из того же начального токена генерируется иная последовательность вследствие случайности, присущей сэмплированию.

Image represents two examples of stochastic sampling. Each example shows a directed acyclic graph where nodes represent words ('How,' 'are,' 'come,' 'you,' 'am,' 'dog,' 'do') and edges represent probabilities.  The first example displays a 'How' node connected with a thick, solid line to an 'are' node (probability 0.56). From 'are,' a thick solid line connects to a 'you' node (probability 0.91), and a dashed line connects to an 'am' node (probability 0.03).  Dashed lines also connect 'How' to 'come' (probability 0.26) and 'are' to 'do' (probability 0.14), and 'are' to 'dog' (probability 0.01). The second example mirrors the structure of the first, but with different probabilities for the 'come' (0.26) and 'are' (0.56) nodes, and only shows the connections from 'How' to 'come' and 'are' and 'are' to 'do' (0.14).  Both examples are labeled 'Stochastic sampling example 1' and 'Stochastic sampling exampl...' respectively, indicating that they illustrate a concept of probabilistic word selection.
Figure 35: Stochastic sampling randomness
Плюсы:
  • Разнообразие: наличие случайности обеспечивает более вариативные выходные данные, что особенно полезно в таких приложениях, как генерация диалогов.
  • Новизна: выбирая образцы из распределения, модель может обращаться к менее вероятным, но потенциально более интересным токенам, что стимулирует креативность и получение оригинальных результатов.
Минусы:
  • Непоследовательность: результат может различаться при каждой генерации текста, что менее пригодно для приложений, требующих точных и воспроизводимых результатов.
  • Непредсказуемые выходные данные: случайность может приводить к неожиданным вариациям в сгенерированном тексте, которые могут оказаться неуместными.

Какой метод генерации подходит для функции Smart Compose?

Для Smart Compose предпочтительны детерминированные методы по ряду причин:

  • Согласованность: согласованность генерируемого текста критически важна для таких приложений, как завершение электронных писем, где пользователи ожидают предсказуемых и надёжных подсказок. Использование детерминированного метода означает, что пользователи не будут видеть кардинально различающихся предложений каждый раз, когда начинают вводить одно и то же.
  • Лучшая обработка распространённых фраз: детерминированные методы, как правило, предпочтительнее в контексте электронной почты, поскольку в них приоритет отдаётся наиболее вероятным вариантам завершения, а не новизне, которую предлагают стохастические методы.
  • Снижение риска неуместных предложений: стохастические методы иногда могут генерировать неуместные предложения из-за присущей им случайности. Такое поведение нежелательно в функции автодополнения электронной почты.

Эти причины подчёркивают, почему детерминированные методы предпочтительны в приложениях, требующих согласованности, — например, в автодополнении электронной почты. Теперь, выбрав детерминированную генерацию текста, рассмотрим два основных алгоритма:

  • Жадный поиск
  • Лучевой поиск

Жадный поиск

Жадный поиск — простейший детерминированный алгоритм. Он всегда выбирает токен с наибольшей вероятностью в качестве следующего. Как показано на Рисунке 34, жадный поиск может приводить к повторяющимся паттернам в генерируемом тексте. Это происходит потому, что алгоритм следует узкому пути, основанному на токенах с наибольшей вероятностью, не рассматривая альтернативные пути, которые могли бы привести к более связным предложениям. Из-за этого ограничения жадный поиск редко используется на практике.

Лучевой поиск

Лучевой поиск [26] — популярный детерминированный алгоритм генерации текста из обученной модели. Основная идея состоит в одновременном отслеживании нескольких потенциальных последовательностей токенов. На каждом шаге модель вычисляет вероятности следующих возможных токенов для каждой последовательности и выбирает «top-k» наиболее вероятных последовательностей. Значение k, известное как ширина луча, является настраиваемым параметром.

Image represents a probabilistic context-free grammar (PCFG) tree illustrating word probabilities in a sentence.  A central node labeled 'How' branches into three main paths, each representing a different word choice: 'come,' 'are,' and 'do.'  These words connect with probabilities (0.24, 0.31, and 0.26 respectively) to subsequent nodes. Each of these nodes further branches out to other words with associated probabilities, indicated by dashed lines. For example, the 'are' node connects to 'plants' (0.21), 'animals' (0.36), and 'you' (0.91) with their respective probabilities. Similarly, the 'come' node connects to 'are' (0.001) with a probability. The 'do' node connects to 'you' (0.63), 'the' (0.001), and 'people' (0.21).  The 'are' node also connects to 'am' (0.03) and 'dog' (0.01).  The probabilities on the branches represent the likelihood of each word following the preceding word in the sentence, forming a probabilistic model of sentence structure.  The thicker lines represent higher probability connections.
Figure 36: Beam search calculating the top three most probable sequences (beam width=3 )

Ниже приведён краткий пошаговый процесс генерации текста с использованием лучевого поиска при ширине луча, равной 3:

  • Инициализация: начало работы с частично написанным письмом пользователя в качестве входных данных для обученной модели. Модель предсказывает распределение вероятностей для следующего токена. Лучевой поиск выбирает три токена с наибольшими вероятностями.
  • Расширение: для каждой из трёх лучших последовательностей она передаётся в модель, которая возвращает вероятности следующего токена.
  • Отсечение: выбираются три лучшие последовательности на основе их накопленных вероятностей.
Image represents a three-stage process visualized as directed graphs, illustrating the evolution of a probabilistic language model.  The first stage, 'Initialization,' shows a simple tree with a central node 'How' connected to 'are' (with weight 0.31) and 'do' (with weight 0.26), and 'come' (with weight 0.24).  The second stage, 'Expansion,' expands upon the previous structure.  The 'are' node now connects to 'am' (0.03), 'dog' (0.01), 'you' (0.91), and the 'come' node connects to 'plants' (0.21) and 'animals' (0.36).  The 'do' node connects to 'the' (0.001) and 'people' (0.21).  All connections are represented by dashed lines with associated weights.  The third stage, 'Pruning,' simplifies the graph from stage two.  Less probable connections are removed, resulting in a graph where 'How' connects to 'are' (0.31), 'come' (0.24), and 'do' (0.26).  'Are' connects to 'you' (0.91), and 'do' connects to 'you' (0.63).  'Come' connects to 'animals' (0.36).  The weights represent the probabilities of the connections, with thicker lines in the first and third stages indicating stronger connections.  The overall image demonstrates a process of building and refining a probabilistic model, likely for natural language processing.
Figure 37: First iteration of a beam search with beam width=3

Шаги расширения и отсечения повторяются до тех пор, пока все три потенциальных предложения не достигнут токена ⟨\langle⟨EOS⟩\rangle⟩ или максимальной длины. После остановки алгоритма лучевого поиска в качестве выходных данных выбирается последовательность с наибольшей накопленной вероятностью.

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

  • Ограниченное разнообразие: лучевой поиск нередко приводит к похожим результатам, что не идеально для приложений, требующих разнообразных ответов.
  • Сложности с длинными последовательностями: лучевой поиск плохо справляется с длинными последовательностями, поскольку одновременное отслеживание слишком большого числа последовательностей может стать вычислительно затратным.

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

Оценка

Оценка является неотъемлемой частью собеседований по проектированию ML-систем. Интервьюеры проверяют, умеют ли кандидаты эффективно тестировать и верифицировать проектируемую ML-систему. Идеальный ответ должен охватывать как онлайн-, так и офлайн-оценку и включать обсуждение популярных метрик для измерения производительности модели в каждой из этих настроек.

Рассмотрим некоторые распространённые метрики для оценки функции Smart Compose.

Метрики офлайн-оценки

Офлайн-оценка использует заранее собранные и исторические данные для оценки производительности модели. Её цель — убедиться в приемлемости производительности модели до её развёртывания в производственной среде. Например, рекомендательная система тестируется на исторических данных о взаимодействиях пользователей, чтобы проверить, насколько точно она предсказывает предпочтения пользователей. Аналогично, производительность обученной модели для функции Smart Compose оценивается на исторических данных электронной почты. Двумя широко используемыми метриками являются:

  • Перплексия
  • ExactMatch@N

Перплексия

Перплексия [27] — стандартная метрика, широко используемая при офлайн-оценке языковых моделей. Эта метрика измеряет, насколько точно модель предсказывает точную последовательность токенов, присутствующих в текстовых данных. В математическом выражении перплексия определяется как экспонента среднего «отрицательного логарифмического правдоподобия» предсказанной вероятности с учётом предшествующих токенов в последовательности:

Image represents a mathematical formula for calculating Perplexity, labeled 'Perplexity(X)' on the left side. The formula is set equal to the exponential function, denoted by 'exp'. Inside the parentheses of the exponential function, there is a negative sign followed by a fraction '1/N', where N is an uppercase letter. This fraction is multiplied by a summation from i=1 to N. The term being summed is 'log P(x_i | x_{1:i-1})', which represents the logarithm of the conditional probability of the i-th element x_i given the preceding elements from x_1 to x_{i-1}. The entire sum multiplied by -1/N is the negative average log-likelihood of the sequence X. Therefore, the formula calculates the perplexity of a sequence X as the exponential of the negative average log-likelihood of that sequence according to a probability model P.

В этом уравнении:

  • XXX — токенизированная последовательность (x1,x2,⋯ ,xN)\left(x_1, x_2, \cdots, x_N\right)(x1​,x2​,⋯,xN​) в текстовых данных, используемая для оценки точности предсказания последовательности моделью.
  • NNN — количество токенов в последовательности.
  • P(xi∣x1:i−1)P\left(x_i \mid x_{1: i-1}\right)P(xi​∣x1:i−1​) — условная вероятность i-го токена при наличии предшествующих токенов x1:i−1x_{1: i-1}x1:i−1​, то есть вероятность того, что модель предскажет i-й токен, зная предыдущие токены.

Рисунок 38 иллюстрирует конкретный пример для лучшего понимания перплексии.

The image is completely black and contains no visible components, arrangement, connections, or information flow.  Therefore, no description of its structure or interaction between components is possible.
Figure 38: Example of perplexity calculation

Более низкое значение перплексии означает, что модель в среднем присваивала более высокие вероятности токенам, встречающимся в текстовых данных. Таким образом, более низкая перплексия свидетельствует о том, что модель лучше предсказывает следующие токены.

ExactMatch@N

ExactMatch@N измеряет процент сгенерированных фраз длиной ровно N слов, которые совпадают с первыми N словами эталонного текста. На Рисунке 39 показаны вычисления ExactMatch@3 для трёх сгенерированных последовательностей. На практике для оценки обычно используется значительно больше трёх последовательностей.

Image represents a diagram illustrating a model's performance evaluation. Three input sentences ('Hi Jessica, what...', 'It was nice', 'I hope you') are fed into three separate instances of a 'Model,' each producing a prediction ('was our appointment,' 'meeting you today,' 'are doing well,' respectively).  These predictions are then compared to corresponding 'ground-truth' statements ('was our appointment today?', 'seeing you today', 'are doing well') in a separate column.  A final column, 'ExactMatch@3?', indicates whether each prediction exactly matches its ground truth (Yes or No).  Finally, at the bottom, the overall ExactMatch@3 score is calculated as 2/3 = 0.66, representing the proportion of exact matches out of the three input sentences.  The diagram visually shows the flow of information from input sentences through the model, to predictions, comparison with ground truth, and finally to the overall accuracy metric.
Figure 39: Example of calculating ExactMatch@3 for three sequences

Вычисление ExactMatch@N для различных значений N позволяет оценить производительность модели при разных длинах предложений. Для измерения общей производительности модели вычисляется ExactMatch для всех длин вплоть до определённой максимальной длины, после чего берётся среднее значение.

Хотя перплексия и ExactMatch@N традиционно использовались для оценки Gmail Smart Compose, другие метрики, такие как оценка BLEU и ROUGE-N, появившиеся позднее, также оказались полезными. Подробнее эти метрики рассматриваются в Главе 3.

Метрики онлайн-оценки

Онлайн-оценка измеряет производительность модели в реальном времени по мере взаимодействия пользователей с системой. Для оценки функции Smart Compose в онлайн-среде используются дополнительные метрики помимо перплексии и ExactMatch@N. Эти онлайн-метрики измеряют вовлечённость пользователей, задержку модели и общее влияние на пользовательский опыт.

В отличие от офлайн-метрик, которые, как правило, стандартизированы, метрики онлайн-оценки определяются исходя из конкретных требований и потребностей. Компании часто используют сотни метрик для онлайн-оценки. Однако в контексте собеседования обычно обсуждаются наиболее распространённые из них. В данном разделе мы сосредоточимся на следующих метриках:

  • Метрики вовлечённости пользователей
  • Метрики эффективности
  • Метрики задержки
  • Метрики качества

Метрики вовлечённости пользователей

  • Процент принятия: доля предложений функции Smart Compose, принятых пользователями. Более высокий процент принятия свидетельствует о том, что предложения актуальны и полезны для пользователей.
  • Процент использования: доля всех написанных писем, при создании которых была задействована функция Smart Compose. Высокий процент использования, как правило, указывает на то, что пользователи доверяют этой функции.

Метрики эффективности

  • Среднее время написания: отслеживает среднее время, затрачиваемое пользователями на написание писем с использованием Smart Compose и без него. Сокращение среднего времени написания при использовании Smart Compose будет свидетельствовать о том, что функция ускоряет процесс написания электронной почты.

Метрики задержки

  • Время отклика системы: измеряет время, необходимое для появления предложений Smart Compose после начала набора текста пользователем. Важно обеспечить, чтобы эта метрика оставалась ниже определённого порогового значения, — тогда предложения будут появляться прежде, чем пользователь успевает ввести соответствующий текст.

Метрики качества

  • Частота обратной связи: измеряет, как часто пользователи оставляют отзывы о предложениях. Обратная связь полезна для непрерывного улучшения системы.
  • Экспертная оценка: для оценки полезности предложений проводятся качественные исследования с участием пользователей. Эта метрика отражает удовлетворённость пользователей функцией Smart Compose.

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

Общий дизайн ML-системы

В данном разделе предлагается дизайн упрощённой версии функции Smart Compose.

При проектировании такой функции необходимо учитывать не только базовую модель, предсказывающую следующий токен. Эффективность системы зависит от слаженной работы различных компонентов, обеспечивающих оперативность отклика, генерацию актуальных предложений и соблюдение этических стандартов. Для функции Smart Compose рассматриваются следующие ключевые компоненты:

  • Сервис триггера
  • Генератор фраз
  • Сервис постобработки

Рассмотрим каждый из них подробнее.

Сервис триггера

Сервис триггера активирует функцию Smart Compose, отслеживая действия пользователя, такие как нажатия клавиш. Он определяет момент активации функции на основе таких критериев, как количество введённых символов или ввод определённых ключевых слов в тексте. Например, если пользователь вводит «Я,» сервис может не активировать Smart Compose, поскольку контекста недостаточно для предсказания намерений пользователя. Однако если пользователь вводит «Я надеюсь,» сервис активирует Smart Compose, поскольку дополнительный контекст позволяет формировать более полезные предложения.

Сервис триггера обеспечивает, чтобы предложения не появлялись слишком часто. Как только сервис определяет, что активация функции Smart Compose будет полезной, он запускает компонент генератора фраз, который рассматривается далее.

Генератор фраз

Генератор фраз является основным компонентом функции Smart Compose. Он генерирует наиболее вероятное дополнение на основе частично введённого пользователем текста.

Для этого генератор фраз взаимодействует с обученной моделью и использует лучевой поиск для получения top-k наиболее вероятных вариантов дополнения. Каждый вариант дополнения заканчивается токеном ⟨\langle⟨EOS⟩\rangle⟩ и сопровождается оценкой уверенности, указывающей на степень достоверности предложения модели.

Image represents a text generation system.  A rectangular box labeled 'Input text' containing the text '[Text] Hi Petra, it was...' feeds into a purple rectangular box labeled 'Phrase Generator.'  An arrow indicates this data flow. The 'Phrase Generator' then sends its output to a language model represented by a cloud labeled 'Model' via a process called 'Beam search,' indicated by an upward arrow. The model processes the input and returns a table of 'Top-5 completions' and their corresponding 'Score.'  The table lists five different text completions ('nice seeing you!', 'nice meeting you!', 'a pleasure to discuss th...', 'last Friday! Hopefully y...', 'good.') with associated numerical scores (0.28, 0.22, 0.13, 0.06, and 0.05 respectively), suggesting a ranking based on probability or relevance.  The arrow from the 'Phrase Generator' to the table shows the flow of generated text to the scoring and ranking system.
Figure 40: Beam search outputs top five potential completions (beam width = 5)

Исходя из возможных вариантов дополнения, необходимо учесть два ключевых момента:

  • Удаление длинных предложений
  • Удаление предложений с низкой уверенностью

Удаление длинных предложений

Поскольку короткие предложения легче читаются автором в процессе набора текста, предлагаемые фразы, которые слишком длинны, исключаются. Например, если пользователь вводит «Не могли бы вы,» генератор фраз может предложить «помочь мне с этим?» Более длинные предложения, такие как «помочь мне с этим проектом, срок сдачи которого — следующая неделя,» будут слишком конкретными и, следовательно, с меньшей вероятностью предугадают намерения автора.

Image represents a diagram illustrating a text generation process and its re-ranking.  The diagram shows two tables, each with 'Top-5 completions' and 'Score' columns, flanking a central rectangular box labeled 'Long-sequence...'. The left table lists five text completions ('nice seeing you!', 'nice meeting you!', 'pleasure to discuss t...', 'last Friday! Hopefull...', 'good.') with associated scores (0.28, 0.22, 0.13, 0.06, 0.05 respectively).  A black arrow points from this table to the 'Long-sequence...' box, indicating that these completions are input to a longer sequence generation process. The right table also displays 'Top-5 completions' and 'Score' columns, but the completions are re-ordered.  Red lines connect the completions in the left table to their corresponding positions in the right table, showing how the ranking has changed after the 'Long-sequence...' process.  The scores in the right table remain the same as in the left table, indicating that the re-ranking doesn't alter the individual completion scores, only their relative positions within the top-5.  The 'Long-sequence...' box likely represents a model or process that considers the context of a longer sequence to refine the ranking of the initial completions.
Figure 41: Removing long suggestions

Удаление предложений с низкой уверенностью

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

Image represents a process illustrating a low-confidence scenario in a text generation system.  The diagram shows two identical tables on either side of a central rectangular box labeled 'Low-confidence...'. Each table has two columns: 'Top-5 completions' and 'Score'. The left table displays three text completions ('nice seeing you!', 'nice meeting you!', 'good.') with corresponding scores (0.28, 0.22, 0.05 respectively).  A unidirectional arrow connects this table to the 'Low-confidence...' box, indicating that the table's data is input to the box. The 'Low-confidence...' box represents a stage where the system assesses the confidence level of the generated text.  Another unidirectional arrow connects the 'Low-confidence...' box to the right table. The right table is identical in structure to the left table, but the scores are altered.  Red lines connect the scores in the right table to different completions in the left table, showing a re-ranking or re-scoring of the completions after the low-confidence assessment.  Specifically, the score of 'good.' is increased, while the scores of 'nice seeing you!' and 'nice meeting you!' are decreased, suggesting a change in the system's confidence in the initial rankings.
Figure 42: Removing low-confidence suggestions

Наконец, если итоговый список предложений не пуст, генератор фраз передаёт предложение с наибольшей оценкой уверенности в сервис постобработки.

Сервис постобработки

Сервис постобработки устраняет потенциальные предубеждения до того, как предложения будут представлены пользователю. Этот компонент следует заранее определённым правилам для эффективного обнаружения и исправления предубеждений. Среди распространённых стратегий для достижения этой цели можно выделить следующие:

  • Замена местоимений: замена гендерно-специфичных местоимений для обеспечения нейтральности. Например, «он» или «она» может быть заменено на «они» в контекстах, где пол не указан.
  • Замена гендерно-маркированных слов: замена гендерно-маркированных слов гендерно-нейтральными альтернативами там, где это уместно. Это включает замену таких слов, как «chairman» на «chairperson» или «policeman» на «police officer».
  • Лексический анализ на предмет чувствительных терминов: использование заранее составленного списка помеченных терминов, которые в случае обнаружения могут быть заменены нейтральными альтернативами. Например, термины, способные указывать на предубеждения, связанные с возрастом, расой или инвалидностью, корректируются, чтобы предложения воспринимались как уважительные и нейтральные.
  • Фильтрация контента NSFW (неприемлемого на рабочем месте): внедрение автоматических фильтров, сканирующих и помечающих нецензурную лексику. Эти фильтры используют заранее составленные списки ключевых слов, фраз и паттернов NSFW для обнаружения и удаления проблемного контента.

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

Image represents a flowchart illustrating a generative AI system's response generation process.  The process begins with an input message ('Subject: Thanks\nHi Xue,...') which is processed by a 'Triggering...' block (1). This block's output feeds into a 'Phrase...' block (2), which in turn interacts with a 'Model' (a cloud-shaped component representing the underlying AI model) via a 'Beam search' (3) process. The 'Beam search' refines the output from the 'Phrase...' block, potentially addressing issues of length or confidence, as indicated by the 'Long and Low-confidence...' block (4) which receives feedback from the process. The refined output from the 'Phrase...' block then proceeds to a 'Post...' block (5) before finally generating the output message ('Subject: Thanks!\nHi Xue,...') (6).  The numbered circles (1-6) indicate the sequential flow of information between the blocks.  The system appears designed to generate a response to an input message, potentially improving the quality and conciseness of the response through iterative refinement using the model and beam search.
Figure 43: Smart Compose feature overall design

Ниже приведён краткий пошаговый рабочий процесс общей ML-системы, используемой функцией Smart Compose:

  • Мониторинг: сервис триггера отслеживает действия пользователя в процессе набора текста.
  • Запуск: сервис активирует генератор фраз после обнаружения определённых паттернов.
  • Лучевой поиск: генератор фраз использует лучевой поиск для получения top-k потенциальных вариантов дополнения из обученной модели.
  • Фильтрация: генератор фраз взаимодействует с компонентом фильтрации для удаления длинных предложений и предложений с низкими оценками уверенности.
  • Постобработка: выбирается вариант дополнения с наибольшей оценкой и передаётся в сервис постобработки. Сервис заменяет гендерно-специфичные местоимения и корректирует чувствительные термины.
  • Отображение предложения: предложение отображается пользователю для его рассмотрения.

Дополнительные темы для обсуждения

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

  • Поддержка Smart Compose на нескольких языках [28].
  • Персонализация предложений [28].
  • Включение дополнительного контекста для улучшения предсказаний [28].
  • Понимание принципов работы различных алгоритмов токенизации, таких как BPE [11], SentencePiece [12] и WordPiece [29].
  • Понимание различных ML-целей, таких как маскированное языковое моделирование (MLM) и его вариации [18].
  • Цель предсказания нескольких токенов и её преимущества и недостатки [30].
  • Балансирование качества и задержки при инференсе [28].

Резюме

Image represents a mind map summarizing the key aspects of generative AI system design.  The central node is labeled 'Summary,' branching out into seven main categories represented by differently colored lines:  'Clarifying requirements,' 'Framing as ML,' 'Data preparation,' 'Model development,' 'Evaluation,' 'Overall system components,' and 'Other talking points.'  'Model development' further branches into 'Architecture,' 'Training,' and 'Sampling,' each with multiple sub-branches.  'Architecture' details choices like 'Transformer,' 'Encoder-only,' 'Decoder-only,' and 'Encoder-decoder,' along with 'Text embedding' and 'Positional encoding' options. 'Training' includes 'Pretraining' and 'Finetuning,' while 'Sampling' offers 'Deterministic' and 'Stochastic' methods, including 'Greedy search' and 'Beam search.' 'Evaluation' is divided into 'Offline' metrics like 'Perplexity' and 'Exact Match@N,' and 'Online' metrics such as 'User engagement,' 'Effectiveness,' 'Latency,' and 'Quality,' with sub-metrics like 'Acceptance rate,' 'Average completion time,' and 'Human evaluation.'  'Overall system components' includes 'Triggering service,' 'Phrase generator,' and 'Post-processing service.'  Finally, 'Clarifying requirements' and 'Framing as ML' detail initial considerations like specifying input/output and choosing between RNNs and Transformers, while 'Data preparation' covers text cleaning, normalization, and tokenization methods including character, word, and subword levels (with examples like Byte-Pair Encoding, SentencePiece, and WordPiece).

Справочные материалы

[1] Gmail's Smart Compose feature. https://research.google/pubs/gmail-smart-compose-real-time-assisted-writing/. [2] Fundamentals of Recurrent Neural Network. https://arxiv.org/abs/1808.03314. [3] Attention Is All You Need. https://arxiv.org/abs/1706.03762. [4] Gated recurrent unit. https://en.wikipedia.org/wiki/Gated_recurrent_unit. [5] Long Short-Term Memory. https://deeplearning.cs.cmu.edu/F23/document/readings/LSTM.pdf. [6] RITA: Group Attention is All You Need for Timeseries Analytics. https://arxiv.org/abs/2306.01926. [7] FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. https://arxiv.org/abs/2205.14135. [8] Language identification. https://en.wikipedia.org/wiki/Language_identification. [9] FastText model for language identification. https://huggingface.co/facebook/fasttext-language-identification. [10] Transformer-XL. https://arxiv.org/abs/1901.02860. [11] Byte-Pair Encoding tokenization. https://huggingface.co/learn/nlp-course/en/chapter6/5. [12] SentencePiece tokenization. https://arxiv.org/abs/1808.06226. [13] Tiktoken library. https://github.com/openai/tiktoken. [14] Google's Gemini. https://gemini.google.com/. [15] SentencePiece library. https://github.com/google/sentencepiece. [16] Summary of tokenizers. https://huggingface.co/docs/transformers/en/tokenizer_summary. [17] OpenAI's tokenizers. https://tiktokenizer.vercel.app/?model=gpt-4-1106-preview. [18] BERT. https://arxiv.org/abs/1810.04805. [19] OpenAI's models. https://platform.openai.com/docs/models. [20] Meta's LLaMA. https://llama.meta.com/. [21] Introduction to Transformers by Andrej Karpathy. https://www.youtube.com/watch?v=XfpMkf4rD6E. [22] Transformer visualized. https://jalammar.github.io/illustrated-transformer/. [23] Common Crawl. https://commoncrawl.org/. [24] Cross-entropy. https://en.wikipedia.org/wiki/Cross-entropy. [25] Prompt engineering. https://platform.openai.com/docs/guides/prompt-engineering. [26] Beam search. https://en.wikipedia.org/wiki/Beam_search. [27] Perplexity. https://en.wikipedia.org/wiki/Perplexity. [28] Gmail Smart Compose: Real-Time Assisted Writing. https://arxiv.org/abs/1906.00080. [29] WordPiece tokenization. https://huggingface.co/learn/nlp-course/en/chapter6/6. [30] Better & Faster Large Language Models via Multi-token Prediction. https://arxiv.org/abs/2404.19737.

Сноски

  • Посетите https://platform.openai.com/tokenizer, чтобы ознакомиться с примерами работы различных токенизаторов. ↩
Глава 3

Google Переводчик

~23 мин чтения

Введение

Google Переводчик — широко используемый сервис перевода, предоставляемый компанией Google. Сервис использует модели машинного обучения (ML) для понимания и перевода текстов между языками. По состоянию на 2024 год сервис поддерживает более 130 различных языков и насчитывает более миллиарда пользователей [1]. В этой главе рассматривается системный дизайн сервиса перевода.

Image represents a user interface showcasing a language detection and translation feature.  Two rectangular boxes are displayed side-by-side. The left box shows a text input area containing the English phrase 'Beautiful day!' along with a microphone icon suggesting voice input capability.  Above this box, a dropdown menu labeled 'Detect lang...' displays 'English' as the selected option with 'Spanish' also available.  A counter '14/5,...' is visible at the bottom, possibly indicating progress or a character limit. The right box displays the Korean translation '아름다운 날!'  Above this box, a similar dropdown menu labeled 'Korean' shows 'Spanish' and 'Russian' as additional options.  At the bottom of the right box, a button labeled 'Send Feedb.' suggests a feedback submission mechanism.  There is no explicit visual connection between the boxes, but the implied interaction is that the input text in the left box is translated into the selected language in the right box.
Рисунок 1: Сервис языкового перевода

Уточнение требований

Вот типичный диалог между кандидатом и интервьюером:

Candidate: Есть ли конкретные языки, которые система должна поддерживать изначально? Interviewer: Давайте сосредоточимся на четырёх языках: английском, испанском, корейском и французском. В будущем можно расширить поддержку до большего числа языков.

Candidate: Учитывая разнообразие языков, есть ли у нас доступ к достаточно большому и разнообразному набору данных для обучения? Interviewer: Да. У нас есть доступ к обширному многоязычному корпусу, включающему официальные документы, веб-контент и разговорные тексты на всех четырёх языках. Набор данных содержит 300 миллионов примеров, где каждый пример определяется как пара предложений на исходном и целевом языках.

Candidate: Есть ли у нас доступ к общим текстовым данным? Это важно, поскольку позволило бы нам выполнить pre-training модели на общих текстовых данных и тем самым дать ей возможность приобрести общие знания. Interviewer: Предположим, у нас есть доступ к терабайтам общих текстовых данных на каждом из языков, полученных из различных источников.

Candidate: Будут ли пользователи указывать язык вводимого текста, или система должна определять его автоматически? Interviewer: Пользователи не всегда могут определить язык текста. Представьте название книги на языке, с которым пользователь не знаком. Наша система должна автоматически определять язык ввода.

Candidate: Есть ли ограничение на длину вводимого текста? Interviewer: Давайте создадим систему, которая поддерживает входные данные объёмом до 1000 слов.

Candidate: Должна ли система поддерживать перевод без подключения к интернету? Иными словами, должна ли модель работать на устройстве? Interviewer: Фокус этого интервью не на эффективности и оптимизации модели для развёртывания на устройстве. Предположим, что требуется подключение к интернету и модель будет развёрнута в облаке.

Candidate: Должна ли система поддерживать перевод в реальном времени? Interviewer: Изначально нет.

Постановка задачи как ML-задачи

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

Определение входных и выходных данных системы

Входными данными для системы перевода является последовательность слов на исходном языке и целевой язык, указанный пользователем. Выходными данными является последовательность слов на целевом языке.

Image represents a simplified model of a machine translation system.  The input, labeled 'Source s...', feeds the phrase 'A beautiful day' into a central rectangular box labeled 'Language Translation...'.  A second input, labeled 'Desired language', provides the target language, 'Spanish'.  Both inputs are connected to the 'Language Translation...' box, indicating that both the source text and target language are necessary for the translation process. The 'Language Translation...' box processes the input and outputs the translated phrase 'Un día hermoso', labeled 'Translated sentence...'. The arrows indicate the flow of information, showing how the source sentence is transformed into the target language based on the specified desired language.
Рисунок 2: Входные и выходные данные системы перевода

Выбор подходящего ML-подхода

При языковом переводе последовательность слов на одном языке преобразуется в последовательность слов на другом языке. Такая структура «последовательность в последовательность» (seq2seq) встречается и в других задачах, например в суммаризации текста и распознавании речи.

Модели seq2seq — это класс ML-моделей, специально разработанных для решения подобных задач. Они преобразуют входную последовательность в выходную, которая может отличаться по длине от входной. Модели seq2seq следуют архитектуре encoder-decoder, имеющей два основных компонента:

  • Encoder: обрабатывает входную последовательность и преобразует её в последовательность контекстных векторов, тем самым кодируя информацию из входной последовательности.
  • Decoder: использует контекстные векторы encoder'а для пошагового генерирования выходной последовательности — по одному token'у за раз.
Image represents a simplified diagram of a neural machine translation (NMT) system.  The system consists of two main components: an Encoder (represented by a light green rectangle labeled 'Encoder') and a Decoder (represented by a light orange rectangle labeled 'Decoder').  An arrow indicates that the Encoder's output feeds directly into the Decoder.  The Encoder receives as input the English phrase 'I am graduating' (enclosed in a dashed-line box labeled 'English:'), processing it to create an internal representation. This representation is then passed to the Decoder. The Decoder generates the Spanish translation 'me estoy graduando' (enclosed in a dashed-line box labeled 'Spanish:'), which is shown as an output arrow pointing upwards from the Decoder.  The entire diagram illustrates the flow of information from English input through the Encoder and Decoder to produce a Spanish output, demonstrating a basic sequence-to-sequence model for machine translation.
Рисунок 3: Модель encoder-decoder для перевода с английского на испанский

Для компонентов encoder и decoder существует несколько архитектур. В частности, для обработки последовательных данных можно использовать архитектуры LSTM, GRU и Transformer. Среди них Transformer'ы продемонстрировали превосходную производительность в задачах перевода, превзойдя более ранние модели, такие как GRU и LSTM, особенно в обработке долгосрочных зависимостей. Примечательно, что механизм attention был изначально предложен именно в контексте языкового перевода [2].

Как описано в Главе 2, Transformer'ы имеют три вариации: архитектура только encoder, только decoder и encoder-decoder. Модели только с encoder, такие как BERT [3], хорошо справляются с пониманием и обработкой входной последовательности, но, как правило, требуют дополнительных механизмов для генерации выходных данных. Модели только с decoder, такие как GPT от OpenAI [4] и Claude от Anthropic [5], высокоэффективны в генеративных задачах.

Хотя все три архитектуры демонстрируют высокую производительность и могут быть адаптированы для задач языкового перевода с помощью таких техник, как prompt engineering, модели encoder-decoder обычно предпочтительны по трём основным причинам. Во-первых, архитектура encoder-decoder разделяет понимание входных данных и генерацию выходных, что идеально для seq2seq-задач, таких как языковой перевод. Это позволяет encoder специализироваться на исходном языке и полностью понять входную последовательность, прежде чем decoder генерирует выходные данные. Например, encoder'ы часто используют двунаправленные механизмы, такие как двунаправленные LSTM [6] или Transformer'ы, которые позволяют им понимать контекст с обоих направлений.

Во-вторых, эта архитектура естественным образом обрабатывает последовательности переменной длины. Модели encoder-decoder разработаны для обработки входных/выходных последовательностей различной длины, что делает их очень универсальными для различных приложений. Такая гибкость критически важна для задач, в которых входные и выходные данные не имеют фиксированного соотношения длин.

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

Подготовка данных

В этом разделе мы подготавливаем сырые текстовые данные для Transformer'а encoder-decoder. У нас есть два типа данных для обучения: общие данные и данные для перевода. Общие данные включают общедоступные тексты из интернета. Данные для перевода включают 300 миллионов пар предложений, каждая из которых содержит предложение на исходном языке и соответствующий перевод на целевом языке.

Сырой текст как в общих данных, так и в данных для перевода часто зашумлён и не соответствует формату, ожидаемому ML-моделью. Поскольку подготовка общих данных была рассмотрена в Главе 2, мы сосредоточимся на подготовке данных для перевода. В частности, мы сосредоточимся на следующих двух шагах:

  • Предобработка текста
  • Tokenization текста

Предобработка текста

К сырому тексту в данных для перевода применяются следующие методы предобработки:

  • Удаление отсутствующих данных: удаление пар, в которых отсутствует исходный или целевой текст.
  • Удаление зашумлённых данных: удаление пар с HTML-тегами или неправильными языковыми парами.
  • Дедупликация: удаление дублирующихся пар предложений из набора данных, чтобы предотвратить переобучение модели на определённых примерах.
  • Обработка именованных сущностей: модели языкового перевода часто испытывают затруднения с именованными сущностями. Мы определяем эти сущности в тексте и заменяем их placeholder-token'ами. После перевода token'ы заменяются исходными сущностями. Например, рассмотрим предложение: «Калифорнийский город Бёрлингейм назван в честь дипломата Энсона Бёрлингейма.» Сначала мы определяем именованные сущности: «Калифорния (название местности)», «Бёрлингейм (название местности)» и «Энсон Бёрлингейм (имя человека)». Затем заменяем эти сущности placeholder-token'ами: «Город ENTITY_1, ENTITY_2, назван в честь дипломата ENTITY_3.» Такой подход помогает модели сосредоточиться на контексте предложения в процессе обучения, не отвлекаясь на редкие термины.

В современном языковом переводе, особенно с такими моделями, как Transformer'ы, некоторые традиционные шаги предобработки стали менее значимыми или выполняются иначе. Вот несколько шагов предобработки, которые были необходимы в традиционных моделях перевода, но теперь устарели или менее актуальны:

  • Приведение к нижнему регистру: современные модели языкового перевода могут обрабатывать чувствительность к регистру как часть своего обучения. Они способны различать разные формы слов в зависимости от регистра (например, «Apple» как компания и «apple» как фрукт) без необходимости преобразовывать всё в нижний регистр. Поэтому приведение к нижнему регистру часто пропускается для сохранения исходной информации о регистре.
  • Удаление стоп-слов: стоп-слова (например, «the», «and», «in») необходимы для грамматической структуры предложений. Их удаление может нарушить беглость и смысл переводов. Современные модели языкового перевода выигрывают от наличия полных предложений, включая стоп-слова, для полного понимания контекста и получения более естественных переводов.
  • Стемминг и лемматизация: стемминг (сведение слов к базовой или корневой форме) и лемматизация (сведение слов к словарной форме) обычно не требуются в современном языковом переводе, поскольку эти модели спроектированы для обработки морфологических вариаций слов. Модели учатся переводить слова в их правильные формы на основе контекста; поэтому сведение к базовой форме могло бы фактически удалить ценную информацию.
  • Удаление знаков препинания: знаки препинания важны для понимания структуры и смысла предложений. Современные модели языкового перевода обучены естественной обработке знаков препинания; поэтому их удаление может ухудшить качество перевода. Знаки препинания обычно сохраняются, чтобы помочь модели поддерживать грамматическую целостность предложений.

Tokenization текста

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

Image represents a word-level vocabulary table used in a natural language processing (NLP) system.  The table is structured as a two-column grid. The left column, labeled 'Token,' lists individual words or special tokens.  These include '<BOS>' (Begin of Sentence) and '<EOS>' (End of Sentence), representing sentence boundaries, along with example words like 'walking,' 'bonjour,' 'hello,' and 'fantastique.' The right column, labeled 'ID,' assigns a unique numerical identifier (integer) to each token.  The IDs start from 0 and increment sequentially.  The ellipses ('...') indicate that the table continues beyond the visible portion, implying a larger vocabulary with many more word-ID pairs.  The table's title, 'Word-level Vocabulary,' clearly indicates its purpose as a mapping between words and their numerical representations, essential for processing text data in NLP models.
Рисунок 4: Огромный размер словаря из-за tokenization на уровне слов

При языковом переводе обработка разнообразия слов разных языков является ключевой задачей. Традиционные модели tokenization на уровне слов часто испытывают затруднения со словами, выходящими за пределы словаря (OOV), тогда как алгоритмы tokenization на уровне подслов более эффективны и могут эффективно решать проблему OOV. Учитывая их важность и широкое применение, полезно подробно рассмотреть Byte-Pair Encoding (BPE) [7] — широко используемый алгоритм tokenization на уровне подслов.

Byte-Pair Encoding (BPE)

BPE строит словарь на уровне подслов посредством итеративного слияния. Он начинает с отдельных символов и итеративно объединяет наиболее частотные комбинации в новые подслова. Это позволяет модели разбивать слова, в том числе редкие или незнакомые, на известные компоненты, обеспечивая тем самым точное понимание и перевод. Давайте разберём конкретный пример для лучшего понимания BPE.

Начальная настройка

Предположим, у нас есть корпус со следующим набором слов: «cat», «cats», «dog» и «dogs».

Image represents a data processing pipeline where a corpus (represented as a beige cylindrical database) is processed to generate a word frequency table.  A unidirectional arrow indicates data flow from the 'Corpus' database to a table with two columns: 'Word' and 'Frequency'. The 'Word' column lists individual words ('cat', 'cats', 'dog', 'dogs'), while the 'Frequency' column shows the corresponding count of each word's occurrences within the corpus.  The table visually presents the results of analyzing the text data contained within the corpus, summarizing the frequency of each word.
Рисунок 5: Частота слов в нашем корпусе

На начальном этапе наша цель — инициализировать словарь, состоящий из различных символов и их частоты встречаемости в корпусе. Для этого выполняются следующие шаги:

  • Добавить специальный токен конца слова «</w>» в конец каждого слова для обозначения его границы. Этот специальный token помогает модели знать, когда слово закончилось.
  • Выполнить tokenization корпуса, разбив каждое слово на отдельные символы.
  • Инициализировать словарь отдельными символами и их частотой встречаемости.
Image represents a three-step process of creating an initial vocabulary from a word frequency table.  The first table lists words ('cat,' 'cats,' 'dog,' 'dogs') and their frequencies (5, 3, 6, 4 respectively).  A numbered arrow (1) points from this table to a second table, where each word is now tagged with '</w>' (e.g., 'cat</w>'), indicating a word token, and frequencies remain the same.  A second numbered arrow (2) connects this table to a third table, which lists the character sequences of each word-token (e.g., 'cat</w>') and their frequencies.  Finally, a third numbered arrow (3) connects the character sequence table to a final table labeled 'Initial vocabulary,' which shows each unique character ('c,' 'a,' 't,' 's,' 'd,' 'o,' 'g,' '</w>') and its overall frequency across all word-tokens.  The frequencies in the final table represent the total count of each character in the initial word list.
Рисунок 6: Шаги начальной настройки
Итеративное слияние

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

Ниже приведены первые пять итераций BPE:

  • Итерация 1: сначала мы определяем наиболее частотную пару символов — «d» и «o», встречающиеся вместе 10 раз (в словах «dog» и «dogs»). Мы объединяем их, чтобы создать новый token «do». Хотя «og» также встречается 10 раз, «do» стоит раньше по алфавиту. Token «do» добавляется в словарь, а счётчики частот обновляются. «do» теперь встречается 10 раз, а индивидуальные счётчики «d» и «o» соответственно уменьшаются. Рисунок 7: Итерация BPE 1
  • Итерация 2: теперь мы ищем следующую наиболее частотную пару — «do» и «g» (также из слов «dog» и «dogs»). Эти символы встречаются вместе 10 раз, поэтому мы объединяем их, создавая token «dog».
Image represents a table showing token frequency.  The table has three columns: '#' (a numerical index), 'Token' (a character or word), and 'Frequency' (the count of occurrences).  Rows 0-3 list individual characters ('c', 'a', 't', 's') with frequencies of 8, 8, 8, and 7 respectively. Row 6 shows 'g' with a frequency calculated as '10-10=0'. Row 7 displays the token '</w>' with a frequency of 18. Row 8 shows 'do' with a frequency calculated as '10-10=0'. Finally, row 9 shows the token 'dog' with a frequency of 10. Two curved arrows indicate a cyclical or iterative process, suggesting the data might be processed repeatedly or represent a sequence of steps.  The table likely represents a step in a natural language processing or text analysis process, possibly related to tokenization and frequency counting before further processing.
Рисунок 8: Итерация BPE 2
  • Итерация 3: двигаясь дальше, мы замечаем, что «c» и «a» (из слов «cat» и «cats») встречаются вместе 8 раз. Мы объединяем их, создавая token «ca». После слияния «cat» может быть представлен как «ca» и «t». Token «ca» теперь имеет частоту 8.
  • Итерация 4: продолжаем, объединяя «ca» и «t», которые встречаются вместе 8 раз (из слов «cat» и «cats»). Объединяем их, создавая token «cat». Теперь «cats» может быть представлен как «cat» и «s», а «dogs» как «dog» и «s». Счётчик частоты для «cat» обновляется до 8.
  • Итерация 5: наконец, следующая наиболее частотная пара — «s» и «</w>» (из слов «dogs» и «cats»), встречающаяся 7 раз. Мы объединяем «s» и «</w>», создавая token «s</w>».
Image represents a step-by-step process of updating token frequencies.  Three tables are shown, each with columns '#' (representing a token ID), 'Token', and 'Frequency'. The first table shows initial frequencies; for example, token 0 ('c') has a frequency of 8-8=0, token 1 ('a') has 8-8=0, token 2 ('t') has 8, and so on.  A rightward arrow indicates a transformation where the frequency of token 3 ('s') is reduced by 7, resulting in the second table.  This table shows updated frequencies, where 's' now has a frequency of 0, and '</w>' has 18-7=11.  Another rightward arrow shows a further transformation, likely another frequency update, resulting in the third table.  This final table shows further adjustments; for instance, '</w>' now has a frequency of 8, and a new token 's</w>' appears with a frequency of 8.  The curved arrows between tables suggest that the process involves iterative updates based on the previous table's values, possibly indicating a token frequency adjustment algorithm.
Рисунок 9: Итерации BPE 3–5

BPE итеративно объединяет наиболее частотные пары символов, приводя к более компактному представлению корпуса. Слияние продолжается до достижения желаемого количества token'ов или итераций.

Image represents a simple table displaying token frequency data.  The table has three columns: '#' (a numerical identifier), 'Token' (a string of text), and 'Frequency' (a numerical count).  Each row represents a unique token and its corresponding frequency.  Specifically, row 1 shows token '</w>' with a frequency of 11; row 2 shows 'dog' with a frequency of 10; row 3 shows 'cat' with a frequency of 8; and row 4 shows 's</w>' with a frequency of 8.  The '#' column acts as a row index, providing a unique identifier for each token-frequency pair.  There are no connections or information flow between rows; the table simply presents a static summary of token occurrences.  The bottom line 'Text is not SVG - cannot display' indicates that the image itself might be a screenshot or a representation of data that was originally in a different format.
Рисунок 10: Словарь BPE после 5 итераций

Обратите внимание, что специальный token «</w>» играет ключевую роль в различении разных форм слов. Например, token «cat», за которым следует «</w>», указывает на конец слова «cat», тогда как token «cat» без «</w>» может быть частью другого слова. Это различие помогает BPE точно представлять и интерпретировать слова при переводе, позволяя эффективно обрабатывать как знакомые, так и незнакомые слова.

После создания словаря мы формируем обучающие данные, заменяя каждое токенизированное предложение последовательностью целых чисел. В результате получается несколько таблиц, каждая для конкретной языковой пары. На рисунке 11 показаны подготовленные данные для перевода для языковых пар английский–французский и английский–корейский.

Image represents a data processing pipeline for machine translation.  The left side shows 'Original pairs' of sentences in English and another language (French and Korean in this example). Each pair consists of an English sentence and its translation in the target language, arranged in rows within a table.  The right side displays 'Tokenized pairs,' where each sentence from the original pairs has been converted into a sequence of numerical tokens.  These tokens are enclosed in square brackets, with each number likely representing a word or sub-word unit from a vocabulary.  Arrows indicate the flow of data from the original language pairs to their tokenized counterparts.  The tokenization process transforms the original text into numerical representations suitable for machine learning models, enabling the model to learn relationships between the languages.  The ellipses (...) indicate that the tables contain more data than is explicitly shown.
Рисунок 11: Построенные обучающие данные для пар английский–корейский и английский–французский

Разработка модели

Мы использовали Transformer encoder-decoder для обучения языковому переводу. В этом разделе мы рассматриваем архитектуру encoder и decoder, стратегии обучения и методы сэмплирования.

Архитектура

Ключевые компоненты архитектуры Transformer encoder-decoder очень схожи с компонентами Transformer'а только с decoder, описанного в Главе 2. Рассмотрим encoder и decoder по отдельности и выделим их ключевые различия.

Encoder

Encoder обрабатывает входную последовательность и выдаёт последовательность embedding для каждого входного token'а.

Image represents a diagram of a Transformer neural network architecture.  At the bottom, an 'Input sequence' feeds into a 'Text Embedding' layer, which is colored light orange.  Above this, a purple 'Positional Encoding' layer processes the embedded text.  Next, a larger light gray block labeled 'Transformer' contains a vertically stacked, repeating sequence of three layers: 'Normalization', 'Feed Forward', and 'Self-Attentio...' (truncated).  The 'Nx' label indicates that this sequence of three layers repeats N times.  Finally, three upward arrows emerge from the top of the Transformer block, representing the 'Output sequence'.  The data flow is strictly bottom-up: the input sequence is processed sequentially through the embedding, positional encoding, and the repeated Transformer layers, ultimately producing the output sequence.
Рисунок 12: Компоненты encoder'а

Encoder состоит из следующих компонентов:

  • Text embedding
  • Positional encoding
  • Transformer

Text embedding: этот компонент преобразует каждый входной token в вектор embedding. Эти embedding'и фиксируют семантическую информацию каждого token'а.

Image represents a table illustrating the concept of word embeddings.  The table is divided into two columns: 'Token' and 'Embedding.' The 'Token' column lists individual words or word pieces, including '</w>' (likely representing the end of a word), 'dog,' 'cat,' and 's</w>' (likely representing the start of a word).  The 'Embedding' column displays a series of boxes representing the numerical vector associated with each token. Each row corresponds to a token and its associated embedding vector; the boxes within the 'Embedding' column visually represent the vector's dimensions, with each box implicitly holding a numerical value.  An ellipsis ('...') indicates that the table continues with more token-embedding pairs beyond what's explicitly shown.  The image visually demonstrates how each word (token) is transformed into a high-dimensional vector (embedding) which captures semantic meaning, allowing for computational processing and comparison of words.  The text 'Text is not SVG – cannot display' at the bottom indicates a limitation in rendering the image, likely due to the vector representation being non-standard.
Рисунок 13: Таблица token embedding'ов

Positional encoding: компонент positional encoding вводит информацию о позиции каждого token'а во входной последовательности. Как обсуждалось в предыдущей главе, фиксированные и обучаемые методы эффективны на практике. Для простоты мы выбираем фиксированный метод positional encoding, например кодирование синус–косинус.

Transformer: Transformer обрабатывает последовательность token embedding'ов через стек блоков Transformer. Каждый блок содержит слой self-attention, использующий механизм multi-head attention (MHA) на входной последовательности, и feed-forward слой, с нормализующими слоями между ними для обеспечения стабильности в процессе обучения. Поскольку требования предполагают поддержку входной последовательности в 1000 слов, нам не нужно применять оптимизированные механизмы attention для эффективности, так как стандартный механизм attention достаточен для обработки последовательностей такой длины без существенных проблем с производительностью.

Decoder

Decoder генерирует выходную последовательность по одному token'у за раз, используя выходные данные encoder'а и ранее сгенерированные token'ы. Decoder состоит из следующих компонентов:

  • Text embedding: преобразует каждый token целевой последовательности в embedding
  • Positional encoding: вводит информацию о позиции каждого token'а
  • Transformer: обрабатывает целевую последовательность и выдаёт обновлённую последовательность embedding'ов
  • Prediction head: использует обновлённые embedding'и для предсказания следующего token'а.
Image represents a sequence-to-sequence model, likely a transformer-based architecture for text generation.  The model consists of two main parts: an encoder and a decoder. The encoder, a light gray rectangle labeled 'Encoder,' takes an 'Input sequence (s...' as input and processes it.  The output of the encoder, labeled 'Output sequence,' is then fed into the decoder, a larger gray rectangle labeled 'Transformer.' The decoder comprises several stacked layers: 'Text Embedding' (orange), 'Positional Encoding' (purple), 'Self-Attention...', 'Normalization', 'Cross-Attention...', 'Feed Forward', and 'Normalization' layers, all vertically stacked.  The 'Nx' label indicates that these layers are repeated N times.  The output of the decoder is fed into a light green rectangle labeled 'Prediction Head,' which generates the 'Predicted...' output sequence.  Arrows indicate the flow of information between components, showing how the input sequence is processed by the encoder, then passed to the decoder, which generates the predicted output sequence through multiple attention and feed-forward layers.  The 'Previously generate...' text at the bottom indicates that the decoder uses previously generated text as input for subsequent predictions.
Рисунок 14: Компоненты decoder'а

Каковы ключевые различия между encoder и decoder?

Между encoder и decoder есть три ключевых различия:

  • Слой cross-attention
  • Механизм self-attention
  • Prediction head
Слой cross-attention

Компонент Transformer в decoder'е включает слой cross-attention. Этот слой выполняет механизм MHA над выходными данными encoder'а. Он позволяет каждому token'у в decoder'е обращаться ко всем embedding'ам в encoder'е. Это позволяет cross-attention эффективно интегрировать информацию из входной последовательности в процессе генерации выходной последовательности.

Image represents a diagram of a sequence-to-sequence model, likely a neural machine translation architecture.  At the bottom, an 'Input sequence' feeds into an 'Encoder,' depicted as a rectangular box. The encoder processes the input and produces three vertical rectangular blocks labeled 'Output s...', representing the encoded sequence. These three blocks then connect via numerous arrows to three vertical rectangular blocks within a dashed-line box labeled 'Decoder.'  The arrows connecting the encoder's output to the decoder are labeled 'Cross-Attention,' indicating the attention mechanism used to weigh the importance of different parts of the encoded input when generating the output. The decoder, also composed of three vertical rectangular blocks (with an ellipsis indicating continuation), processes the encoded information and generates the final output sequence.  The overall flow is from the input sequence through the encoder, then via cross-attention to the decoder, finally resulting in the decoded output sequence.
Рисунок 15: Слой cross-attention
Механизм self-attention

Слой self-attention работает по-разному в encoder и decoder. В encoder'е каждый token обращается ко всем остальным token'ам в последовательности. Это помогает encoder'у всесторонне понять всю последовательность. В decoder'е, напротив, каждый token ограничен обращением только к тем token'ам, которые стоят перед ним, путём маскировки будущих token'ов в последовательности. Это различие важно для задач генерации, поскольку модель должна использовать только ранее сгенерированные token'ы, а не будущие, для предсказания следующего token'а.

Image represents a comparison of two self-attention mechanisms.  Each mechanism is depicted as two vertical columns of rectangular boxes, representing input and output vectors, respectively.  The left column in each mechanism shows three input vectors, each subdivided into multiple horizontal sections, likely representing word embeddings or hidden states.  These input vectors are connected to a central 'Self-Attention' box via upward-pointing arrows.  The 'Self-Attention' box represents the self-attention layer, which processes the relationships between the input vectors.  From the 'Self-Attention' box, downward-pointing arrows connect to three output vectors in the right column, also subdivided into horizontal sections mirroring the input vectors.  The key difference between the two mechanisms lies in the connectivity pattern between the input and output vectors within the self-attention layer.  The left mechanism shows a more fully connected pattern, with each input vector connected to each output vector, while the right mechanism shows a sparser connectivity, with each input vector primarily connected to a single or a few output vectors.  Both mechanisms are labeled 'Self-attention mechanism...' at the bottom.
Рисунок 16: Различные механизмы self-attention в encoder и decoder
Prediction head

Decoder имеет prediction head поверх компонента Transformer. Prediction head обычно включает линейный слой, за которым следует слой softmax для преобразования выходных данных Transformer'а в вероятности по всему словарю. Эти вероятности используются для определения наиболее вероятного следующего token'а.

Обучение

Мы применяем двухэтапную стратегию для обучения модели языкового перевода:

  • Неконтролируемый pre-training
  • Контролируемый fine-tuning

. Неконтролируемый pre-training

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

Давайте рассмотрим данные для pre-training, ML-цель и функцию потерь для этапа pre-training.

Данные для pre-training

Мы используем популярные наборы данных для pre-training, такие как C4 [8], Wikipedia [9] и StackExchange [10]. В отличие от Главы 2, где мы сосредоточились на pre-training языковой модели только для английского языка, для языкового перевода нам нужна базовая модель с общим пониманием нескольких языков. Поэтому мы не удаляем неанглийские текстовые данные из этих наборов данных. Вместо этого мы оставляем набор языков, которые ожидаем от модели переводить, и удаляем все текстовые данные, относящиеся к языкам за пределами этого набора.

ML-цель и функция потерь

В Главе 2 мы рассмотрели предсказание следующего token'а как основную ML-цель для генерации текста. Предсказание следующего token'а не является идеальным выбором при pre-training encoder-decoder, поскольку обучение является неконтролируемым. Если мы передадим всё предложение в encoder, он закодирует информацию таким образом, что decoder всегда сможет точно предсказать следующее слово, фактически «мошенничая». Вместо этого мы используем «маскированное языковое моделирование» — распространённую ML-цель для pre-training Transformer'а encoder-decoder. Рассмотрим её подробнее.

Маскированное языковое моделирование (MLM)

В MLM, также известном как предсказание замаскированных token'ов, часть входных token'ов маскируется, и модель обучается предсказывать эти замаскированные token'ы.

Image represents a simplified diagram of a sequence-to-sequence model, commonly used in machine translation or chatbot applications.  The diagram features two main rectangular blocks, labeled 'Encoder' (peach-colored with a golden border) and 'Decoder' (similar coloring and border), connected by a unidirectional arrow indicating data flow from the Encoder to the Decoder.  The Encoder receives input from a text box containing the phrase 'Thank you for inviting me,' which is crossed out, suggesting this input is not used in this specific example.  Above the Decoder, two rectangular boxes labeled 'you' and 'me' represent the output, with upward arrows indicating the Decoder generates outputs for both 'you' and 'me.'  The arrows illustrate the flow of information: the Encoder processes the (unused) input text, and its output is fed into the Decoder, which then produces separate outputs for 'you' and 'me,' likely representing a conversational exchange or translation.
Рисунок 17: Обзор цели MLM

MLM позволяет encoder'у обработать входное предложение и закодировать его так, чтобы decoder мог предсказать замаскированные слова. Поскольку замаскированные слова никогда не видны в процессе кодирования, это предотвращает «мошенничество» модели.

Для измерения производительности модели при предсказании замаскированных token'ов мы используем cross-entropy loss. Эта широко используемая функция потерь измеряет расхождения между предсказанными вероятностями и эталонными token'ами, направляя тем самым процесс обучения. Вот пошаговое объяснение того, как вычисляется потеря с использованием цели MLM:

  • Случайным образом выбрать подмножество token'ов во входной последовательности и заменить их токеном маски («[MASK]»). Например, входное предложение «Thank you for inviting me» может стать «Thank [MASK] for inviting [MASK]».
  • Передать замаскированную последовательность в encoder, чтобы он мог понять контекст, несмотря на отсутствующие token'ы. Encoder выдаёт последовательность новых embedding'ов для каждого token'а.
  • Передать в decoder ту же входную последовательность, но на этот раз ни один из token'ов не замаскирован, и последовательность сдвинута на одну позицию вправо путём вставки начального token'а («<BOS>»). Обратитесь к Главе 2 или [11], чтобы понять, почему мы сдвигаем входную последовательность в процессе обучения.
  • Decoder предсказывает следующий token для каждой позиции в последовательности. Каждое предсказание использует все предыдущие входные token'ы и закодированную информацию от encoder'а.
  • Вычислить cross-entropy loss по предсказанным вероятностям и эталонным значениям только для замаскированных token'ов.
Image represents a sequence-to-sequence model, likely a transformer-based neural machine translation system or text generation model.  The bottom shows an input sentence 'Thank you for inviting me' (1), which is preprocessed into tokens 'Thank,' '[MASK],' 'for,' 'inviti...', '[MASK]' (2) and fed into an Encoder (peach-colored rectangle). The Encoder's output (3b) is then passed to a Decoder (another peach-colored rectangle). The Decoder receives input tokens '<BOS>', 'Thank', 'you', 'for', 'inviti...' (3a) and generates probability distributions for the next token in the sequence (4). These distributions are shown as columns of numbers, representing the probabilities of different words being the next token.  Two columns of binary vectors (5) represent the ground truth (correct next tokens) for calculating the cross-entropy loss, a measure of the difference between the predicted probabilities and the actual next tokens.  The arrows indicate the flow of information, showing how the input sentence is encoded, processed by the decoder, and used to predict the next tokens, with the loss function evaluating the accuracy of the predictions.
Рисунок 18: Вычисление cross-entropy loss для цели MLM

Таким образом, мы в основном используем цель MLM при pre-training Transformer'ов encoder-decoder, поскольку она задействует и encoder, и decoder. Encoder развивает понимание языка, кодируя замаскированный входной текст. Decoder учится обрабатывать эту закодированную информацию и предсказывать замаскированные token'ы. Эта цель готовит как encoder, так и decoder к этапу контролируемого fine-tuning.

Прежде чем перейти к этапу контролируемого fine-tuning, отметим, что pre-training базовой модели требует значительных ресурсов и, следовательно, является дорогостоящим. На практике мы часто используем общедоступные модели encoder-decoder, такие как T5 от Google [12] или BART от Meta [13], которые прошли pre-training на обширных наборах данных. Такой подход значительно снижает затраты и ресурсы, необходимые для pre-training.

. Контролируемый fine-tuning

Контролируемый fine-tuning, второй этап нашего процесса обучения, адаптирует базовую модель к конкретной задаче языкового перевода. Это достигается путём fine-tuning базовой модели на данных для перевода. Для адаптации базовой модели к языковому переводу у нас есть два варианта:

  • Двуязычный подход
  • Многоязычный подход
Image represents two options for training a language model: Option 1, bilingual models, and Option 2, a multilingual model.  Option 1 shows a general language model database ('General...') feeding into a '1. Pretraining' step, which then produces a base model ('Base...'). This base model is then fed into separate '2. Finetuning' steps, each using a bilingual dataset (e.g., 'English-French...', 'English-Spanish...', 'English-Korean...'), resulting in separate bilingual models.  Option 2 shows a similar process, but instead of separate bilingual datasets, a single multilingual dataset ('English-Korean...', 'English-French...', 'English-Spanish...') is used.  A general language model database ('General...') feeds into '1. Pretraining,' creating a base model ('Base...'). This base model is then fed into a single '2. Finetuning' step using the multilingual dataset, resulting in a single multilingual model ('Multilingual...').  Both options involve a two-step process: pretraining on a general dataset and then finetuning on a specific (bilingual or multilingual) dataset.  The arrows indicate the flow of data between the stages.
Рисунок 19: Двуязычные и многоязычные модели
Двуязычный подход

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

Многоязычный подход

Здесь единая модель обучается переводить между несколькими языками. Многоязычные модели проще, менее затратны и легче в развёртывании и обслуживании, чем двуязычные модели. Недавние исследования, такие как mT5 [14] и mBART [15], подчеркнули тенденцию к многоязычным моделям перевода, которые часто соответствуют или превосходят производительность двуязычных моделей.

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

Обучающие данные

На рисунке 20 показан пример подготовленных обучающих данных, где каждая таблица представляет языковую пару. В каждой таблице строка представляет один пример, содержащий последовательность идентификаторов token'ов для предложения на исходном языке и последовательность идентификаторов token'ов для перевода на целевом языке.

Image represents two tables, each displaying tokenized pairs of sentences in two different languages.  The left table shows English-Korean pairs, with the 'English' column listing sequences of numbers (e.g., [138, 18, 9, 2130], [138, 9561, 31, 72...], [309, 11001, 22, 7...], and so on) representing tokenized English sentences, and the 'Korean' column showing corresponding sequences of numbers (e.g., [186, 732, 666, 349, 81...], [226, 91022, 82483, 964...], [39485, 128320, 8532, 4...], etc.) for the Korean translations.  The right table similarly presents English-French pairs, with the 'English' column containing different numerical sequences (e.g., [15724, 374, 9439], [2028, 374, 15526], [4438, 527, 499, 3...]) representing tokenized English sentences, and the 'French' column showing corresponding numerical sequences (e.g., [12319, 20272, 282, 160...], [34, 17771, 1377, 57332], [10906, 44496, 2442, 84...]) for their French translations.  Both tables use ellipses (...) to indicate that the sequences continue beyond what's visibly shown.  The tables are labeled 'English-Korean tokenized pairs' and 'English-French tokenized pairs' respectively, indicating the language pairs and the nature of the data presented.
Рисунок 20: Пример подготовленных обучающих данных для различных языковых пар
ML-цель и функция потерь

В то время как этап pre-training был неконтролируемым, этап fine-tuning является контролируемым. Encoder обрабатывает token'ы исходного предложения для каждого обучающего примера, а decoder генерирует token'ы целевого предложения. Поскольку decoder должен генерировать token'ы последовательно после обучения, мы используем предсказание следующего token'а в качестве нашей ML-цели. Мы используем cross-entropy в качестве функции потерь для измерения точности предсказанного следующего token'а.

Image represents a sequence-to-sequence model, likely for machine translation, depicted as a neural network architecture.  The input, 'What is your name?', is fed into an 'Encoder' block, which processes the sentence. The encoder's output is then passed to a 'Decoder' block. The decoder receives an initial token '<BOS>' (Begin of Sentence) and iteratively predicts the next word in the target language (French in this example).  The decoder's predictions are represented as probabilities (e.g., 0.01, 0.06, 0.73, 0.11) for each word in the vocabulary.  These probabilities are compared to the correct next word sequence ('0 0 1 0'), which represents a one-hot encoding of the correct translation (presumably 'Quel est'). The difference between the predicted probabilities and the correct sequence is calculated as 'loss,' which is used to train the model.  Arrows indicate the flow of information: from the input words to the encoder, from the encoder to the decoder, from the decoder's predictions to the loss calculation, and finally, the loss is used to adjust the model's weights (not explicitly shown).  The decoder outputs 'Quel est' as the translated sequence.
Рисунок 21: Вычисление потерь на этапе fine-tuning

На рисунке 21 показано вычисление потерь на этапе fine-tuning. Для простоты на нём визуализировано единственное предсказание. На практике, как мы видели в Главе 2, decoder предсказывает следующий token для всех позиций одновременно, и потери вычисляются для всех предсказаний.

Сэмплирование

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

Image represents a sequence-to-sequence model, likely a neural machine translation system.  The diagram shows an encoder on the left, processing the input sequence 'What is your name?'. Each word is represented as a separate box, feeding into the encoder. The encoder processes this input and outputs a contextualized representation, which is then fed into a decoder on the right. The decoder, labeled 'Decoder,' receives this representation and generates an output sequence, shown as 'Quel est' in French.  The intermediate representation between the encoder and decoder is shown as vectors of probabilities (e.g., 0.01, 0.06, 0.73, 0.11 for 'Quel' and similar for 'est'). These probabilities likely represent the model's confidence in predicting each word in the output sequence.  The '<BOS>' token indicates the beginning of the sequence for the decoder.  The ellipses ('...') indicate that the model can handle sequences longer than what's explicitly shown, both in input and output.  The dashed lines connecting the output words to the decoder suggest a feedback loop, where the previously generated words influence the prediction of subsequent words.
Рисунок 22: Генерация перевода

Как обсуждалось в Главе 2, существуют две основные стратегии сэмплирования текста в генеративных моделях: детерминированные методы (например, beam search) и стохастическое сэмплирование. Здесь мы выбираем beam search по двум основным причинам:

  • Точность перевода: beam search обычно приводит к более точным переводам. Это объясняется тем, что алгоритм оценивает несколько возможных последовательностей и выбирает наиболее вероятную.
  • Согласованность: beam search детерминирован, то есть всегда выдаёт один и тот же результат при одинаковых входных данных. Эта согласованность гарантирует, что переводы будут давать мало неожиданностей, что критически важно в большинстве систем перевода. Хотя разнообразие может быть полезным, оно ни необходимо, ни желательно для систем языкового перевода.

Обратите внимание, что в приложениях, где разнообразие и творчество ценятся выше, например в творческом письме, обычно предпочтительны стохастические методы сэмплирования. В Главе 4 мы подробно рассмотрим стохастические методы, такие как top-k и top-p сэмплирование.

CharacteristicDeterministic methodsStochastic methods
ApproachFollow a predictable process to generate outputGenerate output based on probability distribution
EfficiencyTypically less efficient due to tracking multiple pathsMore efficient since randomness allows for quicker selections
QualityCoherent and predictableDiverse and creative
RiskUsually lead to repetitive output for longer sequencesMight produce inappropriate output due to their creativeness
Use caseSuitable for tasks requiring consistency, such as language translationSuitable for tasks requiring creativity, such as open-ended text generation
MethodsGreedy search, beam searchMultinomial, top-k, top-p

Таблица 1: Сравнение детерминированных и стохастических методов

Оценка

Метрики оффлайн-оценки

Для всестороннего оценивания модели языкового перевода метрики должны измерять как точность перевода, так и контекстную уместность. Исследовательское сообщество предложило ряд метрик, которые со временем получили широкое признание в качестве стандартов. Среди наиболее распространённых метрик:

  • BLEU
  • ROUGE
  • METEOR

BLEU

BLEU (BiLingual Evaluation Understudy) [16] — метрика, основанная на точности, которая сравнивает n-граммы (последовательность «n» слов) кандидата на перевод с n-граммами эталонных переводов и подсчитывает долю совпадений. Значение варьируется от 0 до 1, где более высокое значение указывает на более точный перевод.

Оценка BLEU вычисляется по следующей формуле:

где:

  • N — максимальная длина n-граммы, учитываемая при оценке
  • BP — штраф за краткость (brevity penalty)
  • pn — точность n-граммы
  • wn — вес для различных точностей n-граммы

Рассмотрим каждый из этих терминов подробнее.

Штраф за краткость (BP) BP — константный член, который штрафует переводы, более короткие, чем эталонный перевод. Формула:

где:

  • c — длина перевода
  • r — длина эталонного перевода

Если длина перевода кандидата c больше длины эталонного перевода r, штраф за краткость равен 1 (т. е. штрафа нет). Если длина перевода кандидата меньше или равна длине эталонного перевода, штраф за краткость представляет собой экспоненциальный спад, основанный на соотношении длин.

Точность (pn): Точность измеряет, сколько n-граммов перевода кандидата присутствует в эталонных переводах. Она вычисляется путём деления числа совпадающих n-граммов на общее число n-граммов в переводе кандидата. На рисунке 23 приведён пример вычисления p2 для предложения кандидата и одного эталонного предложения.

The image represents a completely blank space; there are no visible components, arrangement, connections, or information flow of any kind.  No labels, text, URLs, or parameters are present.  The image is simply a solid black rectangle.
Рисунок 23: Пример вычисления точности для 2-граммов (p2)

Веса (wn) Эти веса соответствуют точности каждого размера n-граммы. Обычно они распределяются равномерно, придавая одинаковую важность каждой точности n-граммы. Например, для n-граммов до 4-грамма каждый wn равен 1/4.

Главное преимущество BLEU — простота и лёгкость вычисления. Однако у него есть существенный недостаток: он может несправедливо штрафовать переводы, которые правильны, но отличаются от эталонного перевода. Например, если эталонный перевод — «The engineer discovered a new algorithm», а сгенерированный перевод — «The engineer found a new method», BLEU может оштрафовать сгенерированный перевод, несмотря на то что он передаёт тот же смысл. Несмотря на это ограничение, BLEU остаётся информативным и широко используемым на практике для оценки моделей языкового перевода.

ROUGE

ROUGE (Recall-Oriented Understudy for Gisting Evaluation) [17] — популярная метрика, которая дополняет BLEU, фокусируясь на полноте вместо точности. Она измеряет долю перекрывающихся n-граммов между текстами кандидата и эталона. Например, полнота ROUGE-N определяется следующим образом:

Если вы хотите узнать больше о ROUGE и его формуле, обратитесь к [17].

Как и BLEU, ROUGE прост в реализации и эффективен при вычислении. Однако его главный недостаток — отсутствие контекстного понимания. Перевод с разными, но семантически схожими словами может получить низкую оценку ROUGE.

METEOR

METEOR (Metric for Evaluation of Translation with Explicit ORdering) [18] — популярная метрика для оценки моделей языкового перевода. Она вычисляет точность и полноту, а затем объединяет эти измерения с помощью взвешенного гармонического среднего.

В отличие от BLEU и ROUGE, которые опираются на точные совпадения n-граммов, METEOR учитывает синонимы и морфологию слов. Например, если эталонный перевод использует «run», а сгенерированный перевод — «running», METEOR распознаёт их как связанные термины. Синонимы находятся с помощью лингвистических ресурсов, таких как словари синонимов или лексические базы данных. Одним из широко используемых ресурсов является WordNet [19], который организует слова в синонимические множества различных типов и показывает отношения между этими синсетами.

Image represents a formula for calculating recall, specifically in the context of n-gram matching.  The formula is presented as a fraction. The numerator is labeled 'Number of matching n-grams,' representing the count of n-grams (sequences of 'n' consecutive words or characters) that are common to both a target text and a reference text. The denominator is labeled 'Total number of n-grams in the reference,' indicating the total count of n-grams present within the reference text.  The entire fraction is labeled 'Recall,' signifying that the result of this calculation represents the recall metric – a measure of how many of the relevant n-grams from the reference text were successfully retrieved or matched in the target text.  No URLs or specific parameters are visible; the formula is purely textual.
Рисунок 24: Пример связей между словами

Хотя METEOR является более всесторонней метрикой, у неё есть ряд недостатков. Рассмотрим её преимущества и недостатки.

Преимущества:
  • Семантическое понимание: METEOR более точно оценивает качество перевода, когда разные формулировки передают одинаковый смысл. Это объясняется тем, что при оценке переводов учитываются синонимы и стемминг.
  • Сбалансированная оценка: METEOR обеспечивает сбалансированную оценку, поскольку объединяет точность и полноту. Это помогает выявлять переводы, которые являются как точными, так и полными.
  • Корреляция с человеческими оценками: METEOR лучше коррелирует с человеческими оценками, чем BLEU и ROUGE.
Недостатки:
  • Вычислительная сложность: METEOR сложнее в реализации и требует больше времени для вычисления, чем BLEU и ROUGE. Это объясняется тем, что он требует дополнительных шагов, таких как сопоставление синонимов и стемминг.
  • Зависимость от ресурсов: METEOR опирается на лингвистические ресурсы, такие как словари синонимов и алгоритмы стемминга, которые могут быть недоступны для всех языков.

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

Метрики онлайн-оценки

В процессе онлайн-оценки мы оцениваем, насколько хорошо наша система языкового перевода работает в production. Мы используем следующие две метрики для измерения удовлетворённости и вовлечённости пользователей:

  • Обратная связь от пользователей: сбор оценок или отзывов пользователей о качестве переводов. Эта метрика информативна, поскольку напрямую отражает удовлетворённость пользователей. Рисунок 25: Сбор обратной связи от пользователей
  • Вовлечённость пользователей: измерение вовлечённости пользователей путём мониторинга того, как часто они используют функцию перевода, как долго взаимодействуют с ней и как часто возвращаются. Это помогает нам понять, насколько ценным и эффективным является инструмент перевода в реальном использовании.

Сочетание метрик оффлайн- и онлайн-оценки даёт нам более полное представление о производительности языкового перевода. Такая всесторонняя оценка гарантирует, что модели соответствуют техническим стандартам и удовлетворяют ожиданиям пользователей.

Общий дизайн ML-системы

В этом разделе мы рассматриваем ML-дизайн системы языкового перевода. В частности, рассмотрим два ключевых компонента:

  • Детектор языка
  • Сервис перевода
Image represents a machine translation system's architecture.  A user icon on the left initiates the process by providing an 'Input sentence...' and specifying a 'Desired language...'. This input flows into a rectangular 'Language Detector' (light orange), which identifies the 'Detected language...' of the input sentence and passes this information to a central rectangular 'Translation Service' (light purple).  The Translation Service also receives the user's specified 'Desired language...'.  The Translation Service then uses a 'Beam search' algorithm to select the best translation from multiple potential translations represented by three cloud shapes: 'English-French...', 'Spanish-Korean...', and 'French-Korean...'. These clouds represent different language pairs and their respective translation outputs.  The final translated output, selected by the beam search, is implicitly indicated by the arrow from the Translation Service to the Korean text '정말 아름다운 날이에' (meaning 'It's a really beautiful day').  The dashed lines indicate the selection process of the beam search, showing the multiple potential translations considered before a final output is chosen.
Рисунок 26: Общий дизайн системы языкового перевода

Детектор языка

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

  • Average pooling: передать выходные данные Transformer'а в слой average pooling, а затем в prediction head для получения вероятностей языкового класса.
  • Представление последнего token'а: использовать представление последнего token'а из выходных данных Transformer'а и передать его в prediction head для предсказания вероятностей.
Image represents two alternative architectures for a language model, labeled 'Option 1: average po...' and 'Option 2: using last...'.  Both options process a 'Sentence of unknown lang...' as input, which undergoes 'Text Embedding' and 'Positional Encoding'. This embedded sentence then feeds into a 'Transformer' block. The Transformer in both options consists of stacked layers of 'Normalization', 'Feed Forward', and 'Normalization' again, followed by a 'Self-Attentio...' layer.  The number of layers in the Transformer is indicated by 'Nx'. Option 1 uses 'Average Pooling' to aggregate the output of the Transformer, which is then fed into a 'Prediction Head' to generate a 'Predicted source...'. Option 2, however, directly uses the output of the final 'Normalization' layer of the Transformer, feeding it into the 'Prediction head' to produce a 'Predicted source...'.  Arrows indicate the flow of information between components, showing the sequential processing within each architecture.
Рисунок 27: Два варианта построения детектора языка с использованием Transformer'а только с encoder

Сервис перевода

Сервис перевода взаимодействует с конкретной моделью на основе определённого и желаемого языков. Затем он применяет beam search для генерации последовательности token'ов на целевом языке и преобразует token'ы обратно в текст. Итоговый перевод затем отображается пользователю.

Дополнительные темы для обсуждения

Если в конце интервью останется время, рассмотрите возможность обсуждения следующих дополнительных тем:

  • Поддержка перевода для языков с ограниченными обучающими данными с использованием transfer learning и многоязычных моделей [20].
  • Подход к языковому переводу с использованием Transformer'а только с decoder [21].
  • Непрерывное улучшение моделей перевода на основе обратной связи от пользователей [22].
  • Методы оптимизации для эффективного инференса и перевода на устройстве [23].
  • Разработка единой многоязычной модели [24].
  • Другие автоматические метрики, такие как WER, и способы их вычисления [25][26].
  • Как построить модель определения языка [27].

Резюме

Image represents a mind map summarizing the key aspects of a Generative AI system design.  The central node is labeled 'Summary,' from which several main branches emanate, representing major phases or components:  'Model development,' 'Evaluation,' 'Overall system components,' and 'Other talking points.'  The 'Model development' branch further subdivides into 'Data preparation' (including data cleaning, normalization, and tokenization), 'Architecture' (detailing encoder and decoder components using transformers and positional encoding), and 'Training' (covering unsupervised pre-training and supervised fine-tuning with methods like masked language modeling (MLM) using general text and email data, and next-token prediction). The 'Evaluation' branch splits into 'Offline' (using metrics like BLEU, ROUGE, and METEOR) and 'Online' (relying on user feedback and user engagement metrics).  The 'Overall system components' branch includes a 'Language detector' and 'Translator service.' Finally, 'Other talking points' includes 'Clarifying requirements' and 'Specifying input and output,' which are connected to the 'Summary' node directly.  Each branch and sub-branch uses a distinct color-coded line, enhancing visual clarity and organization.  The entire diagram provides a structured overview of the design process, from initial requirements to final evaluation and deployment considerations.

Справочные материалы

[1] Google Translate service. https://blog.google/products/translate/google-translate-new-languages-2024/. [2] Neural Machine Translation by Jointly Learning to Align and Translate. https://arxiv.org/abs/1409.0473. [3] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. https://arxiv.org/abs/1810.04805. [4] GPT models. https://platform.openai.com/docs/models. [5] Claude models. https://www.anthropic.com/claude. [6] Bidirectional Long Short-Term Memory (BLSTM) neural networks for reconstruction of top-quark pair decay kinematics. https://arxiv.org/abs/1909.01144. [7] BPE tokenization. https://huggingface.co/learn/nlp-course/en/chapter6/5. [8] C4 dataset. https://www.tensorflow.org/datasets/catalog/c4. [9] Wikipedia dataset. https://www.tensorflow.org/datasets/catalog/wikipedia. [10] Stack Exchange dataset. https://huggingface.co/datasets/HuggingFaceH4/stack-exchange-preferences. [11] How Transformers work. https://huggingface.co/learn/nlp-course/en/chapter1/4. [12] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. https://arxiv.org/pdf/1910.10683.pdf. [13] BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension. https://arxiv.org/abs/1910.13461. [14] mT5: A massively multilingual pre-trained text-to-text transformer. https://arxiv.org/abs/2010.11934. [15] Multilingual denoising pre-training for neural machine translation. https://arxiv.org/abs/2001.08210. [16] BLEU metric. https://en.wikipedia.org/wiki/BLEU. [17] ROUGE metric. https://en.wikipedia.org/wiki/ROUGE_(metric). [18] METEOR metric. https://www.cs.cmu.edu/~alavie/METEOR/pdf/Banerjee-Lavie-2005-METEOR.pdf. [19] WordNet. https://wordnet.princeton.edu/. [20] No Language Left Behind: Scaling Human-Centered Machine Translation. https://research.facebook.com/publications/no-language-left-behind/. [21] Decoder-Only or Encoder-Decoder? Interpreting Language Model as a Regularized Encoder-Decoder. https://arxiv.org/abs/2304.04052. [22] Towards Continual Learning for Multilingual Machine Translation via Vocabulary Substitution. https://arxiv.org/abs/2103.06799. [23] Efficient Inference For Neural Machine Translation. https://arxiv.org/abs/2010.02416. [24] Meta's multilingual model. https://ai.meta.com/blog/nllb-200-high-quality-machine-translation/. [25] Machine translation evaluation. https://en.wikipedia.org/wiki/Evaluation_of_machine_translation. [26] Word error rate (WER) metric. https://en.wikipedia.org/wiki/Word_error_rate. [27] Automatic Language Identification using Deep Neural Networks. https://research.google.com/pubs/archive/42538.pdf.

Глава 4

ChatGPT: персональный ассистент-чатбот

~37 мин чтения

Введение

ChatGPT [1] — это чатбот, разработанный компанией OpenAI и запущенный в 2022 году. Он генерирует текст, похожий на человеческий, на основе получаемого ввода. Чатбот может помогать с различными задачами, включая ответы на вопросы, предоставление объяснений и создание творческого контента.

ChatGPT быстро стал одним из самых быстро набравших популярность приложений в истории. Он привлёк более 100 миллионов пользователей менее чем за три месяца после запуска [2]. Этот стремительный рост подчёркивает возможности генеративного ИИ и его потенциал для помощи в повседневных задачах и повышения продуктивности. В этой главе мы рассмотрим ключевые компоненты создания чатбота, аналогичного ChatGPT.

Image represents a simulated ChatGPT interaction.  At the top, 'ChatGPT' is labeled, suggesting a user interface for interacting with the large language model.  Below this, a user input box contains the prompt: 'write a short message so I apologize my manage...'.  Two response bubbles, each preceded by a small, stylized circular logo, appear below. The first response bubble contains the text 'Sorry for the inconvenience.' and the second contains 'Sorry for my mistak...'.  To the right, another response bubble shows a user's follow-up message: 'inconvenience? lol'. At the bottom, a button labeled 'Message ChatGPT' is shown with an upward-pointing arrow next to it, indicating the direction of message submission to the ChatGPT model.  The overall arrangement suggests a conversational flow, with the user's prompt initiating the interaction, followed by ChatGPT's responses and a subsequent user interaction.
Рисунок 1: Пример диалога с ChatGPT

Уточнение требований

Вот типичное взаимодействие между кандидатом и интервьюером:

Кандидат: Какие языки должен поддерживать чатбот? Интервьюер: Для начала давайте сосредоточимся на английском.

Кандидат: Нам необходимо убедиться, что чатбот генерирует непредвзятые и безопасные ответы, используя строгую модерацию контента и соответствующие алгоритмы. Это корректное предположение? Интервьюер: Безусловно.

Кандидат: Можете ли вы уточнить спектр задач, которые должен выполнять чатбот? Интервьюер: Чатбот должен уметь справляться с такими задачами, как предоставление информации и ответы на вопросы.

Кандидат: Принимает ли чатбот на вход или выдаёт на выход нетекстовые модальности, такие как изображения, аудио или видео? Интервьюер: Давайте пока сосредоточимся на текстовом чатботе. И ввод, и вывод — это текст.

Кандидат: Должен ли чатбот обрабатывать уточняющие вопросы? Как долго чатбот должен сохранять контекст диалога? Интервьюер: Хороший вопрос. Чатбот должен уметь обрабатывать уточняющие вопросы в рамках одной сессии диалога. Допустим, ожидается, что контекстное окно будет не менее 4096 токенов.

Кандидат: Должен ли чатбот уметь просматривать веб-сайты, вызывать внешние API или искать информацию в интернете? Интервьюер: Давайте не будем на этом фокусироваться в этом раунде.

Кандидат: Должен ли чатбот персонализировать взаимодействие с пользователями? Интервьюер: Давайте не будем сосредотачиваться на персонализации.

Кандидат: Есть ли у нас обучающие данные на основе инструкций? Интервьюер: Да, у нас есть набор данных с 80 000 примеров инструкций и ответов.

Формулировка задачи как задачи ML

Определение входа и выхода системы

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

Image represents a simple data flow diagram illustrating a user interaction with a chatbot.  The diagram shows a left-to-right flow.  On the left, the user input 'where bill gates...' is depicted.  A black arrow points from this input to a rectangular box representing the 'Chatbot,' which is colored light orange with a golden-yellow border.  The chatbot processes the input.  Another black arrow then points from the chatbot box to the output on the right, which displays the response 'Bill Gates was born in Seattle,...'.  The text 'Text is not SVG - cannot display' is present at the bottom of the chatbot box, indicating a technical note about the image's creation. The overall structure demonstrates a basic question-answer interaction where a user query is fed into a chatbot, which then generates a relevant response.
Рисунок 2: Вход и выход чатбота

Выбор подходящего подхода ML

Разработка чатбота — это задача генерации текста, в которой языковая модель обрабатывает входной промпт и генерирует ответ. Такая языковая модель обычно требует миллиардов параметров для эффективного обучения; поэтому их часто называют большими языковыми моделями (LLM).

Как мы видели в предыдущих главах, decoder-only Transformer является стандартным архитектурным выбором для языковых моделей. Большинство современных LLM, таких как GPT от OpenAI [3], Gemini от Google [4] и Llama от Meta [5], основаны на архитектуре decoder-only Transformer. В соответствии с этими моделями мы используем decoder-only

Подготовка данных

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

  • Извлечение и парсинг контента: Данные, собранные из веба, часто содержат посторонние элементы, например, HTML-теги, рекламу и навигационные ссылки. Этот этап включает парсинг сырого HTML-контента с использованием библиотек, таких как Beautiful Soup [6] или lxml [7], и извлечение основного текста с отбрасыванием нерелевантных разделов. Для выделения и сохранения ключевого контента, значимого для языкового моделирования, применяются такие техники, как анализ DOM [8] и обнаружение шаблонного контента [9].
  • Фильтрация по URL и доменам: Не все веб-домены предоставляют качественный или релевантный контент. Фильтрация URL использует предопределённые правила или классификаторы машинного обучения (ML) для исключения нежелательных источников, например, низкокачественных блогов, контентных ферм или спам-сайтов. Также применяются техники белых и чёрных списков доменов для курирования данных из надёжных и релевантных источников, обеспечивая качество и надёжность набора данных.
  • Определение языка: Собранные данные часто включают многоязычный контент, который необходимо отфильтровать в соответствии с целевым языком (языками) для обучения. Для классификации и фильтрации документов используются инструменты определения языка, такие как fastText [10] или langid.py [11].
  • Фильтрация по качеству контента: Не весь веб-контент одинаково ценен для обучения. Для оценки и фильтрации низкокачественного текста используются техники оценки качества, включая оценку читаемости, алгоритмы обнаружения спама и эвристические проверки (например, длина контента, структура предложений). ML-модели также могут применяться для прогнозирования качества веб-контента на основе извлечённых из текста признаков. Этот этап критически важен для обеспечения использования только высококачественных данных для обучения.

Наряду с этими техниками, следующие методы обычно применяются как к данным, собранным из веба, так и к другим источникам данных, таким как книги, статьи и посты в социальных сетях:

  • Удаление неприемлемого контента: Мы используем ML-модели для удаления оскорбительного, вредоносного или NSFW-контента из обучающих данных. Это гарантирует, что наша модель обучается только на уместном и безопасном контенте.
  • Анонимизация конфиденциальной информации: Мы анонимизируем любую персонально идентифицируемую информацию (PII) в наборе данных. Этот этап критически важен для соблюдения законов о конфиденциальности и этических норм.
  • Удаление низкокачественных данных: Мы используем ML-модели для удаления низкокачественных текстовых данных. Модели оценивают связность, релевантность, грамматику и читаемость. Этот этап обеспечивает высокое качество обучающих данных и их пригодность для обучения.
  • Удаление дублированных данных (дедупликация): Мы удаляем похожие тексты, которые могут присутствовать в различных источниках. Например, если одна и та же новостная статья собрана с нескольких веб-сайтов, мы идентифицируем и сохраняем только одну копию. Этот этап уменьшает избыточность в обучающем наборе данных и гарантирует, что модель не подвергается чрезмерному воздействию определённых данных.
  • Удаление нерелевантных данных: Мы используем эвристики и методы на основе правил для удаления нерелевантных данных. Например, мы удаляем тексты с нестандартными символами или на языках, которые чатбот не должен поддерживать.
  • Токенизация текста: Мы используем алгоритм подсловной токенизации, такой как Byte-Pair Encoding (BPE), для токенизации текстовых данных. Для обзора BPE обратитесь к Главе 3.

Разработка модели

Архитектура

Архитектура LLM основана на decoder-only Transformer. Хотя текстовый embedding, блоки Transformer и голова предсказания аналогичны decoder-only Transformer, рассмотренному в Главе 2, LLM обычно используют более продвинутые методы позиционного кодирования.

Image represents a diagram of a text generation model architecture.  At the bottom is a 'Text Embedding' layer, which presumably converts input text into numerical vectors. Above this is a 'Positional Encoding' layer, adding positional information to the embedded vectors.  The core of the model is a 'Transformer' block, which consists of a vertically stacked sequence of layers. This sequence is repeated Nx times, indicated by a curly brace and the label 'Nx'. Each repetition within the Transformer includes a 'Normalization' layer, a 'Feed Forward' layer, and another 'Normalization' layer, followed by a 'Multi-head...' layer (the ellipsis suggests further details omitted from the diagram). Finally, at the top is a 'Prediction Head' layer, responsible for generating the output text based on the processed information from the Transformer.  The data flow is bottom-up: text is embedded, positional information is added, then the data passes through the repeated Transformer layers, and finally, the prediction head generates the output.
Рисунок 3: Компоненты decoder-only Transformer

Давайте подробнее рассмотрим позиционное кодирование LLM.

Позиционное кодирование

В контексте чатбота входная последовательность обычно значительно длиннее одного предложения или письма. Согласно требованиям интервьюера, наша цель — построить систему с контекстным окном не менее 4096 токенов. Это требует метода позиционного кодирования, который позволит модели понимать позиции всех токенов и взаимосвязи между ними.

В этом разделе мы начнём с краткого обзора абсолютного позиционного кодирования, а затем рассмотрим относительное позиционное кодирование. Наконец, мы углубимся в rotary positional embedding (RoPE) [12], надёжный метод позиционного кодирования, используемый популярными LLM, такими как Llama 3 [13].

Абсолютное позиционное кодирование

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

В этом подходе закодированные позиции затем добавляются к embedding токенов, предоставляя модели информацию о том, где каждый токен появляется в последовательности. Формально ключи и запросы attention вычисляются с помощью следующих уравнений:

Где:

  • qmq_mqm​ — это вектор запроса на позиции mmm,
  • knk_nkn​ — это вектор ключа на позиции nnn,
  • WqW_qWq​ и WkW_kWk​ — обучаемые весовые матрицы,
  • eme_mem​ и ene_nen​ — embedding токенов на позициях mmm и nnn,
  • pmp_mpm​ и pnp_npn​ — позиционные векторы (обучаемые или фиксированные) на позициях mmm и nnn.

Оценка attention вычисляется как скалярное произведение векторов запроса и ключа:

Обратите внимание, что позиционные кодировки pmp_mpm​ и pnp_npn​ зависят только от абсолютных позиций. Следовательно, этот подход захватывает только информацию об абсолютной позиции, ограничивая способность модели улавливать относительные расстояния между токенами и обобщать на последовательности различной длины или с невиданными ранее позициями токенов. Например, модель, обученная на последовательностях длиной до 512 токенов, может испытывать трудности при применении к последовательностям из 4096 токенов. Синусоидальные паттерны имеют тенденцию становиться повторяющимися на больших расстояниях, что приводит к потере информации о взаимосвязях токенов. Этот недостаток устраняется относительным позиционным кодированием.

Относительное позиционное кодирование

В относительном позиционном кодировании вместо кодирования абсолютных позиций токенов мы кодируем разницу в позициях двух токенов. Таким образом, модель может сосредоточиться на относительных расстояниях между токенами, что зачастую важнее их абсолютных позиций. Например, в предложении знание того, что слово «car» следует за словом «chased», информативнее, чем знание позиций токенов как чисел 5 и 10.

Вычисление attention в относительном позиционном кодировании может быть выражено различными способами. В статье T5 [14] предлагается, что второй и третий члены взаимодействия в исходном выражении абсолютного позиционного кодирования можно отбросить, а четвёртый член заменить обучаемым смещением:

Напротив, в статье DeBERTa [15] отбрасывается последний член и заменяются второй и третий члены, состоящие из абсолютных позиционных векторов pmp_mpm​ и pnp_npn​ соответственно, на вектор относительной позиции Rn−mR_{n-m}Rn−m​:

Относительное позиционное кодирование позволяет модели понимать взаимосвязи между токенами независимо от их абсолютных позиций. Однако оно вносит дополнительную сложность, поскольку qm⋅knq_m \cdot k_nqm​⋅kn​ в механизме attention больше не может быть сведено к простому скалярному произведению. Это ограничивает нашу способность использовать эффективные техники, такие как linear attention [16]. RoPE, который мы рассмотрим далее, решает это ограничение путём кодирования как абсолютной, так и относительной позиционной информации через вращение в пространстве embedding.

Вращательное позиционное кодирование (RoPE)

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

где qmq_mqm​ — embedding токена на позиции mmm, а R(θm)R\left(\theta_m\right)R(θm​) — матрица вращения, параметризованная позиционным углом θm\theta_mθm​. Этот угол обычно выводится из индекса позиции mmm и конструируется таким образом, чтобы вращение захватывало как абсолютную, так и относительную позиционную информацию. Эта матрица вращения, построенная с использованием тригонометрических функций, вращает embedding в комплексной плоскости, захватывая как абсолютную, так и относительную позиционную информацию.

Image represents a comparison of two 2D vector representations.  The left side shows a Cartesian coordinate system (x and y axes) with two vectors originating from the origin (0,0). A reddish-brown vector labeled 'cat' points upward and to the right, and a blue-gray vector labeled 'dog' points upward and to the right at a smaller angle than the 'cat' vector.  A curved arrow indicates an angle θ between the two vectors. Below the graph, the text 'The cat chased the dog' is written. The right side mirrors the structure, also showing a Cartesian coordinate system with two vectors originating from the origin.  However, the 'cat' vector (reddish-brown) points upward and to the left, while the 'dog' vector (blue-gray) points upward and to the right.  The angle θ between these vectors is also indicated by a curved arrow. Below this graph, the text 'Once upon a time, the cat ch...' is partially visible, suggesting a narrative context.  The overall image uses vector diagrams to potentially illustrate different interpretations or scenarios related to the phrase 'the cat chased the dog,' highlighting the change in relative vector directions and the angle between them.
Рисунок 4: RoPE в 2D

Рисунок 4 показывает, как вращательное позиционное кодирование работает путём вращения embedding слов в двумерном пространстве. Слова «cat» и «dog» представлены как векторы, и угол между ними, обозначенный θ\thetaθ, кодирует их позиционное соотношение. Слева показано предложение «The cat chased the dog.» Позиция «cat» показана красным цветом, а позиция «dog» — синим. Угол между этими векторами отражает относительное расположение этих двух слов в предложении.

Справа показано другое предложение «Once upon a time, the cat chased the dog». Обратите внимание, что относительный угол между векторами «cat» и «dog» остаётся тем же, но их абсолютные позиции отличаются. Это демонстрирует, как RoPE захватывает как абсолютные, так и относительные позиции слов, позволяя модели понимать порядок и расстояние между словами в предложении.

В пространстве более высокой размерности матрица вращения может быть расширена для ddd измерений:

Преимущества:
  • Трансляционная инвариантность: RoPE кодирует позиционную информацию таким образом, что она остаётся согласованной даже при смещении позиций токенов. Это помогает модели лучше справляться с изменениями позиций, чем другие методы.
  • Представление относительной позиции: Вращения RoPE кодируют позиционную информацию геометрически в пространстве embedding. Это позволяет модели по своей природе понимать относительные расстояния между токенами, в отличие от традиционных синусоидальных кодировок, которые кодируют позицию аддитивно без использования этого геометрического понимания.
  • Обобщение на невиданные позиции: Поскольку RoPE кодирует позицию через вращения, результирующие embedding сохраняют согласованные взаимосвязи независимо от абсолютной позиции. Это обеспечивает лучшее обобщение для последовательностей различной длины.
Недостатки:
  • Математическая сложность: RoPE вводит дополнительные математические операции, включающие вращения в пространстве embedding. Хотя они не чрезмерно сложны, они более замысловаты, чем традиционные методы позиционного кодирования, такие как синусоидальные или обучаемые позиционные embedding.

Обучение

В предыдущих главах мы рассмотрели двухэтапную стратегию обучения языковых моделей. Однако этих этапов недостаточно при обучении продвинутых чатботов. Большинство чатботов, включая ChatGPT, используют трёхэтапную стратегию обучения:

  • Pre-training
  • Supervised finetuning (SFT)
  • Reinforcement learning from human feedback (RLHF)

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

Image represents a three-stage process for training a chatbot.  Three cylindrical databases labeled 'General...', 'Instruction...', and 'Human Feedba...' (presumably representing general data, instruction data, and human feedback data, respectively) feed into three sequential processing stages.  The first stage, '1. Pretraining,' uses the 'General...' data to create a 'Base Model' represented as a light gray cloud.  The output 'Base Model' is then fed, along with data from the 'Instruction...' database, into the second stage, '2. SFT' (Supervised Fine-Tuning), which produces an 'SFT Model,' also represented as a light gray cloud.  Finally, the 'SFT Model' and data from the 'Human Feedba...' database are input into the third stage, '3. RLHF' (Reinforcement Learning from Human Feedback), resulting in a final 'Chatbot...' output, depicted as a light green cloud.  Arrows clearly indicate the data flow between each component, showing a linear progression from raw data to a refined chatbot model.
Рисунок 6: Три этапа обучения LLM

. Pre-training

Pre-training — это начальный этап процесса обучения. На этом этапе модель обучается на огромном объёме текстовых данных из интернета. Цель pre-training — создать базовую модель с широким пониманием языка и знаниями о мире.

Этап pre-training требует значительных вычислительных ресурсов. Обычно он требует тысяч GPU, стоит миллионы долларов и занимает месяцы обучения.

Данные для pre-training

Данные для pre-training обычно состоят из большого корпуса общих текстовых данных из различных источников в интернете, например, веб-страниц, книг и постов в социальных сетях.

При pre-training LLM обычно используется несколько наборов данных. Каждый из них служит уникальной цели — от расширения знакомства модели с различными стилями языка до углубления её понимания конкретных областей. Часто используемые наборы данных:

  • Common Crawl: Common Crawl [17] — это общедоступный набор данных, собранный с большого количества веб-страниц в интернете. Он содержит петабайты данных, регулярно собираемых с 2008 года. Эти данные часто содержат нерелевантную информацию и вредоносный контент; следовательно, для подготовки к обучению LLM требуется значительная очистка данных.
  • C4: C4 [18], созданный Google, — это очищенная версия набора данных Common Crawl, специально предназначенная для обучения LLM.
  • GitHub: Набор данных GitHub включает обширную коллекцию репозиториев с открытым исходным кодом. Его назначение — помочь модели понять языки программирования и структуры кода.
  • Wikipedia: Набор данных Wikipedia включает широкий спектр фактической информации, извлечённой из Wikipedia. Этот набор данных обычно является более надёжным источником, так как он написан и отредактирован более тщательно.
  • Books: Набор данных Books — это коллекция книг различных жанров. Книги содержат длинный текстовый контент и обладают хорошим качеством данных, что способствует улучшению производительности LLM.
  • ArXiv: Набор данных ArXiv содержит академические материалы и опубликованные статьи. Этот набор данных помогает модели понять терминологию и знания в академической области.
  • Stack Exchange: Stack Exchange [19] — это веб-сайт с высококачественными вопросами и ответами, преимущественно в формате диалога между пользователями. Большинство популярных LLM обучаются на всех или некоторых из перечисленных наборов данных. Например, модель Llama-1 от Meta использует все вышеуказанные наборы данных, содержащие около 1,4 триллиона токенов. Таблица 1 показывает долю каждого набора данных, использованного Llama-1 во время обучения.
DatasetSampling proportionDisk size
Common Crawl67.0%3.3 TB
C415.0%783 GB
Github4.5%328 GB
Books4.5%85 GB
Wikipedia4.5%83 GB
ArXiv2.5%92 GB
Stack Exchange2.0%78 GB

Таблица 1: Набор данных для pre-training Llama 1

Целевая функция ML и функция потерь

Поскольку мы обучаем decoder-only Transformer для генерации текста, мы используем стандартное предсказание следующего токена в качестве целевой функции ML. В качестве функции потерь мы применяем кросс-энтропию для измерения разницы между предсказанными вероятностями токенов и правильными токенами.

Результат этапа pre-training

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

Image represents a simple, vertically oriented diagram enclosed within a dashed-line border.  At the bottom, the text 'I want to learn programming' is positioned. An upward-pointing arrow connects this text to a light orange, rectangular box labeled 'Base Model' in the center.  Another upward-pointing arrow extends from the top of the 'Base Model' box to the text 'because it is a valuable skill' at the top of the diagram. The arrows visually represent a causal relationship, suggesting that the desire to learn programming ('I want to learn programming') leads to engaging with a 'Base Model,' which in turn is motivated by the perceived value of programming as a skill ('because it is a valuable skill').  The overall structure is minimalistic, focusing on the core relationship between motivation, a foundational model, and the ultimate goal.
Рисунок 7: Базовая модель продолжает предложение

Хотя базовая модель хорошо понимает язык, она способна лишь продолжать текстовый промпт. Чтобы сделать модель полезным чатботом, отвечающим на вопросы, необходимо дополнительно обучить базовую модель. Это приводит нас к следующему этапу: supervised finetuning.

. Supervised finetuning (SFT)

SFT, также называемый instruction finetuning, — это второй этап процесса обучения. На этом этапе мы дообучаем базовую модель на меньшем высококачественном наборе данных в формате (промпт, ответ). Цель этого этапа — сохранить языковое понимание базовой модели и знания о мире, адаптируя её поведение к ответам на промпты вместо простого их продолжения.

Обучающие данные

Обучающие данные для этапа SFT следуют формату (промпт, ответ). Эти данные обычно называются демонстрационными данными, поскольку они демонстрируют модели, как отвечать на промпты.

Image represents a simple, rectangular box with rounded corners, representing a system's input and output.  The top section, labeled 'Prompt...', is a blank space intended for user input, likely text-based, to initiate a process or query.  Below this, a larger blank space labeled 'Response...' is provided for the system's output, also presumably text-based, in response to the prompt.  There are no visible connections or arrows indicating information flow between the prompt and response areas; the implication is that the input in the 'Prompt...' area triggers a process within the unseen system, resulting in the output displayed in the 'Response...' area.  At the very bottom, in small text, is the note 'text is not SVG - cannot display,' indicating a limitation in displaying the image's underlying format.
Рисунок 8: Пример демонстрационных данных

Основные различия между демонстрационными данными и данными pre-training, помимо формата, — это размер и качество.

Размер: Демонстрационные данные значительно меньше данных pre-training. Обычно они составляют от 10 000 до 100 000 пар (промпт, ответ). Таблица 2 показывает размеры данных популярных демонстрационных наборов.

DatasetSizeNotes
InstructGPT [20]~14,500OpenAI’s GPT-3 instruction datasets
Alpaca [21]52,000Developed by Stanford researchers
Dolly-15K [22]~15,000Created by Databricks
FLAN 2022 [23]~104,000Developed by Google Research

Таблица 2: Распространённые демонстрационные наборы данных

Качество: Демонстрационные данные имеют более высокое качество по сравнению с данными pre-training. Данные обычно создаются квалифицированными подрядчиками. В специализированных отраслях, таких как здравоохранение или финансы, необходимо привлекать экспертов в предметной области для обеспечения точности и релевантности данных. Например, как показано в Таблице 3, более трети разметчиков OpenAI для демонстрационного набора данных GPT имели степень магистра [20]. Хотя это требование затратно, оно критически важно для создания надёжных, отраслевых ответов.

EducationPercentage
Less than a high school degree0%
High school degree10.5%
Undergraduate degree52.6%
Master’s degree36.8%

Таблица 3: Уровни образования разметчиков OpenAI

Целевая функция ML и функция потерь

Хотя обучающие данные отличаются от этапа pre-training, модель по-прежнему обучается аналогичной задаче: генерации текста по одному токену за раз на основе входного промпта. Поэтому целевая функция ML и функция потерь остаются аналогичными тем, что на этапе pre-training: целевая функция предсказания следующего токена и функция потерь кросс-энтропии.

Image represents a simplified diagram of a sequence-to-sequence model, likely used in a machine translation or text generation task.  At the bottom, the input 'What is the capital...' is fed into a rectangular 'Model' component, which represents the core neural network.  The model processes this input and outputs 'Predicted token...', visualized as four vertically stacked rectangles representing token embeddings.  Above this, 'Correct tokens' ('It is Paris.') are shown as a similar set of four vertically stacked rectangles.  Arrows indicate the flow of information: the input feeds into the model, the model produces predicted tokens, and these predicted tokens are compared to the correct tokens.  The comparison is quantified by 'cross-entropy loss,' which is calculated and represented by an upward-pointing arrow from the predicted tokens to the correct tokens.  The entire system is enclosed within a dashed box.  The rectangles represent token embeddings, with each rectangle likely containing a vector representation of a word or sub-word unit.
Рисунок 9: Вычисление потерь для примера (промпт, ответ)
Результат этапа SFT

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

Image represents a simple flowchart enclosed within a dashed-line box.  At the bottom, the text 'I want to learn programming' indicates the starting point or goal. An upward-pointing arrow connects this text to a light orange, rectangular box labeled 'SFT Model,' representing a specific model or system.  Another upward-pointing arrow connects the 'SFT Model' box to the text 'Start with Python' at the top, suggesting that Python is the recommended or suggested programming language to interact with or utilize the 'SFT Model.' The overall structure depicts a linear flow, implying that to achieve the goal of learning programming ('I want to learn programming'), one should utilize the 'SFT Model' and start with Python.
Рисунок 10: Модель SFT отвечает на промпт вместо его продолжения

Модель SFT обычно генерирует грамматически корректный и разумный ответ. Однако она не всегда генерирует лучший ответ; её ответы могут быть бесполезными или даже небезопасными. Рисунок 11 показывает четыре правдоподобных ответа на вопрос. Только второй ответ является одновременно безопасным и полезным. Первый и четвёртый ответы грамматически и контекстуально корректны, но не дают точных рекомендаций. Третий ответ полезен, но невежлив.

Image represents a simple flowchart illustrating a generative AI model's response to a user prompt.  A central rectangular box labeled 'PromptWhat are some effective w...' represents the user's input, a question likely seeking effective ways to manage stress or similar.  From this central box, four curved arrows point to four separate rectangular boxes, each labeled 'Response 1,' 'Response 2,' 'Response 3,' and 'Response 4,' respectively. Each response box contains a different suggestion: Response 1 suggests 'Go skydiving for an adrenaline...'; Response 2 suggests 'Exercise regularly and maintain...'; Response 3 offers the more critical 'Shame on you! Try meditation!!!'; and Response 4 provides the somewhat dismissive 'Ignore your problems and hope t...'. The arrows visually depict the flow of information, showing how the AI model generates multiple diverse responses based on a single user prompt.
Рисунок 11: Различные ответы на промпт

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

. RLHF

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

Чтобы понять RLHF, давайте кратко вернёмся к этапу SFT. На этапе SFT модель обучается на демонстрационных данных генерировать правдоподобный ответ на заданный промпт. Однако демонстрационные данные предоставляют модели один правдоподобный ответ на промпт, который не обязательно является наиболее полезным или релевантным. Обычно возможны несколько правдоподобных ответов, и одни будут более релевантными, чем другие, как показано на Рисунке 11.

Если у нас есть отдельная модель вознаграждения, которая может оценить, насколько релевантен ответ модели промпту, мы можем дополнительно дообучить модель SFT, чтобы она генерировала не просто любой правдоподобный ответ, а ответ с высокой оценкой. Это ключевая идея RLHF. RLHF состоит из двух последовательных шагов:

  • Обучение модели вознаграждения
  • Оптимизация модели SFT

.1 Обучение модели вознаграждения

Первый шаг в RLHF — обучение модели вознаграждения, которая оценивает релевантность ответа промпту. Эта модель принимает пару (промпт, ответ) на вход и выдаёт оценку, предсказывающую полезность ответа. Чем выше оценка, тем более полезным ожидается ответ. Рисунок 12 иллюстрирует предсказанные оценки для различных пар (промпт, ответ).

Image represents a flowchart illustrating a reward model's scoring mechanism for two different responses to the same prompt.  The flowchart is divided into two sections by a dashed line, representing Example 1 and Example 2. Each section begins with a 'Prompt' box containing the text 'What are some effective w...', followed by a 'Response' box.  Example 1's response is 'Exercise regularly and maintain...', while Example 2's response is 'Shame on you! Try meditation!!!'.  Each 'Response' box is connected to a 'Reward Model' box (represented in light purple).  The 'Reward Model' processes the response and outputs a 'Score' to a circular box.  Example 1 receives a score of '5', while Example 2 receives a score of '1', indicating that the reward model assigns higher scores to responses deemed more effective or appropriate based on some underlying criteria not explicitly shown in the diagram.  The arrows clearly show the flow of information from the prompt and response to the reward model and finally to the score.
Рисунок 12: Вход и выход модели вознаграждения
Архитектура модели вознаграждения

Обучение модели для выдачи оценки — очень распространённая задача в ML. Существуют различные архитектуры, которые мы можем использовать для моделирования вознаграждения: это может быть decoder-only, encoder-only или encoder-decoder Transformer, если он выдаёт скалярное значение.

На основе публичных исследований нет устойчивой закономерности в том, что модели вознаграждения больше или меньше языковых моделей, для обучения которых они используются. Например, OpenAI использует модель вознаграждения на 6B для языковой модели на 175B [20]. Anthropic использует языковые модели и модели вознаграждения от 10B до 52B параметров [24]. Типичный вариант — создать копию модели SFT и добавить голову предсказания для получения оценки релевантности для данной пары (промпт, ответ).

Image represents a system for evaluating the quality of responses generated by a language model.  At the bottom, a 'Prompt' ('What is 2+2?') and a 'Response' ('Math is hard.') are input into a 'Reward Model...'. This model processes the prompt and response, producing multiple intermediate representations (shown as vertically stacked rectangles), which are then aggregated.  These aggregated representations are fed into a 'Prediction He...' module, which generates a prediction.  Finally, a 'score' (0.3 in this example) is output, representing the quality of the response as assessed by the system.  The ellipsis (...) indicates that multiple intermediate representations are generated by the Reward Model, suggesting a process involving multiple steps or features for evaluating the response.  The arrows depict the flow of information between the components.
Рисунок 13: Архитектура модели вознаграждения
Обучающие данные

Для сбора обучающих данных для моделирования вознаграждения мы следуем этим шагам:

  • Сбор промптов: Вручную создать список промптов.
  • Генерация нескольких ответов: Использовать модель SFT для генерации нескольких ответов на каждый промпт.
  • Ранжирование ответов: Попросить подрядчиков оценить эти ответы и ранжировать их по релевантности. Причина, по которой обычно используется ранжирование, а не оценка каждого ответа, состоит в том, что ранжирование снижает субъективность и несогласованность. Аннотаторам проще и интуитивнее сравнивать ответы напрямую, чем присваивать числовые оценки, которые могут варьироваться между аннотаторами. Этот подход упрощает процесс оценки и обеспечивает более надёжные данные для обучения.
  • Создание пар предпочтений: Сформировать обучающий набор данных, создавая пары в формате (промпт, выигрышный ответ, проигрышный ответ). В каждой паре выигрышный ответ предпочтительнее проигрышного на основе ранжирования с предыдущего шага.

Рисунок 14 показывает процесс сбора обучающих данных для обучения модели вознаграждения.

Image represents a system for evaluating responses from a Large Language Model (LLM).  The process begins (1) with a prompt list containing questions like 'What is the capital of France?', 'Name a famous physicist?', 'What's 2 + 2?', and 'Give a synonym for 'happy.''.  These prompts are fed (2) into an 'SFT Model' (likely a fine-tuned large language model), which generates three different responses (Response 1, Response 2, Response 3) for each prompt.  A human evaluator (3) then reviews these responses and determines a 'winning' and 'losing' response for each prompt, based on accuracy and quality. This information is compiled (4) into a table showing the winning and losing responses for each prompt. Finally, the evaluator provides rankings (R1 > R2 > R3, for example) indicating the relative quality of the three responses for each prompt, providing feedback on the LLM's performance.  The entire diagram illustrates a human-in-the-loop evaluation process for ranking the quality of LLM responses.
Рисунок 14: Сбор обучающих данных для обучения модели вознаграждения

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

Целевая функция ML и функция потерь

Модель вознаграждения стремится предсказать более высокую оценку для выигрышного ответа по сравнению с проигрышным. Более формально, для данного (промпт, выигрышный ответ, проигрышный ответ) целевая функция ML — максимизировать Swin −Slose S_{\text {win }}-S_{\text {lose }}Swin ​−Slose ​, где:

  • Swin S_{\text {win }}Swin ​ — предсказанная оценка для пары (промпт, выигрышный ответ)
  • Slose S_{\text {lose }}Slose ​ — предсказанная оценка для пары (промпт, проигрышный ответ)

Для достижения этой целевой функции ML нам нужна функция потерь, которая штрафует модель, когда разница между оценками выигрышного и проигрышного ответов слишком мала. Часто используемая функция потерь для этой цели — маржинальная ранговая функция потерь (margin ranking loss). Функция потерь определяется как:

Где mmm — это гиперпараметр, определяющий маржу. Эта маржа указывает минимальную желаемую разницу между оценками выигрышного и проигрышного ответов. Если разница между SwinS_{\text {win}}Swin​ и SloseS_{\text {lose}}Slose​ меньше mmm, оптимизатор обновит параметры модели так, чтобы либо SwinS_{\text {win}}Swin​ увеличилась, либо SloseS_{\text {lose}}Slose​ уменьшилась.

Image represents a simplified reward model for a generative AI system.  A central, peach-colored rectangle labeled 'Reward Model' receives input from three sources: 'Prompt,' displaying the text 'What is 2+2?'; 'Winning res...', showing the correct answer 'Four.'; and 'Losing resp...', displaying the incorrect answer 'Math is hard.'  Arrows indicate the flow of information into the Reward Model.  The Reward Model then outputs two values, represented by  '$S_{win}' and '$S_{los}', connected by a dashed line labeled 'Margin...', suggesting a comparison or difference between the winning and losing reward signals. Arrows point from the Reward Model to these output values, indicating that the model assigns different reward signals based on the correctness of the response.  The entire diagram illustrates how the system evaluates responses based on a prompt and assigns rewards accordingly.
Рисунок 15: Вычисление потерь моделирования вознаграждения для одного примера из обучающих данных
Результат моделирования вознаграждения

Результатом этого шага является модель вознаграждения, которая предсказывает оценки релевантности для пар (промпт, ответ). Эти оценки отражают человеческие суждения и критически важны для второго шага в RLHF.

Image represents a simplified diagram of a reinforcement learning system, specifically focusing on the reward mechanism.  The diagram shows a rectangular box labeled 'Reward Model' in peach/light-orange with a golden border, representing the core component that evaluates the quality of a generated response.  Below this box, '(Prompt, Response)' indicates that the input to the Reward Model consists of a prompt and the corresponding generated response. A single upward-pointing arrow connects '(Prompt, Response)' to the 'Reward Model,' signifying the flow of data.  Another upward-pointing arrow connects the 'Reward Model' to the word 'Score' at the top, indicating that the Reward Model outputs a numerical score based on its evaluation of the prompt and response pair.  The overall structure illustrates a process where a prompt and response are fed into a Reward Model, which then generates a score reflecting the quality of the response.
Рисунок 16: Модель вознаграждения предсказывает оценку релевантности для пары (промпт, ответ)

.2. Оптимизация модели SFT

На втором шаге RLHF модель SFT оптимизируется с помощью модели вознаграждения. Цель этого шага — адаптировать модель SFT для генерации ответов, которые не только правдоподобны, но и полезны, на основе оценок модели вознаграждения.

Распространённый подход к оптимизации модели SFT — использование алгоритма обучения с подкреплением (RL), такого как proximal policy optimization (PPO) [25], при котором модель SFT дообучается для максимизации оценок, предсказанных моделью вознаграждения. Этот процесс дообучения итеративно выполняет следующие шаги:

  • Генерация ответов модели: Модель генерирует несколько возможных ответов на заданный промпт.
  • Вычисление вознаграждений: Модель вознаграждения оценивает эти ответы.
  • Обновление весов модели: Алгоритм RL обновляет веса модели для максимизации ожидаемого вознаграждения. Этот шаг подкрепляет ответы, получившие более высокие оценки от модели вознаграждения.

Рисунок 17 показывает этот процесс для одного ответа. На практике несколько ответов генерируются и оцениваются одновременно.

Image represents a simplified reinforcement learning (RL) system diagram.  A light orange rectangle labeled 'RL Model' is the core component, receiving input from an unspecified source indicated by 'What is...'. The RL model processes this input and produces an output, represented by a downward arrow and the text 'Math is hard.', which signifies the model's computation. This output feeds into a light green rectangle labeled 'Reward...', representing the reward signal generated by the model's actions.  A score of '1.8' is shown, likely indicating the performance metric of the RL model.  This reward signal is then fed into a purple rectangle labeled 'PPO,' which stands for Proximal Policy Optimization, an optimization algorithm.  The PPO algorithm uses the reward to optimize the RL model, indicated by an arrow labeled 'Optimize' connecting PPO back to the RL Model.  The system forms a closed loop where the PPO algorithm improves the RL model based on the reward signal, creating a continuous optimization process.
Рисунок 17: Оптимизация модели с помощью алгоритма PPO
Обучающие данные

Для этого шага обучающие данные обычно включают список промптов, созданных подрядчиками, обычно в количестве от 10 000 до 100 000.

Целевая функция ML и функция потерь

Известные LLM, такие как ChatGPT и Llama, используют алгоритмы RL, такие как PPO и direct policy optimization (DPO) [26]. Однако детали этих алгоритмов обычно выходят за рамки большинства интервью по проектированию ML-систем. Для получения дополнительной информации обратитесь к [27] и [28].

Результат RLHF

Результатом этапа RLHF обычно является финальная модель, которая может быть развёрнута как чатбот. Таблица 4 перечисляет некоторые из наиболее популярных LLM.

LLM nameDeveloperRelease dateAccessParameters
o1OpenAISeptember 12, 2024Preview onlyUnknown
GPT-4oOpenAIMay 13, 2024APIUnknown
Claude 3AnthropicMarch 14, 2024APIUnknown
Gemini 1.5DeepMindFebruary 2, 2024APIUnknown
Llama 3Meta AIApril 18, 2024Open-Source8 and 70 billion
Grok-1xAINovember 4, 2023Open-Source314 billion
Mixtral 8x22BMistral AIApril 10, 2024Open-Source141 billion
GemmaDeepMindFebruary 21, 2024Open-Source2 and 7 billion
Phi-3MicrosoftApril 23, 2024Open-Source3.8 billion
DBRXDatabricksMarch 27, 2024Open-Source132 billion

Таблица 4: Популярные LLM

Подводя итог раздела об обучении, мы применяем трёхэтапную стратегию обучения, включающую pre-training, SFT и RLHF. Pre-training включает обучение модели на большом корпусе текста для получения широкого языкового понимания. SFT дообучает модель для адаптации её вывода к формату (промпт, ответ). RLHF дополнительно совершенствует ответы модели, делая их полезными, безопасными и согласованными с человеческими предпочтениями.

Image represents a flowchart illustrating the stages involved in training a large language model (LLM), specifically highlighting the progression from a base model to a refined model using reinforcement learning.  The flowchart is divided into four main columns representing distinct training stages: Pretraining, Supervised Finetuning, Reward Modeling, and Reinforcement Learning. Each stage consists of three rows detailing the dataset used, the computational resources employed (number of GPUs), and the algorithm applied.  The Pretraining stage uses internet data, thousands of GPUs, and a language modeling algorithm to create a 'Base Model' (examples: GPT, Llama, PaLM).  The Supervised Finetuning stage takes the Base Model as input, utilizes demonstration data and 1-100 GPUs with a language modeling algorithm to produce an 'SFT Model' (example: Vicuna-13B).  The Reward Modeling stage uses comparisons data, 1-100 GPUs, and a regression algorithm to create a 'Reward Model' based on the SFT Model. Finally, the Reinforcement Learning stage uses prompts, 1-100 GPUs, and a reinforcement learning algorithm, taking both the SFT Model and the Reward Model as input, to generate an 'RL Model' (examples: ChatGPT, Gemini). Arrows indicate the flow of information and the model's progression through each stage.  Each stage's input and output are clearly labeled, along with the computational resources and algorithms used.
Рисунок 18: Обзор обучения LLM, вдохновлено [29]

Сэмплирование

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

Image represents a simplified illustration of a Large Language Model (LLM) generating text.  At the bottom, a sequence of tokens 'What is 2 + 2 ?' is fed as input to the LLM (represented by a peach-colored rectangle). The LLM processes this input and outputs a probability distribution for the next token. This distribution is shown as a vertical column of numbers next to the LLM, with probabilities 0.01, 0.01, 0.93, and 0.00 assigned to different tokens.  A curved arrow connects this probability column to a histogram labeled 'Token probabilit...', which visually represents the same probability distribution. The histogram shows that the token 'four' has a 93% probability, '<EOS>' (end of sequence) has 1%, 'able' has a small probability, and 'zebra' has a very small probability.  An upward arrow connects the highest probability token, 'four', to the output of the LLM, indicating that the LLM selects 'four' as the next word in the sequence based on its highest probability.
Рисунок 19: Выбор следующего токена из предсказанных вероятностей

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

Image represents a hierarchical tree diagram illustrating different text generation methods.  At the top is a rectangular box labeled 'Text Generation Methods,' which branches down into two main categories: 'Deterministic' and 'Stochastic.'  The 'Deterministic' category further subdivides into two methods: 'Greedy Search' and 'Beam...', represented by rectangular boxes connected by downward-pointing arrows indicating the flow of information or hierarchical relationship.  Similarly, the 'Stochastic' category branches into three methods: 'Multinomial...', 'Top-k...', and 'Top-p...', each also depicted as rectangular boxes connected by downward-pointing arrows.  The overall structure shows a top-down breakdown of text generation approaches, classifying them as either deterministic or stochastic and then further specifying individual techniques within each category.  The ellipses (...) after some method names suggest further details or parameters are omitted for brevity.
Рисунок 20: Распространённые методы генерации текста

Детерминированные методы

Детерминированные методы, такие как beam search, хорошо работают для задач с коротким предсказуемым объёмом текста. Однако они менее эффективны для открытой генерации, такой как диалог, где длина выхода варьируется. Давайте рассмотрим типичные проблемы, возникающие при использовании детерминированных методов, таких как жадный поиск или beam search, для генерации текста LLM.

Жадный поиск

Жадный поиск выбирает токен с наивысшей вероятностью на каждом шаге процесса генерации.

Image represents a directed graph illustrating word probabilities in a sentence.  A thick, solid horizontal line labeled 'How' connects to a box labeled '0.56' representing the word 'are'.  From '0.56', a thick solid line labeled 'you' connects to a box labeled '0.91'.  From '0.91', a thick solid line labeled 'doing' connects to a box labeled '0.39'.  Dashed lines represent weaker connections.  A dashed line labeled 'come' connects 'How' to a box labeled '0.14'.  A dashed line labeled 'am' connects '0.56' to a box labeled '0.03'. A dashed line labeled 'dog' connects '0.56' to a box labeled '0.01'. A dashed line labeled 'do' connects 'How' to a box labeled '0.26'. A dashed line labeled 'work' connects '0.91' to a box labeled '0.001'. A dashed line labeled '?' connects '0.91' to a box labeled '0.38'.  Each box contains a numerical value, presumably representing the probability of that word appearing in the context of the sentence, given the preceding words.  The graph visually depicts the probabilistic relationships between words in a sentence structure.
Рисунок 21: Жадный поиск

Хотя этот метод прост и часто создаёт связный текст, у него есть два основных недостатка:

  • Повторение
  • Субоптимальная генерация

Повторение: Когда мы используем жадный поиск для выбора следующих токенов, текст быстро начинает повторяться. Это происходит потому, что модель иногда «застревает» в циклах, повторно используя одну и ту же последовательность токенов. Это случается, когда модель определяет, что определённые слова следуют друг за другом с высокой вероятностью.

Image represents a simplified diagram illustrating a Large Language Model (LLM) interaction.  A peach-colored rectangle labeled 'LLM' is the central component.  Below the rectangle, the text 'How is the weather?' acts as an input prompt to the LLM.  An upward-pointing arrow connects this prompt to the LLM, indicating the flow of information into the model.  Above the rectangle, the text 'The weather today is sunny. The weathe...' represents the output generated by the LLM in response to the input prompt. An upward-pointing arrow connects the LLM to this output, showing the information flow from the model. The overall diagram depicts a basic question-answering process where a user's query ('How is the weather?') is processed by the LLM, resulting in a textual response ('The weather today is sunny...').
Рисунок 22: Повторяющийся вывод

Субоптимальная генерация: Жадный поиск игнорирует альтернативные пути в процессе генерации текста. Он может пропустить последовательность токенов с высокой вероятностью, скрытую за токеном с низкой вероятностью.

Beam search улучшает жадный поиск за счёт рассмотрения нескольких последовательностей одновременно. На каждом шаге он отслеживает топ-k последовательностей, где k — настраиваемый параметр.

Image represents a probabilistic context-free grammar (PCFG) tree illustrating word probabilities in a sentence.  A central node labeled 'How' branches into three main paths, each representing a different word choice: 'come,' 'are,' and 'do.'  These words are connected with thick lines to subsequent nodes containing probabilities (0.24, 0.31, and 0.26 respectively). Each of these nodes further branches out via thinner, dashed lines to other words, representing possible continuations of the sentence. For example, the 'are' node connects to 'plants,' 'animals,' 'you,' and 'am' with associated probabilities (0.001, 0.21, 0.36, and 0.03 respectively for the 'are' node). Similarly, the 'come' node connects to 'are' and 'plants' with probabilities (0.24 and 0.21 respectively). The 'do' node connects to 'you,' 'the,' and 'people' with probabilities (0.63, 0.001, and 0.21 respectively).  The numbers within the boxes represent the conditional probability of a word given its parent node in the tree.  The overall structure shows the branching possibilities and associated probabilities of different word sequences, suggesting a language model's prediction of word choices based on preceding words.
Рисунок 23: Beam search с шириной луча 3

Beam search позволяет более широкий поиск и создаёт текст более высокого качества, чем жадный поиск. Однако он может испытывать трудности с открытой генерацией. Две типичные проблемы beam search:

  • Неэффективность
  • Повторение

Неэффективность: Beam search может быть вычислительно неэффективным, поскольку требует одновременной оценки нескольких последовательностей, что может замедлить процесс генерации.

Повторение: Beam search может приводить к повторяющимся и шаблонным ответам. Иногда он застревает в цикле и повторяет распространённые фразы.

До сих пор мы видели, что детерминированные методы испытывают трудности с повторением и плохо подходят для генерации текста. Давайте рассмотрим стохастические методы, которые чаще используются для генерации текста в LLM.

Стохастические методы

Стохастические методы генерируют текст, вводя случайность. Эта случайность делает их более подходящими для открытой генерации текста. Три популярных стохастических метода:

  • Мультиномиальное сэмплирование
  • Top-k сэмплирование
  • Top-p (nucleus) сэмплирование
Мультиномиальное сэмплирование

Мультиномиальное сэмплирование выбирает следующий токен на основе распределения вероятностей предсказаний модели. Каждому токену соответствует определённая вероятность, и токен выбирается на основе этих вероятностей.

Image represents a bar chart illustrating the probability distribution of choosing different auxiliary verbs ('are,' 'is,' 'do,' 'should,' 'hard') to complete a sentence fragment, likely within a natural language processing context.  The horizontal axis displays the auxiliary verbs, with their corresponding probabilities shown as bar heights.  'are' has the highest probability (37%), followed by 'is' (21%), 'do' (12%), 'should' (4%), 'hard' (2%), and '0.13%' representing progressively lower probabilities, indicated by an ellipsis suggesting further, less likely options.  Two dashed arrows highlight the most probable choices: one points to 'are' with the text 'Choose 'are' with...', indicating its high likelihood of selection; the other points to 'hard' with the text 'Choose 'hard' with 2...', suggesting a less likely but still considered option. The bottom annotation,  `$P(w I \text{'How'})$`, likely represents a conditional probability formula, indicating the probability of choosing a word *w* given the context 'How'.
Рисунок 24: Мультиномиальное сэмплирование

Этот подход обеспечивает широкое разнообразие возможных выходов. Однако он вносит значительную долю случайности, особенно когда распределение вероятностей плоское. Эта случайность часто приводит к несвязным результатам генерации. Например, сгенерированный текст, показанный на Рисунке 25, является выходом модели GPT-2 при использовании мультиномиального сэмплирования.

Image represents a simple generative model architecture.  At the bottom is a rectangular box labeled 'Model,' representing a language model.  Above it, the text 'Multinomial samp...' indicates that the model uses multinomial sampling to generate text. A vertical arrow connects the 'Model' box to a large rectangular box at the top containing the text 'I enjoy walking with my cute dog for the rest of t...', which represents the generated text output. The arrow points upwards, showing the flow of information from the model to the generated text.  The ellipsis ('...') suggests that the generated text is truncated and continues beyond what's shown.  The overall diagram illustrates a basic text generation process where the model produces text through multinomial sampling.
Рисунок 25: Вывод GPT-2 при использовании мультиномиального сэмплирования

Из-за проблем со связностью мультиномиальное сэмплирование редко используется в LLM для генерации текста.

Top-k сэмплирование

Top-k сэмплирование [30] — это более продвинутый метод, который выбирает из k наиболее вероятных токенов, а не из всего распределения.

Image represents a bar chart illustrating the probability distribution of different words given the context 'How'.  The horizontal axis displays a series of words: 'are,' 'is,' 'do,' 'should,' 'hard,' and an ellipsis indicating further words. The vertical axis represents probability, ranging from 0.0 to 1.0.  The height of each bar corresponds to the probability of that word following 'How'.  The bars are ordered from highest to lowest probability: 'are' (37%), 'is' (21%), 'do' (12%), 'should' (4%), 'hard' (2%), and '0.13%' representing a much lower probability. A dashed line encloses the three highest-probability words ('are,' 'is,' and 'do'). A curved dashed arrow extends from this enclosed area to the right, pointing to the text 'Sample from top three...', indicating that a selection is made from these top three words.  The bottom of the image shows a mathematical formula:  `$P(w I \text{'How'})$`, which likely represents the conditional probability of word *w* given the context 'How'.
Рисунок 26: Пример top-k сэмплирования с k=3

Вот пошаговый процесс выбора следующего токена при top-k сэмплировании:

  • Модель предсказывает распределение вероятностей для следующего токена, предоставляя вероятность для каждого токена в словаре.
  • Токены сортируются в порядке убывания по предсказанным вероятностям.
  • Топ-k токенов с наивысшими вероятностями рассматриваются для сэмплирования.
  • Вероятности топ-k токенов нормализуются, чтобы их сумма равнялась 1.
  • Токен выбирается из этого нормализованного распределения.
Image represents a simple generative model architecture.  At the bottom is a rectangular box labeled 'Model,' representing a language model or similar generative AI.  Above this box, a vertical arrow points upwards, labeled 'Top-k sampling (k=50),' indicating that the model's output is processed using this sampling technique, where only the top 50 most probable next words are considered.  At the very top is a rectangular box containing the text 'I enjoy walking with my cute dog for the rest of...', representing an input prompt or a partial text sequence fed into the 'Model.' The arrow indicates that the output of the 'Model' after Top-k sampling is the continuation of the input text.  The value 'k=50' specifies that the Top-k sampling algorithm considers only the 50 most likely word candidates at each step of text generation.
Рисунок 27: Вывод GPT-2 при top-k сэмплировании с k=50

Top-k сэмплирование балансирует между связностью и разнообразием, выбирая из топ-k токенов. Это снижает вероятность выбора нерелевантных токенов, при этом допуская некоторую случайность. GPT-2 изначально использовал top-k сэмплирование, что было ключевым для его успеха и популярности.

Главным ограничением top-k сэмплирования является то, что оно всегда выбирает из фиксированного количества топ-токенов. Это проблематично в зависимости от того, как распределены предсказанные вероятности. Давайте разберёмся почему.

Предсказанные вероятности токенов могут быть распределены остро или равномерно. При остром распределении ограничение выбора фиксированным числом топ-токенов может привести к бессмысленным результатам, поскольку модель может пропустить лучший выбор. Напротив, при плоском распределении это фиксированное ограничение сдерживает креативность модели, не рассматривая достаточно вариантов слов. Например, как показано на Рисунке 28, модель на 89% уверена, что следующим токеном должно быть «lot», но top-k сэмплирование по-прежнему рассматривает «much» и «high» как возможные следующие токены для выборки.

Image represents a bar chart illustrating the probability distribution of a word (or n-gram) within a corpus, specifically focusing on the top three most frequent words. The horizontal axis displays different words: 'lot,' 'much,' 'high,' 'where,' 'this,' and an ellipsis indicating further words with lower probabilities. The vertical axis represents probability, ranging from 0.0 to 1.0.  The chart shows a tall bar for 'lot' representing 89% probability, followed by progressively shorter bars for 'much' (4%), 'high' (3%), 'where' (2%), 'this' (1%), and '0.13%' for the last visible word. A dashed line encloses the bars representing the top three most frequent words ('lot,' 'much,' 'high'). A curved dashed arrow extends from this enclosed area to the right, pointing to the text 'Sample from top three mos...', indicating that the enclosed area represents a sample from the top three most frequent words.  Below the chart, the formula '$P(w I \text{'Thanks a'})$' suggests the probability of word *w* given the preceding words 'Thanks a'.
Рисунок 28: Top-k сэмплирование при остром распределении

Это ограничение решается в top-p сэмплировании, которое мы рассмотрим далее.

Top-p (nucleus) сэмплирование

Top-p сэмплирование [31], также известное как nucleus сэмплирование, было разработано в 2019 году. Этот метод динамически регулирует количество рассматриваемых токенов на основе их совокупных вероятностей. Вместо выборки только из наиболее вероятных k токенов, он выбирает из наименьшего возможного набора токенов, совокупная вероятность которых превышает порог p. Это обеспечивает более гибкий и адаптивный подход по сравнению с top-k сэмплированием.

Image represents two bar charts illustrating the concept of top-p sampling in a language model.  Each chart displays the probability distribution of the next word given a preceding text prompt. The left chart shows the probability distribution for the prompt 'Thanks a...', with 'lot' having the highest probability (89%), followed by 'much' (4%), 'high' (3%), 'where' (2%), 'this' (1%), and others with probabilities less than 1%.  A dashed line encloses the bars representing the top-p selection, indicating that the model would likely select from these words based on their cumulative probability.  The right chart shows the probability distribution for the prompt 'How', with 'are' (31%), 'is' (29%), 'do' (24%), 'come' (7%), 'confident' (4%), and others having lower probabilities.  Similarly, a dashed line encloses the top-p selection, suggesting the model would choose from these words.  Both charts have a y-axis ranging from 0.0 to 1.0 representing probability, and an x-axis showing the potential next words and their associated probabilities.  The text '$P(w I \text{'Thanks a'...}$ and '$P(w I \text{'How'})$' below each chart indicates the conditional probability calculation being visualized, where 'P' represents probability, 'w' represents the next word, and 'I' represents the given text prompt.  Curved dashed arrows labeled 'Top-p sampling...' point from the dashed selection boxes to the right, indicating the sampling process.
Рисунок 29: Top-p сэмплирование адаптивно выбирает токены на основе распределения вероятностей

Вот пошаговый процесс выбора следующего токена при top-p сэмплировании:

  • Модель предсказывает распределение вероятностей для следующего токена, предоставляя вероятность для каждого токена в словаре.
  • Токены сортируются в порядке убывания по предсказанным вероятностям.
  • Вместо выбора фиксированного количества токенов top-p сэмплирование выбирает наименьший возможный набор токенов, совокупная вероятность которых превышает порог p.
  • Вероятности выбранных токенов нормализуются, чтобы их сумма равнялась 1.
  • Токен выбирается из этого нормализованного распределения.
Image represents a simple generative model architecture.  At the bottom is a rectangular box labeled 'Model,' representing a language model.  An upward-pointing arrow connects this box to a text label above it reading 'Top-p sampling (p=0.92),' indicating that the model's output is processed using top-p sampling with a probability threshold of 0.92. This sampling method selects the most probable words whose cumulative probability exceeds 0.92.  Finally, an upward-pointing arrow connects the sampling method to a rectangular box at the top containing the text 'I enjoy walking with my cute dog for the rest of...', which represents the generated text output of the model after the top-p sampling.  The overall diagram illustrates the flow of information from the model, through the top-p sampling process, to the final generated text.
Рисунок 30: Вывод GPT-2 при top-p сэмплировании с p=0.92

Top-p сэмплирование широко используется в продвинутых LLM для генерации текста, похожего на человеческий. Этот метод обеспечивает связность и контекстуальную релевантность текста, фокусируясь на наиболее вероятных токенах, допуская при этом некоторую случайность.

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

  • Температура
  • Штраф за повторение
Температура

Температура — это параметр в методах сэмплирования, который контролирует случайность предсказаний во время сэмплирования. Математически параметр температуры T масштабирует логиты (необработанные оценки) выхода модели перед применением функции softmax для генерации вероятностей. Скорректированная формула softmax с температурой задаётся как:

где:

  • xix_ixi​ — логиты (необработанные оценки) для каждого возможного выхода
  • TTT — параметр температуры
  • pip_ipi​ представляет вероятность выхода iii после применения функции softmax

При T=1T=1T=1 функция softmax работает нормально. При T>1T>1T>1 модель генерирует более равномерное распределение вероятностей, делая предсказания более случайными и разнообразными. Более высокие температуры увеличивают случайность, что помогает модели генерировать более креативные выходы. Если модель начинает отклоняться от темы или создавать бессмысленные выходы, это указывает на то, что температура установлена слишком высоко.

Напротив, при T<1T<1T<1 выход модели становится более детерминированным, при этом наивысшие значения логитов оказывают большее влияние на финальное предсказание. Более низкие температуры снижают случайность, что более подходит для задач, требующих точных ответов, таких как суммаризация или перевод. Если модель начинает повторяться, это указывает на то, что температура установлена слишком низко. Температура 0 стабильно приводит к одному и тому же выходу, делая сэмплирование детерминированным.

Image represents a comparative visualization of histograms, each depicting a probability distribution.  Four separate histograms are presented, arranged horizontally. Each histogram is enclosed within a dashed-line box.  The x-axis of each histogram is implicitly defined and represents a range of values (not explicitly labeled), while the y-axis (also implicitly defined) represents the frequency or probability of those values. The histograms differ in their distributions, showing varying degrees of concentration and spread.  Each histogram is labeled at the bottom with 'Temperature = [value]', where the value is 0.0, 0.5, 2, and 5 respectively, indicating that the histograms likely represent probability distributions at different temperature settings. The height of the bars in each histogram corresponds to the probability or frequency of the values within the corresponding bin.  The overall image suggests an analysis of how a probability distribution changes with varying temperature parameters.
Рисунок 31: Различные значения температуры, применённые к одним и тем же логитам
Каковы типичные значения температуры?

Большинство провайдеров моделей устанавливают допустимый диапазон температуры от 0 до 2. Рисунок 32 иллюстрирует справочник API OpenAI по настройке температуры.

Image represents a rectangular box with a light gray border containing only the text 'temperature...' centrally aligned.  No other components, connections, or information flows are depicted within the box.  Below the box, a small caption reads 'Text is not SVG - cannot display,' indicating that the image is a placeholder or a failed attempt to render a more complex diagram, likely an SVG (Scalable Vector Graphics) file, which would have contained visual elements beyond simple text.  The overall impression is that the image is incomplete or a representation of missing data related to 'temperature.'
Рисунок 32: Документация OpenAI по температуре [32]

В современных LLM параметр температуры обычно варьируется от 0.1 до 1.5. При значениях выше 1.5 выходы могут становиться всё более хаотичными и менее связными, что нежелательно. Оптимальное значение зависит от желаемого поведения и часто определяется эмпирически. Следующая таблица, созданная [33], предлагает возможные значения температуры для нескольких вариантов использования.

Use caseTemperatureTop-pDescription
Code generation0.20.1Generates code that adheres to established patterns and conventions. Output is more deterministic and focused. Useful for generating syntactically correct code.
Creative writing0.70.8Generates creative and diverse text for storytelling. Output is more exploratory and less constrained by patterns.
Chatbot responses0.50.5Generates conversational responses that balance coherence and diversity. Output is more natural and engaging.

Таблица 5: Эмпирические диапазоны температуры и top-p для различных задач

Штраф за повторение

Аналогично, применение штрафа за повторение может явно снизить вероятность генерации повторяющихся последовательностей токенов. Это может быть достигнуто путём завершения генерации при обнаружении повторяющихся n-грамм (как контролируется параметром «no_repeat_ngram_size» в моделях Hugging Face) или путём прямого изменения вероятностей токенов, которые уже были выбраны ранее в последовательности (как параметр «frequency_penalty» в API ChatGPT).

Если вы хотите узнать больше о методах сэмплирования в LLM, обратитесь к [30].

Оценка

Офлайн-метрики оценки

Оценка LLM, таких как ChatGPT, требует большего, чем традиционные метрики, такие как перплексия. Эти модели ведут себя сложным образом и показывают различную производительность на разных задачах. Поэтому нам необходимо оценить их навыки в различных задачах, чтобы убедиться, что модель одновременно эффективна и безопасна.

В этом разделе мы оцениваем нашу LLM со следующих перспектив:

  • Традиционная оценка
  • Оценка по конкретным задачам
  • Оценка безопасности
  • Оценка людьми

Традиционная оценка

Традиционная оценка обеспечивает начальное понимание производительности LLM с использованием типичных офлайн-метрик. Распространённая метрика — перплексия, которая измеряет, насколько точно модель предсказывает точную последовательность токенов в обучающих данных. Низкое значение перплексии указывает, что модель в среднем присваивает более высокие вероятности токенам в обучающих данных.

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

Оценка по конкретным задачам

Для эффективной оценки LLM необходимо оценить её производительность на разнообразных задачах, таких как математика, генерация кода и рассуждение на основе здравого смысла. Этот комплексный подход помогает выявить сильные и слабые стороны модели. Часто используемые задачи для оценки возможностей LLM:

  • Рассуждение на основе здравого смысла
  • Знания о мире
  • Понимание прочитанного
  • Математическое рассуждение
  • Генерация кода
  • Комплексные бенчмарки
Рассуждение на основе здравого смысла

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

Image represents a simple block diagram illustrating a basic input-output system, likely related to a generative AI model.  The diagram is enclosed within a dashed rectangular border.  The main body is divided into two sections by a vertical line. The left section, labeled 'Prompt...', represents the input area where a user would provide a prompt or query to the system. The right section, labeled 'Answer...', represents the output area where the system's response or generated content would be displayed. A single horizontal line connects the 'Prompt...' and 'Answer...' sections, indicating the flow of information from input to output.  The text 'Text is not SVG - cannot display' at the bottom indicates that the image itself is a placeholder and not a functional representation of a system.
Рисунок 33: Пример рассуждения на основе здравого смысла

Типичные бенчмарки для рассуждения на основе здравого смысла — PIQA (Physical Interaction QA) [34], SIQA [35], HellaSwag [36], WinoGrande [37], OpenBookQA [38] и CommonsenseQA [39], каждый из которых фокусируется на различных аспектах. Например, бенчмарк CommonsenseQA — это набор данных с вопросами с множественным выбором, для ответа на которые требуются знания здравого смысла. PIQA фокусируется на рассуждениях о физических взаимодействиях в повседневных ситуациях, а HellaSwag — на повседневных событиях.

Знания о мире

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

Image represents a simple system diagram depicting a basic input-output process.  The diagram is enclosed within a dashed rectangular border.  The interior is divided into two sections by a vertical line. The left section, labeled 'Prompt...', represents the input to the system. A horizontal line connects the 'Prompt...' section to the right section, indicating the flow of information. The right section, labeled 'Answer...', represents the output generated by the system in response to the input.  No internal components or processes are shown within the system; only the input and output are explicitly represented. The text 'Text is not SVG - cannot display' is present at the bottom, indicating that the image is a placeholder and lacks detailed internal representation.
Рисунок 34: Пример знаний о мире

Распространённые бенчмарки для этой задачи включают:

  • TriviaQA [40]: Вопросы собраны с сайтов викторин и квиз-лиг.
  • Natural Questions (NQ) [41]: Набор данных от Google, включающий вопросы и ответы, найденные в естественных веб-запросах.
  • SQuAD (Stanford Question Answering Dataset) [42]: Содержит вопросы на основе статей Wikipedia.
Понимание прочитанного

Задачи на понимание прочитанного оценивают способность модели понимать и интерпретировать текстовые отрывки и отвечать на вопросы по ним. Это критически важно для оценки способности модели извлекать информацию из текстов и рассуждать на их основе.

Image represents a simple diagram illustrating a basic input-output system, likely related to a large language model (LLM) or similar generative AI.  The diagram is enclosed within a dashed rectangular border.  This border is divided into two equal sections by a vertical line. The left section is labeled 'Prompt...' indicating the input area where a user would provide a text prompt or query. The right section is labeled 'Answer...', representing the output area where the system would generate a response. A single horizontal line connects the top of both sections, suggesting a unified system.  No explicit connections or data flow arrows are shown, implying a direct, implicit relationship between the prompt input and the answer output. The text 'Text is not SVG - cannot display' at the bottom indicates that the image is a static representation and not an interactive SVG.
Рисунок 35: Пример понимания прочитанного из SQuAD

Типичные бенчмарки для понимания прочитанного — SQuAD [42], QuAC [43] и BoolQ [44].

Математическое рассуждение

Задачи на математическое рассуждение оценивают способность модели решать математические задачи.

Image represents a simple block diagram illustrating a basic input-output system, likely depicting a generative AI model.  The diagram is enclosed within a dashed-line rectangle.  The rectangle is horizontally divided into two sections by a solid line. The left section, labeled 'Prompt...', represents the input to the system, where a user would provide a text prompt or query. The right section, labeled 'Answer...', represents the output of the system, where the AI's generated response would appear.  A vertical line separates the input and output sections, visually suggesting a processing step occurring between them, although no internal components or processes are explicitly shown.  The information flow is unidirectional, from the 'Prompt...' input to the 'Answer...' output.  The overall simplicity suggests a high-level overview of the system, focusing solely on the input and output without detailing the internal workings of the AI model.
Рисунок 36: Пример математического рассуждения из GSM8K [45]

Два распространённых бенчмарка для задач математического рассуждения:

  • MATH [46]: Набор данных, содержащий задачи из школьных математических олимпиад.
  • GSM8K (Grade School Math 8K) [45]: Набор данных с математическими задачами начальной школы для проверки навыков решения задач моделью.
Генерация кода

Генерация кода оценивает способность модели писать синтаксически корректный и функциональный код на основе промпта на естественном языке.

Image represents a simple diagram illustrating a prompt-response interaction, likely within a code generation or large language model context.  The diagram is divided into two main rectangular sections by a vertical line. The left section, labeled 'Prompt...', is a blank space representing the input prompt given to the system. The right section, labeled 'Answer', contains the text 'def is_prime(n):...', indicating the system's response, which appears to be the beginning of a Python function definition for checking if a number is prime.  The two sections are separated by a horizontal line, suggesting a clear input-output relationship. The entire diagram is enclosed within a dashed-line rectangle, further emphasizing the system's boundaries.  No explicit data flow arrows are shown, but the implied flow is from the 'Prompt...' section to the 'Answer' section, representing the processing of the input prompt to generate the output response.
Рисунок 37: Пример генерации кода из HumanEval

Распространённые бенчмарки для генерации кода:

  • HumanEval [47]: Задачи по программированию на Python.
  • MBPP (MultiPL-E Benchmarks for Programming Problems) [48]: Задачи на нескольких языках программирования для оценки возможностей мультиязычной генерации кода.
Комплексные бенчмарки

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

  • MMLU (Massive Multitask Language Understanding) [49]: Состоит из вопросов с множественным выбором из широкого спектра предметов, включая гуманитарные науки, STEM, социальные науки и другие, с различными уровнями сложности.
  • MMMU (Massive Multilingual Multitask Understanding) [50]: MMMU включает широкий спектр вопросов с множественным выбором, охватывающих множество предметов с различными уровнями сложности. В отличие от MMLU, который фокусируется на английском, MMMU тестирует способность моделей понимать и генерировать точные ответы на разных языках, оценивая не только мультиязычные возможности, но и способность к рассуждению и межкультурные знания.
  • AGIEval [51]: Комплексный бенчмарк, предназначенный для тестирования искусственного общего интеллекта в нескольких областях и задачах.
  • Meta Llama 3 human evaluation [13]: Высококачественный набор человеческой оценки, содержащий 1800 промптов, охватывающих 12 ключевых вариантов использования: запрос совета, мозговой штурм, классификация, закрытые вопросы, программирование, творческое письмо, извлечение информации, перевоплощение в персонажа, открытые вопросы, рассуждение, переформулирование и суммаризация.

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

Оценка безопасности

Оценки безопасности LLM критически важны для обеспечения того, чтобы эти модели генерировали безопасные и этичные ответы. Эти оценки фокусируются на различных задачах, которые помогают выявить и смягчить риски, такие как генерация вредоносного контента. Основные аспекты оценки безопасности включают:

  • Токсичность и вредоносный контент
  • Предвзятость и справедливость
  • Достоверность
  • Конфиденциальность пользователей и утечка данных
  • Устойчивость к состязательным атакам
Токсичность и вредоносный контент

Мы оцениваем способность модели избегать генерации токсичного контента. Токсичность включает:

  • Язык ненависти
  • Оскорбительный язык
  • Контент, который может нанести вред отдельным лицам, группам или обществу
  • Контент, полезный для планирования нападений или насилия
  • Инструкции для поиска нелегального контента
Image represents a simple, high-level diagram illustrating a basic input-output system, possibly related to a large language model or similar generative AI.  The diagram is divided into two equal rectangular boxes by a horizontal and a vertical line, creating four quadrants.  The top-left quadrant contains the label 'Prompt...' indicating an input area where a user would provide a prompt or query. The bottom-right quadrant is labeled 'Answer...', representing the output area where the system's response or generated content would appear.  A horizontal line connects the 'Prompt...' and 'Answer...' labels, visually representing the flow of information from input to output. The dashed lines around the entire diagram suggest a system boundary.  No other components, connections, or data flow details beyond this basic input-output relationship are depicted.
Рисунок 38: Ожидаемый ответ модели на токсичные промпты

Часто используемые бенчмарки для оценки токсичности модели:

  • RealToxicityPrompts [52]: Состоит из примерно 100 000 промптов, которые модель должна дополнить; затем оценка токсичности автоматически вычисляется с помощью PerspectiveAPI [53].
  • ToxiGen [54]: Этот бенчмарк тестирует способность модели избегать генерации дискриминационного языка.
  • HateCheck [55]: Набор тестов, специально предназначенных для обнаружения языка ненависти, охватывающий различные типы языка ненависти.

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

Предвзятость и справедливость

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

Типичные бенчмарки:

  • CrowS-Pairs [56]: Содержит парные предложения, отличающиеся только одним атрибутом (например, полом) для тестирования предвзятости. Этот набор данных позволяет измерять предвзятости в 9 категориях: пол, религия, раса/цвет кожи, сексуальная ориентация, возраст, национальность, инвалидность, физическая внешность и социоэкономический статус.
  • BBQ [57]: Набор данных из вручную написанных вопросов, нацеленных на подтверждённые социальные предвзятости в отношении различных социально значимых категорий.
  • BOLD [58]: Крупномасштабный набор данных, состоящий из 23 679 промптов для генерации текста на английском языке для бенчмаркинга предвзятости в пяти областях.

Эти бенчмарки помогают нам убедиться, что модель относится ко всем демографическим группам справедливо и одинаково.

Достоверность

Мы оцениваем способность LLM генерировать правдивые и фактически точные ответы. Это включает различение фактической информации и распространённых заблуждений или ложных утверждений.

Image represents a simple diagram illustrating a basic input-output model, likely for a generative AI system.  The diagram is divided into two equal-sized rectangular boxes by a horizontal line, further subdivided into two equal-sized boxes by a vertical line. The top-left box is labeled 'Prompt...', indicating it's where user input or prompts are entered. The bottom-left box is empty, implying it's where the processed prompt would be stored or displayed.  The top-right box is empty, suggesting it's a placeholder for internal processing steps. The bottom-right box is labeled 'Answer...', indicating it's where the AI's generated response or output is displayed.  The boxes are outlined with dashed lines, suggesting a conceptual representation rather than a detailed architectural diagram.  There are no explicit connections shown between the boxes, implying a simplified representation of the data flow from prompt to answer.  The text 'Text is not SVG...cannot display' at the bottom indicates a limitation in displaying the image's content.
Рисунок 39: Пример достоверности из TruthfulQA

Распространённый бенчмарк для оценки достоверности — TruthfulQA [59]. Он измеряет правдивость модели, то есть её способность определять, когда утверждение истинно. Этот бенчмарк позволяет оценить риски генерации моделью дезинформации или ложных утверждений.

Конфиденциальность пользователей и утечка данных

Мы оцениваем склонность LLM к утечке конфиденциальной информации, с которой она могла столкнуться во время обучения. Поскольку LLM обучаются на различных общедоступных источниках данных, они могут знать о людях, имеющих публичное присутствие в интернете. Эти оценки гарантируют, что LLM не раскрывают случайно персональную информацию. Распространённый бенчмарк для этой цели — PrivacyQA [60].

Устойчивость к состязательным атакам

Устойчивость к состязательным атакам тестирует способность LLM обрабатывать входные данные, намеренно созданные для того, чтобы запутать или обмануть модель. Это критически важно для обеспечения надёжности и безопасности модели на практике. Типичные бенчмарки для тестирования устойчивости LLM к состязательным атакам включают AdvGLUE [61], TextFooler [62] и AdvBench [63].

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

Оценка людьми

В этом подходе людям-оценщикам предлагается оценить различные аспекты LLM, такие как полезность и безопасность. Оценка людьми критически важна для оценки нюансированных аспектов полезности и безопасности, которые бенчмарки по конкретным задачам и безопасности могут упустить.

Онлайн-метрики оценки

Онлайн-метрики оценки измеряют производительность LLM при развёртывании в продакшене. Часто используемые метрики:

  • Обратная связь и оценки пользователей
  • Вовлечённость пользователей
  • Коэффициент конверсии
  • Онлайн-рейтинги

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

Image represents a simple system illustrating user interaction with a question-answering system.  The system displays a question, 'Where is the capital of Franc...', within a rounded rectangle.  To the left, another rounded rectangle contains the answer, 'Paris.'. A dashed arrow originates near the 'Paris' answer, curves downwards, and points to the text 'User feedback' indicating that the answer 'Paris' is considered user feedback to the system.  The overall structure suggests a feedback loop where the system provides an answer ('Paris') and this answer is then used as feedback to improve the system's performance or understanding.  No URLs or parameters are visible.
Рисунок 40: Сбор обратной связи пользователей

Вовлечённость пользователей: Метрики, такие как «количество выполненных запросов» и «продолжительность сессии», могут быть показательными сигналами для измерения вовлечённости пользователей. Высокий уровень вовлечённости часто указывает на то, что LLM эффективно предоставляет полезную информацию.

Коэффициент конверсии: Коэффициент конверсии — это процент пользователей, которые совершают покупку или подписываются на сервис после взаимодействия с LLM. Коэффициент конверсии — важная метрика для мониторинга, поскольку более высокие коэффициенты указывают на то, что пользователи находят LLM достаточно полезной, чтобы платить за сервис.

Онлайн-рейтинги: Онлайн-рейтинги отслеживают производительность различных LLM в режиме реального времени. Заметным примером является LMSYS Chatbot Arena [64] — краудсорсинговая открытая платформа, предназначенная для оценки LLM. Модели ранжируются на основе более чем 800 000 парных сравнений людьми.

Image represents a leaderboard ranking different large language models (LLMs).  The table is organized into columns representing:  'Rank (UB)' indicating the model's position, 'Model' listing the name and version of each LLM (e.g., `o1-preview`, `ChatGPT-40-latest (2024-09-03)`, `Gemini-1.5-Pro-Exp-0827`), 'Arena Score' providing a numerical score for each model's performance, '95% CI' showing the 95% confidence interval around the Arena Score (e.g., '+6/-7'), 'Votes' indicating the number of votes contributing to the score, and 'Organization' specifying the developer of each LLM (e.g., OpenAI, Google, xAI, Anthropic).  The rows represent individual LLMs, ordered by their Arena Score in descending order.  No explicit information flow is depicted; the table simply presents comparative performance data for various LLMs.
Рисунок 41: Рейтинг Chatbot Arena

Общий дизайн ML-системы

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

  • Пайплайн обучения
  • Пайплайн инференса

Пайплайн обучения

Пайплайн обучения включает три критических этапа: pre-training, SFT и RLHF. Эти этапы в совокупности обеспечивают способность модели генерировать полезные и безопасные ответы.

Пайплайн инференса

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

  • Фильтрация безопасности
  • Улучшение промпта
  • Генератор ответов
  • Оценщик безопасности ответов
  • Генератор ответов отклонения
  • Управление сессиями
Image represents a flowchart depicting the process of generating a response from a language model.  The process begins with a 'Text prompt' which is fed into a 'Safety Filt...' block.  A diamond-shaped decision node labeled 'Safe?' determines if the prompt is safe; if yes, the prompt proceeds to a 'Prompt...' block, otherwise, a 'Rejection Response...' is generated.  The 'Prompt...' block feeds into a 'Response...' block, which utilizes 'Top-p sampling' and interacts with a 'Trained...' (presumably the language model) cloud component.  The 'Response...' output is then checked for safety in another 'Safe...' decision node. If safe, a 'Generated response' is output; otherwise, the process returns to the 'Rejection Response...'.  The entire process is managed by a 'Session Management' block, which receives the final generated response and likely handles session-related data.  The connections between blocks are represented by arrows indicating the flow of information.
Рисунок 42: Общий дизайн чатбота

Давайте подробнее рассмотрим каждый компонент.

Фильтрация безопасности

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

Улучшение промпта

Компонент улучшения промпта уточняет и обогащает входной промпт, делая его более информативным и детальным. Он расшифровывает аббревиатуры, исправляет опечатки и добавляет контекст при необходимости.

Image represents a simple data flow diagram illustrating a prompt enhancement process.  The diagram shows an initial prompt, 'Tell me about NYC.', as input. This prompt flows rightward via a black arrow into a rectangular box labeled 'Prompt Enhancer,' which is light purple with a darker purple border.  The 'Prompt Enhancer' box represents a process that modifies or improves the input prompt.  From the 'Prompt Enhancer' box, another black arrow points rightward to the output, which is a more detailed and enhanced prompt: 'Tell me about New York City (NYC), h...'.  The ellipsis ('...') suggests that the output prompt is longer than what's fully displayed, implying the 'Prompt Enhancer' added information such as context or keywords.  The overall flow demonstrates a transformation of a concise prompt into a more comprehensive one suitable for a downstream process (not shown).
Рисунок 43: Пример улучшения промпта

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

Генератор ответов

Генератор ответов взаимодействует с обученной LLM и использует top-p сэмплирование для генерации полезного ответа. Этот компонент может дополнительно использовать другие техники для улучшения качества и безопасности сгенерированного ответа. Например, он может генерировать несколько возможных ответов и затем выбирать наиболее подходящий на основе набора предопределённых критериев.

Оценщик безопасности ответов

Этот компонент оценивает сгенерированный ответ для обнаружения вредоносного или неуместного контента до его показа пользователю. Он действует как финальная защита для обеспечения соответствия ответов этическим стандартам и стандартам безопасности.

Генератор ответов отклонения

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

Управление сессиями

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

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

Другие темы для обсуждения

Если в конце собеседования останется дополнительное время, вот несколько дополнительных тем для обсуждения:

  • Техники управления состояниями диалога и отслеживания контекста в многооборотных диалогах [65].
  • Применение продвинутых или более эффективных целевых функций ML, таких как предсказание нескольких токенов [66].
  • Обработка очень длинных последовательностей [67][68].
  • Как разрабатывать мультимодальные LLM [69][70].
  • Техники, такие как RAG, для использования внешних баз знаний и баз данных для улучшения вывода LLM [71]. Мы рассмотрим это в Главе 6.
  • Техники повышения эффективности (например, дистилляция) для более быстрой генерации текста.
  • Техники адаптации LLM к конкретным областям (например, обслуживание клиентов, здравоохранение) без потери предыдущих знаний [72].
  • Решение проблем безопасности и конфиденциальности в LLM.
  • Различные алгоритмы оптимизации, такие как PPO, DPO и rejection sampling [73].
  • Red-teaming LLM для снижения вреда [74].
  • Super-alignment и его важность в разработке LLM [75].
  • Как работает обучение в контексте (in-context learning) [76].
  • Grouped query attention и его преимущества [77].
  • Применение техник chain-of-thought промптинга [78]. Мы рассмотрим это в Главе 6.
  • Реализация KV cache [79].
  • Повышение доверия путём требования от моделей создавать ясные и проверяемые обоснования своих выходов [80].

Резюме

Image represents a mind map summarizing the design of a generative AI system.  The central node is labeled 'Summary,' branching out into several main categories.  These include 'Caching mechanisms,' detailing aspects like specification (input and output), ML upscaling, and Docker/clip; 'Jobs processing,' encompassing web-crawling, URL and language identification, content quality filtering, inappropriate content removal, and data quality assurance; 'Architecture,' focusing on positional encoding, Transformer architecture, and prediction tasks; 'Training,' covering data generation, instruction data, vector prediction, training a large model, calibration, and sampling methods (deterministic, beam search, MCMC, top-k, top-p, temperature); 'Traditional metrics,' encompassing common-sense reasoning, world knowledge, reading comprehension, and code generation benchmarks; 'CI/CD,' including compilable benchmarks, triviality level validation, traffic noise, and data leakage/privacy issues; and 'Human evaluation,' covering user feedback, user comparisons, online leaderboards, and training updates.  Finally, a 'System components' branch details overall system components and other traffic mechanisms, while a 'Solicitor to' branch describes prompt parameters, response parameters, and response quality evaluation.  Each branch further subdivides into more specific sub-topics, creating a hierarchical structure illustrating the various components and their interrelationships within the generative AI system.

Справочные материалы

[1] OpenAI’s ChatGPT. https://openai.com/index/chatgpt/. [2] ChatGPT wiki. https://en.wikipedia.org/wiki/ChatGPT. [3] OpenAI’s models. https://platform.openai.com/docs/models. [4] Google’s Gemini. https://gemini.google.com/. [5] Meta’s Llama. https://llama.meta.com/. [6] Beautiful Soup. https://beautiful-soup-4.readthedocs.io/en/latest/. [7] Lxml. https://lxml.de/. [8] Document Object Model. https://en.wikipedia.org/wiki/Document_Object_Model. [9] Boilerplate removal tool. https://github.com/miso-belica/jusText. [10] fastText. https://fasttext.cc/. [11] langid. https://github.com/saffsd/langid.py. [12] RoFormer: Enhanced Transformer with Rotary Position Embedding. https://arxiv.org/abs/2104.09864. [13] Llama 3 human evaluation. https://github.com/meta-llama/llama3/blob/main/eval_details.md. [14] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. https://arxiv.org/abs/1910.10683. [15] DeBERTa: Decoding-enhanced BERT with Disentangled Attention. https://arxiv.org/abs/2006.03654. [16] Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention. https://arxiv.org/abs/2006.16236. [17] Common Crawl. https://commoncrawl.org/. [18] C4 dataset. https://www.tensorflow.org/datasets/catalog/c4. [19] Stack Exchange dataset. https://github.com/EleutherAI/stackexchange-dataset. [20] Training language models to follow instructions with human feedback. https://arxiv.org/abs/2203.02155. [21] Alpaca. https://crfm.stanford.edu/2023/03/13/alpaca.html. [22] Dolly-15K. https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm. [23] Introducing FLAN: More generalizable Language Models with Instruction Fine-Tuning. https://research.google/blog/introducing-flan-more-generalizable-language-models-with-instruction-fine-tuning/. [24] Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback. https://arxiv.org/abs/2204.05862. [25] Proximal Policy Optimization Algorithms. https://arxiv.org/abs/1707.06347. [26] Direct Preference Optimization: Your Language Model is Secretly a Reward Model. https://arxiv.org/abs/2305.18290. [27] Illustrating RLHF. https://huggingface.co/blog/rlhf. [28] RLHF progress and challenges. https://www.youtube.com/watch?v=hhiLw5Q_UFg. [29] State of GPT. https://www.youtube.com/watch?v=bZQun8Y4L2A. [30] Different sampling methods. https://huggingface.co/blog/how-to-generate. [31] The Curious Case of Neural Text Degeneration. https://arxiv.org/abs/1904.09751. [32] OpenAI’s API reference. https://platform.openai.com/docs/api-reference/chat/create. [33] Cheat Sheet: Mastering Temperature and Top_p in ChatGPT API. https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api/172683. [34] PIQA: Reasoning about Physical Commonsense in Natural Language. https://arxiv.org/abs/1911.11641. [35] SocialIQA: Commonsense Reasoning about Social Interactions. https://arxiv.org/abs/1904.09728. [36] HellaSwag: Can a Machine Really Finish Your Sentence? https://arxiv.org/abs/1905.07830. [37] WinoGrande: An Adversarial Winograd Schema Challenge at Scale. https://arxiv.org/abs/1907.10641. [38] Can a Suit of Armor Conduct Electricity? A New Dataset for Open Book Question Answering. ​​https://arxiv.org/abs/1809.02789. [39] CommonsenseQA: A Question Answering Challenge Targeting Commonsense Knowledge. https://arxiv.org/abs/1811.00937. [40] TriviaQA: A Large Scale Dataset for Reading Comprehension and Question Answering. https://nlp.cs.washington.edu/triviaqa/. [41] The Natural Questions Dataset. https://ai.google.com/research/NaturalQuestions. [42] SQuAD: 100,000+ Questions for Machine Comprehension of Text. https://arxiv.org/abs/1606.05250. [43] QuAC dataset. https://quac.ai/. [44] BoolQ: Exploring the Surprising Difficulty of Natural Yes/No Questions. https://arxiv.org/abs/1905.10044. [45] GSM8K dataset. https://github.com/openai/grade-school-math. [46] MATH dataset. https://github.com/hendrycks/math/. [47] HumanEval dataset. https://github.com/openai/human-eval. [48] MBPP dataset. https://github.com/google-research/google-research/tree/master/mbpp. [49] Measuring Massive Multitask Language Understanding. https://arxiv.org/abs/2009.03300. [50] Measuring Massive Multilingual Multitask Language Understanding. https://huggingface.co/datasets/openai/MMMLU. [51] AGIEval: A Human-Centric Benchmark for Evaluating Foundation Models. https://arxiv.org/abs/2304.06364. [52] RealToxicityPrompts: Evaluating Neural Toxic Degeneration in Language Models. https://arxiv.org/abs/2009.11462. [53] Perspective API. https://perspectiveapi.com/. [54] ToxiGen: A Large-Scale Machine-Generated Dataset for Adversarial and Implicit Hate Speech Detection. https://arxiv.org/abs/2203.09509. [55] HateCheck: Functional Tests for Hate Speech Detection Models. https://arxiv.org/abs/2012.15606. [56] CrowS-Pairs: A Challenge Dataset for Measuring Social Biases in Masked Language Models. https://arxiv.org/abs/2010.00133. [57] BBQ: A Hand-Built Bias Benchmark for Question Answering. https://arxiv.org/abs/2110.08193. [58] BOLD: Dataset and Metrics for Measuring Biases in Open-Ended Language Generation. https://arxiv.org/abs/2101.11718. [59] TruthfulQA: Measuring How Models Mimic Human Falsehoods. https://arxiv.org/abs/2109.07958. [60] Question Answering for Privacy Policies: Combining Computational and Legal Perspectives. https://arxiv.org/abs/1911.00841. [61] AdvGLUE Benchmark. https://adversarialglue.github.io/. [62] Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment. https://arxiv.org/abs/1907.11932. [63] AdvBench. https://github.com/llm-attacks/llm-attacks. [64] Chatbot Arena leaderboard. https://lmarena.ai/leaderboard. [65] A Survey on Recent Advances in LLM-Based Multi-turn Dialogue Systems. https://arxiv.org/abs/2402.18013. [66] Better & Faster Large Language Models via Multi-token Prediction. https://arxiv.org/abs/2404.19737. [67] Gemini 1.5: Unlocking multimodal understanding across millions of tokens of context. https://arxiv.org/abs/2403.05530. [68] HyperAttention: Long-context Attention in Near-Linear Time. https://arxiv.org/abs/2310.05869. [69] MM-LLMs: Recent Advances in MultiModal Large Language Models. https://arxiv.org/abs/2401.13601. [70] Multimodality and Large Multimodal Models. https://huyenchip.com/2023/10/10/multimodal.html. [71] What is Retrieval-Augmented Generation? https://cloud.google.com/use-cases/retrieval-augmented-generation. [72] How to Customize an LLM: A Deep Dive to Tailoring an LLM for Your Business. https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/how-to-customize-an-llm-a-deep-dive-to-tailoring-an-llm-for-your/ba-p/4110204. [73] Llama 2: Open Foundation and Fine-Tuned Chat Models. https://arxiv.org/abs/2307.09288. [74] Red Teaming Language Models to Reduce Harms: Methods, Scaling Behaviors, and Lessons Learned. https://arxiv.org/abs/2209.07858. [75] Introducing superalignment. https://openai.com/index/introducing-superalignment/. [76] Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165. [77] GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. https://arxiv.org/abs/2305.13245. [78] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. https://arxiv.org/abs/2201.11903. [79] Efficiently Scaling Transformer Inference. https://arxiv.org/abs/2211.05102. [80] Prover-Verifier Games improve legibility of language model outputs. https://openai.com/index/prover-verifier-games-improve-legibility/.

Глава 5

Генерация подписей к изображениям

~19 мин чтения

Введение

Генерация подписей к изображениям — это процесс создания текста, описывающего изображение. Сгенерированный текст, также известный как подпись, должен точно отражать содержимое изображения.

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

Image represents a simple modal dialog box with a text input field and two buttons.  The dialog box is titled 'Name Your Asset:' and contains a single text input field where 'Sun over mountains.png' is pre-filled. Below the input field are two buttons labeled 'Cancel' and 'OK'. A curved arrow points from the left, labeled 'Suggested...', indicating a suggested filename has been provided to the input field.  The dialog box also includes a small 'X' in the upper right corner, suggesting a close button.  The text 'Text is not SVG - cannot display' is present at the bottom, indicating a technical limitation in rendering the image.
Рисунок 1: Система генерации подписей предлагает имена файлов для загруженного изображения

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

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

Уточнение требований

Вот типичный диалог между кандидатом и интервьюером:

Кандидат: Существуют различные типы изображений, включая общие повседневные изображения и предметно-специфические изображения, такие как медицинские снимки или технические диаграммы. Могу ли я сосредоточиться на общих повседневных изображениях? Интервьюер: Конечно.

Кандидат: Есть ли конкретные приложения или варианты использования, на которые мы ориентируемся с этой системой? Интервьюер: Мы ориентируемся на предложение имён дизайнерам при загрузке их ресурсов.

Кандидат: Поскольку генератор подписей будет использоваться для предложения имён ресурсам, подписи не должны быть слишком длинными и детальными. Это справедливое предположение? Интервьюер: Логично. Подписи должны быть краткими, но описательными и чёткими.

Кандидат: Должна ли система поддерживать несколько языков, или она будет ориентирована только на английский? Интервьюер: Давайте сосредоточимся только на английском.

Кандидат: Каков предполагаемый размер и разнообразие набора данных? Интервьюер: У нас есть доступ к большому набору данных с 400 миллионами пар изображение–подпись, ориентированных на повседневные изображения.

Кандидат: Состоит ли набор данных исключительно из подписей на английском? Интервьюер: Набор данных не предобработан. Там могут быть подписи на разных языках, и некоторые подписи могут быть зашумлёнными или неточными. Кроме того, подписи для некоторых изображений могут отсутствовать.

Кандидат: Требуется ли генерация подписей в реальном времени? Интервьюер: Система должна генерировать подпись быстро, хотя скорость реального времени не обязательна. Задержка в 1–2 секунды допустима.

Кандидат: Как система должна обрабатывать изображения с неоднозначным содержимым или нечётким фокусом? Интервьюер: В таких случаях система должна пропустить предложение подписи.

Кандидат: Я предполагаю, что система должна избегать генерации предвзятых подписей или подписей с оскорбительными словами. Это справедливое предположение? Интервьюер: Отличное замечание. Да, крайне важно обеспечить справедливость и безопасность нашей системы для пользователей.

Кандидат: Каковы типичные размеры изображений? Очень маленькие изображения могут быть нечёткими, что приводит к неправильным подписям. Интервьюер: Давайте предположим, что система предлагает имена только для изображений с минимальным разрешением 256 x 256 пикселей.

Формулировка задачи как ML-задачи

Определение входных и выходных данных системы

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

Image represents a simple data flow diagram illustrating an image captioning process.  The diagram begins with a square box labeled 'Input image' containing a line drawing of mountains and a sun.  A solid arrow points from this box to a rectangular, light orange box labeled 'Image Captioning...'. This second box represents the image captioning model or process.  Another solid arrow extends from the 'Image Captioning...' box to the text 'A simple drawing of mountains...', which is the output caption generated by the system. The overall flow shows the input image being processed by the image captioning system to produce a textual description of the image's content.
Рисунок 2: Вход и выход системы генерации подписей к изображениям

Выбор подходящего ML-подхода

Задача генерации подписей к изображениям представляет уникальный вызов: ML-модель требует визуального понимания для обработки входного изображения, языкового понимания для генерации подписи и способности устранить разрыв между визуальными и текстовыми модальностями. Это требует разработки мультимодальной системы.

Распространённым подходом к построению мультимодальных систем является использование фреймворка encoder-decoder. Подобно языковому переводу — где мы использовали архитектуру encoder-decoder — мы рассматриваем изображение как новый «язык» в данном контексте. Конкретно, мы используем два основных компонента, каждый из которых обрабатывает одну модальность:

  • Encoder изображений
  • Текстовый decoder

Encoder изображений

Encoder изображений отвечает за понимание визуального содержимого изображения и кодирование изображения в представление меньшей размерности.

Текстовый decoder

Текстовый decoder использует закодированную визуальную информацию от encoder'а изображений для генерации описательной подписи.

Image represents a simplified diagram of an image captioning system.  At the bottom, an 'Input image' (depicted as a simple drawing of mountains and a sun) is fed into an 'Image Encoder' (a light green rectangle). The Image Encoder processes the image and outputs 'Encoded information' (textual representation of the image's content). This encoded information is then passed to a 'Text Decoder' (a light orange rectangle), which generates a textual description of the image.  The entire process is enclosed within a dashed-line box, and a thick upward-pointing arrow indicates the final output of the Text Decoder, which is presumably the generated caption ('A simple drawing of mountains w...').  The arrows illustrate the unidirectional flow of information from the input image through the encoder and decoder to the final text output.
Рисунок 3: Компоненты системы генерации подписей к изображениям

Мы подробно рассмотрим архитектуру этих компонентов в разделе разработки модели. Важно отметить, что существуют различные подходы к решению задачи генерации подписей к изображениям. Хотя мы сосредоточимся на фреймворке encoder-decoder, альтернативные модели, такие как BLIP-2 [1], BLIP-3 [2] и InternVL [3], предлагают различные техники и архитектуры для генерации подписей. Если вас интересуют эти другие методы, вы можете обратиться к [1] [2] [3] для более широкого понимания области генерации подписей к изображениям.

Подготовка данных

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

Image represents a table with two columns: 'Image' and 'Caption'.  The table has at least three rows.  Each row in the 'Image' column is intended to hold an image, but these are not displayed due to the image format being unsupported.  The 'Caption' column provides textual descriptions for the corresponding images. The first row's caption is partially visible as 'A simple drawing of mounta...', suggesting an image of a mountain is intended. The second row's caption reads 'A minimalistic flower ic...', indicating a minimalist flower image. The third row has ellipses (...) in both columns, implying the table continues with more image-caption pairs.  There are no visible connections or information flow between the rows; each row functions independently as an image-caption pair.
Рисунок 4: Пример набора данных изображение–подпись

Набор данных состоит из 400 миллионов пар изображений и подписей. Однако не все изображения или подписи подходят для обучения. Рассмотрим подготовку данных для подписей и изображений отдельно.

Подготовка подписей

Необработанные подписи часто зашумлены и не имеют формата, пригодного для использования ML-моделью. В процессе подготовки подписей мы удаляем неподходящие подписи и обеспечиваем согласованность и токенизацию оставшихся. В частности, мы выполняем следующие шаги:

  • Удалить пары с подписями не на английском языке: Мы удаляем пары изображение–подпись, где подпись не на английском языке, поскольку эта модель будет ориентирована на английский.
  • Удалить дубликаты изображений или подписей: Для обеспечения разнообразия и качества обучающих данных мы исключаем дублирующиеся изображения и подписи. Дублирующиеся изображения выявляются с помощью методов перцептивного хеширования или моделей схожести изображений (например, CLIP image encoder), а дублирующиеся подписи обнаруживаются по точному совпадению или проверкам семантического сходства (например, CLIP text encoder). Удаление дубликатов предотвращает переобучение модели на избыточных данных и помогает ей изучить более широкий спектр связей между изображениями и текстом.
  • Удалить нерелевантные подписи: Мы используем предобученную vision–language модель (например, CLIP) для оценки релевантности между изображениями и соответствующими подписями. Более высокая оценка обычно указывает на большую семантическую релевантность между изображением и текстом. Мы удаляем пары с оценками ниже определённого порога, например 0,25. Это гарантирует, что наша модель учится на высококачественных, релевантных парах. Для получения дополнительной информации о том, как CLIP оценивает релевантность между текстом и изображениями, обратитесь к Главе 9.
  • Суммаризировать длинные подписи: Подписи часто бывают длинными и подробными. Обучение модели с такими подписями приводит к генерации аналогично длинных подписей, что не соответствует нашему варианту использования. Для решения этой проблемы мы суммаризируем подписи с помощью большой языковой модели, такой как Llama [4], для создания кратких, лаконичных описаний, отвечающих нашим требованиям.
  • Нормализовать подписи: Мы применяем стандартные методы нормализации текста, включая приведение к нижнему регистру и обрезку пробелов, для поддержания согласованности между подписями.
  • Токенизировать подписи: Мы используем алгоритм токенизации на уровне подслов, такой как Byte-Pair Encoding (BPE) [5], для токенизации подписей в последовательность идентификаторов. Для подробного обзора методов токенизации текста и алгоритма BPE обратитесь к Главе 2 и Главе 3.

Подготовка изображений

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

  • Удалить изображения с низким разрешением: Мы удаляем пары изображение–подпись, в которых разрешение изображения меньше 256×\times×256, поскольку такие изображения с низким разрешением могут не предоставлять достаточно деталей для точной генерации подписей.
  • Нормализовать изображения: Мы масштабируем значения пикселей до нормализованного диапазона, например от 0 до 1. Эта нормализация делает процесс обучения более стабильным.
  • Удалить изображения низкого качества: Для поддержания высокого качества обучающих данных мы фильтруем изображения с такими условиями, как размытость, переэкспозиция, недоэкспозиция или другие дефекты, снижающие визуальную чёткость. Методы оценки качества изображений, такие как LAION Aesthetics Predictor [6], помогают выявлять и удалять некачественные изображения, оценивая их по таким факторам, как резкость, контраст и освещение.
  • Скорректировать размеры изображений: Изображения обычно имеют разнообразные размеры и соотношения сторон. Мы приводим все изображения к единому размеру. Это критически важно, поскольку ML-модели требуют входных данных фиксированного размера во время обучения. При приведении размеров изображений к единому размеру важно сохранять их исходные соотношения сторон. Для этого мы часто следуем двум шагам:
  • Изменение размера: Сначала мы изменяем размер изображения так, чтобы меньшее измерение соответствовало целевому размеру. Например, если наш целевой размер 256×\times×256, а исходное изображение 512×\times×768, мы изменяем его размер до 256×\times×384.
  • Центральная обрезка: Затем мы выполняем центральную обрезку изображения до целевых размеров. Из нашего предыдущего примера мы обрезаем изображение 256×\times×384 до 256×\times×256.
Image represents a data processing pipeline for image preprocessing.  It begins with an 'Original image' rectangle, labeled with dimensions 512 x 768 pixels, depicted in light blue. A solid arrow points from this rectangle to a second, light blue rectangle labeled '256' on its left side and '384' on its bottom, representing the image after '1. Resizing'.  This resizing step changes the image's aspect ratio. A thick black line within this second rectangle indicates the area selected for the next step. A curved arrow then connects this selected area to a third rectangle, colored light red, labeled '256' on both its sides, representing the final image after '2. Center-cropping'. This final rectangle shows the resulting 256 x 256 pixel image obtained by cropping the center of the resized image.  The entire diagram illustrates a two-step image transformation process: resizing to a non-square aspect ratio, followed by center cropping to a square image of the specified dimensions.
Рисунок 5: Изменение размера с последующей центральной обрезкой

Этот двухэтапный метод обеспечивает сохранение соотношений сторон изображений и соответствие требуемому размеру для нашей ML-модели.

Разработка модели

Архитектура

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

Encoder изображений

Encoder изображений отвечает за обработку изображения и кодирование содержащейся в нём информации.

Выход encoder'а играет ключевую роль в определении качества и специфичности сгенерированных подписей. Выход encoder'а может быть либо одним token'ом, представляющим всё изображение как один вектор признаков, либо последовательностью token'ов, где каждый token соответствует конкретной области или аспекту изображения. Выбор между этими двумя подходами имеет существенные последствия для того, насколько эффективно система захватывает и представляет визуальное содержимое, и исследования изучили оба варианта для понимания их сильных и слабых сторон.

Image represents a comparison of single-image and multi-image encoding processes.  On the left, a single 'Input image' icon, depicting a landscape photograph, feeds into a light-green rectangular box labeled 'Image Encoder.' The encoder processes the image and outputs a vertical array of several rectangular boxes representing a feature vector.  On the right, a similar setup is shown, but multiple 'Input image' icons are fed into the 'Image Encoder.'  The encoder's output is a horizontal array of multiple vertical arrays of rectangular boxes, indicating multiple feature vectors, with an ellipsis (...) suggesting the continuation of this pattern beyond the displayed number of images.  Arrows indicate the direction of data flow, from the input image to the encoder and then to the resulting feature vector(s).  The overall comparison highlights the difference in input and output when processing a single image versus multiple images using the same image encoder.
Рисунок 6: Encoder изображений, выдающий один token против последовательности token'ов

Когда encoder выдаёт один token в качестве выхода, он эффективно сжимает всё изображение в один вектор. Этот вектор служит кратким описанием изображения, инкапсулируя его глобальные признаки и общий контекст. Основное преимущество этого подхода заключается в его простоте: архитектура остаётся прямолинейной, со сниженной вычислительной сложностью и меньшими требованиями к ресурсам. Один вектор акцентирует внимание на общем содержимом изображения, что может быть особенно полезно для генерации кратких и высокоуровневых подписей, отражающих общую суть сцены. Однако этот подход также имеет существенные недостатки. Сжатие всей визуальной информации в один вектор часто означает потерю локальных деталей и специфических нюансов, которые критически важны для генерации описательных и контекстно-богатых подписей. В результате подписи, сгенерированные из одного token'а, могут быть более обобщёнными и могут не справляться со сложными изображениями, требующими детального представления.

С другой стороны, генерация последовательности token'ов от encoder'а позволяет системе захватить более детальный вид изображения. Каждый token в последовательности соответствует отдельной части или патчу изображения, что приводит к более богатому и всестороннему представлению, включающему как глобальные, так и локальные признаки. Этот подход особенно хорошо согласуется с механизмом attention, который является краеугольным камнем современных генеративных моделей, таких как Transformer. Механизм attention лучше всего работает с последовательными входными данными, поскольку он позволяет decoder'у динамически фокусироваться на разных областях изображения во время генерации подписи. Эта способность избирательно обращать внимание на различные части изображения приводит к более точным, релевантным и детальным подписям. Используя последовательность token'ов, модель может генерировать подписи, которые не только более описательны, но и лучше соответствуют конкретным объектам, действиям и контексту, присутствующим на изображении.

Архитектуры encoder'а изображений можно разделить на следующие:

  • На основе CNN
  • На основе Transformer
На основе CNN

Сверточные нейронные сети (CNN) традиционно используются для задач кодирования изображений. CNN отлично справляются с захватом пространственных иерархий в изображениях с использованием сверточных фильтров. Эти фильтры обнаруживают паттерны, такие как края, текстуры и объекты в разных масштабах.

Encoder'ы на основе CNN обрабатывают входное изображение и выдают сетку векторов признаков. Например, как показано на Рисунке 7, входное изображение проходит через CNN, производя вектор признаков размером 3 x 3 x c. Здесь c представляет размер канала, который зависит от архитектуры CNN. В то время как CNN производит выход 3 x 3 x c, Transformer в текстовом decoder'е нуждается в последовательности признаков (т.е. 9 x c). Для этого мы используем операцию сплющивания или изменения формы, которая реорганизует признаки из каждой из девяти позиций в сетке 3 x 3 в последовательный формат.

Image represents a data processing pipeline for image embedding.  At the top, a sequence of nine embedding vectors is shown, represented as columns of cells labeled 1 through 9, with an ellipsis (...) indicating that there are more than the three explicitly shown.  Each column, labeled 'c', represents a single embedding vector with multiple elements (the cells within the column).  These embedding vectors are collectively described as a 'Sequence of embeddings'.  An arrow labeled 'flatten' points downwards, indicating that this sequence is flattened into a single, three-dimensional tensor. This tensor, also labeled 'c', is shown as a cuboid structure, representing the combined embedding vectors.  This flattened tensor is then fed as input into a 'CNN-based...' module (represented by an orange rectangle), which presumably is a Convolutional Neural Network performing further processing. Finally, an upward arrow connects this CNN module to an 'Input image' symbol (a picture of a landscape), indicating that the entire pipeline starts with an input image which is processed by the CNN to generate the sequence of embeddings.
Рисунок 7: Кодирование изображений на основе CNN
На основе Transformer

Модели Transformer, изначально разработанные для обработки естественного языка, в последнее время были адаптированы для кодирования изображений с значительным успехом. В этой архитектуре Transformer анализирует изображения, извлекает признаки и кодирует их в последовательность embedding'ов. Конкретно, encoder изображений на основе Transformer состоит из:

  • Patchify
  • Позиционное кодирование
  • Transformer
Image represents a simplified architecture for processing an image using a transformer-based model.  At the bottom, an 'Input image' (represented by an image icon) is fed into a processing pipeline. This pipeline consists of three stacked layers: a 'Patchify' layer (light green), a 'Positional...' layer (light red), and a 'Transformer' layer (light orange).  The Patchify layer likely divides the input image into patches. These patches are then processed by the Positional... layer, which probably adds positional information to the patches to maintain spatial context. The output of the Positional... layer is then fed into the Transformer layer, a core component of many modern image processing models, which processes the sequence of patches. The output of the Transformer is a 'Sequence of embeddings' represented as a series of 'c' vertically stacked rectangles labeled '1', '2', '3', ..., 's'.  Each rectangle represents an embedding vector, and the entire sequence captures the image's features.  The arrow indicates the flow of information from the input image through the processing layers to the final sequence of embeddings.
Рисунок 8: Кодирование изображений на основе Transformer
Patchify

Поскольку Transformer'ы работают с последовательностями, изображение сначала должно быть преобразовано в последовательность. Этот процесс включает три шага:

  • Разделить изображение на патчи фиксированного размера
  • Сплющить каждый патч
  • Линейно спроецировать каждый патч

Например, входное изображение 256 x 256 делится на патчи 64 x 64. Эти патчи сплющиваются в векторы размером 4096 и линейно проецируются в embedding-векторы размера c, где c — желаемый размер embedding'а.

Image represents a data processing pipeline, specifically a 'Patchify' operation, within a larger system.  The process begins with a 256x256 input image. This image is then fed into the Patchify module, which is depicted as a light green box containing three sub-processes: Projection, Flatten, and Divide.  Before entering Patchify, the input image is first processed by a block that transforms a 64x64 input into a 4096-element vector. The Patchify module takes this 4096-element vector and performs the three operations.  The output of the Patchify module is shown as a grid of smaller squares, representing patches of the original image.  Above the Patchify module, a diagram shows the arrangement of these patches: sixteen columns (numbered 1 through 16) each containing 'c' number of rows, representing the division of the processed image into patches.  The arrows indicate the flow of data through the pipeline, from the input image to the Patchify module and finally to the resulting patch arrangement.
Рисунок 9: Процесс патчификации
Позиционное кодирование

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

Позиционное кодирование может быть реализовано различными способами. Давайте кратко рассмотрим следующие варианты:

  • 1D vs. 2D позиционное кодирование
  • Обучаемое vs. фиксированное позиционное кодирование
D vs. 2D позиционное кодирование

1D позиционное кодирование использует функцию, которая отображает целое число (позицию в последовательности) в c-мерный вектор, где c обычно является скрытым измерением Transformer'а. Это обычно используется в текстовых последовательностях, где каждый token получает позиционный вектор на основе своего места. При применении к изображениям 1D позиционное кодирование кодирует позицию каждого патча в сплющенной последовательности, что может не захватывать двумерные пространственные отношения в изображениях.

2D позиционное кодирование, с другой стороны, отображает два целых числа — представляющих позиции строки и столбца в сетке изображения — в c-мерный вектор. Этот метод кодирования более подходит для изображений, так как он сохраняет пространственную структуру.

Image represents a comparison of 2D and 1D positional embeddings in the context of image processing.  The left side depicts a 2D approach, showing a set of three (with ellipsis indicating more) vertical rectangular blocks labeled '$PE_...', representing 2D positional embeddings.  These blocks are connected via an upward-pointing arrow to a 3x3 grid labeled 'Image patches,' where each cell contains the repeating sequence '1...', '2...', '3...' respectively, suggesting that each patch receives the same 2D positional embedding.  Red lines divide the grid into the patches. A grey, curved line suggests a relationship between the patches. The right side mirrors this structure but uses a 1D approach.  Three vertical rectangular blocks labeled '$PE_...' (again, with ellipsis implying more) represent 1D positional embeddings.  These are similarly connected via an upward-pointing arrow to a 3x3 grid labeled 'Image patches,' but here, the cells are numbered sequentially from 1 to 9, indicating a linear, 1D positional embedding assignment to each patch.  The red lines again delineate the patches, and a grey, curved line shows the relationship between the patches.  The overall diagram contrasts how positional information is encoded in 2D versus 1D for image patches, highlighting the difference in how spatial relationships are represented.
Рисунок 10: 1D vs. 2D позиционное кодирование
Обучаемое vs. фиксированное позиционное кодирование

В обучаемом позиционном кодировании модель изучает позиционные кодировки во время обучения. Нейронная сеть отображает позиции (1D или 2D) в c-мерный вектор. В фиксированном подходе позиционные кодировки определяются фиксированной функцией, такой как синус-косинус. Для получения более подробной информации обратитесь к Главе 2.

При выборе между 1D и 2D, а также обучаемым и фиксированным позиционным кодированием часто не существует наилучшего решения. Хотя Vision Transformer (ViT) [7] использует обучаемое 1D позиционное кодирование, на практике мы часто тестируем различные комбинации, чтобы увидеть, какая из них лучше всего работает для конкретной задачи.

Какая архитектура подходит для нашего encoder'а изображений?

CNN эффективны при захвате локальных паттернов в изображениях, но испытывают затруднения с долгосрочными зависимостями между удалёнными областями изображения. Напротив, Transformer'ы захватывают как локальные, так и глобальные отношения в изображении с помощью механизма self-attention. Это позволяет Transformer'ам моделировать сложные зависимости, что делает их идеальными для задач, требующих детального, контекстно-осведомлённого понимания изображений, например для генерации описательных подписей. По этим причинам мы следуем ViT [7] и выбираем архитектуру на основе Transformer в качестве нашего encoder'а изображений.

Текстовый decoder

Текстовый decoder отвечает за генерацию подписи. Как мы видели в предыдущих главах, decoder-only Transformer является стандартным выбором для генерации текста. Входом в decoder-only Transformer является последовательность векторов, соответствующих входному изображению. Его выходом является подпись, генерируемая по одному token'у за раз.

Image represents a simplified architecture diagram of a text-to-image generation model.  At the top, four input boxes labeled 'A,' 'flower,' 'icon,' and '.' represent individual text tokens or prompts.  Arrows point upwards from these boxes, indicating data flow into a larger, light-orange rectangular block labeled 'Text Decoder...'. This block presumably processes the text inputs.  Below the 'Text Decoder...', three vertical stacks of smaller rectangular boxes (with an ellipsis '...' indicating more such stacks exist) represent the encoded image features. Arrows point upwards from these stacks into the 'Text Decoder...', suggesting that the decoder uses these features.  These stacks are connected to a light-green rectangular block at the bottom labeled 'Image Encoder,' indicating that this block processes the image data into the feature vectors.  An upward-pointing arrow connects the 'Image Encoder' to the feature vector stacks, showing the flow of encoded image information.  The overall structure depicts a process where text prompts are decoded and used in conjunction with encoded image features to generate an image.
Рисунок 11: Предоставление изображения как последовательности embedding'ов

Обучение

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

  • Неконтролируемое pre-training
  • Контролируемое fine-tuning

. Неконтролируемое pre-training

На этом этапе текстовый decoder — который является decoder-only Transformer — обучается на общих данных. Цель этого этапа — разработать базовую модель, обладающую широким пониманием языковой структуры и способной генерировать связный текст. Эти знания крайне важны для того, чтобы модель хорошо работала при последующем fine-tuning'е на более конкретной задаче, такой как генерация подписей.

Этап pre-training'а является вычислительно затратным. Общепринятой практикой является использование существующих предобученных моделей для пропуска этого этапа и, таким образом, значительного снижения вычислительных затрат. В этой главе мы используем предобученный decoder-only Transformer, такой как GPT-2 [8] или Llama [4].

Аналогично, encoder изображений также может быть получен из предобученных моделей. Вместо обучения encoder'а изображений с нуля мы можем воспользоваться мощными предобученными визуальными моделями, такими как CLIP [9] или ViT [7].

. Контролируемое fine-tuning

На этом этапе мы обучаем как encoder изображений, так и текстовый decoder на 400 миллионах пар изображение–подпись. Encoder изображений улучшает свою способность эффективно кодировать информацию об изображении, а текстовый decoder учится понимать последовательность embedding'ов изображений и генерировать описательную подпись.

ML-цель и функция потерь

Текстовый decoder генерирует подпись по одному token'у за раз. В соответствии с предыдущими главами, мы используем предсказание следующего token'а как нашу ML-цель и применяем кросс-энтропийные потери [10] для управления процессом обучения.

Image represents a sequence-to-sequence model for image captioning.  At the bottom, a green rectangle labeled 'Image Encoder' processes an image, producing a vector representation. This representation is then fed into a beige rectangle labeled 'Text Decoder.' The decoder processes this image embedding and generates a sequence of words as a caption.  The decoder's output consists of multiple vertical blocks, each representing a word embedding (e.g., 'A,' 'flower,' 'icon,' '.' and '<EOS>'). Arrows indicate the flow of information.  Above the decoder's output, another set of identical vertical blocks represents the 'Correct next...' word embeddings for each position in the caption.  These are compared to the decoder's 'Predicted...' word embeddings using 'Cross-entropy loss,' a metric that quantifies the difference between the predicted and actual word sequences, guiding the model's training to minimize this loss and improve caption accuracy.  The ellipses ('...') indicate that the sequence can be longer than what's explicitly shown.
Рисунок 12: Вычисление потерь по предсказанным вероятностям

Сэмплирование

Во время сэмплирования token'ы подписи генерируются по одному за раз.

Image represents a neural network architecture for image captioning.  At the bottom, a green box labeled 'Image Encoder' processes an image, producing a vector representation. This vector is then fed upwards as input to a beige box labeled 'Text Decoder.' The Text Decoder processes this image embedding and generates a sequence of words.  Above the Text Decoder, multiple vertical stacks of boxes represent the predicted word embeddings at each time step of the decoding process.  These predicted embeddings are connected to individual word boxes ('A,' 'nice,' 'bloom,' '.') at the top, representing the selected tokens for the caption.  Dashed lines indicate the flow of information between the predicted word embeddings and the selected words, suggesting a process of iterative refinement or prediction.  The labels 'Selected t...' and 'Predicted...' indicate the selected tokens and the predicted embeddings, respectively.  The ellipses ('...') signify that the number of predicted word embeddings and selected tokens can extend beyond what's explicitly shown.
Рисунок 13: Генерация подписи по входному изображению

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

  • Качество: Beam search обычно генерирует подписи более высокого качества, что критически важно для точного описания содержимого изображения.
  • Согласованность: Детерминированная природа beam search гарантирует, что модель всегда производит одну и ту же подпись для одного и того же изображения. Эта согласованность крайне важна для генерации подписей к изображениям.
  • Связность: Beam search обычно производит связные подписи, что важно для генерации подписей к изображениям. Это позволяет избежать внезапных смен темы или противоречий, таких как «Человек идёт дом» или «Собака читает человека».

Оценка

Метрики офлайн-оценки

Во время офлайн-оценки мы оцениваем производительность обученной модели на валидационном наборе данных. Это достигается путём сравнения сгенерированных подписей с эталонными (т.е. правильными) подписями и измерения их сходства.

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

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

  • Устойчивое обучение: Разные люди описывают одно и то же изображение по-разному. Несколько эталонов позволяют модели изучать различные способы описания изображения. Это приводит к более устойчивой модели, способной описывать изображения более точно.
  • Комплексная оценка: Несколько подписей обеспечивают более тщательную оценку производительности модели. Сравнение сгенерированной подписи с несколькими правильными эталонными подписями приводит к более справедливой оценке.
Image represents a table with two columns. The left column is labeled 'Image' and is left blank, presumably intended to hold an image. The right column is labeled 'Reference captions' and contains three rows, each providing a textual description that could correspond to the image in the left column.  The first row describes 'Blooming tulip with green leaves,' the second row says 'Close-up of a blooming tulip.', and the third row, which is truncated, begins with 'Single tulip with leave...'.  The table structure implies a relationship where each caption in the right column offers an alternative or more specific description of the same image in the left column.
Рисунок 14: Пример данных для валидации

Следующие метрики обычно используются при офлайн-оценке моделей генерации подписей к изображениям:

  • BLEU
  • ROUGE
  • METEOR
  • CIDEr

Первые три метрики в списке подробно рассмотрены в Главе 3. В этой главе мы сосредоточимся на CIDEr, который был разработан специально для оценки моделей генерации подписей к изображениям.

CIDEr

CIDEr [11] — популярная метрика для оценки моделей генерации подписей к изображениям. Она использует консенсус для оценки сходства сгенерированной подписи с набором эталонных подписей. CIDEr присваивает более высокие оценки подписям, которые похожи на несколько эталонных подписей, а не только на одну. Для одного примера CIDEr рассчитывается в три шага:

  • Представить подписи с помощью Term Frequency–Inverse Document Frequency (TF-IDF)
  • Вычислить сходства
  • Агрегировать оценки сходства
. Представление подписей с помощью TF-IDF

На первом шаге мы преобразуем сгенерированную подпись и каждую эталонную подпись в числовые представления с помощью TF-IDF. TF-IDF оценивает важность слова для документа, учитывая, как часто оно встречается в этом документе и насколько оно распространено или редко во всём корпусе. Эти оценки важности используются для числового представления предложения. Для получения дополнительной информации о TF-IDF обратитесь к [12][13].

Image represents a simplified diagram of a caption generation system.  The diagram shows three reference captions ('1. Blooming tulip with leaves', '2. A blooming tulip.', '3. Single tulip with leaves.') contained within a rectangular box labeled 'Reference captions'.  A second rectangular box labeled 'Generated caption' displays the output 'Tulip with leaves.'.  Both the reference and generated captions are connected via downward-pointing arrows to a central, peach-colored rectangular box labeled 'TF-IDF,' representing a term frequency-inverse document frequency algorithm.  Finally, an arrow points down from the TF-IDF box to a line of text showing a string of words ('abloomingleavessingletulipleaves') followed by reference numbers and associated weighted values (e.g., 'Ref 1: 'Blooming tulip with leaves'0.000.520.430.000.360.43'). This suggests the TF-IDF process transforms the reference captions into a weighted representation of their constituent words, which is then used to generate the final caption.
Рисунок 15: TF-IDF преобразует подписи в числовые представления
. Вычисление сходства

Затем мы вычисляем сходство между сгенерированной подписью и каждой эталонной подписью. Мы делаем это путём вычисления косинусного сходства между их TF-IDF представлениями.

Image represents a flowchart illustrating a similarity calculation process.  At the top, a partially visible text string suggests input references, possibly image captions like 'Blooming tulip with leaves' and 'A blooming...'. A light peach-colored rounded rectangle labeled 'Similarity...' acts as a central processing block.  An arrow points downwards from this block to a grey table. This table has two columns: 'Pair,' listing three rows of text starting with '<Reference 1, Generat...', '<Reference 2, Generat...', and '<Reference 3, Generat...',  and 'Cosine similarity sco...', showing corresponding numerical values (0.688, 0.257, and 0.766 respectively). These values likely represent cosine similarity scores calculated between the input references and generated text (indicated by '...'). The arrows indicate the flow of data: the input references are implicitly processed within the 'Similarity...' block, resulting in the cosine similarity scores displayed in the table.
Рисунок 16: Вычисление косинусного сходства между сгенерированными и эталонными подписями

Более высокое косинусное сходство (т.е. оценка ближе к 1) указывает на большее сходство, тогда как более низкое значение (ближе к 0) указывает на меньшее сходство.

. Агрегация оценок сходства

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

Итоговая оценка CIDEr рассчитывается путём усреднения оценок сходства для всех сгенерированных подписей в валидационном наборе данных. Это обеспечивает единую метрику для оценки общей производительности модели.

Рассмотрим некоторые плюсы и минусы метрики CIDEr.

Плюсы:
  • Основан на консенсусе: CIDEr подчёркивает консенсус, вознаграждая подписи, похожие на несколько эталонных подписей. Это приводит к более надёжной оценке производительности модели.
  • Чувствителен к важным словам: TF-IDF присваивает больший вес уникальным словам в их представлении. Это гарантирует, что оценка CIDEr отражает важность слов и вознаграждает подписи, использующие эти слова.
  • Устойчив к различным вариациям подписей: CIDEr устойчив к различным вариациям генерации, поскольку рассчитывается на основе нескольких эталонных подписей.
Минусы:
  • Вычислительно сложный: Вычисление TF-IDF представлений в больших наборах данных может быть вычислительно затратным.
  • Чувствителен к качеству эталонных подписей: Качество и разнообразие эталонных подписей влияют на оценку CIDEr. Плохие эталоны могут приводить к вводящим в заблуждение оценкам.
  • Штрафует за новые, но точные подписи: CIDEr может штрафовать творческие или новые фразы, которые всё ещё точны, но не присутствуют в эталонном наборе.
  • Отсутствие семантического понимания: CIDEr опирается на TF-IDF для измерения сходства между двумя предложениями. Это может не всегда захватывать семантическое сходство, когда подписи текстуально схожи, но семантически различны. Например, «Кофе на столе» и «Стол на кофе» могут иметь схожие TF-IDF представления из-за схожих слов, но они не являются семантически схожими.

Метрики онлайн-оценки

Метрики онлайн-оценки важны для оценки производительности ML-систем. Однако они часто не являются основным фокусом в системах генерации подписей к изображениям по двум основным причинам. Во-первых, системы генерации подписей к изображениям обычно являются частью более крупной системы, что затрудняет сбор данных о взаимодействии пользователей. Во-вторых, получение отзывов от пользователей является сложной задачей. В отличие от задач, где мы можем легко измерить удовлетворённость пользователей, оценка качества подписей к изображениям требует субъективного суждения, которое по определению варьируется между пользователями. Например, подпись может быть приемлемой для одного пользователя, но не для другого, в зависимости от их личной интерпретации изображения.

В заключение, стандартные офлайн-метрики остаются основным методом оценки нашей системы генерации подписей к изображениям. Для немногих вариантов использования, где генерация подписей напрямую влияет на пользовательский опыт, метрики вовлечённости и обратная связь от пользователей могут предоставить ценные сведения о производительности системы.

Общая архитектура ML-системы

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

  • Предобработка изображений
  • Генератор подписей
  • Постобработка
Image represents a diagram illustrating an image captioning system.  An 'Input image' is fed into a light-blue rectangular box labeled 'Image...', which presumably performs initial image processing.  The output flows into a light-orange rectangular box labeled 'Caption Generat...', representing the core caption generation model.  This model receives input from a light-green cloud-shaped box labeled 'Trained...', indicating a pre-trained model, via a downward-pointing arrow labeled 'Beam search,' suggesting a beam search algorithm is used for caption selection. The output from 'Caption Generat...' then goes into a light-purple rectangular box labeled 'Post-processing,' likely for tasks like grammar correction or formatting. Finally, the processed caption is outputted as 'Mountains wi...', implying the generated caption related to mountains.  The entire process is depicted as a linear flow from input image to final caption, with the trained model influencing the caption generation through the beam search process.
Рисунок 17: Общая архитектура системы генерации подписей к изображениям

Давайте кратко рассмотрим каждый компонент и поймём его роль.

Предобработка изображений

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

Генератор подписей

Генератор подписей — это основной компонент, который создаёт подписи на основе подготовленного изображения. Этот компонент взаимодействует с обученной моделью и использует beam search для генерации связной подписи. Если совокупная вероятность сгенерированной подписи падает ниже заранее определённого порога достоверности, предложение имени отключается; в противном случае подпись передаётся компоненту постобработки. Это гарантирует, что система избегает создания нерелевантных подписей для неоднозначных изображений.

Постобработка

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

Дополнительные темы для обсуждения

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

  • Расширение генератора подписей для поддержки других задач, таких как визуальный ответ на вопросы (VQA) [14].
  • Адаптация моделей для создания подписей к изображениям из различных областей [15].
  • Генерация подписей на нескольких языках с использованием многоязычных наборов данных и кросс-лингвального transfer learning [16].
  • Методы оптимизации для генерации подписей на периферийных устройствах [17].
  • Генерация и ранжирование нескольких правдоподобных подписей на основе релевантности [18].
  • Подробности методов BLIP-2 и BLIP-3 и дополнительные функции потерь, используемые для улучшения генерации подписей [1] [2].

Резюме

Image represents a mind map summarizing the design of a Generative AI system for image captioning.  The central node is labeled 'Summary,' branching into seven main categories: Clarifying Requirements, Specifying Input and Output, Data Preparation (divided into Text and Image preprocessing steps, including tasks like removing duplicates, normalizing captions, and adjusting image dimensions), Model Development (covering Architecture choices like CNN-based vs. Transformer-based models, including details on positional encoding and 1D vs. 2D approaches, and training methods such as unsupervised pre-training and supervised fine-tuning), Evaluation (with offline metrics like ROUGE, METEOR, and CIDEr, and online metrics implied), Overall System Components (including image preprocessing, caption generation, and post-processing), and Other Talking Points.  Each branch further subdivides into more specific tasks and design choices, illustrating the hierarchical structure of the system's development process.  The connections between nodes represent the sequential or hierarchical relationships between different stages and components of the system.  For example, Data Preparation precedes Model Development, and Evaluation follows Training.  The color-coding of branches helps visually distinguish between different aspects of the system design.

Справочные материалы

[1] BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models. https://arxiv.org/abs/2301.12597. [2] xGen-MM (BLIP-3): A Family of Open Large Multimodal Models. ​​https://www.arxiv.org/abs/2408.08872. [3] InternVL: Scaling up Vision Foundation Models and Aligning for Generic Visual-Linguistic Tasks. https://arxiv.org/abs/2312.14238. [4] Meta's Llama. https://llama.meta.com/. [5] Byte-pair encoding tokenization. https://huggingface.co/learn/nlp-course/en/chapter6/5. [6] LAION-5B: An open large-scale dataset for training next generation image-text models. https://arxiv.org/abs/2210.08402. [7] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. https://arxiv.org/abs/2010.11929. [8] Language Models are Unsupervised Multitask Learners. https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf. [9] Learning Transferable Visual Models From Natural Language Supervision. https://arxiv.org/abs/2103.00020. [10] Cross-entropy. https://en.wikipedia.org/wiki/Cross-entropy. [11] CIDEr: Consensus-based Image Description Evaluation. https://arxiv.org/abs/1411.5726. [12] TF-IDF introduction. https://web.stanford.edu/class/cs276/19handouts/lecture6-tfidf-1per.pdf. [13] TF-IDF. https://en.wikipedia.org/wiki/Tf%E2%80%93idf. [14] Visual question answering introduction. https://huggingface.co/tasks/visual-question-answering. [15] Cross-Domain Image Captioning with Discriminative Finetuning. https://arxiv.org/abs/2304.01662. [16] Crossmodal-3600 — Multilingual Reference Captions for Geographically Diverse Images. https://research.google/blog/crossmodal-3600-multilingual-reference-captions-for-geographically-diverse-images/. [17] Efficient Image Captioning for Edge Devices. https://arxiv.org/abs/2212.08985. [18] Ensemble model using an image captioning and ranking example. https://cloud.google.com/dataflow/docs/notebooks/run_inference_multi_model.

Глава 6

Генерация с дополнением извлечением (RAG)

~30 мин чтения

Введение

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

Предоставление чатботам доступа к этой информации улучшает точность и релевантность их ответов, особенно для задач, основанных на фактах или специализированных задач. Реальным примером такой системы является Perplexity.ai [1] — поисковая система на основе ИИ, которая использует информацию из веба для ответа на запросы пользователей.

Image represents a system diagram illustrating a query-response process for finding upcoming concerts.  The top section shows a user's query: 'Upcoming concerts around me in San Francisco with dates.' This query is then fed into a 'Sources' section, which lists three different data sources: Bandsintown (bandsintown. 1), SeatGeek (seatgeek. 2), and Eventbrite (eventbrite. 3), each indicated by their logo and a numerical identifier.  These sources are visually connected to the query with a curved arrow indicating data retrieval.  The 'Retrieved extern...' label highlights this data acquisition. The next section, 'Perplexity,' acts as a processing layer, taking the retrieved data and synthesizing it into a concise summary: 'Here are some upcoming concerts in San Francisco with dates:'.  Below this, the system outputs a list of 'Major Upcoming Concerts' and 'Notable Upcoming Shows,' each with artist names, dates, and venues, some entries marked with a small '2' suggesting a secondary source or verification.  A 'Ask follow-up' button is present, along with a 'Pro' toggle, suggesting a paid feature.  The entire output is labeled 'Produced...', connected to the 'Perplexity' section by a curved arrow, showing the information flow from processing to the final result.  The logos of various music streaming services are also present in the 'Sources' section, suggesting potential integration with these platforms.
Рисунок 1: Вывод *Perplexity* на основе информации в реальном времени (Источник: [1])

В этой главе мы строим систему, аналогичную ChatPDF [2], которая отвечает на вопросы сотрудников, используя внутренние корпоративные документы. Вместо чтения FAQ сотрудники могут напрямую спросить чатбот и получить ответы на основе этих документов.

Уточнение требований

Вот типичное взаимодействие между кандидатом и интервьюером:

Кандидат: Из чего состоит внешняя база знаний? Меняется ли она со временем? Интервьюер: База знаний включает Wiki-страницы компании и корпоративный форум в стиле «Stack Overflow». Документация меняется, но медленнее по сравнению с обновлениями в реальном времени.

Кандидат: Содержат ли Wiki-страницы и форумы текст, изображения и другие модальности? Интервьюер: Предположим, что каждая страница в формате PDF и содержит текст, таблицы и диаграммы. Для простоты другие модальности можно не учитывать.

Кандидат: Следуют ли страницы фиксированному формату или шаблону? Интервьюер: Нет, форматы варьируются. Некоторые двухколоночные, некоторые одноколоночные, а другие смешанные.

Кандидат: Сколько всего страниц? Интервьюер: У нас около 5 миллионов страниц.

Кандидат: Необходимо ли системе включать ссылки на документы? Интервьюер: Да.

Кандидат: Должна ли система отвечать в реальном времени? Интервьюер: Пользователи могут допустить небольшую задержку в несколько секунд.

Кандидат: Должна ли система поддерживать несколько языков? Интервьюер: Для простоты давайте ограничимся английским.

Кандидат: Должна ли система поддерживать обратную связь от пользователей или уточняющие вопросы? Интервьюер: Изначально нет. Однако ваш дизайн должен быть достаточно гибким, чтобы в будущем добавить поддержку циклов обратной связи или уточняющих вопросов.

Кандидат: Каков ожидаемый рост количества документов? Интервьюер: Ожидается, что база документов будет расти на двадцать процентов ежегодно.

Кандидат: Нужно ли решать вопросы безопасности, такие как предотвращение вредоносных, предвзятых или вводящих в заблуждение ответов? Интервьюер: Безопасность важна, но давайте приоритизируем обработку данных, архитектуру и эффективность производительности.

Формулировка задачи как задачи ML

Определение входа и выхода системы

Вход системы ChatPDF — это текстовый промпт, предоставленный пользователем. Модель обрабатывает этот промпт вместе с постоянно обновляемой базой данных документов, содержащей текст и изображения. Выход — это текстовый ответ, точно отвечающий на запрос пользователя.

Image represents a simplified system architecture diagram for a ChatPDF system.  The diagram shows a user query, 'How do I submit an...', entering from the left, which is labeled 'User query'. This query is fed into a centrally located, peach-colored rectangle labeled 'ChatPDF System'.  The ChatPDF System interacts with a dashed-line-bordered box labeled 'Document databases,' containing icons representing multiple database servers, stacked documents, and an image, suggesting the system accesses various document types (PDFs and images) stored within these databases.  Two-way arrows connect the ChatPDF System and the Document databases, indicating data flow in both directions. Finally, a response, 'To submit an expense report, log into...', is shown in a rectangle labeled 'Response' on the right, representing the system's output generated after processing the user's query and accessing the relevant information from the document databases.  The overall flow is left-to-right, showing the user query's progression through the system to produce a final response.
Рисунок 2: Вход и выход системы ChatPDF

Выбор подходящего подхода ML

Учитывая характер задачи, большие языковые модели (LLM) хорошо подходят для генерации текста и часто являются выбором по умолчанию. Однако LLM общего назначения могут испытывать трудности с конкретными доменами и, следовательно, могут нуждаться в настройке для работы с внешними источниками данных. Чтобы LLM могла отвечать на запросы на основе данных конкретной компании, существуют три основных подхода:

  • Fine-tuning
  • Prompt engineering
  • Retrieval-augmented generation (RAG)

Давайте подробно рассмотрим каждый из них и обсудим их компромиссы.

Fine-tuning

В этом подходе предобученная LLM общего назначения дообучается на данных, специфичных для компании, таких как внутренние документы. Обновляя свои веса, LLM адаптируется для лучшего понимания уникальной терминологии, процессов и FAQ компании. В Главе 10 будут рассмотрены продвинутые техники fine-tuning, такие как LoRA [3], для адаптации больших моделей к конкретным данным.

Image represents a three-stage process for creating a specialized AI model.  The process begins with a 'General-purpose...' (light gray rectangle) model, which is then fed into a 'Finetuning' (light orange rectangle) stage.  The input for the finetuning stage is a 'Company-specific...' (labeled above a stack of three light yellow cylindrical database icons), suggesting that company-specific data is used to refine the general-purpose model.  The output of the finetuning stage is then passed to create a 'Specialized...' (light green rectangle) model.  Arrows indicate the unidirectional flow of information between these stages, showing the transformation of a general-purpose model into a company-specific, specialized model through a finetuning process.
Рисунок 3: Подход fine-tuning
Преимущества:
  • Настраиваемость: Fine-tuning позволяет модели генерировать ответы, адаптированные к конкретным доменам.
  • Повышенная точность: Путём дообучения модели на специализированных данных она становится более точной и лучше справляется с нишевыми темами.
Недостатки:
  • Вычислительно затратно: Обновление всех параметров модели требует значительных вычислительных ресурсов, что может быть дорого.
  • Частое переобучение: Этот подход требует частого дообучения для непрерывного включения актуальных данных в модель.
  • Требует технической экспертизы: Этот подход требует понимания принципов ML и архитектур языковых моделей, что может быть барьером для тех, кто не имеет специализированных знаний.
  • Обширные требования к данным: Fine-tuning требует существенного, высококачественного набора данных, который может быть сложно и долго собирать.
  • Отсутствие ссылок: Дообученные модели обычно не могут предоставить ссылки на свои ответы, что затрудняет проверку или отслеживание информации до её источника.

Prompt Engineering

Prompt engineering направляет LLM общего назначения на создание конкретных ответов через тщательно спроектированные промпты. В отличие от fine-tuning, этот метод оставляет базовую LLM неизменной и включает релевантную информацию, такую как данные компании или инструкции, непосредственно в промпты для управления поведением модели. Например, промпт может включать информацию, такую как краткое изложение политик компании, как показано на Рисунке 4. Позже в этой главе мы рассмотрим более продвинутые техники prompt engineering, такие как few-shot и chain-of-thought промптинг.

Image represents a simplified flowchart illustrating a system's response to a user query.  The process begins with a user input, 'What is the company's r...', which is fed into a 'Prompt Engine...'. This engine processes the input and generates a refined query, 'Read the following company policy and r...', which is then directed to a data source (represented by a dashed box).  Separately, a second path originates from the same 'Prompt Engine...', connecting to a 'General-purpose...' component. This component processes information and produces an output, 'The company reimburses employees for t...', which is also directed to a separate data source (represented by another dashed box).  The arrows indicate the flow of information between components, showing how the initial user query is processed through different stages to generate two distinct outputs, potentially from different data sources.
Рисунок 4: Подход prompt engineering
Преимущества:
  • Простота использования: Prompt engineering прост в использовании и не требует технических навыков, что делает его подходящим для широкого круга пользователей.
  • Экономичность: Используя предобученную LLM, промптинг несёт минимальные вычислительные затраты по сравнению с fine-tuning.
  • Гибкость: Промпты можно легко модифицировать для экспериментов с различными выходами без необходимости переобучения модели.
Недостатки:
  • Непоследовательность: Качество и релевантность ответов могут сильно варьироваться в зависимости от формулировки промпта.
  • Ограниченная настраиваемость: Возможность адаптации ответов ограничена эффективностью и креативностью дизайна промпта. Prompt engineering не обладает глубиной настройки, которую предоставляет fine-tuning.
  • Ограниченность существующими знаниями LLM: Выходы ограничены информацией, на которой LLM была изначально обучена, что делает её менее эффективной для высокоспециализированных доменов или предоставления ответов на основе самой актуальной информации.

RAG

RAG — это продвинутый метод, который объединяет возможности LLM общего назначения с системой извлечения в реальном времени. Вместо того чтобы полагаться исключительно на предобученные знания LLM, RAG извлекает релевантную информацию из внешних источников, таких как внутренние документы компании, и подаёт её в LLM во время инференса. Этот подход гарантирует, что LLM генерирует ответы, которые одновременно релевантны и точны на основе доступной информации.

Система RAG, как показано на Рисунке 5, имеет два компонента:

  • Извлечение: Компонент извлечения берёт исходный промпт пользователя, находит наиболее релевантную информацию из внешних источников и возвращает её в качестве контекста.
  • Генерация: Как правило, LLM общего назначения использует промпт пользователя и извлечённую информацию для генерации ответа.
Image represents a system for generating text based on information retrieved from a document database.  A rectangular box labeled 'Document databases' contains icons representing document files and database tables, indicating storage of various document types.  A downward-pointing arrow connects this box to a light orange rectangular box labeled 'Retrieval,' signifying the process of fetching relevant data from the databases.  A dashed-line box below 'Retrieval' shows '[retrieved 1]...', representing the retrieved data.  A horizontal arrow connects a dashed-line box containing the prompt 'What is the company's rei...' to the 'Retrieval' box, indicating that the retrieval process is initiated by a user query.  The 'Retrieval' box is connected via a downward-pointing arrow to a light blue rectangular box labeled 'Generation,' which represents the text generation process using the retrieved data. Finally, a right-pointing arrow connects the 'Generation' box to a dashed-line box containing the output text 'The company reimburses employees for t...', showing the generated response based on the input query and retrieved information.  The overall flow depicts a query-driven retrieval and generation pipeline.
Рисунок 5: Компоненты системы RAG
Преимущества:
  • Доступ к самой актуальной информации: RAG может предоставлять актуальные ответы, извлекая данные из внешних источников, тем самым улучшая релевантность и точность ответов.
  • Контекстуальная релевантность: Извлекая информацию из внешних источников, RAG может добавить контекст к ответам модели, делая ответы более детальными и релевантными.
Недостатки:
  • Сложность реализации: Реализация RAG может быть технически сложной, поскольку требует слаженной работы двух компонентов (извлечение и генерация).
  • Зависимость от качества извлечения: Качество ответов сильно зависит от релевантности и точности извлечённой информации, что может влиять на общую производительность системы.

Какой подход более подходит для ChatPDF?

Fine-tuning позволяет LLM генерировать более специализированные ответы, но вычислительно затратен и не ссылается на оригинальные документы, что делает его непригодным для наших нужд. Хотя prompt engineering предоставляет простой и гибкий способ направлять LLM общего назначения без fine-tuning, он не масштабируется. Это связано с тем, что включение информации из всех внешних источников в промпт обычно превышает контекстное окно LLM.

RAG предлагает сбалансированное решение с точки зрения простоты настройки, стоимости и масштабируемости, что делает его идеальным для работы с большими, развивающимися наборами данных и предоставления актуальной информации. Этот подход особенно эффективен для внутренних чатботов в корпоративных средах. Поэтому мы выбираем RAG для построения нашей системы ChatPDF. В разделе разработки модели мы углубимся в prompt engineering и обсудим, как мы комбинируем его с RAG для дальнейшего улучшения системы.

Подготовка данных

Производительность системы RAG зависит от качества базы знаний и способа её индексации. Когда база знаний получена из веб-сайтов, следует применять стратегии очистки данных, такие как удаление неуместного контента или анонимизация конфиденциальной информации, как обсуждалось в Главе 4.

В этом разделе мы сосредоточимся на подготовке данных из коллекции PDF-страниц. Это включает трёхэтапный процесс:

  • Парсинг документов
  • Разбиение документов на чанки
  • Индексация

Парсинг документов

PDF — один из наиболее широко используемых форматов документов. Важно правильно извлечь их содержимое для подготовки данных к обучению LLM и для обеспечения того, чтобы LLM могла корректно отвечать на вопросы на основе содержимого PDF.

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

  • Парсер на основе правил
  • Парсер на основе ИИ

Парсер документов на основе правил

Подход на основе правил опирается на предопределённые правила и паттерны, основанные на разметке и структуре документа. Он пытается «вычислить» разметку и соответственно извлечь контент, что делает его простым в реализации, когда формат документа последователен и предсказуем.

Однако методы на основе правил с трудом справляются с широким спектром типов и форматов PDF, поскольку PDF могут значительно различаться по дизайну. Жёсткая природа этого метода означает, что если документ не соответствует ожидаемому формату, это может привести к ошибкам при извлечении контента. Это делает парсинг на основе правил менее полезным при работе с различными или сложными макетами документов.

Парсер документов на основе ИИ

Методы на основе ИИ используют другой подход. Они применяют продвинутые техники, такие как обнаружение объектов и OCR (Optical Character Recognition) [4], для идентификации и извлечения различных элементов из документа, например, текста, таблиц и диаграмм. Эти методы могут обрабатывать широкий спектр макетов документов, что делает их более подходящими для работы со сложными документами.

Существуют различные инструменты для парсинга документов на основе ИИ. Например, Dedoc [5] поддерживает парсинг широкого спектра форматов документов и стандартизацию контента в единую структуру. Аналогично, Layout-Parser [6] использует высокоточные модели для точного обнаружения различных частей документа, хотя размер этих моделей может замедлять процесс. Чтобы лучше понять парсеры документов на основе ИИ, давайте подробнее рассмотрим, как работает Layout-Parser.

Layout-Parser принимает изображение документа на вход и генерирует структурированный выход, выполняя следующие шаги:

  • Обнаружение макета: Парсер использует продвинутые модели обнаружения объектов для обнаружения и генерации прямоугольных рамок вокруг различных областей контента. Эти области могут включать такие элементы, как абзацы, таблицы, изображения или заголовки.
  • Извлечение текста: Контент внутри каждой прямоугольной рамки обрабатывается с помощью OCR для извлечения текста. Координаты ограничивающей рамки обеспечивают распознавание текста в правильном порядке и формате, сохраняя исходную структуру документа.
  • Генерация структурированного выхода: Парсер создаёт структурированный выход, содержащий два типа данных: Текстовые блоки: Включают координаты блока, извлечённый текст, порядок чтения и метаинформацию. Нетекстовые блоки: Включают координаты фигур или изображений.
Image represents a system for extracting structured data from a PDF document.  A PDF page, labeled 'PDF (Page...', is depicted on the left.  This page's layout is shown as a rectangular box containing several colored boxes representing different elements: a large blue box labeled 'Title' at the top, smaller blue boxes labeled 'Title' in the middle and bottom, and several orange boxes labeled 'Text' throughout.  A yellow box labeled 'Figure' is also present.  An arrow labeled 'Layout...' connects the PDF page to this layout representation.  This layout representation is then connected via an arrow to a box labeled 'OCR'. The OCR processes the layout information, extracting text from the orange and blue boxes, and representing the extracted text as an array of text blocks within a dashed-line box labeled 'Structured output' with the content '[textblock 1, textblock 2,...]'.  The overall flow is from the PDF page, through a visual representation of its layout, to an OCR process that outputs structured text blocks.
Рисунок 6: Преобразование PDF-страницы в структурированный выход для LLM

Несколько онлайн-сервисов предоставляют услуги парсинга документов, например, Google Cloud Document AI [7] и PDF.co [8]. Эти сервисы позволяют пользователям загружать свои документы и получать их парсинг без необходимости настраивать и поддерживать систему парсинга самостоятельно.

Разбиение документов на чанки

После того как мы идентифицировали блоки текста, изображений или таблиц в документе, следующий шаг — индексировать их в поисковую базу данных. Для длинных текстовых блоков, например из отчётов или книг, индексация всего контента как единого элемента неэффективна. Это связано с тем, что embedding-вектор, представляющий целую книгу или отчёт, может захватить общий контекст, но упустить важные детали, что может привести к менее точным или неполным результатам поиска. Кроме того, если мы извлечём всю книгу или отчёт, это превысит лимит токенов большинства моделей, например, лимит в 128K токенов для модели GPT-4o.1

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

Некоторые распространённые стратегии чанкинга:

  • Чанкинг на основе длины: Этот простой подход разбивает текст на чанки заданной длины. Хотя его легко реализовать, он иногда может разделять предложения или логические разделы посередине, приводя к фрагментированным или менее осмысленным чанкам. Такие инструменты, как LangChain [9], предоставляют разделители текста, такие как CharacterTextSplitter и RecursiveCharacterTextSplitter, которые позволяют настраивать размеры чанков и параметры перекрытия. Эти разделители могут обрабатывать различные разделители и помогают поддерживать связность между чанками.
  • Чанкинг на основе регулярных выражений: Этот подход использует регулярные выражения для разделения текста на основе конкретных знаков препинания, таких как точки, вопросительные знаки или восклицательные знаки. Он позволяет лучше разделять текст на уровне предложений, сохраняя логические разрывы, хотя ему может не хватать более глубокого семантического понимания текста.
  • Разделители HTML, markdown или кода: Для документов в структурированных форматах, таких как HTML или Markdown, используются специализированные разделители. Эти инструменты разделяют текст на границах элементов, таких как заголовки, элементы списков или блоки кода, сохраняя общую структуру документа. Например, LangChain имеет MarkdownHeaderTextSplitter, HTMLHeaderTextSplitter и PythonCodeTextSplitter соответственно. Эти разделители полезны для веб-страниц или технической документации, где важно сохранять иерархическую структуру. Рисунок 7: Чанкинг текста на основе длины с LangChain

Индексация

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

Для определения процесса индексации важно понимать различные техники извлечения и выбрать ту, которая лучше всего подходит для задачи. Популярные техники извлечения включают:

  • На основе ключевых слов
  • Полнотекстовый поиск
  • На основе графа знаний
  • На основе векторов

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

На основе ключевых слов

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

Полнотекстовый поиск

Полнотекстовые поисковые системы, такие как Elasticsearch [10], предлагают более продвинутый подход, сканируя целые документы для поиска релевантных совпадений. Этот метод позволяет проводить комплексный анализ содержимого документа, включая частичные совпадения и поиск фраз. Однако полнотекстовый поиск сопряжён с более высокими вычислительными затратами, особенно при работе с большими наборами данных, содержащими, например, миллионы PDF-документов. Хотя этот подход эффективен для поиска конкретного текста, он менее эффективен для семантического извлечения.

На основе графа знаний

Извлечение на основе графа знаний — это сложная техника, использующая структурированные связи между сущностями (например, людьми, местами или концепциями) для извлечения информации на основе связей между этими сущностями. Этот метод отлично подходит для ответа на сложные запросы и понимания взаимосвязей в данных. Однако построение и поддержание графа знаний требует значительных усилий, и это не всегда практично для больших неструктурированных наборов данных, таких как коллекции PDF или Wiki-страницы. Для получения дополнительной информации об извлечении на основе графа знаний обратитесь к [11].

На основе векторов

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

Какая техника извлечения подходит для ChatPDF?

Для выбора подходящего метода извлечения давайте сначала поймём масштаб нашей системы и оценим количество чанков данных. В данном случае компания управляет большим набором данных из примерно 5 миллионов страниц. Предположим, что каждая страница содержит примерно 1500 символов и включает три изображения. Используя чанкинг на основе длины с размером чанка 500 символов и перекрытием 200 символов, каждая страница создаст 5 текстовых чанков и 3 чанка изображений. Таким образом, общее количество чанков, с которыми работает система RAG, составляет 5M(1500 / (500-200) + 3)=40M. Ожидается, что эта цифра будет расти примерно на 20 процентов ежегодно, как указано в разделе требований.

При примерно 40 миллионах чанков данных и прогнозируемом ежегодном увеличении на 20 процентов важно выбрать технику извлечения, которая масштабируема и может эффективно справляться с растущим объёмом.

Традиционные методы извлечения [12] [13], такие как на основе ключевых слов и полнотекстовый поиск, широко использовались, но имеют ограничения в скорости, масштабируемости и способности понимать семантический смысл запросов. Извлечение на основе графа знаний требует значительных усилий для построения и поддержания таких графов, что делает их дорогостоящим выбором.

Извлечение на основе векторов, с другой стороны, является основной техникой, используемой в современных системах RAG, благодаря следующим преимуществам:

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

Благодаря этим преимуществам мы выбираем извлечение на основе векторов и соответственно индексируем наши данные.

Индексация данных для извлечения на основе векторов

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

Image represents a document processing and indexing pipeline.  The process begins with 'Document databases', depicted as a box containing icons representing various document types (text files and images).  These databases feed into 'Document parsing', a beige rectangle, which processes the documents. The output of parsing flows into 'Document chunking', another beige rectangle, dividing the parsed document into smaller chunks.  A table labeled 'Chunk' and 'Chunk data' shows the resulting chunks numbered 1 to M, each with its corresponding 'chunk output'.  The chunks then proceed to 'Indexing', a beige rectangle, which generates embeddings for each chunk.  A table labeled '#' and 'Embedding' illustrates this, showing M rows, each representing a chunk with its corresponding embedding vector (represented by empty boxes). Finally, the indexed chunks are stored in two databases labeled 'Index...', representing the final indexed data.  A separate table, connected via a dashed line to 'Document parsing', shows the structured output of the entire process, mapping page numbers (1 to N) to their corresponding textual outputs.
Рисунок 8: Этапы подготовки данных от PDF до индексированных embedding

Подводя итог, мы используем трёхэтапный подход для подготовки PDF для системы RAG. Сначала мы применяем техники парсинга документов для преобразования PDF в структурированный формат, разбивая его на текст, таблицы и изображения. Затем мы используем чанкинг документов для разделения длинного текста на более мелкие, управляемые чанки. Наконец, каждый чанк преобразуется в embedding-вектор и индексируется индивидуально для улучшения точности извлечения.

Разработка модели

Архитектура

В этом разделе рассматривается архитектура системы RAG с фокусом на ML-моделях, используемых в компонентах индексации, извлечения и генерации.

Image represents a three-stage process for a multimodal system. The first stage, labeled 'Indexing,' contains a light-green box labeled 'Text encoder' above a light-blue box labeled 'Image encoder.'  These encoders process textual and image data respectively, presumably generating embeddings.  The second stage, 'Retrieval,' shows only a light-green box labeled 'Text encoder,' suggesting that a text-based query is processed to generate an embedding for searching the indexed data.  The third stage, 'Generati...' (likely 'Generation'), contains a light-grey box labeled 'LLM' (Large Language Model).  The flow is sequential: the 'Indexing' stage creates embeddings from text and images; the 'Retrieval' stage uses a text encoder to find relevant embeddings from the index; and finally, the 'Generation' stage uses the retrieved information (implicitly passed from the retrieval stage) as input to the LLM to generate an output.  The dashed lines around each stage suggest distinct processing phases.
Рисунок 9: Различные ML-модели в системе RAG

Индексация

Как обсуждалось в разделе подготовки данных, мы используем ML-модели для преобразования чанков данных (например, текста или изображений) в embedding. Этот процесс включает две ML-модели: text encoder и image encoder.

Text encoder

Text encoder — это нейронная сеть, которая преобразует входной текст в плотные векторные представления, или «embedding». Эти embedding захватывают семантический смысл текста, позволяя оценивать сходство текстов. Во время процесса индексации text encoder преобразует каждый текстовый чанк в embedding, который затем сохраняется в базе данных для эффективного извлечения.

Архитектура text encoder обычно основана на encoder-only Transformer, аналогичном тому, что мы рассматривали в Главе 3.

Image encoder

Image encoder преобразует данные изображений в embedding. Его архитектура может быть на основе CNN или Transformer, как мы рассматривали в Главе 5.

Для эффективного извлечения важно выровнять embedding изображений с embedding текста. Например, если запрос «How many cats are in the company?», система должна обеспечить, чтобы закодированный запрос был близок к embedding релевантных изображений, например, с котами. Существуют два основных подхода для достижения этого выравнивания:

  • Общее пространство embedding: Используйте encoder изображений и текста, которые генерируют embedding в общем пространстве. CLIP [14] предоставляет предобученные encoder с общим пространством embedding, обеспечивая кросс-модальное извлечение.
  • Генерация подписей к изображениям: Сначала сгенерируйте текстовое описание изображения с помощью модели генерации подписей. Затем сгенерированную подпись можно закодировать с помощью text encoder, гарантируя, что данные изображений и текста существуют в одном пространстве embedding. Этот подход полезен при использовании отдельных моделей для text и image encoder или когда обучение совместной модели ресурсоёмко. Для получения дополнительной информации о построении системы генерации подписей к изображениям с нуля обратитесь к Главе 5.
Image represents two approaches to image captioning.  Approach 1 depicts a CLIP model, consisting of an Image Encoder (light blue) and a Text Encoder (light green), processing an image and generating a text embedding.  The output of both encoders is then fed into an index (represented by a database cylinder), presumably for storage or retrieval. Approach 2 shows a simpler system where an image is first processed by an 'Image Captioning' module (grey), generating a caption like 'The image shows a cat sitting...'. This caption is then fed into a Text Encoder (light green), and the resulting text embedding is stored in an index (database cylinder).  The dashed lines in Approach 2 indicate a potential feedback loop or further processing of the generated caption.  Both approaches ultimately aim to store image-text embeddings within an index for later use, but they differ in their initial processing steps and the type of information indexed.
Рисунок 10: Два подхода для достижения выравнивания текст-изображение

Подводя итог, процесс индексации использует text encoder и image encoder для преобразования чанков данных в embedding. Эти модели часто предобучены, что означает, что их можно применять напрямую без дополнительного обучения. Для целей этой главы мы используем предобученную модель CLIP как text, так и image encoder.

Извлечение

Процесс извлечения включает преобразование запроса пользователя в то же пространство embedding, что и индексированные данные. Это делается с помощью того же text encoder, который использовался в процессе индексации. После вычисления embedding запроса он сравнивается с хранящимися embedding для извлечения наиболее релевантных чанков данных.

Генерация

Компонент генерации отвечает за создание финального ответа на основе запроса пользователя и извлечённого контекста. Эта задача обычно выполняется LLM, которая генерирует контекстуально релевантный текст.

Системы RAG могут работать с различными типами LLM независимо от их архитектуры, включая decoder-only Transformer (подробности см. в Главе 4) или облачные модели, поддерживающие fine-tuning через API [15] [16].

Обучение

Большинство компонентов системы RAG начинают с предобученных моделей, поэтому fine-tuning LLM обычно не является первым шагом в оптимизации производительности. Во многих случаях хорошо спроектированный процесс извлечения в сочетании с эффективным prompt engineering может дать удовлетворительные результаты. Fine-tuning следует рассматривать, когда система постоянно не может предоставить точные или релевантные ответы, даже после настройки параметров извлечения и разработки промптов. Например, если извлечённые документы релевантны, но LLM не генерирует качественные ответы, fine-tuning может помочь LLM лучше понять контекст и нюансы извлечённых данных.

Один многообещающий подход к fine-tuning LLM в системах RAG — Retrieval-Augmented Fine-Tuning (RAFT). Давайте кратко рассмотрим RAFT.

RAFT

RAFT [17] вводит новый метод обучения для улучшения способности LLM обрабатывать как релевантную, так и нерелевантную информацию в извлечённых документах.

В традиционных системах RAG выход LLM сильно зависит от качества извлечённых документов. Однако нерелевантные документы могут быть включены в результаты извлечения. Эти нерелевантные документы могут ввести LLM в заблуждение, заставив её генерировать субоптимальные ответы. RAFT решает эту проблему, включая различие между релевантными и нерелевантными документами в процесс fine-tuning. Этот процесс включает два ключевых шага:

  • Разметка документов: Извлечённые документы помечаются как релевантные (золотые) или нерелевантные (отвлекающие). Это предоставляет LLM чёткие сигналы о том, на каких документах следует сосредоточиться.
  • Совместное обучение: Во время fine-tuning LLM обучается генерировать ответы на основе релевантных документов, минимизируя влияние нерелевантных документов. Это требует корректировки функции потерь модели для штрафования использования нерелевантных документов при генерации ответа.

Обучая модель приоритизировать релевантный контент и игнорировать отвлекающие факторы, RAFT улучшает способность LLM справляться с зашумлёнными результатами извлечения и генерировать точные и релевантные ответы. Эта способность критически важна в реальных приложениях, где системы извлечения могут быть не всегда идеальными. Для получения дополнительной информации о RAFT обратитесь к [17].

Image represents a comparison of two training methods for a question-answering system, along with a testing methodology.  The top half depicts the 'Train: RAFT' method, which uses three sampled negative documents labeled 'Adam,' 'GloVe,' and 'ResNet' (marked with red 'X's), alongside a positive document ('Attention is all you need,' marked with a green checkmark) and a user query ('query,' represented as a cloud). These are combined to train a model (represented by a robot). The bottom half shows the 'Train: Golden Only' method, using only a single positive document ('Attention is all you need') and the same query to train a separate model.  A vertical line separates the training sections from the testing section ('Test: RAG Top-k'). The testing section shows three different models (LLaMa2, Sliding Window, and Mistral 7B), each receiving the same query and producing an output document (represented by a question mark).  These outputs are then fed into a final model (another robot) which is also labeled with 'What attention is used in Mistral,' indicating the testing focuses on the attention mechanism used in the Mistral 7B model. The 'top-k...' label suggests a top-k selection process is used to choose the best output from the three models before feeding it to the final model.
Рисунок 11: Метод обучения RAFT (Изображение взято из [17])

Сэмплирование

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

Извлечение

Процесс извлечения происходит в два основных шага:

  • Вычисление embedding запроса
  • Выполнение поиска ближайших соседей
. Вычисление embedding запроса

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

Image represents a simplified data flow diagram illustrating a text encoding process.  A user query, 'How do I submit an...', is presented as input within a rectangular box labeled 'User query'.  This query is then passed as input, via a directed arrow, to a light green rectangular box labeled 'Text encoder'. The text encoder processes the user's query. The output of the text encoder is a vector of numerical values (0.1, 0.9, 0.3, 0.4) represented as a column of cells, suggesting a numerical embedding of the text.  Below this vector, '$E_...' indicates that this is a part of a larger embedding vector, with the ellipsis suggesting further values not shown in the image. The arrows indicate the unidirectional flow of data from the user query through the text encoder to the resulting numerical embedding.
Рисунок 12: Запрос пользователя, преобразованный в embedding
. Выполнение поиска ближайших соседей

После вычисления embedding запроса система выполняет поиск ближайших соседей для нахождения чанков данных, наиболее похожих на запрос. Поиск ближайших соседей решает задачу идентификации точек данных в наборе данных, которые наиболее близки к заданной точке запроса, на основе выбранной меры сходства. Распространённые меры включают евклидово расстояние [18], косинусное сходство [19] или другие метрики расстояния, которые захватывают взаимосвязи между точками данных в пространстве embedding.

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

Алгоритмы ближайших соседей обычно делятся на две категории:

  • Точный поиск ближайших соседей
  • Приближённый поиск ближайших соседей
Точный поиск ближайших соседей

Точный поиск ближайших соседей, также называемый линейным поиском, — это простейшая и наиболее точная форма поиска ближайших соседей. Он вычисляет расстояние между embedding запроса, EqE_qEq​, и каждым элементом в наборе данных, извлекая kkk ближайших соседей.

Image represents a two-dimensional scatter plot with axes labeled X1 and X2.  The plot displays numerous data points marked as 'x' scattered across the plane. A subset of these data points, approximately five, are enclosed within a dashed elliptical boundary.  This ellipse is labeled with 'k=3' indicating a parameter likely related to the number of data points within the cluster or a clustering algorithm's parameter.  Within the ellipse, a short dashed line connects two 'x' points, and the text '$E_...' is positioned near this line, suggesting this might represent an error term or a distance calculation within the cluster. The remaining data points outside the ellipse are distributed across the plot, indicating potential separation into different clusters or groups.  The overall image suggests a visualization of a clustering algorithm's result, possibly k-means with k=3, showing the identified cluster and its centroid (or a similar representation implied by the ellipse and the '$E_...' notation).
Рисунок 13: Топ-3 ближайших соседей к embedding запроса

Хотя этот метод гарантирует нахождение истинных ближайших соседей, он имеет временную сложность O(N×D)O(N\times D)O(N×D), где NNN — количество элементов в наборе данных, а DDD — размерность embedding. Эта линейная сложность может сделать процесс очень медленным при работе с крупномасштабными системами, такими как система RAG, индексирующая десятки миллионов элементов. Например, выполнение точного поиска по 40 миллионам элементов для одного запроса потребует 40 миллионов сравнений, что приводит к высоким вычислительным затратам и задержке. Поэтому точный поиск ближайших соседей часто слишком медленный и вычислительно затратный для практического использования.

Приближённый поиск ближайших соседей (ANN)

Во многих приложениях достаточно извлечь элементы, которые достаточно похожи, без необходимости находить точного ближайшего соседа. Алгоритмы ANN используют специализированные структуры данных, позволяющие системе извлекать «достаточно близких» соседей без поиска по всему набору данных, тем самым сокращая время поиска до сублинейной сложности, например, O(log⁡(N)×D)O(\log(N)\times D)O(log(N)×D). Хотя эти алгоритмы обычно требуют некоторой предобработки или дополнительного хранения, они предлагают значительные преимущества в производительности.

Различные алгоритмы ANN можно разделить на следующие категории:

  • На основе деревьев
  • Locality-sensitive hashing
  • На основе кластеризации
  • На основе графов

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

На основе деревьев

Алгоритмы на основе деревьев разбивают пространство данных на множество разделов. Затем они используют характеристики дерева для выполнения более быстрого поиска. Например, k-d дерево [20] разделяет пространство на основе значений признаков, обеспечивая более быстрый поиск путём сужения релевантных областей данных. Другие алгоритмы включают R-деревья [21] и Annoy (Approximate Nearest Neighbor Oh Yeah) [22].

Image represents a visualization comparing a tree-like structure with a 2D scatter plot.  The left side shows a tree structure with a root node at the top, branching down to two child nodes, each of which further branches into two leaf nodes.  Each leaf node is labeled with '$R_...', suggesting a similar data structure or result at each leaf.  The right side displays a 2D scatter plot with axes labeled 'X1' and 'X2'.  Numerous data points marked with 'x' are scattered across the plot.  The plot is partitioned into regions by lines, with each region labeled with '$R_...', '$R_x.', or a similar variation, suggesting a classification or clustering of the data points based on their X1 and X2 coordinates. A double-headed arrow connects the tree and the scatter plot, indicating a mapping or transformation between the hierarchical representation of the tree and the spatial representation of the scatter plot.  The labels suggest that the tree structure might represent a decision tree or a similar hierarchical model used for classification, and the scatter plot shows the resulting classification regions in the feature space defined by X1 and X2.
Рисунок 14: Разделённое пространство, созданное деревом
Locality-sensitive hashing (LSH)

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

Image represents a Locality Sensitive Hashing (LSH) scheme for approximate nearest neighbor search.  The diagram shows several clusters of data points, each represented by a dashed oval containing several small circles.  These clusters represent groups of similar data points in a high-dimensional space.  A horizontal dashed line separates the high-dimensional data space from a lower-dimensional hash table.  The label 'LSH(x)' and a downward-pointing arrow indicate that the data points are transformed using an LSH function.  Lines connect each cluster to one or more specific locations (represented by circles) within the hash table.  These connections show how the LSH function maps similar data points to the same or nearby buckets in the hash table.  The hash table is depicted as a rectangular structure divided into several sections, each containing several circles representing hash buckets.  Each section likely corresponds to a different hash function used in the LSH scheme.  The arrangement demonstrates that similar data points (those within the same cluster) are likely to be hashed to the same or nearby buckets in the hash table, facilitating efficient approximate nearest neighbor search.
Рисунок 15: LSH группирует точки данных в корзины
На основе кластеризации

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

  • Межкластерный поиск: Embedding запроса сравнивается с центроидами всех кластеров, и выбираются кластеры, которые ближе заданного порога.
  • Внутрикластерный поиск: Embedding запроса сравнивается с элементами в выбранных кластерах.

Этот двухэтапный процесс — сначала сужение поиска до кластера, затем более точный поиск внутри этого кластера — значительно повышает эффективность. Этот процесс показан на Рисунке 16.

На основе графов

Алгоритмы на основе графов, такие как HNSW (hierarchical navigable small world) [24], структурируют данные как граф, где узлы представляют точки данных, а рёбра соединяют их на основе близости в пространстве embedding. HNSW работает путём навигации по этому графу иерархическим способом, начиная с грубого графа более высокого уровня и постепенно переходя к более точным уровням. Поиск уточняется на каждом уровне, исследуя только ближайшие узлы, тем самым кардинально сокращая пространство поиска.

Какая категория поиска ближайших соседей лучше всего подходит для системы извлечения RAG?

В системах RAG количество индексированных элементов обычно огромно и растёт, часто превышая сотни миллионов embedding. Временная сложность точного поиска ближайших соседей слишком высока, поэтому мы полагаемся на алгоритмы ANN для эффективного извлечения релевантных чанков данных.

Различные алгоритмы ANN имеют свои сильные стороны. Выбор правильного алгоритма ANN обычно зависит от таких факторов, как размер набора данных, требуемая скорость и компромиссы по точности. Для простоты мы используем подход ANN на основе кластеризации в компоненте извлечения системы RAG.

Image represents a system for document retrieval.  The process begins with 'Document databases' containing various document types (text and images), undergoing 'Data preparation.' This prepared data is then indexed into two separate 'Index...' databases. These indices are subsequently clustered into three distinct 'Clusteri...' groups, visually represented as ovals containing differently colored dots representing documents. A user query, 'How many cats live i...', is input into a 'Text Encoder.'  The encoded query is then compared against the clusters.  The system uses an 'Inter-Cluste...' module to assess inter-cluster similarity, rejecting two clusters (indicated by red 'X' marks) and selecting one (indicated by a green checkmark).  The selected cluster is further processed by an 'Intra-Cluste...' module to refine the retrieval.  Finally, the system outputs a list of 'Retrieved...' documents (retrieved doc 1, retrieved doc 2,..., retrieved doc k) based on the intra-cluster similarity, effectively retrieving relevant documents based on the user's query.
Рисунок 16: Общий процесс извлечения

Несколько современных фреймворков предоставляют встроенную поддержку ANN, включая:

  • Elasticsearch [10]: Широко используемая поисковая система, поддерживающая векторный поиск по сходству.
  • FAISS [25]: Популярная библиотека, разработанная Meta, обеспечивающая эффективный поиск ближайших соседей для больших наборов данных.
  • ScaNN [26]: Библиотека, разработанная Google, предназначенная для быстрого и эффективного поиска ближайших соседей на больших наборах данных.

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

Генерация

Компонент генерации принимает запрос пользователя и извлечённый контекст на вход и генерирует ответ с помощью top-p сэмплирования. Однако мы можем дополнительно улучшить качество сгенерированного ответа, включив техники prompt engineering, как показано на Рисунке 17.

Image represents a simplified diagram of a text generation system.  A 'User query' enters the system from the left and flows into a rounded rectangular box labeled 'Generation'. Inside this box, the user query is first transformed into a 'Prompt...' (represented by a light purple rectangle), which is then fed into a light gray rectangle labeled 'LLM' (likely representing a Large Language Model).  A parameter, 'Top p...', is applied to the output of the LLM.  Finally, the processed output, labeled 'Response', exits the 'Generation' box on the right.  Above the 'Generation' box, a vertical arrow indicates that additional information, labeled 'Retrieved...', is incorporated into the 'Prompt...' before it's processed by the LLM.  The overall flow is linear, from user input to prompt creation, LLM processing with parameter application, and finally to the generated response.
Рисунок 17: Обзор компонента генерации

В этом разделе мы углубимся в prompt engineering и рассмотрим, как он улучшает генерацию ответов в системе RAG.

Prompt engineering

Prompt engineering — это мощная техника, которая оптимизирует входные промпты для помощи LLM в генерации более точных и контекстуально релевантных ответов. Тщательно проектируя промпты, мы можем направлять выход модели для лучшего соответствия конкретным задачам, улучшая общую производительность. Хотя prompt engineering можно применять как в извлечении (например, создание лучших запросов для оптимизации поиска), так и в генерации, мы фокусируемся на его применении к генерации в образовательных целях. Тот же подход можно использовать и для улучшения производительности извлечения.

Давайте начнём этот раздел с принципов проектирования промптов, а затем перейдём к техникам prompt engineering.

Принципы проектирования промптов

Эффективное проектирование промптов критически важно для максимизации производительности языковых моделей. Следуя ключевым принципам, мы можем повысить качество сгенерированного вывода и снизить количество нерелевантных или запутанных ответов. Ниже представлены некоторые основные принципы prompt engineering:

  • Начинайте просто: Начните с простых промптов и постепенно добавляйте сложность. Итеративные эксперименты — ключ к совершенствованию промптов. Такие инструменты, как Cohere's Playground [27], позволяют легко тестировать и корректировать промпты по мере необходимости.
  • Разбивайте сложные задачи: Разбивайте задачи, включающие несколько подзадач, на более мелкие, управляемые шаги. Это позволяет не перегружать LLM и обеспечивает лучшую фокусировку на отдельных подзадачах.
  • Используйте ясные инструкции: Будьте явными с инструкциями, используя ясные, ориентированные на действие команды, такие как «Напишите», «Суммаризируйте» или «Переведите». Экспериментируйте с различными инструкциями, чтобы найти то, что лучше всего подходит для вашей задачи. Размещение инструкций в начале промпта, разделённых разделителями, такими как «###», также может помочь организовать промпт.
  • Будьте конкретны: Конкретность ведёт к более точным ответам. Ясно опишите, что вы ожидаете в терминах формата, стиля или результатов. Однако избегайте перегрузки промпта ненужными деталями — включайте только то, что релевантно задаче.
  • Экспериментируйте с длиной промпта: Учитывайте длину промпта. Слишком много ненужной информации может запутать LLM, а слишком мало может привести к размытым ответам. Найдите баланс, будучи лаконичными, но достаточно детальными для эффективного направления LLM.
Техники prompt engineering

Было разработано несколько техник prompt engineering для улучшения качества выхода LLM. Некоторые из наиболее эффективных включают:

  • Chain-of-thought промптинг
  • Few-shot промптинг
  • Ролевой промптинг
  • Пользовательско-контекстный промптинг
Chain-of-thought промптинг

Chain-of-thought (CoT) промптинг [28] включает направление модели через промежуточные шаги рассуждения перед получением финального ответа. Это особенно полезно для сложных запросов, требующих многошагового рассуждения, когда модель должна объединить информацию из нескольких документов для генерации полного ответа. CoT-промпты направляют модель на разбиение своего рассуждения на шаги, что приводит к более точным и содержательным ответам.

Image represents a rectangular box containing a single line of text: 'Given the following documents, explain the step-by-...'.  The text is centrally aligned within the box and is written in a simple, sans-serif font.  No other components, connections, or information flow are visible within the image; the box only serves as a container for the prompt, indicating that a subsequent part of the image (which is not displayed) would contain the 'following documents' referred to in the prompt.  The text 'Text is not SVG - cannot display' below the box indicates that the image originally contained additional visual information, likely a diagram or flowchart, which could not be rendered.
Рисунок 18: Пример CoT

CoT был дополнительно расширен такими техниками, как [29], которые позволяют моделям оценивать несколько путей рассуждения перед выбором лучшего ответа. o12 от OpenAI [30] и [31] показали, что способность LLM решать более сложные задачи может быть улучшена путём выделения большего вычислительного бюджета во время инференса, также известного как масштабирование вычислений во время тестирования (test-time compute scaling).

Few-shot промптинг

Few-shot промптинг [32] включает предоставление модели нескольких примеров пар ввод-вывод перед фактическим запросом. Этот метод помогает модели понять желаемый формат и тон вывода, улучшая её способность генерировать ответы, согласованные с предоставленными примерами.

Image represents a simple, text-based illustration of a question-answering system.  The image contains a single line of text within a rectangular box.  This line presents an example labeled 'Example 1,' showing a user query: 'How do plants absorb sunlight?'  A right-pointing arrow ('→') acts as a connector, visually indicating the flow of information from the query to the system's response. The system's answer, partially shown as 'Plants...', follows the arrow.  There are no other components, connections, or visual elements besides the text and the arrow. The text 'Text is not SVG - cannot display' at the bottom indicates that a visual component was intended but not rendered.
Рисунок 19: Пример few-shot промптинга
Ролевой промптинг

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

Image represents a simple text-based prompt within a rectangular frame.  The only visible component is a single line of text reading 'You are an experienced contract lawyer with over 20 years of experience specializing in corp...', indicating a scenario or context for a problem to be solved.  The text is centrally aligned within the frame.  There are no other components, connections, or information flows depicted.  The bottom of the image contains the text 'Text is not SVG - cannot display,' suggesting that the image is a placeholder or a failed attempt to render a more complex diagram.
Рисунок 20: Пример ролевого промптинга
Пользовательско-контекстный промптинг

Пользовательско-контекстный промптинг адаптирует вывод модели на основе конкретной информации о пользователе, включённой в промпт. Включая профили пользователей, предпочтения или местоположение в запросы, модель может генерировать персонализированные ответы, более релевантные для пользователей.

Image represents a rectangular box with a gray border.  The only visible content within the box is the text '[Other prompts]...', located in the top-left corner.  This suggests the box represents a container or placeholder for additional input prompts, which are not explicitly shown in the image.  There are no other components, connections, or information flows depicted within the box or connected to it. The bottom of the image displays the text 'Text is not SVG - cannot display,' indicating that the image is a placeholder for a more complex diagram that could not be rendered.
Рисунок 21: Пример пользовательско-контекстного промптинга

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

Собирая всё вместе: prompt engineering для генерации ответов

Комбинирование этих техник позволяет нам создавать высокоэффективные промпты для генерации ответов в системе RAG. Принципы, такие как ясность и конкретность, могут направлять модель на создание более точных выходов. Техники prompt engineering могут значительно усилить возможности генерации RAG, что приводит к более надёжным и контекстуально уместным результатам.

Image represents a system architecture diagram illustrating the processing flow of a user's query within a large language model (LLM) system.  The diagram shows a vertical stack of five horizontal rectangular boxes representing different stages of processing, arranged from top to bottom. The top two boxes, colored light red and pale yellow respectively, represent 'Retrieved Context...' and 'Role-Specific...', indicating the retrieval of relevant contextual information and role-specific knowledge. The third box, light blue, contains the user's initial query labeled '[INITIAL_QUERY]...', which is the input to the system. The fourth box, light green, represents the 'CoT' (Chain of Thought) reasoning process. The bottom box, light purple, represents 'User-Context...', indicating the user's historical interaction data.  Arrows point from each of these boxes to the right, connecting them to corresponding labeled rectangular boxes outside the main stack: 'Retrieved Context...', 'Role-Specific...', 'Few-Shot Prompt...', 'CoT', and 'User-Context...'. These external boxes represent the outputs or components used in each stage. The overall flow suggests that the system uses retrieved context, role-specific information, a few-shot prompt, chain-of-thought reasoning, and user context to process the user's initial query.
Рисунок 22: Пример финального промпта для генерации ответа

Оценка

В отличие от традиционных ML-моделей, которые оцениваются с помощью чётко определённых количественных метрик, оценка систем RAG более сложна. Эта сложность возникает потому, что качество финального текстового ответа зависит от эффективности множества компонентов в пайплайне. Для отражения этой многоаспектной оценки мы используем диаграмму триады для объяснения взаимосвязей между различными аспектами оценки.

Image represents a simplified model of a query-response system, focusing on relevance and faithfulness.  Three main components are depicted as ovals: 'Query,' 'Results,' and 'Context.'  A directed arrow labeled 'Answer Relevance...' connects 'Results' to 'Query,' indicating that the results' relevance influences the initial query.  Another arrow labeled 'Context Relevance' points from 'Query' to 'Context,' showing how the query's context is determined.  Finally, a bidirectional arrow labeled 'Faithfulness' connects 'Results' and 'Context,' suggesting a feedback loop where the faithfulness of the results to the context is evaluated and potentially influences the results.  The overall structure illustrates how a query, its context, and the resulting answers are interconnected, with relevance and faithfulness acting as key evaluation criteria.
Рисунок 23: Триада оценки RAG

Оценка системы RAG фокусируется на четырёх ключевых аспектах:

  • Релевантность контекста
  • Достоверность
  • Релевантность ответа
  • Корректность ответа

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

Релевантность контекста

Релевантность контекста измеряет, насколько точно и полно компонент извлечения выбирает релевантные документы на основе запроса. Цель — обеспечить, чтобы весь релевантный контент появлялся вверху результатов извлечения. Этот аспект напрямую оценивает эффективность механизма извлечения. Распространённые метрики для релевантности контекста включают:

  • Hit rate
  • Mean reciprocal rank (MRR)
  • Normalized discounted cumulative gain (NDCG)
  • Precision@k

Для получения дополнительной информации о метриках оценки в системах извлечения и ранжирования обратитесь к [33][34].

Достоверность

Достоверность (faithfulness) оценивает, является ли сгенерированный ответ фактически согласованным с извлечённым контекстом. Она проверяет, галлюцинирует ли компонент генерации (т.е. вводит информацию, не обоснованную контекстом). Это критически важно, поскольку система должна создавать ответы, строго отражающие исходные материалы. Оценивая достоверность, мы снижаем риск генерации правдоподобно звучащих, но фактически несогласованных ответов, тем самым повышая надёжность и достоверность вывода.

Image represents a system for generating different responses to a user's query using a Large Language Model (LLM).  A rectangular box labeled 'User's initial query: What are Marie Curie's main ac...' represents the user's input, which is a partial query about Marie Curie's accomplishments. This input, labeled 'Full prompt,' is fed into a central, light-green rectangular box labeled 'LLM,' representing the Large Language Model. The LLM processes the query and produces two different outputs, depending on a parameter seemingly related to the desired level of detail or confidence.  One output, labeled 'Marie Curie won Nobel Prizes in both Phys...', is associated with a 'High...' parameter, suggesting a more comprehensive or confident response. The other output, labeled 'Marie Curie only won a Nobel Prize in...', is associated with a 'Low...' parameter, indicating a less detailed or less confident response.  Arrows show the flow of information from the user's query to the LLM and then to the two different output boxes.
Рисунок 24: Пример достоверности

Достоверность может быть оценена с помощью следующих методов:

  • Оценка людьми: Эксперты вручную просматривают сгенерированные ответы, чтобы определить, являются ли они фактически согласованными и корректно ссылаются на извлечённые документы. Этот процесс включает перекрёстную проверку каждого утверждения с исходными материалами для обеспечения обоснованности всей сгенерированной информации.
  • Автоматизированные инструменты проверки фактов: Такие инструменты, как [35] и [36], могут автоматизировать процесс валидации, сравнивая сгенерированный ответ с базой данных проверенных фактов. Они предлагают масштабируемое решение для выявления неточностей, тем самым снижая зависимость от оценщиков-людей.
  • Проверки согласованности: Этот метод включает оценку того, предоставляет ли LLM согласованную фактическую информацию по нескольким запросам. Регулярные проверки согласованности обеспечивают, что LLM не создаёт противоречивую информацию, что необходимо для поддержания надёжности и связности ответов с течением времени.

Релевантность ответа

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

Image represents a simplified model of a Large Language Model (LLM) processing a user's query.  A rectangular box labeled 'User's initial query: What are the main cha...' represents the user's input, which is a truncated question about the main characteristics of something (likely a diet, based on the output). This 'Full prompt' is fed into a central, light-green rectangular box labeled 'LLM,' representing the core LLM processing unit. The LLM then outputs two responses, each in a separate rectangular box.  One box, connected to the LLM by a line labeled 'High relevance,' contains a response beginning 'A healthy diet should include a variet...', suggesting a high-relevance answer to the user's query. The other box, connected by a line labeled 'Low relevance,' displays a response starting 'A healthy diet is very important for o...', indicating a lower-relevance answer.  The diagram illustrates how an LLM processes an initial query and generates responses with varying degrees of relevance to the input.
Рисунок 25: Пример релевантности ответа

Корректность ответа

Корректность ответа фокусируется на том, насколько близко сгенерированный ответ соответствует правильному эталонному ответу. Она измеряет сходство между ними с помощью популярных метрик, включая BLEU, ROUGE и METEOR. Для обзора этих метрик обратитесь к Главе 3.

Image represents a simplified model of a Large Language Model (LLM) processing a user's query.  A rectangular box labeled 'Full prompt' contains the user's initial query, 'User's initial query: When and where was th...', indicating an incomplete question. This 'Full prompt' box sends this input as an arrow to a central, light-green rectangular box labeled 'LLM,' representing the core LLM processing unit.  The LLM then outputs two separate responses, each in a rectangular box.  One box, connected to the LLM by an arrow labeled 'High correctn...', displays the response 'The Eiffel Tower was completed in 1889...', suggesting a high-confidence, accurate answer. The other box, connected by an arrow labeled 'Low...', displays an identical response 'The Eiffel Tower was completed in 1889...', implying a lower confidence level in this particular output despite the identical factual content.  The diagram illustrates how an LLM processes an input and produces outputs with varying confidence levels, even if the outputs themselves are factually the same.
Рисунок 26: Пример корректности ответа

Общий дизайн ML-системы

Система RAG состоит из нескольких компонентов, которые работают вместе для эффективного извлечения и генерации ответов. В этом разделе мы рассмотрим следующие ключевые компоненты:

  • Процесс индексации
  • Фильтрация безопасности
  • Расширение запроса
  • Извлечение
  • Генерация
Image represents a system architecture diagram for a generative AI system.  The diagram is divided into two main sections: an 'Indexing process' and a 'Generation' process. The indexing process begins with 'Document databases' containing both text and image data.  These documents are processed, separating text and image components.  The text components are indexed into an 'Index...' database, and the image components are indexed into an 'Index (ima...)' database.  The generation process starts with a 'User query' that first passes through a 'Safety...' filter.  The filtered query is then processed to create a 'Query...' which is used to retrieve relevant information from the previously created indices via a 'Nearest Neighbor...' search.  The retrieved 'Text...' is combined to form a 'Prompt...', which is fed into an 'LLM' (Large Language Model). The LLM's output then undergoes another 'Safety...' check before producing the final 'Response'.  The entire generation process is enclosed within a 'Generation' box, highlighting the core functionality of the system.  The flow of information is clearly depicted through arrows connecting each component, showing the sequential processing steps.
Рисунок 27: Общий дизайн системы RAG

Процесс индексации

Процесс индексации отвечает за преобразование базы знаний в embedding, которые затем сохраняются в индексной таблице для эффективного извлечения. Это начинается с парсинга и чанкинга документов, где текст и изображения в PDF разбиваются на осмысленные чанки данных. Затем эти чанки преобразуются в embedding с помощью text и image encoder CLIP, гарантируя, что embedding текста и изображений находятся в общем пространстве embedding. После получения embedding чанки данных сохраняются в индексной таблице, обеспечивая быстрое извлечение.

Фильтрация безопасности

Компонент фильтрации безопасности обеспечивает безопасность пользовательских запросов и их соответствие рекомендациям системы. Это включает проверку запросов на наличие неуместного или вредоносного контента перед их дальнейшей обработкой. Для получения дополнительной информации о фильтрации и оценке безопасности обратитесь к Главе 4.

Расширение запроса

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

Для получения дополнительной информации о расширении запросов и его технических деталях обратитесь к [37].

Извлечение

Компонент извлечения отвечает за нахождение чанков данных, наиболее релевантных запросу пользователя. Запрос пользователя сначала преобразуется в embedding с помощью text encoder CLIP, а затем алгоритм ANN используется для эффективного извлечения наиболее похожих чанков данных в индексной таблице.

Генерация

После извлечения релевантных чанков данных компонент генерации создаёт финальный ответ. Это включает два основных шага:

  • Prompt Engineering: Запрос пользователя и извлечённый контекст объединяются в промпт, который затем оптимизируется с помощью таких техник, как CoT, для структурирования процесса рассуждения модели.
  • LLM: LLM генерирует финальный ответ с помощью top-p сэмплирования.

Другие темы для обсуждения

Если в конце собеседования останется время, рассмотрите обсуждение следующих дополнительных тем:

  • Обнаружение таблиц при парсинге документов [38] [39] [40].
  • Детали алгоритмов приближённого поиска ближайших соседей [20] [21] [23] [24].
  • Поддержка документов, загружаемых пользователями [2].
  • Динамическая стратегия извлечения [41] [42].
  • Переписывание и расширение запросов [43] [37].
  • CoT во время инференса и масштабирование вычислений во время тестирования [30] [31].

Резюме

Image represents a mind map outlining the key considerations in designing a generative AI system.  The central node is labeled 'Summary,' branching into two main categories: 'Model development' and 'Evaluation.'  'Model development' further branches into 'Architecture,' 'Training,' and 'Sampling.'  'Architecture' details indexing methods (keyword-based, full-text search, knowledge graph-based, vector-based), retrieval techniques (ANN, LSH, tree-based, clustering-based, graph-based), and generation methods (LLM, text encoder, image encoder, prompt engineering techniques, Chain-of-Thought (CoT), few-shot learning, role-specific prompting, and user context). 'Training' includes the mention of 'Hall.' 'Sampling' is a leaf node. 'Evaluation' branches into 'Content relevance,' 'Faithfulness,' and 'Answer correctness.'  A separate branch from 'Summary' labeled 'Data preparation' details 'Clarifying requirements,' 'Specifying input and output,' 'Framing as ML,' 'Finetuning,' 'ML approach,' 'Prompt engineering,' 'RAG,' 'Rule-based,' 'Document parsing,' 'AI-based,' 'Length-based,' 'Document chunking,' 'Regex-based,' and 'Splitters.'  Finally, a branch labeled 'Overall system components' includes 'Indexing process,' 'Safety filtering,' 'Query expansion,' 'Retrieval,' and 'Generation.'  Another branch labeled 'Other talking points' is also present.  The entire mind map uses color-coded branches to visually group related concepts.

Справочные материалы

[1] Perplexity. https://www.perplexity.ai/. [2] ChatPDF. https://www.chatpdf.com/. [3] LoRA: Low-Rank Adaptation of Large Language Models. https://arxiv.org/abs/2106.09685. [4] Optical character recognition. https://en.wikipedia.org/wiki/Optical_character_recognition. [5] Dedoc GitHub Repository. https://github.com/ispras/dedoc. [6] LayoutParser: A Unified Toolkit for Deep Learning Based Document Image Analysis. https://arxiv.org/abs/2103.15348. [7] Google Cloud document parser API. https://cloud.google.com/document-ai/docs/layout-parse-chunk. [8] PDF.CO document parser API. https://developer.pdf.co/api/document-parser/index.html. [9] Character text splitter in LangChain. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/character_text_splitter/. [10] Elasticsearch. https://www.elastic.co/elasticsearch. [11] A Survey on Knowledge Graphs: Representation, Acquisition, and Applications. https://ieeexplore.ieee.org/document/9416312. [12] Manning, Christopher D. "Introduction to information retrieval." (2008). [https://nlp.stanford.edu/IR-book/information-retrieval-book.html] (https://nlp.stanford.edu/IR-book/information-retrieval-book.html) [13] Modern information retrieval: A brief overview. http://singhal.info/ieee2001.pdf. [14] Learning Transferable Visual Models From Natural Language Supervision. https://arxiv.org/abs/2103.00020. [15] OpenAI finetuning documentation. https://platform.openai.com/docs/guides/fine-tuning. [16] Anthropic finetuning. https://www.anthropic.com/news/fine-tune-claude-3-haiku. [17] RAFT: Adapting Language Model to Domain Specific RAG. https://arxiv.org/abs/2403.10131. [18] Euclidean distance. https://en.wikipedia.org/wiki/Euclidean_distance. [19] Cosine similarity. https://en.wikipedia.org/wiki/Cosine_similarity. [20] Multidimensional binary search trees used for associative searching. https://dl.acm.org/doi/10.1145/361002.361007. [21] R-trees: A dynamic index structure for spatial searching. https://dl.acm.org/doi/10.1145/971697.602266. [22] Annoy library. https://github.com/spotify/annoy. [23] Similarity search in high dimensions via hashing. https://www.cs.princeton.edu/courses/archive/spring13/cos598C/Gionis.pdf. [24] Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs. https://arxiv.org/abs/1603.09320. [25] Faiss Documentation. https://faiss.ai/. [26] ScaNN. https://research.google/blog/announcing-scann-efficient-vector-similarity-search/. [27] Developer Playground. https://docs.cohere.com/v2/docs/playground-overview. [28] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. https://arxiv.org/abs/2201.11903. [29] Tree of Thoughts: Deliberate Problem Solving with Large Language Models. https://arxiv.org/abs/2305.10601. [30] OpenAI o1. https://openai.com/index/learning-to-reason-with-llms/. [31] Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters. https://arxiv.org/abs/2408.03314. [32] Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165. [33] Machine Learning System Design Interview. https://www.aliaminian.com/books. [34] Evaluation measure for information retrieval. https://en.wikipedia.org/wiki/Evaluationmeasures(information_retrieval). [35] Ragas. https://docs.ragas.io/en/stable/. [36] ARES: An Automated Evaluation Framework for Retrieval-Augmented Generation Systems. https://arxiv.org/abs/2311.09476. [37] Query2doc: Query Expansion with Large Language Models. https://arxiv.org/abs/2303.07678. [38] TableNet: Deep Learning model for end-to-end Table detection and Tabular data extraction from Scanned Document Images. https://arxiv.org/abs/2001.01469. [39] CascadeTabNet: An approach for end to end table detection and structure recognition from image-based documents. https://arxiv.org/abs/2004.12629. [40] Deepdesrt: Deep learning for detection and structure recognition of tables in document images. https://ieeexplore.ieee.org/document/8270123. [41] Active Retrieval Augmented Generation. https://arxiv.org/abs/2305.06983. [42] Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection. https://arxiv.org/abs/2310.11511. [43] ​​Precise Zero-Shot Dense Retrieval without Relevance Labels. https://arxiv.org/abs/2212.10496.

Сноски

  • Актуально на момент написания. ↩
  • Подробности неизвестны публике на момент написания. ↩
Глава 7

Генерация реалистичных лиц

~27 мин чтения

Введение

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

Image represents a horizontal arrangement of four headshots, each depicting a different individual.  The images are presented side-by-side, with no visible connections or information flow between them.  From left to right, the first headshot shows a dark-haired man with a serious expression, wearing a dark-colored shirt. The second shows a woman with shoulder-length brown hair, wearing glasses, and smiling. The third shows a young woman with long dark hair, wearing a red shirt, and exhibiting a neutral expression. The fourth headshot depicts a man with graying hair and a goatee, wearing a dark suit and light blue shirt, with a slightly smiling expression.  There are no labels, text, URLs, or parameters associated with any of the images or their arrangement.  The images appear to be simply a collection of individual portraits.
Рисунок 1: Реалистичные лица, сгенерированные StyleGAN2 [1]

Уточнение требований

Вот типичный диалог между кандидатом и интервьюером:

Кандидат: Каково основное применение системы генерации лиц? Интервьюер: Основной упор делается на развлечения и создание контента, но в будущем мы также рассмотрим её использование для сбора данных.

Кандидат: Фокус только на лицах? Или нужно генерировать тело целиком? Интервьюер: Давайте сосредоточимся только на лицах.

Кандидат: Должны ли сгенерированные лица представлять разнообразие этнических групп, возрастов и полов? Интервьюер: Да. Это крайне важно для обеспечения инклюзивности и исключения предвзятостей.

Кандидат: Должна ли система поддерживать управление атрибутами лица? Например, редактирование мимики на сгенерированном изображении с сохранением идентичности? Интервьюер: Хороший вопрос. Давайте начнём без управления атрибутами. Если останется время, можно дополнительно обсудить управление атрибутами.

Кандидат: Как мы будем собирать обучающие данные? Каков их объём? Интервьюер: Мы используем общедоступные наборы данных с соответствующими лицензиями, чтобы все данные соответствовали требованиям конфиденциальности. В наборе данных содержится 70 000 изображений разнообразных лиц.

Кандидат: Какое разрешение изображений желательно? Интервьюер: Давайте ориентироваться на 1024x1024.

Кандидат: Какова ожидаемая скорость генерации лица? Интервьюер: Система должна генерировать лица в режиме, близком к реальному времени — менее секунды.

Постановка задачи как задачи машинного обучения

Определение входных и выходных данных системы

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

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

Image represents a simplified data flow diagram illustrating a generative model, possibly for image generation.  A user request (indicated by 'User requesti...') enters the system from the left and flows into a larger, light orange rectangle. Inside this rectangle, a smaller, light purple oval labeled 'Random Noise...' represents the initial random input to the model.  The orange rectangle also contains the text 'Face...', suggesting the model is generating a face image.  A black arrow connects the 'Random Noise...' oval to the 'Face...' text, indicating the processing of the random noise.  Finally, a black arrow extends from the right side of the orange rectangle to a plain white square, representing the output of the model—likely the generated face image.  The overall flow shows a user request initiating the generation process, using random noise as input, within a larger processing block, ultimately resulting in an output image.
Рисунок 2: Входные и выходные данные системы генерации лиц

Выбор подходящего подхода ML

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

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

  • Вариационный автоэнкодер
  • Генеративно-состязательная сеть
  • Авторегрессионная модель
  • Diffusion-модель

Вариационный автоэнкодер

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

VAE состоит из двух основных компонентов:

  • Encoder
  • Decoder

Encoder: Encoder — это нейронная сеть, которая отображает входное изображение в пространство меньшей размерности, известное как latent space. Выходными данными encoder являются вектор в latent space — закодированное представление входного изображения.

Decoder: Decoder — это ещё одна нейронная сеть, которая отображает закодированное представление обратно в изображение. Выходными данными decoder является изображение того же размера, что и исходное входное изображение.

В процессе обучения VAE кодирует входные данные в latent space, а затем восстанавливает исходные входные данные из этого закодированного представления. После обучения VAE может генерировать новые изображения, выбирая точки из изученного многомерного гауссова распределения и используя decoder для отображения этих точек в форму изображения.

С помощью трюка перепараметризации (подробнее см. в [2]) VAE моделируют вектор в latent space как выбранный из многомерного гауссова распределения. Моделирование latent space помогает VAE изучать осмысленные представления, которые можно плавно интерполировать, что выгодно для таких задач, как морфинг изображений и создание вариаций входных данных.

Image represents a diagram illustrating the training and inference phases of a Variational Autoencoder (VAE).  The top section, labeled 'VAE training,' shows an input 'Image' (light blue rectangle) feeding into an 'Encoder' (orange rectangle). The encoder's output, a latent vector representation, is then passed to a 'Decoder' (light green rectangle), which reconstructs the image (light blue rectangle labeled 'Reconstru...'). The bottom section, 'VAE inference,' depicts the inference process. Here, the encoder is crossed out, indicating it's not used. Instead, a 'Random vector...' (text below a vertical rectangle representing the latent space) sampled from a 'multivariate Gaussian' (text at the bottom left) is fed directly into the 'Decoder' (light green rectangle).  The decoder then generates a new 'Generated...' image (light red rectangle).  The dashed lines delineate the two distinct phases, highlighting the difference between using an input image for training and using a random vector for generating new images during inference.
Рисунок 3: Процесс обучения и инференса VAE

VAE имеют ряд сильных и слабых сторон.

Преимущества:
  • Простая архитектура: encoder и decoder являются архитектурами нейронных сетей, простыми в реализации.
  • Быстрая генерация: по сравнению с другими подходами VAE обеспечивают быструю генерацию изображений. Процесс включает выборку случайного шума из latent space и его декодирование в изображение с помощью decoder.
  • Стабильное обучение: обучение VAE, как правило, простое и стабильное.
  • Возможность сжатия: помимо генерации изображений, VAE являются мощным инструментом для сжатия изображений в представления меньшей размерности.
Недостатки:
  • Менее реалистичные изображения: VAE плохо справляются с захватом высокочастотных деталей. Это приводит к изображениям, которые менее реалистичны по сравнению с теми, которые генерируются некоторыми другими подходами.
  • Размытость: существенным ограничением VAE является их склонность к созданию размытых изображений, лишённых чётких деталей.
  • Ограниченная новизна: VAE, как правило, с трудом генерируют изображения, существенно отличающиеся от их обучающих данных. Это ограничивает их способность создавать новые выходные данные.
  • Ограниченное управление генерацией: VAE не предназначены для поддержки дополнительных управляющих входных данных, таких как текстовые описания или управление атрибутами желаемого изображения.

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

Генеративно-состязательная сеть

Генеративно-состязательная сеть (GAN) [3] состоит из двух сетей:

  • Генератор: нейронная сеть, которая преобразует случайный шум в изображение.
  • Дискриминатор: ещё одна нейронная сеть, которая определяет, является ли данное изображение реальным или искусственно сгенерированным.

В процессе обучения эти две сети участвуют в непрерывной игре: генератор учится создавать более реалистичные изображения, а дискриминатор становится лучше в различении реальных и сгенерированных изображений. Если сгенерированное изображение правильно классифицируется как «сгенерированное», генератор получает штраф за создание нереалистичного изображения. Этот состязательный процесс продолжается до тех пор, пока генератор не создаёт изображения, которые дискриминатор больше не может отличить от реальных.

Image represents a diagram illustrating the training and inference phases of a Generative Adversarial Network (GAN).  The top section, labeled 'GAN training,' shows a data flow:  random vectors ('Random ve...') are fed into a 'Generator' (green box), which produces a 'Generated...' image (light red box). This generated image and a 'Real image' (light blue box) are both fed into a 'Discriminator' (orange box), which outputs classifications 'Fake' and 'Real,' respectively.  The discriminator's output is used to train both the generator and the discriminator. The bottom section, labeled 'GAN inference,' shows only the generator (green box) and the process of generating an image ('Generated...') from random vectors ('Random ve...'). The discriminator (grey box with an 'X' through it) is absent, indicating that during inference, only the generator is used to produce new images; the discriminator is not involved in the generation process.  Arrows indicate the direction of data flow between components.
Рисунок 4: Процесс обучения и инференса GAN
Преимущества:
  • Высококачественная генерация: GAN известны своей способностью генерировать высококачественные изображения.
  • Быстрая генерация: хотя GAN в целом медленнее VAE, генератор всё равно может генерировать изображение за один прямой проход.
  • Управление атрибутами: архитектура GAN может быть изменена для управления конкретными атрибутами, такими как возраст или выражение лица. Например, пользователь может запросить изображение лица, которое выглядит счастливым и старым.
Недостатки:
  • Нестабильность обучения: GAN сложно обучать. Распространёнными проблемами обучения являются вырождение моды [4], когда генератор создаёт ограниченное разнообразие выходных данных, и отсутствие сходимости [5], когда модель GAN не стабилизируется в процессе обучения.
  • Ограниченное управление: хотя GAN допускают управление атрибутами, выйти за его рамки сложно, например, использовать текстовое описание для генерации изображения [6].
  • Ограниченная новизна: хотя GAN хорошо справляются с генерацией вариаций изображений в определённой области, они, как правило, с трудом генерируют новые изображения, существенно отличающиеся от их обучающих данных.

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

Авторегрессионная модель

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

Image represents a diagram illustrating the training and inference processes of an autoregressive model, likely for image generation.  The left side depicts autoregressive training.  A 'Real image' (represented by a light blue square) is first 'Convert to sequence' (indicated by an arrow), resulting in a sequence of numbers (1 2 3 4 5 6 7 8 9) representing the image's features. This sequence is fed into a 'Transformer' (a large, light orange rectangle), which processes it and outputs a shifted sequence (2 3 4 5 6 7 8 9 .), where '.' likely represents an end token. The right side shows autoregressive inference.  The process begins with a 'random seed...' (indicated by a dashed arrow), which is fed into the 'Transformer' (another large, light orange rectangle). The Transformer outputs a sequence of image features (represented by smaller light blue squares), which are then 'Convert back to image' (indicated by arrows), resulting in a 'Generated...' image (a light pink square).  The inference process continues until an 'end token' is generated, signaling the completion of the image.  Both training and inference utilize a Transformer as the core processing unit, highlighting the model's autoregressive nature where the output of one step becomes the input for the next.
Рисунок 5: Процесс обучения и инференса авторегрессионной модели
Преимущества:
  • Высокая детализация и реалистичность: авторегрессионные модели генерируют изображения с высоким уровнем детализации и чёткости.
  • Стабильное обучение: по сравнению с GAN обучение авторегрессионных моделей обычно более стабильно.
  • Управление генерацией: возможно управление генерацией изображений с использованием дополнительных входных данных, например текстового запроса, описывающего желаемое содержимое изображения. Эта гибкость обусловлена архитектурой Transformer, которая может поддерживать любое количество входных данных в качестве части входной последовательности.
  • Поддержка мультимодального кондиционирования: авторегрессионные модели легко поддерживают кондиционирование по различным модальностям. Например, если в качестве входных данных предоставить праздничное аудио, сгенерированное изображение будет соответствовать звуку. Эта гибкость обусловлена архитектурой Transformer, которая может поддерживать различные модальности в качестве входных данных, если они предоставлены в виде последовательности числовых векторов.
  • Новизна: авторегрессионные модели способны генерировать новые и сложные изображения. Например, они могут сгенерировать изображение «авокадо на стуле на Марсе», даже если не видели подобных примеров в своих обучающих данных.
Недостатки:
  • Медленная генерация: авторегрессионные модели генерируют изображение последовательно, по одному token за раз. Эта последовательная генерация делает их медленнее по сравнению с VAE или GAN.
  • Ресурсоёмкость: эти модели, как правило, очень большие, с миллиардами параметров. Обучение таких больших моделей требует значительных вычислительных ресурсов, что увеличивает стоимость.
  • Ограниченные манипуляции с изображениями: в отличие от VAE и GAN, авторегрессионные модели не имеют структурированного latent space, который можно легко исследовать или манипулировать. Это ограничивает определённые типы манипуляций с изображениями, такие как управление атрибутами лица.

Подводя итог, хотя авторегрессионные модели медленны в генерации из-за своей последовательной природы, они могут генерировать высоко детализированные и новые изображения. Многие популярные модели генерации изображений, такие как DALL-E [7] от OpenAI и Muse [8] от Google, основаны на авторегрессионном моделировании. Глава 8 рассмотрит этот подход подробнее.

Diffusion-модель

Diffusion-модели — ещё один популярный подход к генерации изображений, показавший замечательные возможности. Diffusion-модели формулируют генерацию изображений как итерационный процесс. В процессе обучения шум постепенно добавляется к изображениям, а нейронная сеть обучается предсказывать этот шум. При генерации изображений в процессе инференса начинается со случайного шума. Затем обученная нейронная сеть используется для итерационного удаления шума из изображения, преобразуя шум в осмысленное изображение. Это преобразование происходит за фиксированное количество шагов, при этом на каждом шаге модель добавляет детали к изображению.

Image represents a diagram illustrating the training and inference phases of a diffusion model, likely for image generation.  The top section, labeled 'Diffusion training,' shows the process of adding noise to an original image iteratively until it becomes pure noise.  This is depicted by a sequence of images transitioning from a clear headshot to increasingly noisy versions, with arrows indicating the flow.  The label 'Adding noise' and ellipses (...) represent the iterative nature of the noise addition. The bottom section, 'Diffusion inference,' reverses this process.  It starts with an initial noisy image (labeled 'Initial...') and uses multiple 'Diffusion...' blocks (representing iterations of the diffusion model) to iteratively remove noise, progressively reconstructing a clearer image. The middle section, labeled 'Iteratively removing no...', shows the training process of reconstructing the original image from the noisy version using multiple 'Diffusion...' blocks, demonstrating the model learning to reverse the noise addition.  The final output in the inference phase is a generated image, different from the original image in the training phase, suggesting the model's ability to generate new images based on the learned noise removal process.  The arrows consistently indicate the direction of information flow (noise addition or removal) between the images and the diffusion model blocks.
Рисунок 6: Процесс обучения и инференса diffusion-модели
Преимущества:
  • Высокая детализация и реалистичность: diffusion-модели могут генерировать изображения исключительного качества и реалистичности.
  • Стабильное обучение: по сравнению с GAN обучение diffusion-моделей, как правило, стабильно.
  • Управление генерацией: подобно авторегрессионным моделям, diffusion-модели можно контролировать с помощью различных входных данных, например текста, описывающего желаемое изображение.
  • Новизна и креативность: diffusion-модели могут генерировать новые и образные изображения.
  • Устойчивость к зашумлённым изображениям: diffusion-модели эффективно удаляют шум из изображений благодаря своему процессу удаления шума. Это может быть полезно в определённых приложениях, таких как удаление шума из изображений.
Недостатки:
  • Медленная генерация: diffusion-модели генерируют изображения за несколько шагов удаления шума. Этот итерационный процесс делает их медленнее по сравнению с другими методами.
  • Ресурсоёмкость: diffusion-модели обычно большие, с миллиардами параметров. Это делает их вычислительно интенсивными и, следовательно, дорогостоящими для обучения.
  • Ограниченные манипуляции с изображениями: в отличие от VAE и GAN, у diffusion-моделей нет структурированного latent space для манипуляций с изображениями.

Подводя итог, хотя diffusion-модели медленные, они показали впечатляющую производительность в генерации высоко детализированных, разнообразных и образных изображений. Большинство современных моделей генерации изображений, таких как DALL·E 3 [9], основаны на diffusion-моделях. Глава 9 рассмотрит diffusion-модели подробно.

CharacteristicsVAEGANAutoregressiveDiffusion
QualityLowModerateHighExceptional
SpeedFastFastSlowSlow
Training stabilityStableUnstableStableStable
Control over generationLimitedLimitedFlexibleModerate
Facial manipulationNoYesNoNo
NoveltyLimitedLimitedHighHigh
Resource intensityModerateModerateHighHigh

Таблица 1: Сравнение различных подходов к генерации изображений

Для реалистичной генерации лиц мы выбираем GAN в качестве основного подхода. GAN особенно эффективны, поскольку позволяют манипулировать атрибутами лица через структурированный latent space, что является опциональным требованием в этой главе.

Image represents a simple diagram illustrating the effect of different hair styles on a person's appearance.  The diagram features a central node with two branches.  On the left, a photograph shows a young man with medium-length, slightly tousled brown hair. From this central image, two horizontal lines extend to the right. The top line is labeled 'Bald hair' and points to a photograph of the same man, but with his head shaved, showing a bald scalp. The bottom line is labeled 'Slicked-back...' and points to a photograph of the same man again, this time with his hair neatly combed back and styled. The arrangement clearly shows the transformation of the individual's appearance based on the alteration of his hairstyle, with the original image serves as the base for comparison.
Рисунок 7: Манипуляция атрибутами лица. Изображения взяты из [10].

Подготовка данных

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

  • Удаление низкокачественных или низкоразрешённых изображений: мы удаляем изображения с низким разрешением и используем ML-модели для фильтрации низкокачественных, размытых. Это обеспечивает обучение модели только на высококачественных изображениях.
  • Аугментация изображений: мы применяем методы аугментации данных, такие как отражение, поворот или настройка цвета, чтобы искусственно увеличить размер обучающих данных. Это помогает модели видеть больше вариаций изображения в процессе обучения и, таким образом, лучше обобщать впоследствии.
  • Нормализация и изменение размера изображений: мы приводим все изображения к стандартному размеру, например 1024x1024. Мы также нормализуем изображения до стандартного диапазона, как правило, от -1 до 1.
  • Повышение разнообразия: мы используем ML-классификаторы для маркировки изображений по полу, возрасту и другим атрибутам. Затем мы корректируем набор данных для обеспечения сбалансированного представления различных групп. Этот шаг имеет решающее значение для предотвращения предвзятостей в сгенерированных лицах.

Разработка модели

Архитектура

GAN состоят из двух компонентов: генератора и дискриминатора. Давайте кратко рассмотрим архитектуру каждого компонента.

Генератор

Компонент генератора принимает случайный шум в качестве входных данных и преобразует его в изображение. Его архитектура состоит из серии блоков upsampling, каждый из которых увеличивает пространственные размеры (высоту и ширину) своих входных данных. Эти блоки постепенно преобразуют низкоразмерный вектор шума в двумерное изображение желаемого размера.

Image represents a generative model architecture, likely for image generation.  The process begins with a 'Noise vector' of size 100, represented as a vertical stack of 100 units. This vector is then reshaped into a 1x1x100 tensor. This tensor is fed into a series of five 'Upsampling B...' blocks. Each upsampling block increases the spatial dimensions of the input tensor while reducing the number of channels.  The first block receives the 1x1x100 tensor and outputs a 4x4x1024 tensor.  Subsequent blocks progressively increase the dimensions to 8x8x512, 16x16x256, 32x32x128, and finally 64x64x3.  The output of the final upsampling block, a 64x64x3 tensor, represents the generated image, labeled 'Output...'.  The dimensions of each tensor are explicitly shown above each corresponding block, indicating the height, width, and channel count.  Arrows indicate the flow of information between blocks.
Рисунок 8: Серия блоков upsampling

Давайте поговорим о трёх основных компонентах блока upsampling:

  • Транспонированная convolution
  • Слой нормализации
  • Нелинейная активация
Транспонированная convolution

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

В отличие от стандартной convolution, которая скользит фильтром по входным данным, транспонированная convolution начинается с вставки нулей между пикселями входной карты признаков, фактически расширяя её. Затем расширенные входные данные свёртываются с фильтром, где шаг фильтра1 и отступ2 настраиваются для достижения желаемого размера выходных данных. Например, начиная с входных данных 1x1x100, с 1024 фильтрами размера ядра 1x1 и шагом 1, мы получаем карту признаков 4x4x1024. На следующем шаге с 512 фильтрами размера ядра 3x3 и шагом 1 мы получаем карту признаков 8x8x512. Это первые два этапа upsampling, показанные на Рисунке 8.

Image represents a visual depiction of a 2D convolution operation, likely within a convolutional neural network (CNN).  The image shows four sequential steps. In each step, a smaller, teal-colored matrix (the kernel or filter) is overlaid on a larger, underlying matrix (the input feature map). The kernel is shown in various positions, sliding across the input feature map.  The kernel's elements are implicitly multiplied with the corresponding elements of the input feature map underneath. The result of this element-wise multiplication and summation (not explicitly shown) is a single value that contributes to the output feature map. The output feature map is represented by a smaller matrix below the input, with shaded squares indicating the areas being calculated in each step. The input feature map is represented by a larger grid with dashed lines, showing the full extent of the input. The darker shaded squares in the output matrix represent the accumulated results of the convolution operation as the kernel moves across the input. The process demonstrates how the kernel convolves across the input, producing a smaller output feature map that captures spatial features from the input.
Рисунок 9: Транспонированная conv с фильтром 3x3 и *stride=1* для входных данных 4x4 [11]

В PyTorch этот слой обычно реализуется с помощью «ConvTranspose2d». Чтобы узнать больше о convolution и транспонированных convolution, обратитесь к [11].

Слой нормализации

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

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

Существует несколько слоёв нормализации, каждый со своим способом нормализации данных:

  • Batch normalization
  • Нормализация по слою
  • Instance normalization
  • Групповая нормализация
Batch Normalization (BN)

BN [12] нормализует входные данные слоя по измерению batch, вычисляя среднее и дисперсию для каждого признака. Затем нормализованные данные масштабируются и сдвигаются с использованием обучаемых параметров.

  • Преимущества: BN помогает стабилизировать процесс обучения и позволяет использовать более высокие скорости обучения, ускоряя обучение. Также выступает регуляризатором, снижая вероятность переобучения.
  • Применение: широко используется в глубоких сетях, включая свёрточные нейронные сети (CNN) и генераторы GAN.
Layer Normalization (LN)

LN [13] нормализует входные данные по признакам каждого отдельного образца, а не по измерению batch. Поэтому он вычисляет среднее и дисперсию для каждого признака по всему вектору признаков каждого образца.

  • Преимущества: LN эффективен в условиях, когда размеры batch малы или переменны, например в рекуррентных нейронных сетях (RNN) и Transformer.
  • Применение: часто используется в последовательностных моделях и сценариях, где важно единообразное поведение между образцами.
Instance Normalization (IN)

IN [14] работает путём нормализации по каждой карте признаков индивидуально для каждого образца.

  • Преимущества: IN полезен для задач, в которых внешний вид отдельных образцов сильно варьируется, поскольку позволяет сети сосредоточиться на содержимом, а не на стиле.
  • Применение: широко используется в задачах переноса стиля и генерации изображений.
Group Normalization (GN)

GN [15] нормализует входные данные, разделяя признаки на группы и нормализуя внутри каждой группы. Он предлагает баланс между BN и LN.

  • Преимущества: GN полезен в случаях с очень маленькими размерами batch, где BN может быть неэффективен.
  • Применение: часто применяется в задачах, где BN не работает из-за малых размеров batch или когда необходима единообразность поведения слоёв по группам признаков.
Image represents a comparison of four different normalization techniques (Batch Norm, Layer Norm, Instance Norm, and Group Norm) used in neural networks, visualized as 3D tensors. Each technique is depicted using a cube representing a feature map with dimensions H (height), W (width), and C (channels), where N represents the batch size.  The cubes are consistently oriented with H and W along the vertical and horizontal axes respectively, and C along the depth.  A dark blue section within each cube illustrates the portion of the tensor over which normalization is performed. In Batch Norm, normalization is across the entire batch (N) for each channel (C) at each spatial location (H, W). Layer Norm normalizes across the H, W dimensions for each channel and each sample in the batch. Instance Norm normalizes across H and W for each channel within a single sample. Finally, Group Norm divides the channels into groups and normalizes across H, W within each group for each sample.  The light gray portion of each cube represents the remaining data not included in the normalization calculation for that specific method.
Рисунок 10: Сравнение различных методов нормализации [15]
Нелинейная активация

Нелинейные функции активации, такие как ReLU [16], вносят нелинейность в модель, позволяя ей изучать сложные закономерности и представления. Без нелинейности сеть по сути была бы линейным преобразованием, независимо от глубины, что делало бы её неспособной моделировать сложные распределения данных, такие как изображения, речь или сложные функции.

Как показано на Рисунке 11, наш генератор состоит из блоков upsampling (ConvTranspose2D), каждый из которых сопровождается слоем нормализации (BatchNorm2D) и нелинейной активацией (ReLU). Финальный блок использует «Tanh» [17] вместо «ReLU». Этот выбор обеспечивает диапазон финальных выходных данных от -1 до 1, соответствующий диапазону пикселей нашего изображения после подготовки данных.

Image represents a generative model architecture, likely a type of Generative Adversarial Network (GAN) or similar, depicted as a sequence of processing blocks.  The input is a 'Noise vector,' represented as a small stack of rectangles, which feeds into a series of three identical upsampling blocks. Each upsampling block consists of a 'ConvTranspose2d' layer (for upsampling), followed by a 'BatchNorm2D' layer (for normalization), and finally a 'ReLU' activation function.  These blocks are arranged sequentially, with the output of one block feeding into the input of the next.  An ellipsis ('...') indicates the potential for more identical upsampling blocks. The final block differs slightly, replacing the ReLU activation with a 'Tanh' activation function. The output of this final block is a 3x64x64 tensor, visualized as a three-dimensional rectangular prism with dimensions labeled.  The arrows indicate the flow of data through the network, from the noise vector to the final output tensor.  The text 'Upsampling...' below each block highlights the upsampling operation performed within each block.
Рисунок 11: Архитектура генератора

Дискриминатор

Задача дискриминатора — различать реальные и сгенерированные изображения. Он функционирует как бинарный классификатор, принимая изображение в качестве входных данных и выдавая вероятность того, что изображение является реальным.

Дискриминатор включает серию блоков downsampling, за которыми следует классификационная голова. Блоки downsampling постепенно уменьшают пространственные размеры входного изображения, извлекая его признаки. Затем классификационная голова обрабатывает извлечённые признаки для предсказания вероятности того, что входное изображение является реальным.

Image represents a convolutional neural network (CNN) architecture for image classification.  The process begins with an input 'Image' represented as a 3D tensor of dimensions 64x64x3 (height x width x channels). This image then passes through a series of four 'Downsampling...' blocks, each reducing the spatial dimensions of the tensor while increasing the number of channels.  The first downsampling block outputs a 32x32x128 tensor, the second a 16x16x256 tensor, the third an 8x8x512 tensor, and the fourth a 4x4x1024 tensor.  These downsampling operations likely involve convolutional layers and pooling layers to extract features from the image at different scales.  The output of the final downsampling block (4x4x1024) is then fed into a 'Classific...' block, which is likely a fully connected layer or a series of fully connected layers responsible for classifying the image into different categories. Finally, the 'Classific...' block outputs a 'Probability' value, representing the likelihood of the image belonging to a specific class.  Arrows indicate the flow of data between the different components.
Рисунок 12: Серия блоков downsampling

Блок downsampling состоит из нескольких операций convolution для постепенного уменьшения пространственного измерения входных данных. В PyTorch мы обычно используем слой «Conv2D» с шагом 2 для уменьшения пространственных размеров вдвое. Как и в генераторе, batch normalization (BatchNorm2D) и нелинейная функция активации (ReLU) используются между слоями convolution для повышения стабильности обучения и производительности.

Классификационная голова включает один или два полностью связанных слоя, за которыми следует функция активации sigmoid. Функция sigmoid обеспечивает диапазон финальных выходных данных от 0 до 1, что критично для интерпретации выходных данных как вероятности.

Image represents a convolutional neural network (CNN) architecture for image classification.  The input is a 64x64x3 image, depicted as a 3D cube with dimensions labeled. This image is fed into a series of two identical downsampling blocks (shown in pink), each consisting of a Conv2D layer, a BatchNorm2D layer, and a ReLU activation function.  Arrows indicate the flow of data between layers.  The output of the downsampling blocks is then passed to a classification block (shown in lavender) containing a Fully Connected layer followed by a Sigmoid activation function.  The ellipsis (...) between the downsampling blocks suggests the potential for repetition of this downsampling pattern. Finally, the output of the Sigmoid layer is a probability, represented by a small square labeled 'Probabili...', indicating the network's prediction for the image's class.  The labels 'Downsamplin...' and 'Classificat...' are truncated descriptions of the respective blocks' functions.
Рисунок 13: Архитектура дискриминатора

На протяжении многих лет были разработаны различные версии GAN для различных целей. Например, StyleGAN [18] изменяет архитектуру генератора для управления атрибутами сгенерированных лиц, такими как возраст, цвет волос и мимика. Для получения подробной информации об архитектуре StyleGAN и ключевых архитектурных решениях обратитесь к [18].

Обучение

Для создания реалистичных изображений мы обучаем GAN с использованием уникального процесса, называемого состязательным обучением. При состязательном обучении генератор и дискриминатор обучаются одновременно в игровом сценарии. Генератор стремится создавать изображения, выглядящие как настоящие, в то время как дискриминатор улучшает свою способность различать реальные и сгенерированные изображения. В ходе этого состязательного процесса генератор учится создавать всё более убедительные изображения. В то же время дискриминатор становится лучше в выявлении поддельных изображений. Этот конкурентный процесс продолжается до тех пор, пока генератор не создаёт изображения, которые дискриминатор больше не может обнаружить как поддельные.

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

  • Обучать дискриминатор несколько итераций, держа генератор замороженным.
  • Обучать генератор несколько итераций, держа дискриминатор замороженным.
Image represents a diagram illustrating the training process of a Generative Adversarial Network (GAN).  The diagram is divided into two sections, separated by a dashed line.  The upper section, labeled '1 Training the discriminat...', depicts the training of the discriminator.  A 'Noise vector' is input into a 'Frozen...' component (presumably a pre-trained generator), which outputs a sample. This sample, along with samples from a 'Real...' dataset (represented as a cylinder), is fed into the 'Discriminator'. The discriminator outputs a 'Probability' indicating whether the input is real or generated. The lower section, labeled '2 Training the generator', shows the training of the generator.  A 'Noise vector' is input into the 'Generator', which produces a sample. This sample is then fed into a 'Frozen...' discriminator (the discriminator from the first step, now with fixed weights, indicated by a lock icon), which outputs a 'Probability'.  Both sections show the flow of data from the noise vector, through the generator or frozen generator, to the discriminator or frozen discriminator, and finally to a probability output.  The 'Real...' datasets in both sections represent real-world data used for training.  The lock icons indicate that the respective components are frozen during their respective training phases.
Рисунок 14: Поочерёдное обучение генератора и дискриминатора

Далее рассмотрим цель ML и функцию потерь для обучения модели GAN.

Цель ML и функция потерь

Генератор и дискриминатор имеют свои собственные конкретные, конфликтующие цели. Дискриминатор стремится точно различать реальные и сгенерированные изображения. Генератор стремится создавать изображения, которые дискриминатор не может отличить от реальных. Мы сначала изучим функцию потерь и цель ML каждого компонента, а затем объединим их в единую функцию потерь для GAN.

Дискриминатор

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

Где:

  • D(x(i))D\left(x^{(i)}\right)D(x(i)) — предсказанные дискриминатором вероятности для реального изображения,
  • G(z(j))G\left(z^{(j)}\right)G(z(j)) — выходные данные генератора (поддельное изображение) для случайного шума,
  • mmm — количество реальных изображений,
  • nnn — количество поддельных изображений.

Цель ML дискриминатора — минимизировать функцию потерь бинарной перекрёстной энтропии.

Генератор

Генератор стремится создавать реалистичные изображения, которые дискриминатор не может отличить от реальных. В идеале дискриминатор должен предсказывать вероятности, близкие к 1, для изображений, созданных генератором. Для достижения этого цель ML формулируется как максимизация log⁡(D(G(z(j))))\log \left(D\left(G\left(z^{(j)}\right)\right)\right)log(D(G(z(j)))) для всех поддельных изображений или, эквивалентно, минимизация следующей функции потерь:

Minimax loss GAN

Minimax loss [19], изначально использованный в статье о GAN, объединяет потери генератора и дискриминатора в единую функцию:

Дискриминатор стремится максимизировать потери, а генератор — минимизировать их. Следовательно, общая цель ML такова:

Помимо minimax loss, исследователи предложили другие функции потерь для улучшения стабильности обучения в GAN. Чтобы узнать больше об этих функциях потерь, обратитесь к [20].

Типичные проблемы обучения GAN

GAN сложнее обучать по сравнению с другими генеративными моделями, такими как авторегрессионные или diffusion-модели. Обсуждение этих проблем полезно на собеседовании по проектированию ML-систем. В этом разделе мы обсудим три основные проблемы обучения GAN:

  • Затухание градиентов
  • Вырождение моды
  • Отсутствие сходимости
Затухание градиентов

Проблема затухания градиентов [21] возникает, когда градиенты становятся очень маленькими в процессе обучения. Эта проблема в первую очередь затрагивает генератор. Когда дискриминатор становится слишком хорошим в различении реальных и поддельных изображений, он предоставляет генератору очень маленькие значения градиентов для обновления его параметров. Это замедляет или останавливает процесс обучения генератора.

Два распространённых метода смягчения проблемы затухания градиентов:

  • Модифицированный minimax loss
  • Wasserstein loss

Модифицированный minimax loss: оригинальная статья о GAN указывает, что минимизация исходной цели ML может привести к остановке обучения. Чтобы преодолеть это, в статье рекомендуется изменить цель генератора на максимизацию

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

Wasserstein loss: эта функция потерь используется в модифицированном GAN, называемом «Wasserstein GAN» или «WGAN». Давайте рассмотрим цель ML для дискриминатора и генератора WGAN.

  • Дискриминатор WGAN: дискриминатор для WGAN, также известный как «критик», отличается от дискриминатора в традиционном GAN. Вместо классификации изображений как реальных или поддельных критик выдаёт оценку, представляющую «реалистичность» изображения. Потери критика определяются как разница между выходными данными критика для реальных и поддельных изображений. Следовательно, цель ML критика — максимизировать потери критика.
  • Генератор WGAN: цель ML для генератора WGAN — максимизировать вероятность того, что поддельные изображения будут идентифицированы как реальные:
Вырождение моды

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

В процессе обучения генератор может научиться обманывать систему, находя одно изображение, которое кажется наиболее правдоподобным для дискриминатора. Как только генератор находит это наиболее правдоподобное изображение, он может продолжать создавать одно и то же изображение, чтобы обмануть дискриминатор. Следовательно, генератор никогда не учится генерировать другие изображения. Этот тип сбоя в GAN известен как «вырождение моды» (mode collapse). Два распространённых метода смягчения вырождения моды:

  • Wasserstein loss
  • Unrolled GAN [22]

Чтобы узнать больше об unrolled GAN и о том, как он смягчает вырождение моды, обратитесь к [4].

Отсутствие сходимости

Обучение GAN, как правило, сложное, а процесс зачастую нестабильный. Это обусловлено проблемой «отсутствия сходимости», распространённой в обучении GAN. Давайте разберёмся, почему это происходит.

По мере улучшения генератора в процессе обучения производительность дискриминатора снижается, поскольку становится всё труднее различать реальные и поддельные изображения. Если генератор достигает точки, в которой он может идеально имитировать реальные данные, точность дискриминатора падает до 50 процентов; он фактически начинает делать случайные предположения, подобно подбрасыванию монеты. Это снижение производительности дискриминатора препятствует сходимости GAN, поскольку его обратная связь постепенно становится всё менее и менее полезной для генератора. Когда обучение продолжается за определённую точку, генератор начинает обучаться на бесполезной обратной связи, и его качество может ухудшиться в результате.

Существуют различные подходы для улучшения стабильности обучения и сходимости GAN:

  • Нормализация: применение таких методов, как batch normalization, помогает стабилизировать обучение, обеспечивая единообразное распределение по слоям.
  • Различные скорости обучения: использование различных скоростей обучения для генератора и дискриминатора может помочь сбалансировать их прогресс и избежать нестабильности обучения.
  • Регуляризация: применение методов регуляризации, таких как затухание весов, предотвращает переобучение и помогает поддерживать стабильность обучения.
  • Добавление шума к входным данным дискриминатора: внедрение шума во входные данные дискриминатора может предотвратить его слишком быстрое усиление, что помогает сбалансировать конкуренцию между генератором и дискриминатором.

Чтобы узнать больше о конкретных деталях этих подходов, обратитесь к [21] и [23].

Сэмплирование

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

В процессе обучения генератор учится преобразовывать различные векторы шума в изображения. Этот процесс формирует latent space — многомерное пространство, где каждая точка представляет потенциальный вектор шума. Этот latent space важен для GAN, поскольку его генератор может отображать каждую точку на соответствующее изображение.

Image represents a latent space, depicted as an oval containing numerous dark gray dots, representing data points (likely encoded features of images).  Two red dots are positioned within this space, suggesting generated or manipulated data points.  Dashed arrows connect these red dots to images of faces positioned outside the oval. One arrow points from a red dot to an image of a man, and another arrow points from a second red dot to an image of a woman. The label 'Latent space' is placed above the oval, clearly identifying the area containing the data points. The arrangement visually suggests that the latent space encodes facial features, and the red dots represent generated or manipulated representations of faces in this space, with the arrows indicating the mapping between the latent space representation and the actual image.
Рисунок 15: Точки latent space отображаются на изображения лиц

Для генерации реалистичного изображения лица мы выбираем точку из этого latent space, известную как вектор в latent space. Затем генератор берёт этот вектор и преобразует его в изображение.

Существует два метода выборки вектора из изученного latent space:

  • Случайное сэмплирование
  • Усечённое сэмплирование

Случайное сэмплирование

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

Усечённое сэмплирование

Усечённое сэмплирование ограничивает векторы меньшей областью высокой вероятности в latent space. Усекая распределение, метод снижает вероятность генерации выбросов, что приводит к изображениям более высокого качества. Этот подход выгоден, когда основная цель — поддерживать высокий реализм в сгенерированных лицах. Если вас интересуют детали и реализация усечённого сэмплирования, обратитесь к [24].

Image represents a comparison of two sampling methods: random sampling and truncated sampling.  The image is divided into two halves by a dashed vertical line. The left half is titled 'Random sampling' and contains a single, large, light-grey circle filling most of the space. This circle visually represents the entire sample space, with all points equally likely to be selected. The right half is titled 'Truncated sampling' and shows a similar light-grey circle, but this circle contains three smaller, irregularly shaped, light-grey ellipses. These ellipses represent the selected samples, indicating that only certain regions within the sample space are considered, resulting in a non-uniform probability distribution. The text 'Text is not SVG & cannot display' is present at the bottom center, likely indicating a limitation in rendering the image.  The overall arrangement clearly contrasts the uniform distribution of random sampling with the non-uniform, truncated distribution of the second method.
Рисунок 16: Случайное vs. усечённое сэмплирование (серые области представляют зоны сэмплирования).

Подводя итог, случайное сэмплирование обеспечивает разнообразие, исследуя весь latent space, тогда как усечённое сэмплирование фокусируется на области высокой вероятности для повышения реализма. Для реалистичной генерации лиц мы используем случайное сэмплирование, так как оно обеспечивает разнообразие и обычно хорошо работает на практике.

Оценка

Метрики офлайн-оценки

Оценка систем генерации изображений включает оценку как качества, так и разнообразия сгенерированных изображений. Для этой цели разработано несколько метрик, таких как Inception score [25], расстояние Фреше для Inception (FID) [26] и расстояние ядра Inception (KID) [27]. Среди них наиболее широко используются Inception score и FID. Оценка людьми по-прежнему остаётся важным методом оценки генеративных моделей.

На собеседовании по проектированию ML-систем цель интервьюера — оценить вашу интуицию и практическое понимание, а не проверить ваши детальные знания формул и теорий. Однако широкое понимание некоторых из этих метрик всё же может быть полезным. Давайте кратко рассмотрим Inception score и FID.

Inception score

Inception score — широко используемая метрика для оценки качества сгенерированных изображений в генеративных моделях, таких как GAN. Метрика опирается на предобученную модель классификации изображений, такую как «Inception v3» [28], для оценки того, насколько хорошо сгенерированные изображения напоминают реальные объекты.

Вот пошаговое объяснение того, как вычисляется метрика:

  • Генерация изображений: мы начинаем с генерации большого набора изображений с использованием модели, которую хотим оценить.
  • Вычисление вероятностей классов: для каждого сгенерированного изображения модель Inception предоставляет распределение вероятностей по всем 1000 классам объектов. Высококачественное изображение должно приводить к распределению с пиком (т.е. высокой вероятностью для одного класса), указывающим, что модель распознаёт его как чёткий экземпляр класса.
  • Вычисление маргинального распределения: маргинальное распределение — это среднее предсказанных вероятностей классов по всем изображениям. Это помогает нам понять общее распределение классов, представленных в сгенерированном наборе. Если изображения разнообразны, маргинальное распределение будет плоским и распределённым по многим классам.
  • Вычисление дивергенции KL: дивергенция KL измеряет, насколько предсказанное распределение классов для каждого изображения отличается от маргинального распределения. Высококачественные изображения будут иметь распределение, сильно отличающееся от маргинального распределения. Это связано с тем, что ожидается, что высококачественное изображение будет иметь пик в своём распределении, тогда как маргинальное распределение, как ожидается, будет близко к равномерному, если изображения разнообразны.
  • Вычисление Inception score: Inception score — это экспоненцированное среднее дивергенции KL по всем изображениям. Высокий Inception score указывает на то, что отдельные изображения были уверенно классифицированы в разнообразные классы, что означает, что сгенерированные изображения одновременно разнообразны и высокого качества.
Image represents a generative model evaluation pipeline.  It begins with a Generative Adversarial Network (GAN) (labeled 'GAN' in a green box, numbered '1') which outputs a series of data samples (represented by several light orange boxes within a dashed box). These samples are then fed into an 'Inception' model (labeled 'Inceptio...', numbered '2'), which processes them and produces a set of histograms representing the distribution of features.  These histograms are then compared to a 'Marginal distribution' (labeled 'Marginal d...', numbered '3'), also represented by histograms, using a Kullback-Leibler (KL) divergence metric (labeled 'KL-diverg...', numbered '4'). The KL divergence calculation results in a series of scores (represented by empty boxes next to KL divergence calculations), each score corresponding to a specific feature distribution comparison.  Finally, these scores are aggregated and fed into an 'Inception' model (labeled 'Incept...', numbered '5'), likely for further analysis or model refinement. The entire process visually depicts the evaluation of GAN-generated data by comparing its feature distribution to a reference distribution using KL divergence as a scoring mechanism.
Рисунок 17: Вычисление Inception score

Как Inception score измеряет как разнообразие, так и качество?

  • Разнообразие: Inception score оценивает разнообразие, проверяя, приводят ли сгенерированные изображения к почти равномерному маргинальному распределению по классам, что указывает на равномерное распределение изображений по различным классам.
  • Качество: высококачественные изображения приводят к резкому, пикообразному распределению вероятностей, указывающему, что изображение чётко распознаётся как принадлежащее определённому классу. Inception score сравнивает это распределение с маргинальным распределением для оценки качества изображения.

Расстояние Фреше для Inception (FID)

FID — ещё одна популярная метрика для оценки качества изображений, создаваемых генеративными моделями. Она оценивает, насколько распределение сгенерированных изображений похоже на распределение реальных изображений. В отличие от Inception score, который использует вероятности классов, FID учитывает статистику признаков, извлечённых предобученной моделью, такой как Inception v3. Модель Inception выбрана потому, что она обучена на большом и разнообразном наборе данных (ImageNet) и может извлекать значимые признаки, представляющие содержимое и стиль изображений.

Вот пошаговое объяснение того, как вычисляется FID:

  • Генерация изображений: мы начинаем с генерации большого набора изображений с использованием модели, которую хотим оценить. Эти изображения будут сравниваться с набором реальных изображений для оценки их качества и разнообразия.
  • Извлечение признаков: мы пропускаем каждое изображение (как сгенерированное, так и реальное) через модель Inception v3 и извлекаем признаки («активации») из определённого слоя, обычно одного из ближних к концу сети. Признаки из этого глубокого слоя захватывают высокоуровневую информацию — такую как формы, текстуры и объекты — что критично для оценки реалистичности изображений.
  • Вычисление среднего и ковариации: мы вычисляем среднее и ковариацию извлечённых признаков отдельно для сгенерированных и реальных изображений. Эти статистические меры суммируют распределения признаков для обоих наборов изображений.
  • Вычисление расстояния Фреше: мы вычисляем FID как расстояние Фреше между средним и ковариацией сгенерированных и реальных изображений. Расстояние Фреше измеряет, насколько близки два распределения. Более низкий FID указывает на большее сходство между распределениями, что означает, что сгенерированные изображения более реалистичны и разнообразны. Чтобы узнать больше о расстоянии Фреше и его формуле, обратитесь к [29].
Image represents a flowchart illustrating the process of calculating the Fréchet Inception Distance (FID) score to evaluate the quality of images generated by a Generative Adversarial Network (GAN).  The process begins with a GAN (labeled 'GAN') which generates a set of 'Fake images' (represented by orange rectangles). These fake images are then fed (arrow labeled '1') into an Inception network (labeled 'Inceptio...').  Simultaneously, a set of 'Real images' (represented by green rectangles) are also fed into the same Inception network (arrow labeled '2'). The Inception network extracts features from both the fake and real images.  These features are then processed (arrows labeled '3') to calculate the mean and covariance matrices for both the fake and real image sets.  The fake image features result in 'Fake mean' (a smaller rectangle) and 'Fake covari...' (a larger rectangle), while the real image features result in 'Real mean' and 'Real covari...' (similarly sized rectangles). Finally, these mean and covariance matrices are used to compute the FID score (arrow labeled '4'), a metric that quantifies the similarity between the distributions of real and fake images.  A lower FID score indicates higher image quality.
Рисунок 18: Вычисление FID

Как FID измеряет как разнообразие, так и качество?

  • Разнообразие: FID учитывает ковариацию признаков, отражающую разброс и вариацию в признаках изображений. Разнообразный набор сгенерированных изображений будет иметь распределение признаков, аналогичное распределению реальных изображений, демонстрируя способность модели создавать широкий спектр различных изображений.
  • Качество: FID гарантирует высокое качество сгенерированных изображений, сравнивая их распределения признаков с распределениями реальных изображений. Если среднее и ковариация признаков сгенерированных изображений схожи с признаками реальных изображений, это указывает на то, что сгенерированные изображения, вероятно, будут высокого качества.

FID и Inception score полезны для оценки качества и разнообразия моделей генерации изображений, но они не всегда согласуются с человеческими суждениями. Это в основном связано с тем, что эти метрики опираются на классы ImageNet, которые могут вносить артефакты. Авторы [30] предполагают, что использование модели, не обученной на ImageNet, такой как CLIP, может обеспечить лучшее соответствие с человеческой оценкой.

Хотя метрики на основе CLIP демонстрируют перспективы в улучшении соответствия с человеческими суждениями, они всё ещё не могут полностью заменить инсайты, полученные от прямой обратной связи с людьми. Человеческая оценка по-прежнему остаётся наиболее надёжным методом оценки качества сгенерированных изображений, поскольку она улавливает нюансы, которые автоматические метрики могут упустить.

Оценка людьми

Оценка людьми имеет решающее значение для оценки систем генерации изображений, поскольку автоматические метрики могут упустить субъективные качества, такие как эстетическая привлекательность. Существуют различные протоколы для проведения оценки людьми. Один из протоколов, описанный в [31], включает представление пользователям пар изображений, сгенерированных разными моделями. Оценщики-люди просят выбрать, какое изображение выглядит более фотореалистичным. Этот подход позволяет нам сравнивать модели по критериям, более тесно согласующимся с человеческими суждениями.

Image represents a user interface element for a comparative image quality assessment.  The main component is a rectangular box displaying the question 'Which image has higher qualit...'  Inside this box are two adjacent, peach-colored square placeholders representing generated images, each outlined in gold. Below each image placeholder is a small, empty square, possibly for user selection or feedback.  A dashed arrow points from the text 'Generated b...' on the left to the leftmost image placeholder, indicating that this image is a result of a generation process. Similarly, a dashed arrow points from the rightmost image placeholder to the text 'Generated b...' on the right, showing the origin of the second image.  The overall structure suggests a user is presented with two generated images and asked to judge which one has superior quality.
Рисунок 19: Попарное сравнение в ходе оценки людьми

Метрики онлайн-оценки

На практике для обеспечения хорошей работы системы генерации изображений и соответствия ожиданиям пользователей обычно отслеживают различные метрики. Две распространённые метрики:

  • Обратная связь пользователей: эта метрика жизненно важна, поскольку напрямую отражает мнения пользователей о сгенерированных изображениях. Обратную связь пользователей можно собирать через опросы, оценки или прямые комментарии.
  • Задержка (latency): задержка — это время от момента запроса до полной генерации изображения и его доставки пользователю. Быстрое время отклика имеет решающее значение для поддержания хорошего пользовательского опыта, особенно в интерактивных приложениях. Мониторинг задержки помогает выявлять узкие места в производительности и гарантирует, что система соответствует ожиданиям пользователей.

Общий дизайн ML-системы

В этом разделе мы рассмотрим целостный дизайн реалистичной системы генерации лиц. Ключевые компоненты, которые мы изучим:

  • Генератор лиц
  • Сервис обучения
  • Сервис оценки
  • Сервис развёртывания
Image represents a system architecture diagram for a face generation application.  A user request ('User requ...') initiates the process, flowing into a 'Face Generator' component (green). This component interacts with a Generative Adversarial Network ('GAN') (grey cloud), which is responsible for generating the face images. The generated face then proceeds to an unspecified component (white box), likely representing an output or display mechanism.  The 'Face Generator' and 'GAN' are enclosed within a dashed box, suggesting a modular inference component. Below this, a vertically stacked series of services manages the system's lifecycle:  'Deployment Ser...' (teal) handles deployment of the model, 'Evaluation Ser...' (rose) evaluates its performance, and 'Training Servi...' (light blue) trains the GAN model using data from 'Training D...' (yellow cylinder, representing a training dataset).  Arrows indicate the flow of data and control between components, showing the training data feeding into the training service, which in turn updates the evaluation service, deployment service, and ultimately the GAN within the Face Generator.
Рисунок 20: Общий дизайн реалистичной генерации лиц

Генератор лиц

Генератор лиц — это основной компонент, отвечающий за создание реалистичных лиц. Он обрабатывает запросы пользователей и взаимодействует с обученной моделью GAN для выборки высококачественных изображений. Пользователи могут опционально указывать желаемые атрибуты, такие как возраст, пол, причёска и выражение лица. Сервис использует свойства StyleGAN для настройки вектора шума в latent space на основе этих атрибутов.

Архитектурные детали управления атрибутами и манипуляций с latent space обычно не обсуждаются на собеседованиях по проектированию ML-систем. Если вас интересует более глубокое изучение этой области, читайте [32][33].

Сервис обучения

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

Сервис оценки

Сервис оценки автоматически оценивает вновь обученные модели. Он использует заранее определённые метрики для оценки их производительности. Результаты оценки определяют, соответствует ли новая модель стандартам качества и должна ли она заменить существующую.

Сервис развёртывания

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

Дополнительные темы для обсуждения

Если после интервью останется дополнительное время, можно обсудить следующие темы:

  • Различные архитектуры GAN, такие как DCGAN, WGAN и StyleGAN, и компромиссы каждой архитектуры [34][35][18].
  • Методы стабилизации обучения GAN для избежания вырождения моды и проблем сходимости, включая использование Wasserstein loss, штрафа за градиент и других надёжных методов обучения [36].
  • Использование условных GAN (cGAN) для генерации лиц на основе конкретных условий или входных данных [37].
  • Метрики оценки согласованности условий [38][39].
  • Смешение стилей в генерации лиц [18].

Резюме

Image represents a mind map summarizing the key aspects of generative AI system design.  The central node is labeled 'Summary,' branching out into five main categories: Clarifying Requirements, Data Preparation, Model Development, Evaluation, and Overall System Components.  'Clarifying Requirements' further branches into 'Framing as ML' (leading to 'ML approach' with sub-branches 'VAE' and 'GAN') and 'Specifying Input and Output.' 'Data Preparation' details steps like removing low-quality images, augmentation, normalization, and diversity enhancement. 'Model Development' breaks down into 'Architecture' (describing Generator components like Transposed Conv, Normalization layers (BN, LN, IN, GN), and non-linear activation functions, and Discriminator components), and 'Training' (including adversarial training, Minimax loss function, and challenges like vanishing gradients, mode collapse, and failure to converge).  'Evaluation' is divided into 'Offline' (Inception score, FID) and 'Online' (Human evaluation, User feedback, Latency) methods. Finally, 'Overall System Components' outlines the Face generator, Training service, Evaluation service, and Deployment service.  Each branch uses color-coding for visual distinction, and the overall structure provides a hierarchical view of the design process, from initial requirements to final deployment.

Справочные материалы

[1] StyleGAN2. https://arxiv.org/abs/1912.04958. [2] Auto-Encoding Variational Bayes. https://arxiv.org/abs/1312.6114. [3] Generative Adversarial Networks. https://arxiv.org/abs/1406.2661. [4] Combating Mode Collapse in GAN training: An Empirical Analysis using Hessian Eigenvalues. https://arxiv.org/abs/2012.09673. [5] Google's GAN course. https://developers.google.com/machine-learning/gan/training. [6] StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks. https://arxiv.org/abs/1612.03242. [7] Zero-Shot Text-to-Image Generation. https://arxiv.org/abs/2102.12092. [8] Muse: Text-To-Image Generation via Masked Generative Transformers. https://arxiv.org/abs/2301.00704. [9] DALL·E 3. https://openai.com/index/dall-e-3/. [10] Attribute-specific Control Units in StyleGAN for Fine-grained Image Manipulation. https://arxiv.org/abs/2111.13010. [11] A guide to convolution arithmetic for deep learning. https://arxiv.org/abs/1603.07285. [12] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. https://arxiv.org/abs/1502.03167. [13] Layer Normalization. https://arxiv.org/abs/1607.06450. [14] Instance Normalization: The Missing Ingredient for Fast Stylization. https://arxiv.org/abs/1607.08022. [15] Group Normalization. https://arxiv.org/abs/1803.08494. [16] Deep Learning using Rectified Linear Units (ReLU). https://arxiv.org/abs/1803.08375. [17] PyTorch's Tanh layer. https://pytorch.org/docs/stable/generated/torch.nn.Tanh.html. [18] A Style-Based Generator Architecture for Generative Adversarial Networks. https://arxiv.org/abs/1812.04948. [19] Minimax. https://en.wikipedia.org/wiki/Minimax. [20] Loss functions in GANs. https://developers.google.com/machine-learning/gan/loss. [21] Towards Principled Methods for Training Generative Adversarial Networks. https://arxiv.org/abs/1701.04862. [22] Unrolled Generative Adversarial Networks. https://arxiv.org/abs/1611.02163. [23] Stabilizing Training of Generative Adversarial Networks through Regularization. https://arxiv.org/abs/1705.09367. [24] Megapixel Size Image Creation using Generative Adversarial Networks. https://arxiv.org/abs/1706.00082v1. [25] Inception score. https://en.wikipedia.org/wiki/Inception_score. [26] GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium. https://arxiv.org/abs/1706.08500. [27] Demystifying MMD GANs. https://arxiv.org/abs/1801.01401. [28] Rethinking the Inception Architecture for Computer Vision. https://arxiv.org/abs/1512.00567. [29] FID calculation. https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance. [30] The Role of ImageNet Classes in Fréchet Inception Distance. https://arxiv.org/abs/2203.06026. [31] Hierarchical Text-Conditional Image Generation with CLIP Latents. https://arxiv.org/abs/2204.06125. [32] Alias-Free Generative Adversarial Networks. https://arxiv.org/abs/2106.12423. [33] StyleGAN3. https://nvlabs.github.io/stylegan3/. [34] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks. https://arxiv.org/abs/1511.06434. [35] Wasserstein GAN. https://arxiv.org/abs/1701.07875. [36] Stabilizing Generative Adversarial Networks: A Survey. https://arxiv.org/abs/1910.00927. [37] Conditional Generative Adversarial Nets. https://arxiv.org/abs/1411.1784. [38] CLIPScore: A Reference-free Evaluation Metric for Image Captioning. https://arxiv.org/abs/2104.08718. [39] DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation. https://arxiv.org/abs/2208.12242.

Сноски

  • Шаг (stride) управляет тем, насколько фильтр перемещается по входным данным во время convolution — большие шаги пропускают больше пикселей ↩
  • Отступ (padding) добавляет дополнительные границы вокруг входных данных для управления размером выходных данных во время convolution ↩
Глава 8

Синтез изображений высокого разрешения

~15 мин чтения

Введение

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

Image represents a placeholder indicating that an image, likely a diagram relevant to generative AI system design interview preparation, has been removed.  The placeholder consists solely of the word 'removed' in a sans-serif font, centrally positioned. Below this, a small, separate line of text reads 'Text is not SVG - cannot display,' explaining the reason for the image's absence.  No other components, connections, information flow, labels, URLs, or parameters are visible; the image is entirely textual and provides no visual information about the original diagram's content.
Рисунок 1: Изображение, сгенерированное VQGAN [1]

Уточнение требований

Вот типичный диалог между кандидатом и интервьюером:

Кандидат: Должна ли система с самого начала фокусироваться на определённых категориях изображений? Интервьюер: Для простоты начнём с природных пейзажей и городских ландшафтов. Другие категории можно будет добавить позже.

Кандидат: Есть ли у нас обучающие данные с природными пейзажами? Каков размер набора данных? Интервьюер: У нас есть большой набор данных, содержащий около 5 миллионов изображений высокого разрешения с природными пейзажами и ландшафтами.

Кандидат: Должна ли система поддерживать дополнительные условия, например текстовый prompt, описывающий желаемое изображение? Интервьюер: Хороший вопрос. Мы сосредоточимся на генерации изображений без входных условий. Однако система должна быть гибкой и поддерживать входные prompt-ы.

Кандидат: На какой диапазон разрешений следует ориентироваться при генерации изображений? Интервьюер: Система должна генерировать изображения с разрешением 1024×\times×1024 или 2048×\times×2048 пикселей по запросу пользователя.

Кандидат: Изображения должны генерироваться в реальном времени или допустима некоторая задержка? Интервьюер: Генерация в реальном времени не обязательна. Однако важно обеспечить разумное время обработки. Давайте ориентироваться на пять секунд на изображение.

Формулировка задачи как задачи ML

Определение входных и выходных данных системы

Для синтеза изображений высокого разрешения пользователь просто запрашивает новое изображение. Выходными данными является изображение высокого разрешения.

Image represents a simplified workflow for image generation.  A user, depicted as a person icon labeled 'User,' initiates the process by submitting a request, indicated by the arrow and the text 'Requesting...'. This request flows into a rectangular box with rounded corners, colored peach and outlined in gold, labeled 'Image Generation...'. This box represents the core image generation process.  Finally, an arrow points from the 'Image Generation...' box to an empty square labeled 'Generated...', signifying the output of the process – the generated image.  The overall flow is linear, showing a sequential progression from user request to image generation and delivery.
Рисунок 2: Входные и выходные данные системы генерации изображений

Выбор подходящего подхода ML

Как обсуждалось в Главе 7, существует несколько подходов к генерации изображений, включая VAE, GAN, авторегрессионные модели и diffusion-модели. В этом разделе мы выбираем наиболее подходящий для данной задачи.

Большинство вариантов VAE и GAN с трудом справляются с генерацией изображений высокого разрешения, например с разрешением 512×512 пикселей и выше. Они сталкиваются с проблемой, известной как posterior collapse (коллапс апостериорного распределения). Это происходит потому, что по мере увеличения разрешения этим моделям требуется decoder с большей ёмкостью для захвата дополнительных деталей. В процессе обучения decoder может стать настолько мощным, что начнёт игнорировать входные данные из latent space, поскольку способен моделировать выходные данные самостоятельно. В результате латентные переменные почти не вносят вклада в процесс генерации, снижая разнообразие изображений.

Хотя как авторегрессионные, так и diffusion-модели способны генерировать изображения высокого разрешения, они существенно различаются по сложности и требованиям к ресурсам. Авторегрессионные модели часто считаются медленными из-за своей последовательной природы, где каждый пиксель зависит от ранее сгенерированных. Эта зависимость приводит к временной сложности, линейно возрастающей с количеством пикселей, что даёт сложность O(N2)O(N^2)O(N2) для изображения размером N×NN\times NN×N, и процесс сложно распараллелить. Чтобы решить эту проблему, авторегрессионные модели генерируют изображения по фрагментам, а не попиксельно. Например, генерация изображения 1024×\times×1024 с использованием фрагментов 64×\times×64 пикселей требует всего 256 шагов или token-ов, что значительно снижает вычислительные затраты по сравнению с традиционными попиксельными методами.

С другой стороны, сложность diffusion-моделей возрастает сверхлинейно с размером изображения, что даёт вычислительную сложность O(TN2)O(TN^2)O(TN2), где NNN — количество пикселей, а T — количество шагов удаления шума. Более крупные изображения часто требуют большего числа шагов уточнения для поддержания качества и согласованности, что ещё больше увеличивает вычислительную нагрузку.

На практике генерация изображения высокого разрешения с использованием стандартных diffusion-моделей может занимать несколько минут1. Напротив, авторегрессионные модели на основе Transformer справляются с аналогичными задачами за секунды благодаря своему подходу к генерации по фрагментам. В этой главе мы рассматриваем авторегрессионные модели в образовательных целях. В Главе 9 мы подробно рассмотрим diffusion-модели. Теперь давайте углубимся в авторегрессионные модели и их ключевые компоненты.

Image represents a two-part system for image processing, divided into an 'Image Tokenizer' module on the top and an 'Image Generator' module below, both delineated by dashed lines. The 'Image Tokenizer' module takes an input image, depicted by an icon, and processes it through a sequence of components: first, it enters a green trapezoidal 'Encoder', then flows to a yellow rounded rectangular 'Quantizer'. Above the Quantizer is a codebook labeled 'codebook C', visually represented as a grid of dashed rectangles within a yellow/orange textured area, with elements labeled e1 through ek referenced below it and a vertical brace labeled C. The Quantizer interacts with this codebook. The output from the Quantizer goes to a red trapezoidal 'Decoder'. The Decoder outputs an image, depicted by another icon, representing the reconstructed image from the quantized representation. The 'Image Generator' module initiates with a grey rectangular input labeled 'e6 Sampled first token', which is fed into an orange rounded rectangular 'Transformer'. The Transformer generates a sequence of tokens, shown as horizontal grey rectangles labeled 'e11 ... e77 e13'. This sequence of tokens is then passed upwards via an arrow to the 'Decoder' within the 'Image Tokenizer' module. The output from the Decoder in this context is shown leading to a dashed-line box labeled 'Generated Image', depicted by an icon of a plant in a pot, illustrating the image synthesized from the generated token sequence. Black arrows throughout the diagram indicate the direction of data flow.
Рисунок 3: Авторегрессионная генерация изображений

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

  • Токенизатор изображений
  • Генератор изображений

Токенизатор изображений

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

Токенизатор изображений — это отдельная модель, обучаемая независимо. Его основные функции — кодировать изображение в последовательность дискретных token-ов и декодировать последовательность дискретных token-ов обратно в изображение.

Image represents a diagram illustrating an image tokenizer, split into encoding and decoding processes.  The encoding section shows an input (implied, not explicitly shown) flowing into a trapezoidal 'Encoder' (light green), which outputs to a rectangular 'Quantizer' (pale yellow). The Quantizer outputs to a trapezoidal 'Decoder' (light gray), which then outputs a sequence of numerical tokens represented by boxes labeled '6,' '11,' '381,' '...,' and '72.'  These tokens are then connected to a light blue square, representing the encoded image representation.  The decoding section mirrors this, starting with the same sequence of numerical tokens ('6,' '11,' '381,' '...,' and '72') as input. These tokens are fed into a trapezoidal 'Encoder' (light gray), then a rectangular 'Quantizer' (pale yellow), and finally a trapezoidal 'Decoder' (light red), which outputs a light blue square representing the decoded image.  The connections between components show the flow of information, with the encoded image representation from the encoding section being used as input for the decoding section.  The overall structure highlights the process of converting an image into a numerical token sequence (encoding) and reconstructing the image from that sequence (decoding).
Рисунок 4: Кодирование и декодирование токенизатора изображений

Генератор изображений

Генератор изображений — это основная модель для генерации изображений фрагмент за фрагментом. Среди различных архитектур для генерации последовательностей decoder-only Transformer является наиболее эффективным выбором по двум причинам. Во-первых, decoder-only Transformer обладает гибкой архитектурой, способной работать с различными модальностями. В чат-боте он принимает текстовые token-ы на вход и генерирует текстовые token-ы на выходе. В задаче подписей к изображениям он принимает изображение на вход и выдаёт текстовые token-ы. Для генерации изображений он производит последовательность token-ов изображений на выходе, которые затем декодируются в изображение.

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

Image represents a comparison of three different generative AI tasks: text completion/chatbots, image captioning, and image generation.  Each task is depicted as a vertical column.  Each column shows a similar architecture: a bottom layer representing input (text for the first two, image for the third), followed by multiple smaller boxes representing an encoder, then a larger, peach-colored box labeled 'Decoder-only...', and finally a top layer representing the output (text for the first two, image for the third).  Arrows indicate the flow of information: the input feeds into the encoder, the encoder's output feeds into the decoder, and the decoder's output becomes the final output.  In the text completion/chatbot column, both input and output are text. In the image captioning column, the input is an image, and the output is text. In the image generation column, the input is text, and the output is an image, represented by a light green square.  The 'Decoder-only...' boxes suggest the use of a decoder-only transformer architecture in all three tasks.
Рисунок 5: Гибкость decoder-only Transformer при работе с различными модальностями

В итоге мы подходим к генерации изображений с помощью авторегрессионной модели на основе Transformer. Сначала генератор изображений (decoder-only Transformer) генерирует последовательность дискретных token-ов. Затем токенизатор изображений декодирует эти token-ы в итоговое изображение. Мы подробно изучим архитектуру, обучение и процессы сэмплирования этих компонентов в разделе о разработке модели.

Image represents a system for image tokenization and generation.  At the top, a light-blue square labeled 'Image' represents the input image.  This image is fed into an 'Image Tokenizer,' depicted as a rounded rectangle containing three trapezoidal components: a light-green 'Encoder,' a beige 'Quantizer,' and a light-red 'Decoder.' The image flows from the 'Image' square into the 'Encoder,' then through the 'Quantizer,' and finally into the 'Decoder.' The 'Quantizer' processes the encoded image, outputting a sequence of numerical tokens represented by a series of boxes containing numbers (6, 11, 381, ..., 72), indicating a variable-length token sequence. These tokens are then fed into an 'Image Generator' (a peach-colored rectangle at the bottom), which generates a new image based on the provided tokens.  The 'Image Generator' then sends the generated image back to the 'Decoder' to reconstruct the image.  The ellipsis (...) between 381 and 72 indicates that there are more tokens in the sequence than are explicitly shown.
Рисунок 6: Авторегрессионная генерация изображений

Подготовка данных

Процесс подготовки данных включает два ключевых шага:

  • Очистка и нормализация изображений
  • Токенизация изображений

Очистка и нормализация изображений

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

  • Удаление низкокачественных изображений: мы удаляем изображения с низким разрешением, избыточным шумом или нерелевантным содержимым. Также мы обеспечиваем, чтобы набор данных охватывал широкий спектр стилей, объектов и композиций. Этот шаг критически важен для того, чтобы генеративная модель могла создавать разнообразные изображения высокого качества.
  • Нормализация изображений: нормализация предполагает масштабирование значений пикселей до определённого диапазона, как правило от 0 до 1, для стабилизации процесса обучения.
  • Изменение размера изображений: изображения часто имеют разные размеры и соотношения сторон. Изменение размера до единого значения обеспечивает получение моделью согласованных входных данных. В соответствии с требованиями интервьюера мы изменяем размер всех изображений до 1024×1024.

Токенизация изображений

Генератор изображений требует представления изображений в виде последовательности дискретных token-ов. Для этого, после обучения токенизатора изображений, мы токенизируем все изображения в нашем обучающем наборе данных в дискретные token-ы. Важно отметить, что этот шаг подготовки данных предназначен прежде всего для генератора изображений, а не для токенизатора.

Image represents a data processing pipeline for preparing image data for training.  It begins with a cylindrical database labeled 'Raw...' representing raw image data. This data flows right into a rectangular processing unit containing three vertically stacked steps: 'Filtering,' 'Normalization,' and 'Resizing.' The output of this unit is a second cylindrical database labeled 'Preprocessed...' containing the processed images.  This database is connected to an 'Image Tokenizer,' depicted as a bow-tie shape, composed of three sections: a green 'Encoder' on the left, a yellow 'Quantizer' in the center, and a pink 'Decoder' on the right. The preprocessed image data flows into the Encoder. The Quantizer processes the Encoder's output, and this output then flows into the Decoder. Finally, the Decoder's output is a table labeled 'Prepared training data,' which contains columns labeled 'ID' and 'Token sequence,' representing the structured data ready for model training.  The table shows multiple rows of token sequences, indicated by '...', signifying a variable number of tokens.
Рисунок 7: Процесс подготовки данных

Эти два шага обеспечивают высокое качество, согласованность обучающих данных и их представление в виде последовательности числовых входных данных.

Разработка модели

Архитектура

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

Токенизатор изображений

Модель токенизатора изображений выполняет две функции:

  • Кодирование изображения в последовательность дискретных token-ов
  • Декодирование последовательности дискретных token-ов обратно в изображение

Распространённая архитектура, специально разработанная для токенизации изображений, — это Vector-Quantized VAE (VQ-VAE) [2], вариант стандартного VAE, рассмотренного в Главе 7. VQ-VAE состоит из трёх компонентов:

  • Encoder
  • Quantizer
  • Decoder
Encoder

Encoder отображает входное изображение в низкоразмерный latent space. Этот компонент кодирует важные признаки изображения в закодированное представление.

Архитектура encoder — это глубокая сверточная нейронная сеть (CNN) с несколькими сверточными слоями, каждый из которых сопровождается функцией активации ReLU [3]. Эти слои обрабатывают входное изображение и извлекают визуальные признаки.

Image represents a simplified convolutional neural network (CNN) architecture for image encoding.  The process begins with an 'Image' input, depicted as a square. This image data flows rightward through a series of three convolutional layers. The first two layers, labeled 'Conv2D + ReLU,' are identical, each performing a 2D convolution followed by a Rectified Linear Unit (ReLU) activation function.  These layers are represented by light green rectangles.  The output of each layer is a 3D tensor, visually shown as progressively shrinking cubes above the layers, illustrating the dimensionality reduction that occurs through convolution and pooling (implied by the shrinking size). The third layer, simply labeled 'Conv2D,' performs only a 2D convolution, and its output is a final 3D tensor, represented by a taller, narrower cuboid labeled 'c' (likely representing the number of channels) and described as the 'Encoded representation...'. Arrows indicate the unidirectional flow of data from the input image through each layer to the final encoded representation.
Рисунок 8: Encoder преобразует входное изображение в закодированное представление, содержащее 9 признаков, каждый с c каналами
Quantizer

Quantizer преобразует непрерывные латентные векторы в дискретные token-ы. Есть две основные причины, по которым VQ-VAE вводит компонент quantizer в стандартный VAE:

  • Предотвращение posterior collapse
  • Сокращение пространства обучения
Предотвращение posterior collapse

Posterior collapse — распространённая проблема в стандартных VAE, когда латентные переменные почти не вносят вклада или игнорируются, поскольку decoder генерирует точные выходные данные без использования latent space. Шаг квантизации устраняет эту проблему путём дискретизации латентных переменных, тем самым вынуждая модель использовать их при реконструкции. Это гарантирует, что decoder не подавляет latent space и латентные переменные активно участвуют в формировании выходных данных.

Сокращение пространства обучения

Непрерывные векторы сложно предсказывать последовательно, поскольку они имеют бесконечное множество возможностей и малые различия. Преобразуя эти векторы в дискретные token-ы, quantizer упрощает процесс, позволяя Transformer сосредоточиться на меньшем числе вариантов.

Quantizer использует внутреннюю кодовую книгу для преобразования непрерывных латентных векторов в дискретные token-ы. Эта кодовая книга содержит обучаемые embedding-и, представляющие различные паттерны во входных изображениях. Каждый embedding выступает token-ом, представленным целым числом от 1 до k. Quantizer заменяет каждый непрерывный вектор ближайшим token-ом в кодовой книге на основе евклидова расстояния [4].

Image represents a simplified illustration of a quantization process likely within a generative AI system.  A three-dimensional data cube, appearing as a stack of smaller cubes, represents the input data. This cube is connected to a labeled 'Quantizer' box, suggesting a transformation process. The quantizer takes the input data and outputs a smaller, two-dimensional matrix (a grid of numbers: 1 2 7 8; 4 3 6 3; 7 9 6 8), representing the quantized version of the input.  Above the quantizer, a larger, rectangular grid divided into six vertical sections, each further subdivided into smaller cells, likely represents the memory or storage location where the quantized data is stored or processed further. The overall arrangement shows the flow of data from a high-dimensional input (the cube) through a quantization step (the quantizer box) resulting in a lower-dimensional, compressed representation (the matrix) stored in a designated memory area (the large grid).  The style suggests a conceptual diagram rather than a precise technical representation.
Рисунок 9: Процесс квантизации

Обратите внимание, что quantizer — это таблица embedding-ов. Его единственный параметр — кодовая книга, которая изучается в процессе обучения. Единственная ответственность quantizer — отображать каждый непрерывный вектор на ближайший token в кодовой книге; поэтому на выходе получается набор идентификаторов token-ов.

Decoder

Decoder преобразует дискретные token-ы обратно в исходное изображение. Обычно он использует глубокую CNN с транспонированными свёртками (ConvTranspose2d) для постепенного преобразования представления к исходному размеру изображения. Подробнее о свёртках и транспонированных свёртках см. в [5].

Image represents a process flow starting with a grid of numbers, which is transformed into an image using a codebook. At the top is a box labeled 'Codebook', depicted as a grid of vertical segments labeled e1 through ek, representing embedding vectors, with a vertical brace labeled c indicating dimension. The process begins with a 3x3 grid of numbers (1, 27, 8, 43, 6, 33, 7, 96, 81) which is input into a purple rounded rectangle labeled 'Embedding Lookup'. An arrow points from 'Embedding Lookup' upwards to the 'Codebook', indicating that the numbers in the grid are used to look up embeddings from the codebook. The output of the 'Embedding Lookup' is represented by a 3D block composed of a 3x3 grid of smaller cubes, with a vertical brace labeled c on the left. This block is then processed sequentially through three red rounded rectangles, each labeled 'Transposed conv + ReLU'. Arrows connect the output of one stage to the input of the next. Intermediate outputs between the 'Transposed conv + ReLU' blocks are shown as larger 3D cuboids, growing in size and filled with grey or left unfilled, suggesting spatial upsampling. The final output after the third 'Transposed conv + ReLU' block is an outline of a square with an image icon inside, labeled 'Image' below, representing the resulting generated image. The diagram illustrates the process of converting a grid of discrete indices (numbers) into a continuous representation (embeddings) from a codebook, and then using transposed convolutions and ReLU activation functions to upsample this representation into a full image.
Рисунок 10: Процесс декодирования

Генератор изображений

Генератор изображений создаёт последовательность дискретных token-ов, представляющих изображение. Как упоминалось ранее, для задач генерации последовательностей часто используется decoder-only Transformer, который включает следующие компоненты:

  • Embedding lookup: заменяет каждый дискретный token его embedding-ом из кодовой книги.
  • Проекция: проецирует каждый embedding token-а в размерность, соответствующую внутреннему представлению Transformer.
  • Позиционное кодирование: добавляет позиционные кодировки к последовательности для предоставления пространственной информации.
  • Transformer: обрабатывает входную последовательность и выдаёт обновлённую последовательность векторов.
  • Предсказывающая голова: использует обновлённые embedding-и для предсказания следующего token-а.
Image represents a generative model architecture, likely for text generation.  On the left, a 'Codebook' is depicted as a collection of vectors (represented by columns of cells labeled with '$e...') which are indexed by 'c'.  A thick arrow indicates these vectors are input to an 'Embedding Lookup' layer. This layer receives input from 'Previously genera...' (presumably previously generated tokens) and outputs embeddings.  These embeddings then pass through a 'Projection' layer and a 'Positional Encoding' layer before entering a 'Transformer' block. The Transformer consists of stacked layers of 'Multi-head...', 'Normalization', 'Feed Forward', and another 'Normalization' layer, repeated 'Nx' times.  The output of the Transformer feeds into a 'Prediction Head' layer, which ultimately produces the 'Predicted n...' (presumably the next token in the sequence).  The overall flow is sequential, with information moving from the codebook, through embedding and transformer layers, culminating in a prediction.
Рисунок 11: Компоненты decoder-only Transformer

Обучение

В авторегрессионной генерации изображений выделяют два этапа обучения:

  • Этап I: Обучение токенизатора изображений
  • Этап II: Обучение генератора изображений

Этап I: Обучение токенизатора изображений

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

  • Encoder обрабатывает входное изображение и преобразует его в непрерывное представление.
  • Quantizer заменяет непрерывное представление дискретными token-ами с помощью своей внутренней кодовой книги.
  • Decoder использует дискретные token-ы для реконструкции исходного изображения.
Image represents a system for compressing and reconstructing an image using a codebook-based quantization approach. The diagram shows a flow from an input image to a reconstructed image. The process begins with an 'Image', depicted as a square with a landscape icon, which is fed into a green rounded rectangular 'Encoder'. The output of the Encoder is a 3D block structure labeled with a vertical brace 'c', representing a compressed or feature space representation. This output is then processed by a yellow rounded rectangular 'Quantizer'. Above the Quantizer is a large box labeled 'Codebook', visually represented as a grid of vertical segments representing embeddings (e1 through ek) within a yellow textured area, with a vertical brace 'c' indicating dimension. An arrow points from the Quantizer upwards to the Codebook, suggesting the Quantizer interacts with the Codebook. Additionally, an arrow points from the Codebook downwards to the 3D block output of the Encoder, implying the Codebook is used in relation to the encoded representation, likely for finding the nearest embedding vectors. The Quantizer outputs a 3x3 grid of numbers (specifically showing the values 6, 28, 3 in the top row, 16, 97, 41 in the middle row, and 26, 39, 7 in the bottom row), representing the quantized indices from the Codebook. This grid of numbers is then input into a red rounded rectangular 'Decoder'. The Decoder takes these indices and outputs a square with a landscape icon, labeled 'Reconstructed image', completing the compression and reconstruction cycle. Arrows indicate the direction of data flow through the system components.
Рисунок 12: Процесс обучения токенизатора изображений

Поскольку операция поиска в quantizer не имеет чётко определённого градиента для обратного распространения ошибки, в статье VQ-VAE предлагается аппроксимировать градиент путём его копирования непосредственно с входа decoder на выход encoder. Этот подход означает, что только выбранные token-ы получают градиенты от decoder, тогда как невыбранные token-ы не получают никаких градиентов.

Обучающие данные

Мы обучаем токенизатор изображений на 5 миллионах изображений. Поскольку обучение самонаблюдаемое и не требует меток изображений, мы включаем другие общедоступные наборы данных изображений для повышения устойчивости токенизатора. В частности, мы используем набор данных LAION-400M [6], содержащий 400 миллионов изображений. Это даёт более богатую кодовую книгу, охватывающую разнообразные визуальные паттерны.

Цель ML и функция потерь

Цель ML токенизатора изображений — точно реконструировать исходные изображения из их квантизованных token-ов. Для достижения этой цели в процессе обучения обычно используются следующие функции потерь:

  • Потери реконструкции
  • Потери квантизации

Потери реконструкции: потери реконструкции измеряют разницу между исходным изображением и его реконструкцией из квантизованных token-ов. Обычно они рассчитываются по формуле среднеквадратичной ошибки (MSE):

Где:

  • xix_ixi​ — значение пикселя исходного изображения,
  • x^i\hat{x}_ix^i​ — значение пикселя реконструированного изображения,
  • nnn — общее количество пикселей в изображении.

Потери квантизации: потери квантизации измеряют расстояние между выходными данными encoder и ближайшим embedding-ом в кодовой книге. Эти потери побуждают encoder производить выходные данные, более близкие к embedding-ам кодовой книги.

Где:

  • E(x)E(x)E(x) — непрерывный латентный вектор, произведённый encoder E из входных данных xxx,
  • zqz_qzq​ — квантизованный латентный вектор, выбранный из кодовой книги ZZZ,
  • sg⁡(.)\operatorname{sg}(.)sg(.) представляет операцию остановки градиента, которая блокирует прохождение градиентов через данный член. Здесь она используется для предотвращения обновления кодовой книги при оптимизации encoder.

Для получения дополнительных сведений о формуле потерь квантизации обратитесь к статье VQGAN [1].

На практике использование как потерь реконструкции, так и потерь квантизации в процессе обучения хорошо работает для реконструкции изображений низкого разрешения. Однако для изображений высокого разрешения модель всё ещё может давать артефакты. Для улучшения качества реконструкции при высоких разрешениях обычно применяются две дополнительные функции потерь:

  • Перцептивные потери
  • Состязательные потери

Перцептивные потери: перцептивные потери измеряют разницу между признаками исходного и реконструированного изображений, извлечёнными из определённого слоя предобученной модели, например VGG [7]. Формула:

Где:

  • ϕl\phi_lϕl​ обозначает карту признаков слоя l из предобученной модели VGG,
  • xxx — исходное изображение,
  • x^\hat{x}x^ — реконструированное изображение.

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

Состязательные потери: состязательные потери заимствованы из GAN [8], где дискриминатор пытается отличить реальные изображения от реконструированных. Эти потери используются для измерения того, насколько хорошо реконструированное токенизатором изображение может обмануть дискриминатор. Формула, как мы видели в Главе 7:

Где:

  • DDD — сеть дискриминатора,
  • x^\hat{x}x^ — реконструированное изображение.

Эта функция потерь побуждает модель создавать реконструированные изображения, которые обученный дискриминатор не может отличить от реальных. В статье VQGAN была введена патч-основанная версия этих потерь для уменьшения неестественных артефактов и улучшения реалистичности реконструкций.

Общие потери: общая функция потерь часто представляет собой взвешенную сумму отдельных потерь, описанных выше. Веса (λi)(\lambda_i)(λi​) являются гиперпараметрами, которые необходимо подбирать в зависимости от конкретных целей производительности и экспериментов.

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

Этап II: Обучение генератора изображений

Обучение генератора изображений, представляющего собой decoder-only Transformer, аналогично процессу, описанному в предыдущих главах. Обучающие данные состоят из последовательностей дискретных token-ов, и модель учится предсказывать эти token-ы последовательно в процессе обучения.

В качестве цели ML мы используем предсказание следующего token-а, а в качестве функции потерь — кросс-энтропию для измерения точности предсказанных вероятностей по сравнению с правильными визуальными token-ами.

Image represents a simplified diagram of a generative model's training process.  At the top, a column labeled 'Correct nex...' displays a sequence of four numbers: 0, 0, 1, 0. This represents the target or ground truth output sequence. Below, a column labeled 'Predicted...' shows the model's predicted output sequence: 0.1, 0, 0.8, 0.1.  These are probability values, indicating the model's confidence in each predicted digit. An arrow labeled 'loss' connects these two columns, signifying the calculation of a loss function to quantify the difference between the predicted and correct sequences.  This loss value is then used to update the model's parameters. At the bottom, a rectangular box labeled 'Image Generator...' represents the core generative model. Four upward arrows connect this box to four smaller boxes containing the numbers 1, 27, 8, and 16, which likely represent input parameters or features fed into the image generator. The overall flow shows how input parameters are processed by the image generator to produce a predicted sequence, which is then compared to the correct sequence to calculate a loss, enabling model training through backpropagation (implied, not explicitly shown).
Рисунок 13: Расчёт потерь генератора изображений

Сэмплирование

В авторегрессионных моделях генерация нового изображения включает два шага:

  • Генерация последовательности дискретных token-ов
  • Декодирование дискретных token-ов в изображение

. Генерация последовательности дискретных token-ов

На первом шаге генератор изображений производит последовательность token-ов. Авторегрессионная природа генерации гарантирует, что каждый token обусловлен предшествующими token-ами, что обеспечивает создание согласованных изображений.

Image represents a system for generating images.  On the left, a labeled box 'Codeb...' depicts a matrix or grid structure representing a codebook, with multiple cells (represented by smaller squares) containing unspecified values ('$$...$...') and labeled 'C' at the top left. A grey curved arrow connects this codebook to a rectangular box labeled 'Image Generator' in light orange.  This arrow is labeled 'Randomly selecting the f...', indicating a random selection of features from the codebook is fed into the Image Generator. The Image Generator receives input from three visible numbered squares (6, 27, 8) at the bottom, representing selected features.  Above the Image Generator, multiple vertical stacks of smaller squares labeled 'Predicted...' represent the generated image features. Each stack is topped by a numbered square (27, 8, 72), labeled 'Selected...', indicating the selected features for each generated image.  Dashed lines connect the input features (6, 27, 8) to the Image Generator and the Image Generator's output (Predicted...) to the selected features (27, 8, 72), suggesting a feedback loop or iterative process.  An ellipsis ('...') indicates that the system can handle more than three input features and generate more than three images.
Рисунок 14: Генерация последовательности дискретных token-ов с помощью генератора изображений

Вот пошаговый процесс авторегрессивной генерации последовательности token-ов:

  • Случайным образом выбирается token из кодовой книги в качестве первого token-а. Этот начальный token служит отправной точкой для всего процесса генерации.
  • Авторегрессивно генерируются token-ы один за другим. Это включает: Передачу текущей последовательности token-ов генератору изображений для предсказания распределения вероятностей по кодовой книге Выбор следующего token-а с помощью метода сэмплирования, например top-p sampling Добавление выбранного token-а к текущей последовательности

Этот процесс продолжается до тех пор, пока не будет сгенерировано всё изображение. Количество итераций зависит от разрешения и размера желаемого выходного изображения. Например, для генерации изображения размером 1024×\times×1024 пикселей, где каждый визуальный token представляет блок 64×\times×64 пикселя, требуется 256 token-ов. Процесс продолжается до тех пор, пока не будут сгенерированы все 256 token-ов. После завершения последовательности token-ов она преобразуется в реальное изображение, о чём рассказывается на следующем шаге.

. Декодирование дискретных token-ов в изображение

На этом шаге последовательность дискретных token-ов преобразуется в изображение с использованием функции декодирования токенизатора изображений.

Image represents a two-step process for image generation.  Step 1 begins with a single numerical input '6', which feeds into an 'Image Generator'. This generator outputs a sequence of numbers (27, 8, 40, ..., 72), represented as a one-dimensional array.  A 'Reshape' operation then transforms this array into a two-dimensional matrix (3x3 in this example: 6, 27, 8; 40, 97, 41; 26, 39, 72). This matrix is then input into an 'Image Tokenizer', which consists of three components: an 'Encoder' (light green), a 'Quantizer' (beige), and a 'Decoder' (light red). The quantizer processes the matrix, and the decoder outputs a tokenized representation.  Step 2 involves this tokenized output being fed into a (blank) 'Generated...' box, implying the final image generation step.  The arrows indicate the flow of data between components, showing the transformation of the initial input '6' into a matrix, then a tokenized representation, and finally, a generated image.
Рисунок 15: Декодирование token-ов в изображение

Оценка

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

Метрики офлайн-оценки

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

  • Inception score: измеряет сходство сгенерированных изображений с изображениями реальных объектов с помощью предобученной модели Inception v3. Подробнее об Inception score см. в [9].
  • Расстояние Фреше Inception (FID): сравнивает распределение сгенерированных изображений с реальными путём сравнения признаков, извлечённых из предобученной модели Inception v3. Эта метрика измеряет схожесть статистических характеристик сгенерированных и реальных изображений. Подробнее о FID см. в [10].
  • Оценка людьми: оценщики-люди получают пары изображений и оценивают их фотореализм и эстетические качества. Голоса дают статистическую меру того, какие модели со временем создают более реалистичные изображения.

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

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

Метрики онлайн-оценки

На практике компании отслеживают различные метрики для оценки качества системы в реальном времени. Распространённые метрики включают:

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

Общий дизайн системы ML

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

  • Сервис генерации
  • Сервис декодирования
  • Сервис суперразрешения
Image represents a simplified architecture diagram of an image generation system.  A user icon initiates the process, sending a request to a 'Generation...' module (light orange), which likely generates a lower-resolution image. This image is then passed to a 'Decoding...' module (light purple).  Simultaneously, the 'Generation...' module receives input from a cloud-shaped 'Image...' component, suggesting feedback or pre-existing image data is used.  The 'Decoding...' module receives input from a trapezoidal 'Tokenizer...' component, likely processing textual input for image generation. The output of 'Decoding...' feeds into a 'Super-Resolution...' module (light blue), which upscales the image resolution.  The final output, a higher-resolution image (indicated by a large square labeled '2048 x 2048'), is produced.  Intermediate stages are labeled with dimensions '1024 x 1024,' indicating image size at those points.  Arrows show the unidirectional flow of data between modules.  A small grid of squares above the 'Decoding...' module might represent a tokenized text input.
Рисунок 16: Дизайн ML-системы синтеза изображений высокого разрешения

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

Сервис генерации

Сервис генерации обрабатывает запросы пользователей и взаимодействует с обученной моделью генератора изображений для создания последовательности визуальных token-ов.

Сервис декодирования

Сервис декодирования взаимодействует с токенизатором изображений для преобразования сгенерированной последовательности визуальных token-ов в изображение. Обратите внимание, что при развёртывании модели encoder в токенизаторе изображений не нужен — он используется только в процессе обучения.

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

Сервис суперразрешения

Сервис суперразрешения использует предобученную модель для увеличения разрешения сгенерированных изображений. Например, если желаемое разрешение — 2048×\times×2048, а генератор выдаёт только 1024×\times×1024, мы используем модель суперразрешения с коэффициентом масштабирования 2x.

Этот сервис критически важен для приложений, требующих детализированного и реалистичного визуального контента, например в медицинской визуализации. Существует множество устоявшихся решений для суперразрешения: от CNN-основанных [11] до улучшенных GAN [12]. Подробнее о современных подходах см. в [13].

Дополнительные темы для обсуждения

Если в конце интервью осталось время, можно рассмотреть следующие дополнительные темы:

  • Расширение авторегрессионных моделей для поддержки текстовой генерации [14] [15].
  • Поддержка приложений, таких как дополнение изображений и суперразрешение изображений [16].
  • Балансировка разнообразия и точности при сэмплировании с использованием таких техник, как температурное масштабирование [17].
  • Повышение стабильности с помощью состязательного обучения, обрезки градиентов и планирования скорости обучения [18][19].
  • Использование прогрессивного роста и многомасштабных архитектур для улучшения качества и детализации изображений [20].
  • Создание интерактивных систем, позволяющих пользователям уточнять и настраивать сгенерированные изображения [21].

Резюме

Image represents a mind map summarizing the key aspects of designing a generative AI system for image generation.  The central element is a box labeled 'Summary,' from which several main branches radiate, each representing a crucial stage or component.  These branches include 'Clarifying requirements' (further branching into 'Framing as ML' with sub-branches 'ML approach' and 'Autoregressive modeling,' and 'Specifying input and output'); 'Data preparation' (branching into 'Image cleaning and normalization' and 'Image tokenization'); 'Model development' (branching into 'Architecture' detailing components like 'Image tokenizer,' 'Image generator,' and 'Decoder-only Transformer,' and 'Training' specifying loss functions such as 'Reconstruction loss,' 'Quantization loss,' 'Perceptual loss,' 'Adversarial loss,' and 'Cross-entropy loss,' along with processes like 'Generating discrete tokens' and 'Decoding tokens into an image'); 'Evaluation' (dividing into 'Offline' with metrics like 'Inception score,' 'FID,' 'Human evaluation,' 'Time to generate an image,' and 'Cost per generation,' and 'Online' with metrics like 'User feedback,' 'Periodic surveys,' 'Subscription rate,' and 'Churn rate'); and 'Overall system components' (branching into 'Generation service,' 'Decoding service,' and 'Super-resolution service'). Finally, a branch labeled 'Other talking points' is also present.  Each branch uses color-coding for visual distinction, and the overall structure is hierarchical, showing the relationships between different stages and components in the design process.

Список литературы

[1] Taming Transformers for High-Resolution Image Synthesis. https://arxiv.org/abs/2012.09841. [2] Neural Discrete Representation Learning. https://arxiv.org/abs/1711.00937. [3] Deep Learning using Rectified Linear Units (ReLU). https://arxiv.org/abs/1803.08375. [4] Euclidean distance. https://en.wikipedia.org/wiki/Euclidean_distance. [5] A guide to convolution arithmetic for deep learning. https://arxiv.org/abs/1603.07285. [6] LAION data set 400 million https://laion.ai/blog/laion-400-open-dataset/. [7] Very Deep Convolutional Networks for Large-Scale Image Recognition. https://arxiv.org/abs/1409.1556. [8] Generative Adversarial Networks. https://arxiv.org/abs/1406.2661. [9] Inception score. https://en.wikipedia.org/wiki/Inception_score. [10] FID calculation. https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance. [11] Image Super-Resolution Using Very Deep Residual Channel Attention Networks. https://arxiv.org/abs/1807.02758. [12] ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks. https://arxiv.org/abs/1809.00219. [13] NTIRE 2024 Challenge on Image Super-Resolution (×4): Methods and Results. https://arxiv.org/abs/2404.09790. [14] Muse: Text-To-Image Generation via Masked Generative Transformers. https://arxiv.org/abs/2301.00704. [15] VQGAN-CLIP: Open Domain Image Generation and Editing with Natural Language Guidance. https://arxiv.org/abs/2204.08583. [16] LAR-SR: A Local Autoregressive Model for Image Super-Resolution. https://openaccess.thecvf.com/content/CVPR2022/papers/ Guo_LAR-SR_A_Local_Autoregressive_Model_for_Image_Super-Resolution_CVPR_2022_paper.pdf. [17] Long Horizon Temperature Scaling. https://arxiv.org/abs/2302.03686. [18] Learning Rate Scheduling. https://d2l.ai/chapter_optimization/lr-scheduler.html. [19] Adversarial Training. https://adversarial-ml-tutorial.org/adversarial_training/. [20] Progressive Growing of GANs for Improved Quality, Stability, and Variation. https://arxiv.org/abs/1710.10196. [21] CogView2: Faster and Better Text-to-Image Generation via Hierarchical Transformers. https://arxiv.org/abs/2204.14217.

Сноски

  • Определённые оптимизации и техники (например, latent diffusion model) могут значительно ускорить процесс генерации в diffusion-моделях. Эти методы подробно рассматриваются в Главах 10 и 11. ↩
Глава 9

Генерация изображений по тексту

~23 мин чтения

Введение

Во многих случаях вместо того, чтобы позволить модели генерировать контент из случайного шума (как обсуждалось в главах 7 и 8), мы хотим управлять содержимым сгенерированного изображения. Генерация изображений по тексту (text-to-image) — это увлекательное приложение генеративного ИИ, позволяющее пользователям вводить текстовый prompt, который модель преобразует в детализированное изображение. Несколько коммерческих text-to-image сервисов уже доступны на рынке: DALL-E 3 от OpenAI [1], Imagen от Google [2] и Firefly от Adobe [3].

Image represents a humorous illustration depicting a halved avocado sitting on a teal-colored therapist's couch, expressing emotional distress.  The avocado has small arms and legs, a slightly sad facial expression, and a speech bubble emanating from it that reads 'I JUST FEEL SO EMPTY INSIDE.'  Opposite the avocado sits a therapist, represented by a figure with a spoon for a head, wearing a tan suit and holding a clipboard and pen.  A small, potted plant sits on a small wooden side table between the avocado and the therapist. The scene is set on a reddish-orange floor. The overall style is cartoonish and brightly colored, aiming for a comedic effect.  The text 'Prompt: An illustration of an avocado sitting in a therapist's cha...' appears above the image, indicating the prompt that generated the illustration.  At the bottom, the text 'Text is not SVG - cannot display' suggests that some text elements within the image are not properly rendered.
Рисунок 1: Пример prompt и сгенерированного изображения от DALL-E 3 компании OpenAI [1]

Уточнение требований

Ниже приведён типичный диалог между кандидатом и интервьюером:

Кандидат: На какое разрешение мы ориентируемся для сгенерированных изображений? Интервьюер: Мы стремимся к высокому разрешению — конкретно 1024x1024 пикселей.

Кандидат: Должна ли система поддерживать несколько языков ввода или только английский? Интервьюер: Сначала сосредоточимся на английском, но архитектура системы должна быть адаптируема для других языков в будущем.

Кандидат: Каков размер набора данных для обучения text-to-image модели? Интервьюер: У нас около 500 миллионов изображений из пользовательских активов, большинство с подписями.

Кандидат: Насколько детальными и сложными могут быть текстовые prompt'ы? Есть ли ограничения по сложности или длине? Интервьюер: Система должна обрабатывать детальные текстовые prompt'ы с максимальной длиной 128 слов.

Кандидат: Какую скорость генерации изображений должна достигать система? Интервьюер: Цель — генерация близкая к реальному времени. Ориентируемся на 10 секунд на изображение.

Кандидат: Какие типы изображений должна генерировать система? Мы сосредоточены на конкретной области, например пейзажи? Интервьюер: Система должна быть способна генерировать на основе текстовых prompt'ов широкий спектр изображений, включая реалистичные пейзажи, портреты и абстрактное или концептуальное искусство.

Кандидат: Важно обеспечить, чтобы изображения не были предвзятыми по возрасту, расе или полу. Могу ли я начать с фокуса на этих трёх атрибутах? Интервьюер: Отличное замечание. Справедливая система крайне важна. Начнём с решения вопросов по этим трём атрибутам.

Кандидат: Этические соображения критически важны. Нам нужны фильтры и проверки, чтобы не генерировать оскорбительные, неуместные или вредоносные изображения. Это верно? Интервьюер: Да, всё верно.

Формулировка задачи как ML-задачи

Определение вхо да и выхода системы

Вход системы — текстовый prompt, предоставленный пользователем, описывающий желаемое изображение. Такой prompt обычно включает детали: сцены, объекты, цвета, стили и эмоции.

Выход — визуально детализированное изображение, соответствующее текстовому prompt'у. Например, как показано на рисунке 2, prompt «Лодка в океане» создаёт изображение, изображающее эту сцену.

Image represents a simplified data flow diagram illustrating a text-to-image generation process.  On the left, 'Text prompt:...' indicates a text input, representing the user's textual description for the desired image. A black arrow points right, signifying the flow of this text input into a centrally located, light-orange, rounded-rectangle box labeled 'Text-to-Image...'. This box represents the core text-to-image model or system.  Another black arrow extends right from the 'Text-to-Image...' box, indicating the output.  On the far right, a photograph of a sailboat on a calm sea is displayed, representing the generated image output from the 'Text-to-Image...' process. The overall diagram visually depicts the transformation of a textual prompt into a corresponding image through an unspecified text-to-image generation system.
Рисунок 2: Вход и выход системы text-to-image. Авторство изображения: [4]

Выбор подходящего ML-подхода

Генерация изображений по тексту — это мультимодальная задача, включающая понимание текста и генерацию соответствующего изображения. Существует два основных подхода для построения text-to-image систем:

  • Авторегрессионные модели
  • Diffusion модели

Кратко рассмотрим каждый из них и выберем наиболее подходящий для наших нужд.

Авторегрессионные модели

Эти модели рассматривают генерацию text-to-image как задачу генерации последовательности. Decoder-only Transformer принимает последовательность текстовых token'ов на вход и выдаёт последовательность визуальных token'ов, представляющих изображение. Затем токенизатор изображений декодирует эти визуальные token'ы в фактическое изображение.

Image represents a simplified diagram of a decoder-only transformer model generating an image from a text prompt.  At the bottom, a text prompt 'A boat on an ocean' is input.  This prompt is then tokenized into several units represented by empty squares labeled 'Text tokens'. These tokens are fed as input into a decoder-only transformer, depicted as a peach-colored rectangle with the label 'Decoder-only Transformer'.  The transformer also receives input from above, consisting of image tokens (also represented by empty squares labeled 'Image tokens'), which are likely embeddings representing an image.  The output of the transformer flows upwards, ultimately generating an image of a sailboat on the ocean, shown at the top of the diagram.  The arrows indicate the direction of information flow, showing how the text prompt and potentially existing image tokens are processed by the transformer to produce the final generated image.
Рисунок 3: Авторегрессионная генерация text-to-image

На основе этого подхода разработано несколько text-to-image моделей, таких как DALL-E от OpenAI [5] и Muse от Google [6].

Diffusion модели

Впервые представленные в 2019 году [7], diffusion модели привлекли широкое внимание примерно через три года. Они используют другой подход к генерации text-to-image: начинают со случайного шума и постепенно преобразуют его в чёткое изображение на основе текстового prompt'а. Этот процесс обычно включает text encoder, такой как CLIP от OpenAI [8] или T5 от Google [9], который преобразует текстовый prompt в embedding. Это embedding захватывает смысл prompt'а и направляет diffusion модель для генерации соответствующих изображений.1

Image represents a diagram illustrating a diffusion model for image generation.  The process begins with an 'Initial...' state, depicted as a square filled with random noise. This noise is fed into the first of a series of 'Diffusion Mod...' blocks, represented as light orange rectangles. Each 'Diffusion Mod...' block receives input from the previous block and a 'Text Enc...' block (light purple rectangle). The 'Text Enc...' blocks process text prompts, in this case, 'A boat on...', and their output is used to guide the diffusion process within the corresponding 'Diffusion Mod...' block.  The 'Diffusion Mod...' blocks iteratively refine the image, starting from the initial noise.  Intermediate results are shown as progressively clearer images of a sailboat on water.  The final 'Diffusion Mod...' block outputs a high-quality image of a sailboat, significantly improved from the initial noise.  Arrows indicate the flow of information between the blocks, showing how the text prompts and the intermediate image representations are used to generate the final image.
Рисунок 4: Генерация text-to-image на основе diffusion

Примеры text-to-image моделей на основе diffusion: Imagen 3 от Google [2], DALL-E 2 от OpenAI [10] и Stable Diffusion от Stability AI [11].

Diffusion против авторегрессионных моделей

Авторегрессионные модели рассматривают генерацию text-to-image как задачу генерации последовательности, тогда как diffusion модели подходят к ней как к итеративному процессу уточнения. Это ключевое различие в моделировании влияет на их возможности.

Image represents a Venn diagram comparing and contrasting diffusion and autoregressive generative models.  Two overlapping circles are presented. The left, peach-colored circle, is labeled 'Diffusion...' at the top and contains the text 'Exceptional...' and 'Expensive...' within it. The right, lavender-colored circle, is labeled 'Autoregressive...' at the top and contains 'Uniform architectu...' and 'Simple to imple...' within it. The overlapping section of the circles contains the text 'Slow gene...' and 'Billions...'.  The diagram visually illustrates the shared characteristics ('Slow gene...', 'Billions...') and distinct characteristics of each generative model type, highlighting that diffusion models are characterized as exceptional and expensive, while autoregressive models are described as having a uniform architecture and being simple to implement.
Рисунок 5: Характеристики diffusion и авторегрессионных моделей

Оба типа моделей — diffusion и авторегрессионные — могут генерировать реалистичные изображения, медленно работают при генерации, как правило имеют миллиарды параметров и требуют значительных вычислительных ресурсов для обучения. Несмотря на эти сходства, они различаются в трёх ключевых аспектах:

  • Сложность реализации: Авторегрессионные модели проще в реализации как при обучении, так и при inference. При обучении они статистически эффективнее, поскольку могут получать полезные сигналы градиента от всех шагов за один прямой-обратный проход. Напротив, diffusion модели менее статистически эффективны — они требуют сэмплирования различных уровней шума для каждого обучающего примера. При inference, как только Transformer в авторегрессионной модели генерирует последовательность визуальных token'ов, эти token'ы образуют итоговое изображение. Diffusion модели, однако, уточняют изображение через множество шагов, что усложняет реализацию.
  • Качество изображений: Diffusion модели демонстрируют лучшие результаты при генерации высокодетализированных и реалистичных изображений. Их итеративный процесс позволяет модели непрерывно уточнять и улучшать мелкие детали, обеспечивая превосходный реализм сгенерированных изображений.
  • Гибкость в сэмплировании: Diffusion модели более гибко балансируют между скоростью сэмплирования и качеством изображений. Они легко регулируют количество шагов сэмплирования — больше шагов обычно даёт более высокое качество, но занимает больше времени. Обученная авторегрессионная модель не может так просто вносить подобные коррективы.

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

Подготовка данных

Наш набор данных состоит примерно из 500 миллионов пар изображение–подпись. Однако крупномасштабные наборы данных часто требуют значительной предобработки перед использованием в обучении модели. В этом разделе мы рассмотрим распространённые методы подготовки изображений и подписей для diffusion обучения.

Подготовка изображений

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

Фильтрация неподходящих изображений

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

  • Удаление мелких изображений: Отбрасываем пары изображение–подпись, где размер изображения меньше определённого порога, например 64×64 пикселей. Мелкие изображения часто низкого качества и могут не предоставлять ценной информации для обучения.
  • Дедупликация изображений: Используем методы дедупликации, такие как [12], для удаления идентичных или перцептуально похожих изображений. Это предотвращает смещение модели в сторону определённых изображений, встречающихся чаще.
  • Удаление неподходящих изображений: Применяем модели обнаружения вредоносного контента и NSFW (Not Safe For Work) для фильтрации вредоносного контента, такого как насилие или обнажённость. Это гарантирует, что модель не научится генерировать неподходящие изображения.
  • Удаление эстетически неприемлемых изображений: Используем специализированные ML-модели для исключения изображений с низкими эстетическими показателями. Это помогает модели сосредоточиться на качественных изображениях в процессе обучения.

Стандартизация изображений

  • Корректировка размеров изображений: Diffusion модель требует входных данных определённых размеров. Поэтому важно иметь обучающие данные схожих размеров. Например, если ожидаемый вход модели — 128x128, сначала изменяем размер изображений так, чтобы меньшее измерение стало 128, сохраняя пропорции. Затем обрезаем по центру до финального размера 128x128.
  • Нормализация изображений: Нормализуем значения пикселей до стандартного диапазона, например [0, 1] или [-1, 1], для более стабильного обучения.
Image represents a data processing pipeline for image preparation.  It begins with a rectangular box labeled 'Original ima...' representing the input image.  This image flows rightward through a series of processing steps depicted as rounded rectangles. The first step, 'Resize,' changes the image dimensions.  Next, 'Center Crop' extracts a central portion of the resized image, indicated by a smaller square box above it with a visual representation of cropping using L-shaped lines.  A curved arrow connects this cropping visual to the square representing the cropped image. The image then proceeds to 'Normalize...', which likely adjusts pixel values. Finally, the processed image is outputted into a rectangular box labeled 'Prepared...'.  Arrows between each stage indicate the flow of the image data through the pipeline.
Рисунок 6: Этапы подготовки изображений

Подготовка подписей

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

  • Обработка отсутствующих или неанглийских подписей: Для изображений без подписей или с подписями на другом языке используем модель создания подписей к изображениям, такую как BLIP-3 [13], для автоматической генерации описательных подписей. Если хотите построить систему создания подписей с нуля, обратитесь к Главе 5.
  • Улучшение подписей: Используем предобученную модель, такую как CLIP [8], для оценки релевантности каждой пары изображение–подпись. Для пар с оценкой ниже порога заменяем исходную подпись автоматически сгенерированной с помощью модели BLIP-3.
  • Удаление плохо совпадающих пар: После улучшения подписей удаляем пары изображение–подпись с оценками CLIP similarity ниже порогового значения. Этот шаг гарантирует, что модель получает только пары, чьи подписи точно описывают изображения.

Разработка модели

Архитектура

Diffusion модель, как объяснялось ранее, постепенно денойзит зашумлённое изображение через множество шагов, пока оно не станет чётким. На каждом шаге, как показано на рисунке 7, модель принимает зашумлённое изображение на вход и предсказывает шум, который нужно удалить.2 Для этого обычно используются две распространённые архитектуры:

  • U-Net
  • Diffusion Transformer (DiT)
Image represents a simplified diagram of a denoising process within a generative model, likely for image generation.  The process begins with a 'Noisy image...' depicting a sailboat on water with added noise. This noisy image is fed into a 'Diffusion Mod...' (Diffusion Model) block, a key component of diffusion models.  The Diffusion Model also receives input from a 'Text Encoder' block, which processes the text prompt 'A boat on...' to provide contextual information. The Diffusion Model outputs a 'Predicted...' image, which is primarily noise but contains latent information about the sailboat. This noisy prediction then undergoes 'Noise removal,' a process that refines the image, resulting in a 'Refined...' image, a clearer depiction of the sailboat.  Above the main process flow, a smaller box visually demonstrates the noise removal step: an original image of a sailboat is shown, followed by a noisy version, and then an equals sign (=) leading to the same sailboat image but with reduced noise, mirroring the effect of the main process.  Arrows indicate the flow of data between the components.
Рисунок 7: Вход и выход diffusion модели на одном шаге

U-Net

U-Net [14] — это архитектура свёрточной нейронной сети (CNN), изначально разработанная для сегментации биомедицинских изображений. Она состоит из серии блоков понижения дискретизации (downsampling), за которыми следуют блоки повышения дискретизации (upsampling), как показано на рисунке 8.

Image represents a diagram illustrating a U-Net architecture for image processing.  The top section shows a series of six 3D rectangular blocks representing feature maps at different stages of processing, with dimensions labeled (e.g., 128x32x32, 256x16x16, etc.), decreasing in height and width and increasing in depth as they progress towards the center.  These blocks are connected by a curved arrow pointing to the 'Intermediate...' label, indicating a transition to the next stage. The bottom section depicts the U-Net itself.  A 3x64x64 input 'Image' block feeds into a sequence of processing blocks within the U-Net.  The initial blocks, labeled 'D' and colored light red, represent downsampling operations.  These are followed by a series of blocks labeled 'U' and colored light green, representing upsampling operations.  The 'D' blocks are grouped under 'Downsampling bl...' and the 'U' blocks under 'Upsampling bloc...', indicating the two main phases of the network.  Ellipses (...) indicate that multiple 'D' and 'U' blocks are present but not explicitly shown. Finally, the processed data exits the U-Net into a 3x64x64 output 'Predicted...' block.  The overall flow is from left to right, with the downsampling phase reducing spatial dimensions and the upsampling phase reconstructing them, ultimately producing a predicted image.
Рисунок 8: Блоки downsampling и upsampling в U-Net
Блоки downsampling

Блоки downsampling постепенно уменьшают пространственные размеры (высоту и ширину), увеличивая глубину (количество каналов), что приводит к сжатому представлению входных данных. Каждый блок downsampling обычно состоит из следующих компонентов:

  • Операция свёртки: Извлекает визуальные признаки из входных данных.
  • Batch normalization: Нормализует карты признаков для стабилизации обучения.
  • Нелинейная активация: Вносит нелинейность для обучения сложным паттернам.
  • Max-pooling: Уменьшает размеры карты признаков.
  • Cross-attention: Обращается к дополнительным условиям, таким как token'ы текстового prompt'а. Это необходимо для обеспечения влияния текстового prompt'а на предсказанный шум.
Image represents a diagram illustrating the architecture of a U-Net.  The top section shows a single block containing four processing layers arranged horizontally:  `Conv2D`, `BatchNorm...`, `ReLU`, and `MaxPool...`, followed by a `Cross-Atte...` layer.  These layers are depicted as individual boxes within a dashed-line rectangle, suggesting a repeated module.  Below this, the main U-Net architecture is shown.  It consists of a series of light-pink boxes labeled 'D' representing downsampling blocks, connected sequentially with arrows indicating data flow.  An ellipsis (...) indicates repetition of the 'D' blocks.  These downsampling blocks are grouped together and labeled 'Downsampling bl...'.  Following the downsampling blocks, a series of light-green boxes labeled 'U' represent upsampling blocks, also connected sequentially with arrows.  An ellipsis (...) again indicates repetition of the 'U' blocks.  These upsampling blocks are grouped and labeled 'Upsampling bloc...'.  A dashed line connects the top block to the downsampling section, implying that the top block represents the processing within each 'D' block.  The overall structure resembles the letter 'U', hence the name U-Net.
Рисунок 9: Типичные слои в блоке downsampling

Рассмотрим слой cross-attention подробнее, поскольку это первый случай, когда мы применяем cross-attention между разными модальностями — входными данными изображения и текста. Текстовый prompt обрабатывается text encoder'ом, таким как модель на основе Transformer, который преобразует слова или token'ы в последовательность непрерывных embedding'ов. Эти embedding'и захватывают семантический смысл текста. На каждом шаге денойзинга в diffusion процессе модель получает зашумлённое изображение и обрабатывает его через слои Conv2D и BatchNorm2D для извлечения визуальных признаков. В слое cross-attention запросы (queries) формируются из признаков изображения, а ключи (keys) и значения (values) поступают из текстовых embedding'ов. Это позволяет модели эффективно выравнивать и интегрировать информацию из текста в признаки изображения.

Блоки upsampling

Блоки upsampling симметрично увеличивают пространственные размеры и уменьшают глубину карты признаков. Итоговый выход соответствует исходному размеру входных данных — в данном случае это предсказанный шум. Каждый блок upsampling состоит из следующих компонентов:

  • Транспонированная свёртка: Использует операции вроде ConvTranspose2D из PyTorch для обработки и увеличения размеров карты признаков.
  • Batch normalization: Нормализует карты признаков для стабилизации обучения.
  • Нелинейная активация: Вносит нелинейность для обучения сложным паттернам.
  • Cross-attention: Сохраняет влияние дополнительных условий при upsampling.
Image represents a U-Net architecture diagram.  The main body shows a sequence of processing blocks.  On the left, several light-red blocks labeled 'D' represent downsampling blocks, arranged sequentially with arrows indicating data flow from left to right.  Ellipses (...) indicate the repetition of this pattern.  On the right, several light-green blocks labeled 'U' represent upsampling blocks, also arranged sequentially with data flowing from left to right, again with ellipses (...) showing repetition.  A gray brace underneath the 'D' blocks is labeled 'Downsampling bl...', and a similar brace under the 'U' blocks is labeled 'Upsampling bloc...'.  Above the upsampling blocks, a dashed box outlines a detailed view of a single upsampling block, showing four sub-blocks arranged horizontally: 'Transposed...', 'BatchNorm...', 'ReLU', and 'Cross-Atte...', indicating the constituent operations within each upsampling block.  The dashed lines connect this detailed view to the general upsampling block representation in the main U-Net diagram, illustrating the internal structure of the 'U' blocks.  The entire main body is labeled 'U-Net' at the top left, indicating the overall architecture.
Рисунок 10: Типичные слои в блоке upsampling

Архитектура U-Net имеет множество деталей и вариаций. Разные реализации могут использовать различные слои и конфигурации. Однако понимания ключевых компонентов и структуры, как правило, достаточно для большинства интервью по проектированию ML-систем. Для более углублённой информации обратитесь к [14].

DiT

DiT [15] — ещё одна популярная архитектура в diffusion моделях. В отличие от U-Net, которая использует серию слоёв downsampling и upsampling, DiT в основном опирается на архитектуру Transformer для обработки зашумлённого входного изображения и предсказания шума.

Image represents a denoising model architecture.  At the bottom, a 'Noisy image' box feeds into a larger rectangular block representing the core model. Inside this block, from bottom to top, are: 'Patchify' (a layer that divides the image into patches), 'Positional Encoding' (adding positional information to the patches), a 'Transformer' (the main processing unit), and 'Unpatchify' (recombining the processed patches).  The output of the 'Unpatchify' layer is a 'Predicted noise' box, which represents the model's estimate of the noise in the input image.  A separate box labeled 'Conditions...' is connected to the input of the Transformer, suggesting that the model can incorporate additional contextual information.  The entire process aims to subtract the 'Predicted noise' from the 'Noisy image' to obtain a cleaner image (not explicitly shown).
Рисунок 11: Компоненты DiT

DiT в основном вдохновлён архитектурой Vision Transformer (ViT) [16], обсуждавшейся в Главе 5. Компоненты DiT:

  • Patchify: Преобразует входное изображение в последовательность patch embedding'ов.
  • Positional encoding: Прикрепляет информацию о позиции к каждому patch embedding'у, указывая его расположение в исходном изображении.
  • Transformer: Обрабатывает последовательность embedding'ов и другие conditioning сигналы, такие как текстовый prompt, для предсказания шума для каждого patch'а.
  • Unpatchify: Преобразует последовательность предсказанных векторов шума обратно в изображение с теми же размерами, что и исходное входное изображение.

Подводя итог: архитектуры U-Net и DiT хорошо работают на практике. U-Net изначально использовалась в нескольких text-to-image моделях, таких как Imagen от Google [17] и Stable Diffusion от Stability AI [11]. В последнее время архитектура DiT показала большой потенциал для генерации text-to-image. В образовательных целях в этой главе мы используем архитектуру U-Net. В Главе 11 архитектура DiT рассматривается подробнее.

Обучение

Diffusion модель обучается посредством diffusion процесса. Diffusion процесс состоит из двух фаз:

  • Прямой процесс
  • Обратный процесс

Прямой процесс

В прямом процессе, также известном как процесс зашумления, шум постепенно добавляется к изображению через множество шагов (обозначаемых как t или timestep), пока изображение не станет полностью зашумлённым. Значение t, представляющее количество шагов, обычно выбирается случайным образом из диапазона, как правило от 1 до 1000. Прямой процесс не включает никаких ML-моделей или обновления параметров.

Image represents a sequence of image transformations.  It begins with a clear image of a sailboat on the water labeled '$x_0...' This image is then progressively altered. A rightward arrow indicates a transformation to a slightly noisier version of the same image, labeled '$x_1...'.  This process continues with the addition of more noise, represented by the text 'Noise...', and three dots indicating a series of intermediate steps. The next visible image, labeled '$x_{...}', shows a significantly noisier version of the original, where details are becoming obscured. Finally, a further transformation, indicated by another rightward arrow, results in a heavily degraded image labeled '$x_{...}', where the sailboat is barely discernible amidst the noise.  The labels suggest a sequence of images ($x_i$) where the subscript *i* represents the increasing level of noise added to the original image.
Рисунок 12: Прямой diffusion процесс

Обратный процесс

В обратном процессе, также известном как процесс денойзинга, ML-модель учится обращать прямой процесс. На каждом шаге модель предсказывает шум в зашумлённом изображении. Этот предсказанный шум затем используется для уменьшения шума во входном изображении. Как показано на рисунке 13, этот процесс повторяется до тех пор, пока изображение не станет чётким.

Image represents a denoising process using a diffusion model.  The diagram shows a sequence of four image representations, labeled  `$x_0...`, `$x_1...`, `$x_{...}...`, and `$x_t...`, progressing from a clear image of a sailboat at sea (`$x_0...`) to increasingly noisy versions (`$x_1...`, `$x_{...}...`, `$x_t...`).  Arrows indicate the flow of information:  `$x_0...` is fed into a 'Diffusion...' process (represented by a peach-colored box), which then outputs `$x_1...`.  This process is repeated, with each subsequent image becoming noisier due to added 'Noise...'.  The noisy image `$x_t...` is then fed into a second 'Diffusion...' process, suggesting a reverse diffusion process to reconstruct the original image from the noisy input.  The ellipses (...) in the labels suggest that the images represent a sequence of many steps, not just the four shown.
Рисунок 13: Обратный diffusion процесс

Понимая оба процесса — прямой и обратный — мы можем теперь рассмотреть, как они применяются в процессе diffusion обучения.

Процесс diffusion обучения

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

  • Добавление шума
  • Подготовка conditioning сигналов
  • Предсказание шума
  • ML objective и расчёт loss

Этот раздел содержит математику для тех, кому это интересно, но детали не влияют на проектирование ML-системы.

. Добавление шума

Первый шаг — симуляция прямого diffusion процесса путём добавления шума к исходному изображению через несколько timestep'ов. На каждом timestep'е мы немного повреждаем изображение, добавляя гауссовский шум. Постепенное добавление шума со временем превращает изображение в чистый шум.

Количество шума, добавляемого на каждом timestep'е, контролируется расписанием шума. Расписание шума определяется набором параметров дисперсии: 1, 2, ..., T, где T — общее количество timestep'ов. Каждый βt(0,1) управляет количеством шума, добавляемого на timestep'е t.

Расписание шума обычно инкрементально увеличивает значения β\betaβ:

Таким образом, на ранних шагах добавляется меньше шума, что сохраняет больше исходного изображения, а на поздних шагах добавляется больше шума, ускоряя diffusion процесс.

С определённым расписанием шума можно выразить зашумлённые данные на timestep'е ttt с помощью формулы добавления шума:

где:

  • xtx_txt​ — зашумлённое изображение на timestep'е ttt,
  • xt−1x_{t-1}xt−1​ — зашумлённое изображение на timestep'е t−1t-1t−1,
  • ϵ\epsilonϵ — гауссовский шум, сэмплированный из стандартного нормального распределения N(0,I)N(0, I)N(0,I),
  • βt\beta_tβt​ — параметр расписания дисперсии на timestep'е t, управляющий количеством добавляемого шума.

Итеративное добавление шума через множество шагов может занимать много времени. Вместо этого можно показать, что зашумлённые данные на timestep'е ttt можно напрямую вывести из исходных данных, x0x_0x0​:

где:

  • xtx_txt​ — зашумлённое изображение на timestep'е ttt,
  • αt=1−βt\alpha_t=1-\beta_tαt​=1−βt​ и αt′=∏i=1tαi\alpha_t^{\prime}=\prod_{i=1}^t \alpha_iαt′​=∏i=1t​αi​ — репараметризации βt\beta_tβt​,
  • ϵ\epsilonϵ — гауссовский шум, сэмплированный из стандартного нормального распределения N(0,I)N(0, I)N(0,I).

Подводя итог: при добавлении шума мы случайным образом сэмплируем ttt и вычисляем xtx_txt​ напрямую из x0x_0x0​ без необходимости итеративно добавлять шум на каждом timestep'е по следующей формуле:

. Подготовка conditioning сигналов

Для предсказания добавленного шума модель обычно ожидает две дополнительные части информации: подпись к изображению и сэмплированный timestep ttt, указывающий уровень шума. Для подготовки каждого из этих conditioning сигналов к обработке моделью мы используем отдельные encoder'ы (см. рисунок 14).

. Предсказание шума

Основная цель обучения diffusion модели — научиться обращать прямой diffusion процесс, то есть реконструировать исходные данные x0x_0x0​ из их зашумлённой версии xtx_txt​. Было показано, что напрямую предсказывать x0x_0x0​ не так эффективно. Вместо этого обучение модели для предсказания шума ϵ\epsilonϵ, добавленного в ходе прямого процесса, упрощает задачу и улучшает производительность. Поэтому на этом шаге модель предсказывает шум ϵ\epsilonϵ, зная зашумлённый вход xtx_txt​ и timestep t.3

. ML objective и расчёт loss

ML objective — минимизировать разницу между истинным шумом ϵ\epsilonϵ и предсказанием модели. Используемая функция loss — среднеквадратичная ошибка (MSE) между истинным и предсказанным шумом:

где:

  • ttt — timestep, равномерно сэмплированный из {1,2,…,T}\{1,2, \ldots, T\}{1,2,…,T},
  • ϵ∼N(0,I)\epsilon \sim N(0, I)ϵ∼N(0,I) — гауссовский шум, используемый в прямом процессе,
  • xtx_txt​ — зашумлённые данные на timestep'е ttt, вычисленные по формуле добавления шума,
  • ϵθ(xt,t)\epsilon_\theta\left(x_t, t\right)ϵθ​(xt​,t) — предсказание модели нейронной сети (U-Net или DiT).
Image represents a diagram illustrating the training process of a text-to-image diffusion model.  The process begins with a training dataset (a table with 'ID', 'Image', and 'Caption' columns, showing example image-caption pairs).  This dataset feeds into a 'Noise addition' stage (1), where random noise is added to an image from the dataset using a 'Forward...' process and a specified 'Timestep...' (t=800). The resulting 'Noised image a...' is then input into a 'Noise prediction' stage (3), which uses a 'Diffusion...' model. This model receives input from a 'Preparation of...' stage (2), which takes the caption from the training dataset and a 'Timestep...' (t=800) to generate embeddings. The 'Diffusion...' model outputs a predicted noise image. Finally, a 'Loss calculation' stage (4) compares the predicted noise with the actual noise added in stage 1, calculating the loss to update the model's parameters.  The entire cycle, from noise addition to loss calculation, iteratively refines the model's ability to generate images from text captions.
Рисунок 14: Одна итерация diffusion обучения

Для улучшения читаемости мы опустили математические детали, такие как вывод трактуемого среднего и упрощение функции loss. Для получения дополнительной информации о diffusion обучении обратитесь к [18].

Сэмплирование

Сэмплирование означает генерацию нового изображения из обученной diffusion модели. В этом разделе мы рассмотрим, как работает сэмплирование в diffusion моделях и как шумы преобразуются в связные изображения под руководством текстового prompt'а.

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

Image represents a denoising diffusion process for image generation.  It begins with a rectangular box labeled 'Random Noise...', representing an initial input of random noise data.  An arrow points from this box to a noisy image labeled '$x_{99}...', indicating the initial state of the image. This noisy image is then fed into a rectangular box labeled 'Diffusion...', representing a diffusion model that processes the image.  The output of this first diffusion step is a less noisy image, also labeled '$x_{99}...', showing a slightly clearer image (in this case, a sailboat).  This process is repeated, indicated by an ellipsis ('...') connecting the output of the first diffusion step to the input of a second 'Diffusion...' box.  The second diffusion step further refines the image, resulting in a clearer image of the sailboat labeled '$x_{0}...'.  Crucially, both 'Diffusion...' boxes receive an additional input labeled 'Input tex...', suggesting textual prompts guide the denoising process towards a specific image.  The arrows illustrate the unidirectional flow of data through the system, transforming random noise into a coherent image based on the provided text prompt.
Рисунок 15: Процесс сэмплирования

Описанный выше базовый процесс сэмплирования имеет два недостатка. Во-первых, он часто не может генерировать изображения, точно соответствующие текстовому prompt'у. Во-вторых, он медленный, потому что для генерации каждого сэмпла требуется множество итеративных шагов. Следующие два метода широко применяются на практике для устранения указанных недостатков:

  • Classifier-free guidance (CFG): CFG [19] улучшает соответствие между изображениями и текстовыми prompt'ами в diffusion моделях. Во время обучения модель учится генерировать изображения как с текстовым prompt'ом, так и без него. При сэмплировании CFG регулирует баланс между этими двумя режимами. CFG обеспечивает близкое соответствие сгенерированных изображений текстовым prompt'ам, усиливая влияние обусловленного (с текстовым prompt'ом) режима и уменьшая необусловленный (без текстового prompt'а) режим. Это корректировка направляет diffusion процесс для получения более точных результатов. Для подробного изучения CFG обратитесь к [19].
  • Сокращение количества шагов diffusion: Алгоритмы сэмплирования, такие как DDIM [20], сокращают количество шагов diffusion со стандартных 1000 до 20. Это значительно ускоряет процесс генерации при сохранении качества изображений. Для подробного изучения DDIM обратитесь к [20].

В большинстве интервью по проектированию ML-систем фокус делается на высокоуровневых концепциях и взаимодействии компонентов, а не на запутанных деталях. Если вас интересует более глубокое изучение diffusion моделей, обратитесь к [21][19][20].

Проблемы text-to-image diffusion моделей

Diffusion модели обычно очень большие. Например, DALLE-2 имеет 3,5 миллиарда параметров [10]. Такая ёмкость необходима, поскольку эти модели должны изучить разнообразные концепции, формы и стили.

Обучение таких больших моделей создаёт несколько трудностей как при обучении, так и при сэмплировании. Наиболее распространённые из них:

  • Ресурсоёмкое обучение модели
  • Медленная генерация изображений

Ресурсоёмкое обучение модели

Обучение diffusion моделей вычислительно интенсивно и требует значительной вычислительной мощности. Оно также требует существенной памяти GPU из-за размера модели и высокоразмерной природы сгенерированных изображений. Большинство современных GPU могут не иметь достаточно памяти для хранения параметров модели, активаций и градиентов при обучении. Для преодоления этих трудностей широко применяются следующие стратегии:

  • Обучение со смешанной точностью: Этот метод использует оба типа чисел с плавающей точкой — 16-битные и 32-битные — для уменьшения использования памяти и повышения вычислительной эффективности. Подробнее — в [22].
  • Параллелизм моделей и данных: Эти методы распределяют обучение по нескольким устройствам. Большинство фреймворков распределённого обучения, таких как FSDP [23] и Deepspeed [24], поддерживают различные техники параллелизма.
  • Latent diffusion модели: Эти модели работают в пространстве меньшей размерности вместо пиксельного пространства, значительно ускоряя обучение и inference. Глава 11 рассматривает этот подход подробнее.

Медленная генерация изображений

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

Распространённые стратегии для снижения этой проблемы включают:

  • Параллельное сэмплирование: Реализация параллельной обработки при сэмплировании сокращает время, необходимое для генерации изображений [25].
  • Model distillation: Дистиллированная модель улучшает скорость генерации благодаря уменьшенному размеру, сохраняя поведение и производительность исходной модели. Для получения дополнительной информации о model distillation в diffusion моделях обратитесь к [26].
  • Квантизация модели: Этот метод снижает точность весов модели, что уменьшает использование памяти и ускоряет генерацию.

Оценка

Офлайн-метрики оценки

Последовательный и надёжный бенчмарк является ключом к оценке text-to-image моделей. DrawBench [17] служит этой цели, предоставляя тщательно отобранный набор prompt'ов, проверяющих различные аспекты генерации изображений: композицию объектов, взаимодействие и понимание контекста. Эти prompt'ы — от простых до сложных — помогают оценить, насколько точно модель генерирует изображения по тексту. Благодаря своей полноте мы используем DrawBench для оценки нашей text-to-image модели. Рассмотрим как автоматические метрики, так и оценку людьми для анализа трёх ключевых областей способности модели генерировать изображения:

  • Качество изображений
  • Разнообразие изображений
  • Соответствие изображений тексту

Как обсуждалось в предыдущих главах, Inception score (IS) [27] и Fréchet Inception distance (FID) [28] — две распространённые метрики для оценки качества и разнообразия в системах генерации изображений. В этом разделе мы сосредоточимся в основном на соответствии изображений тексту.

Соответствие изображений тексту

Соответствие изображений тексту означает, насколько точно сгенерированные изображения соответствуют текстовым prompt'ам. Измерение этого соответствия важно, поскольку оно гарантирует, что сгенерированные изображения соответствуют вводу пользователя. Распространённой метрикой для оценки этого является CLIPScore [29], который измеряет степень соответствия. Прежде чем перейти к CLIPScore, кратко рассмотрим CLIP.

CLIP

CLIP [8] — модель, разработанная OpenAI и обученная сопоставлять изображения с их соответствующими описаниями. Она состоит из двух encoder'ов: один для текста, другой для изображений. Text encoder преобразует входной текст в текстовый embedding; image encoder преобразует изображение в image embedding.

Image represents a diagram illustrating the functionality of a CLIP (Contrastive Language–Image Pre-training) model.  The diagram is enclosed within a dashed-line box labeled 'CLIP model'.  On the left, an image depicting a sailboat on the ocean is shown, and the text 'A boat on an oc...' is displayed, indicating a textual description of the image.  Arrows indicate that both the image and the text are fed as input into the CLIP model. Inside the CLIP model, two rectangular boxes represent the processing of the image and text data separately. A light purple box labeled 'Text...' receives the textual input ('A boat on an oc...'), and a light green box labeled 'Image...' receives the image input (the sailboat picture).  Each of these boxes then outputs data to a series of adjacent rectangular blocks, representing the feature vectors generated by the model for the text and image respectively.  The arrows show the flow of information from the input (image and text) through the CLIP model's processing blocks to the final feature vector representations.  The bottom of the diagram includes a note stating 'Text is not SVG - cannot display,' indicating that the text description is not displayed as a visual SVG element.
Рисунок 16: CLIP encoder'ы

При обучении CLIP учится выравнивать embedding'и, сближая связанные текстовые и image embedding'и и отдаляя несвязанные. Это помогает CLIP разработать общее пространство embedding'ов, где изображение и связанный с ним текст будут отображаться в одно и то же пространство.

После обучения похожие текстовые описания располагаются близко друг к другу в пространстве embedding'ов, а изображения отображаются рядом с соответствующими описаниями.4

Image represents a diagram illustrating the functionality of a CLIP (Contrastive Language–Image Pre-training) model.  Three text descriptions ('A boat on an ocean,' 'A boat in lake,' 'A train in c...') are fed as input into a purple rectangle labeled 'Text...', representing the text encoder part of the CLIP model.  Simultaneously, an image of a sailboat on the water is fed into a light green rectangle labeled 'Image...', representing the image encoder. Both the text and image encoders output their respective embeddings, shown as three and one horizontal arrays of smaller rectangles, respectively. These embeddings are then mapped into a 2D 'Embedding space,' represented by a graph with x and y axes.  The text embeddings are represented by three 'x' marks in the embedding space, each corresponding to one of the input text descriptions, and their positions relative to each other and the image embedding (represented by another 'x' mark) illustrate their semantic similarity. Dashed lines connect the output of each encoder to their corresponding points in the embedding space, showing the mapping process. The overall diagram demonstrates how CLIP encodes both text and image inputs into a shared embedding space, allowing for comparison and similarity assessment.
Рисунок 17: Векторы признаков текста и изображений, отображённые в пространство CLIP embedding'ов

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

CLIPScore

CLIPScore измеряет косинусное сходство между CLIP embedding'ами текстового описания и изображения. Он показывает, насколько тесно изображение соответствует тексту в многомерном пространстве embedding'ов. Более высокая оценка указывает на лучшее соответствие между изображением и описанием.

Оценка людьми

Оценка людьми дополняет автоматические метрики, оценивая как качество изображений, так и соответствие тексту следующим образом:

  • Качество изображений: Рейтеры-люди сравнивают сгенерированное изображение с эталонным, оценивая, какое из них более фотореалистично. Качество изображений определяется процентом случаев, когда сгенерированное изображение предпочтено эталонному.
  • Соответствие тексту: Рейтерам-людям показывают изображение и его подпись, а затем задают вопрос: «Точно ли подпись описывает данное изображение?» Ответы «да», «отчасти» и «нет» оцениваются как 100, 50 и 0 соответственно. Эти оценки усредняются отдельно для сгенерированных и эталонных изображений для измерения соответствия тексту.

Онлайн-метрики оценки

Онлайн-метрики измеряют, как модель работает в продакшене. Распространённые метрики для оценки нашей text-to-image модели включают:

  • Показатель кликабельности (CTR): Процент пользователей, которые кликают на сгенерированные изображения. Высокий CTR указывает на то, что пользователи считают сгенерированные изображения полезными.
  • Время на странице: Среднее время, которое пользователи проводят с сервисом. Более длительное время просмотра указывает на большую вовлечённость пользователей.
  • Обратная связь от пользователей: Прямая обратная связь от пользователей собирается через форму обратной связи. Положительная обратная связь указывает на удовлетворённость качеством изображений и соответствием тексту.
  • Коэффициент конверсии: Процент пользователей, которые совершают желаемое действие (например, покупку, регистрацию) после взаимодействия со сгенерированными изображениями. Высокий коэффициент конверсии указывает на удовлетворённость производительностью модели.
  • Задержка: Время, необходимое для генерации изображения по текстовому prompt'у. Меньшая задержка указывает на более высокую производительность, что важно для удовлетворённости пользователей.
  • Пропускная способность: Количество генераций изображений, которые модель может обрабатывать в секунду. Высокая пропускная способность обеспечивает обслуживание большего количества пользователей.
  • Использование ресурсов: Вычислительные ресурсы (например, CPU, GPU, память), используемые для запуска модели и обслуживания пользователей. Эффективное использование ресурсов является ключом к снижению затрат.
  • Средняя стоимость на пользователя в месяц: Генерация изображений с моделями, имеющими миллиарды параметров, обходится дорого. Если пользователи недовольны изображениями, они могут многократно генерировать новые с тем же prompt'ом, но разными seeds, в надежде на лучшие результаты. Такое поведение увеличивает наши расходы. Отслеживая эту метрику, мы можем убедиться, что затраты остаются обоснованными.

Общее проектирование ML-системы

Хотя diffusion модель является ядром системы text-to-image генерации, несколько других конвейеров играют важную роль в обеспечении эффективности, безопасности и качества. В этом разделе мы погружаемся в целостный дизайн системы генерации text-to-image, рассматривая следующие конвейеры:

  • Конвейер данных
  • Конвейер обучения
  • Конвейер оптимизации модели
  • Конвейер inference

Конвейер данных

Конвейер данных подготавливает данные для обучения путём удаления неподходящих изображений, стандартизации остальных и их хранения. Он обеспечивает наличие и релевантность подписей, а также использует предобученную модель, такую как T5 от Google [9], для предварительного вычисления и кэширования embedding'ов подписей. Это кэширование снижает вычислительную нагрузку во время обучения.

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

Image represents a data processing pipeline with two parallel branches.  The top branch processes raw image data.  Two cylindrical database-like structures labeled 'Raw...' and 'User-generated...' represent input sources.  Data from these sources flows into a light green rectangular box labeled 'Inappropriate...', suggesting an initial filtering or moderation step.  The output then flows into another light green box labeled 'Image...', implying image processing or transformation. Finally, the processed image data is stored in a cylindrical database labeled 'Prepared...'. The bottom branch processes user-generated captions.  Data from a 'Raw...' database flows into a purple rectangular box labeled 'Caption Enhancer,' likely for improving the quality or clarity of the captions.  The enhanced captions then move to another purple box labeled 'Caption Encoder...', suggesting a process of converting the captions into a suitable format for storage or further processing.  The encoded captions are then stored in a cylindrical database labeled 'Caption...'.  Both branches are independent but process data originating from similar sources, suggesting a system designed to handle both image and caption data from user-generated content.
Рисунок 18: Конвейер данных

Конвейер обучения

Конвейер обучения обучает модель на последних обучающих данных, собранных конвейером данных.

Image represents a data processing pipeline for training a diffusion model.  Two cylindrical database-like components, labeled 'Prepared...' and 'Caption...', represent input data sources.  These sources are connected via lines to a rectangular 'Model Trainer' component, indicating that data from both 'Prepared...' and 'Caption...' are fed into the Model Trainer. The Model Trainer processes this combined input data and outputs a trained model, represented by an arrow pointing to a cloud-shaped component labeled 'Diffusion...', symbolizing the deployment of the trained diffusion model to a cloud environment.  The overall flow depicts the training process, where data from two sources are used to train a model which is then deployed.
Рисунок 19: Конвейер обучения

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

Конвейер оценки

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

Конвейер оптимизации модели

Конвейер оптимизации модели отвечает за повышение эффективности модели. Существует несколько методов оптимизации моделей:

  • Сжатие модели: Использование техник квантизации и прунинга для уменьшения размера модели и времени генерации.
  • Model distillation: Дистилляция модели в меньшую для уменьшения размера модели и времени генерации.
  • Оптимизированные алгоритмы: Замена сэмплирования более эффективными алгоритмами для более быстрой генерации.

После завершения оптимизации модели оптимизированная модель может заменить существующую в продакшене.

Конвейер inference

Конвейер inference обрабатывает запросы пользователей и генерирует изображения на основе текстовых prompt'ов. Он включает несколько компонентов, каждый из которых играет важную роль в обеспечении качества и безопасности системы. В этом разделе мы рассмотрим ключевые компоненты:

  • Сервис автодополнения prompt'а
  • Сервис безопасности prompt'а
  • Улучшение prompt'а
  • Генерация изображений
  • Обнаружение вреда
  • Сервис суперразрешения
Image represents a flowchart depicting the process of generating an image from a text prompt.  The process begins with a user typing a prompt (1) and submitting it (2) to a 'Prompt Safety...' module (a light-red rectangle) which checks if the prompt is safe.  If safe (3a), the prompt proceeds to a 'Prompt...' module (a light-purple rectangle) (4), then to an 'Image...' module (a light-gold rectangle) (6). The 'Image...' module receives input from both 'Text...' and 'Diffusion...' modules (represented by grey clouds) via connections labeled (5a) and (5b) respectively. The generated image then passes through a 'Harm...' module (a light-red rectangle) (6) for safety checks. If safe (7a), it proceeds to a 'Super-Resolution...' module (a light-blue rectangle) (8), resulting in a final generated image.  If at any point a safety check fails (3b or 7b), the request is rejected.  The entire process is numbered sequentially, indicating the order of operations.
Рисунок 20: Конвейер inference

Сервис автодополнения prompt'а

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

Image represents a simple user interface for a text-to-image generation system.  The main component is a large rectangular box divided into three horizontal sections, each containing a text prompt: 'A dog sitting in the backyard,' 'A dolphin jumping out of the water,' and 'A dog drawing another dog.'  Above these prompts, a smaller section displays 'A do,' suggesting an incomplete or initial prompt. To the right of the main box is a separate rectangular button labeled 'Generate.'  The implied interaction is that a user would complete the prompt in the top section (perhaps adding 'A dog'), select one or more of the prompts below, and then click the 'Generate' button to trigger the image generation process based on the selected text prompts.  No URLs or parameters are visible.
Рисунок 21: Предложенные фразы от сервиса автодополнения

Сервис безопасности prompt'а

Этот сервис использует модель классификации текста для обработки пользовательских prompt'ов и отклонения тех, которые нарушают нашу политику использования, например, запросов на изображения насилия, ненависти или обнажённости.

Этот сервис обеспечивает соответствие системы стандартам безопасности и предотвращает генерацию неподходящих изображений.

Улучшение prompt'а

Компонент улучшения prompt'а уточняет пользовательские prompt'ы для повышения их ясности, связности и детализации.

Image represents a simple data flow diagram illustrating prompt enhancement in a generative AI system.  The diagram shows an initial prompt, 'A dog sitting,' as the input. This prompt flows via a directed arrow into a rectangular box labeled 'Prompt Enhanceme...' (presumably short for 'Prompt Enhancement'), representing a process that refines the input.  This process outputs an enhanced prompt, 'A golden retriever dog sitting on a grassy field. The do...', which is shown flowing out of the 'Prompt Enhanceme...' box via another directed arrow. The output is a more detailed and specific description compared to the initial input, suggesting the addition of breed, location, and potentially further details implied by the ellipsis.  The overall flow demonstrates how a basic prompt is transformed into a richer, more descriptive prompt suitable for generating a more specific and detailed image or text.
Рисунок 22: Пример улучшения prompt'а

Этот компонент широко используется в продвинутых системах генерации изображений и видео [30], поскольку эффективно помогает модели создавать лучшие результаты. Он улучшает качество сгенерированных изображений, предоставляя модели более связный и детализированный prompt.

Генерация изображений

Компонент генерации изображений является ядром конвейера inference. Он взаимодействует с T5 text encoder'ом для кодирования улучшенного текстового prompt'а в последовательность token'ов. Эти token'ы передаются в diffusion модель для генерации одного или нескольких изображений для каждого prompt'а.

Обнаружение вреда

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

Сервис суперразрешения

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

На практике системы text-to-image часто используют как минимум одну модель суперразрешения, поскольку diffusion модели обычно не могут напрямую генерировать изображения высокого разрешения. Вместо этого diffusion модель обучается при меньшем разрешении, а специализированные модели суперразрешения увеличивают разрешение. Например, базовая модель может генерировать изображение 64x64, которое первая модель суперразрешения увеличивает до 256x256, а вторая — до 1024x1024. Метод Google [31] следует этому подходу для достижения желаемого разрешения.

Image represents a data processing pipeline, visualized as a sequence of connected boxes and arrows.  The pipeline begins with a box labeled 'image generated b...' representing an input image. This image is fed into a light-blue, rounded-rectangle box labeled 'Super-Resolution #1...', which processes the image, presumably enhancing its resolution. The output of this first super-resolution step flows via a black arrow into an empty square box, acting as an intermediate stage.  From this intermediate stage, another arrow points to a second light-blue, rounded-rectangle box labeled 'Super-Resolution #2...', indicating a second super-resolution processing step. The output of this second step is then passed through a final arrow into a large, empty square box labeled 'Final...', representing the final, high-resolution output image.  The overall flow is linear, with data moving sequentially through the super-resolution stages.
Рисунок 23: Каскад моделей суперразрешения

Подводя итог: различные конвейеры работают совместно, чтобы обеспечить надёжность, высокое качество и безопасность системы text-to-image. Конвейер данных создаёт фундамент для постоянного улучшения, конвейеры обучения и оптимизации модели повышают производительность модели. Конвейер inference обеспечивает безопасную, эффективную и высококачественную генерацию изображений. Эти конвейеры создают систему, готовую к реальным задачам.

Дополнительные темы для обсуждения

Если в конце интервью остаётся время, рассмотрите обсуждение следующих дополнительных тем:

  • Использование consistency models для более быстрой генерации изображений [26].
  • Применение RLHF для улучшения качества [32].
  • Расширение text-to-image модели для поддержки приложений inpainting и outpainting [33].
  • Персонализация text-to-image модели для конкретной концепции (Глава 10).
  • Детали различных техник расписания шума [34].
  • Детали DDPM и DDIM, включая их теоретические основы [20][18].
  • Поддержка нескольких соотношений сторон и разрешений с использованием техник, таких как Patch n' Pack [35].
  • Детали разработки модели повторной генерации подписей [36][37][13].
  • Улучшение баланса разнообразие–точность с помощью guidance [19].
  • Более продвинутый контроль над сгенерированными изображениями с использованием таких техник, как ControlNet [38].
  • Управление стилем сгенерированных изображений [39].

Итоги

Image represents a mind map summarizing the key aspects of a generative AI system design interview.  The central node is labeled 'Summary,' branching into five main categories represented by colored lines:  orange ('Clarifying requirements' and 'Other talking points'), light-coral ('Model development' and 'Evaluation'), light-blue ('Specifying input and output'), purple ('Data preparation'), and teal ('Overall system components').  The 'Model development' branch further subdivides into 'Architecture' (detailing U-Net, Diffusion, downsampling/upsampling blocks, patchify/unpatchify, positional encoding, and transformer components), 'Training' (including diffusion process specifics like forward/backward passes and MSE loss), and 'Sampling' (covering CFG and DDIM methods).  It also includes 'Challenges and mitigations' addressing mixed precision training, data and model parallelism, and latent diffusion models. The 'Evaluation' branch splits into 'Offline' (covering image quality, diversity, image-text alignment using CLIP scores, and human evaluation) and 'Online' (focusing on conversion rate, latency, throughput, and resource utilization).  The 'Overall system components' branch details the data, training, evaluation, and optimization pipelines, as well as the inference pipeline, which includes prompt auto-complete, safety service, enhancement, image generation, harm detection, and super-resolution services.  The 'Clarifying requirements' branch specifies framing the problem as an ML task and choosing between autoregressive and diffusion models.  Finally, the 'Data preparation' branch focuses on image and caption preparation.  The entire diagram visually depicts the interconnectedness of various stages, from initial requirements to final system deployment and evaluation metrics.

Справочные материалы

[1] OpenAI's DALL-E 3. https://openai.com/index/dall-e-3/. [2] Imagen 3. https://arxiv.org/abs/2408.07009. [3] Adobe's Firefly. https://www.adobe.com/products/firefly.html. [4] Introducing ChatGPT. https://openai.com/index/chatgpt/. [5] Zero-Shot Text-to-Image Generation. https://arxiv.org/abs/2102.12092. [6] Muse: Text-To-Image Generation via Masked Generative Transformers. https://arxiv.org/abs/2301.00704. [7] Generative Modeling by Estimating Gradients of the Data Distribution. https://arxiv.org/abs/1907.05600. [8] Learning Transferable Visual Models From Natural Language Supervision. https://arxiv.org/abs/2103.00020. [9] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. https://arxiv.org/abs/1910.10683. [10] Hierarchical Text-Conditional Image Generation with CLIP Latents. https://arxiv.org/abs/2204.06125. [11] High-Resolution Image Synthesis with Latent Diffusion Models. https://arxiv.org/abs/2112.10752. [12] On the De-duplication of LAION-2B. https://arxiv.org/abs/2303.12733. [13] xGen-MM (BLIP-3): A Family of Open Large Multimodal Models. https://www.arxiv.org/abs/2408.08872. [14] U-Net: Convolutional Networks for Biomedical Image Segmentation. https://arxiv.org/abs/1505.04597. [15] Scalable Diffusion Models with Transformers. https://arxiv.org/abs/2212.09748. [16] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. https://arxiv.org/abs/2010.11929. [17] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. https://arxiv.org/abs/2205.11487. [18] Denoising Diffusion Probabilistic Models. https://arxiv.org/abs/2006.11239. [19] Classifier-Free Diffusion Guidance. https://arxiv.org/abs/2207.12598. [20] Denoising Diffusion Implicit Models. https://arxiv.org/abs/2010.02502. [21] Introduction to Diffusion Models. https://lilianweng.github.io/posts/2021-07-11-diffusion-models/. [22] Mixed Precision Training. https://arxiv.org/abs/1710.03740. [23] FSDP tutorial. https://pytorch.org/tutorials/intermediate/FSDP_tutorial.html. [24] DeepSpeed. https://github.com/microsoft/DeepSpeed. [25] Parallel Sampling of Diffusion Models. https://arxiv.org/abs/2305.16317. [26] Consistency Models. https://arxiv.org/abs/2303.01469. [27] Inception score. https://en.wikipedia.org/wiki/Inception_score. [28] FID calculation. https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance. [29] CLIPScore: A Reference-free Evaluation Metric for Image Captioning. https://arxiv.org/abs/2104.08718. [30] Sora overview. https://openai.com/index/video-generation-models-as-world-simulators/. [31] Imagen Video: High Definition Video Generation with Diffusion Models. https://arxiv.org/abs/2210.02303. [32] Finetune Stable Diffusion Models with DDPO via TRL. https://huggingface.co/blog/trl-ddpo. [33] Kandinsky: an Improved Text-to-Image Synthesis with Image Prior and Latent Diffusion. https://arxiv.org/abs/2310.03502. [34] On the Importance of Noise Scheduling for Diffusion Models. https://arxiv.org/abs/2301.10972. [35] Patch n' Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution. https://arxiv.org/abs/2307.06304. [36] InternVL: Scaling up Vision Foundation Models and Aligning for Generic Visual-Linguistic Tasks. https://arxiv.org/abs/2312.14238. [37] BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models. https://arxiv.org/abs/2301.12597. [38] Adding Conditional Control to Text-to-Image Diffusion Models. https://arxiv.org/abs/2302.05543. [39] StyleDrop: Text-to-image generation in any style. https://research.google/blog/styledrop-text-to-image-generation-in-any-style/.

Сноски

  • На практике мы предоставляем diffusion модели дополнительные conditioning входные данные, такие как timestep. Это будет обсуждаться подробнее в разделе обучения. ↩
  • Для простоты мы опустили входные данные timestep для diffusion модели. Это будет рассмотрено подробнее в разделе обучения. ↩
  • Для простоты в качестве входных данных включены только зашумлённое изображение xt и timestep t. Как упоминалось ранее, conditioning сигналы также могут включаться как входные данные. ↩
  • Для простоты пространство embedding'ов визуализируется в 2D. В действительности это d-мерное пространство, где d представляет размер embedding'а. ↩
Глава 10

Персонализированная генерация портретных фотографий

~20 мин чтения

Введение

Персонализированные text-to-image (T2I) модели — одно из новых применений генеративного ИИ. Представьте, что вы просите T2I модель сгенерировать изображение вашего друга Джона с prompt'ом «Джон сидит на стуле и читает книгу». Хотя модель, вероятно, создаст изображение сидящего читающего человека, она, скорее всего, не изобразит именно «Джона». Для этого нам нужно персонализировать T2I модель, обучив её понимать интересующий субъект (т.е. Джона).

Image represents a process demonstrating image generation in various styles.  A reference image, labeled 'Reference image,' shows a headshot of a smiling, balding man with a beard wearing a blue blazer. A large right-pointing arrow indicates a transformation.  The arrow points to a 2x2 grid of generated images.  Each square in the grid contains a different image of the same man, but in a drastically altered pose and style.  The top-left image depicts him as an ice sculpture, appearing as a statue in a winter setting. The top-right image shows him as an astronaut in a spaceship, operating a console. The bottom-left image portrays him as an American football player in a team uniform. Finally, the bottom-right image shows him as a pirate captain on a ship, holding a glass of amber liquid. The entire grid is labeled 'Generated images in novel poses and styles.'
Рисунок 1: Персонализированная T2I модель, генерирующая вариации идентичности (изображения взяты из [1])

В этой главе мы рассмотрим, как разработать персонализированную T2I модель, способную генерировать профессиональные портретные фотографии конкретных людей.

Уточнение требований

Ниже приведён типичный диалог между кандидатом и интервьюером:

Кандидат: Предназначены ли сгенерированные портреты прежде всего для деловых профилей, таких как LinkedIn? Интервьюер: Верно.

Кандидат: Предполагаю, что пользователи будут предоставлять несколько своих изображений в разных вариантах — позах, ракурсах — с видимым лицом. Это верно? Сколько изображений мы попросим загрузить? Интервьюер: Да, всё верно. Предположим, от 10 до 20 изображений.

Кандидат: Что если некоторые изображения не подходят — например, слишком тёмные или лицо не видно? Интервьюер: Нам нужно это обнаруживать и уведомлять пользователя о необходимости предоставить лучшие изображения.

Кандидат: Должны ли пользователи иметь возможность указывать атрибуты, такие как причёска, на сгенерированных изображениях? Интервьюер: Для простоты предположим, что управление атрибутами не требуется.

Кандидат: Какое разрешение требуется для портретов? Интервьюер: Система должна поддерживать выходные данные 1024x1024.

Кандидат: Могу ли я предположить, что мы можем начать с предобученной универсальной T2I модели? Интервьюер: Да.

Кандидат: Должны ли пользователи иметь возможность предоставлять текстовые prompt'ы для управления сгенерированными портретами? Интервьюер: Мы предпочитаем сохранить простоту, поэтому предположим, что пользователи не будут предоставлять текстовые prompt'ы.

Кандидат: Сколько портретных изображений должна генерировать система? Интервьюер: 50 изображений.

Кандидат: Какова ожидаемая задержка? Интервьюер: Пользователь предоставляет изображения, и мы уведомляем его по электронной почте, когда изображения готовы. Весь процесс должен занимать менее часа.

Формулировка задачи как ML-задачи

В этом разделе мы используем генерацию портретов в качестве примера для рассмотрения важного аспекта генерации изображений: персонализации. Этот процесс включает адаптацию предобученной T2I модели для изучения нового субъекта — в данном случае лица пользователя.

Определение входа и выхода системы

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

Image represents a data flow diagram illustrating an AI-powered headshot generation process.  The diagram begins with a dashed-line box labeled 'User's original images,' containing several irregularly arranged, light gray square placeholders representing the user's input images.  A solid arrow points from this box to a light orange, rounded-rectangle box labeled 'Personalized...'. This central box represents the AI processing stage where personalization occurs based on the input images.  A second solid arrow extends from the 'Personalized...' box to a second dashed-line box labeled 'AI-generated headshots.' This final box displays a grid of colored squares, each a different pastel shade, representing the AI-generated headshot outputs.  The arrangement of the output squares suggests a variety of generated options, with some squares having darker outlines than others.  Ellipses ('...') are used in both the input and output boxes to indicate that more images than shown are included in the respective sets.
Рисунок 2: Вход и выход системы генерации портретов

Выбор подходящего ML-подхода

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

Существует два основных подхода к персонализации предобученной T2I модели: с настройкой (tuning-based) и без настройки (tuning-free).

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

Image represents a system for personalizing a pretrained T2I (text-to-image) model.  A single, light-grey box labeled 'Pretrained T2I...' represents the base, pre-trained model.  From this box, three arrows extend, each labeled 'Personalize...', indicating a personalization process. Each arrow connects to a separate, differently colored box representing a personalized version of the T2I model: one light-orange, one light-blue, and one light-green, all labeled 'Personalized T2I...'.  Each of these personalized models then has an arrow pointing to a stack of papers labeled 'User 1 hea...', 'User 2 hea...', and 'User N hea...', respectively, suggesting that each personalized model generates images for a different user (or group of users).  The ellipsis ('...') after 'T2I' and 'hea' suggests that the labels are truncated for brevity, implying multiple models and users. The vertical ellipsis ('...') between the second and third personalization arrows indicates that this process is repeated for an unspecified number of users.
Рисунок 3: Подход с настройкой для персонализации T2I

С другой стороны, методы без настройки позволяют обойтись без fine-tuning T2I модели для каждой новой идентичности. Вместо этого они один раз проводят fine-tuning предобученной T2I модели вместе с визуальным encoder'ом. После этого обучения визуальный encoder извлекает признаки из нового эталонного изображения и внедряет их в T2I модель. Это позволяет модели генерировать персонализированные изображения без корректировки внутренних весов для каждой идентичности.

Image represents a system architecture diagram illustrating a multi-user text-to-image generation pipeline.  Multiple users, labeled 'User 1' to 'User N,' are represented as boxes on the left, each feeding input into a light orange box labeled 'Visual...'. This 'Visual...' box likely represents a visual processing or embedding stage.  The output from 'Visual...' flows into a larger light gray box labeled 'Pretrained T2I...', which signifies a pretrained text-to-image model.  Finally, the output from the 'Pretrained T2I...' model is directed to a stack of boxes on the right, labeled 'User 1 hea...' and 'User N hea...', representing the generated image outputs for each corresponding user.  The ellipses ('...') indicate that there are multiple users beyond User 1 and User N.  Arrows depict the unidirectional flow of data from users to the visual processing, then to the text-to-image model, and finally to the individual user's generated image outputs.
Рисунок 4: Подход без настройки для персонализации T2I

Методы без настройки, такие как Imagine Yourself от Meta [1], проще, поскольку требуют обучения только один раз с меньшим количеством параметров, чем обучение всей T2I модели. Необходимо развернуть одну модель, и требуется только одно эталонное изображение, что позволяет одной и той же предобученной модели генерировать персонализированные изображения для нескольких идентичностей. Однако эти методы часто опираются на одно эталонное изображение для захвата черт лица, что может не захватить все детали под разными углами или выражениями. Кроме того, они требуют специальных корректировок, адаптированных к субъекту. Например, [1] использует специфические encoder'ы и предлагает технику для генерации синтетических парных данных.

С другой стороны, методы с настройкой, как правило, захватывают более детальные черты субъекта. Они также более универсальны, обрабатывая более широкий спектр субъектов помимо человеческих лиц. Учитывая эти преимущества, в остальной части главы мы сосредоточимся на методах с настройкой. Если вас интересует дополнительная информация о методах без настройки, обратитесь к [2][3][1].

Для достижения персонализации можно использовать несколько методов с настройкой, каждый из которых предлагает уникальные преимущества и недостатки. Три наиболее распространённых:

  • Textual inversion
  • DreamBooth
  • Low-rank adaptation (LoRA)

Textual inversion

Textual inversion [4] персонализирует T2I модель, вводя новый специальный token, представляющий субъект, и обучая его embedding. В ходе fine-tuning модель обновляет embedding специального token'а, тогда как diffusion модель, text encoder и embedding'и других token'ов остаются неизменными.

Image represents a system for generating images from text descriptions using a diffusion model.  The system begins with a text input, shown as a table with columns labeled 'Token' and 'Embedd...', containing the tokens 'a,' 'the,' 'of,' and '<EOS>' along with their corresponding embeddings.  This table is processed by a 'Tokenizer' and an 'Embedding Layer,' which are stacked vertically and labeled as part of a 'Text Encoding...' block. The output of this block feeds into 'Encoding Layers,' which then provides input to a light-orange box labeled 'Diffusion Model.'  The 'Diffusion Model' outputs an image, which is then compared to a 'Real image of...' (presumably the ground truth) using a loss function.  The loss is fed back to the 'Diffusion Model' for training.  A light-green box labeled 'S*' represents the latent representation of the input text, which is connected to the 'Tokenizer' and the 'Diffusion Model.'  Padlocks are present on the input text, the 'Tokenizer,' 'Encoding Layers,' and 'Diffusion Model,' suggesting these components are protected or secured.  Finally, a small box at the bottom says 'A photo of S*', indicating the visual representation of the latent variable S*.
Рисунок 5: Textual inversion, обновляющий только embedding специального token'а

После fine-tuning модель генерирует изображения нового субъекта при появлении в prompt'е специального token'а.

Image represents a text-to-image generation system using a diffusion model.  The process begins with a text prompt, 'A picture of S* standing in a prof...', which is fed into a text encoder. This encoder consists of three stacked components: a Tokenizer, an Embedding Layer, and Encoding Layers. The Tokenizer likely converts the text into numerical tokens, the Embedding Layer transforms these tokens into vector representations, and the Encoding Layers further process these embeddings to create a latent representation of the text's meaning. This latent representation is then input into a Diffusion Model (represented as a light orange rectangle).  Simultaneously, a random noise image (represented as a dark gray square labeled 'Random...') is also fed into the Diffusion Model. The Diffusion Model processes both the text embedding and the random noise, iteratively refining the noise until it generates a coherent image. The resulting generated image (represented as a blank white square labeled 'Generated...') is the output of the system.  Arrows indicate the flow of information between components.
Рисунок 6: Генерация изображения интересующего субъекта

Рассмотрим плюсы и минусы textual inversion.

Плюсы:
  • Эффективность: Обучение textual inversion включает обучение только нового token embedding'а, что делает процесс лёгким и эффективным.
  • Сохранение исходных возможностей модели: Возможности T2I модели сохраняются, поскольку параметры diffusion модели остаются неизменными.
  • Минимальные требования к хранилищу: Требуется минимальное хранилище, поскольку для каждой персонализированной модели необходимо хранить только embedding специального token'а.
Минусы:
  • Трудность изучения деталей субъекта: Textual inversion часто испытывает трудности с точным изучением новых деталей субъекта из-за ограниченной способности кодировать эти детали. Это ограничение возникает потому, что новый субъект представлен одним token embedding'ом.

Подводя итог: хотя textual inversion является эффективным методом персонализации T2I модели, он часто испытывает трудности с захватом и сохранением всех деталей нового субъекта.

DreamBooth

DreamBooth [5] — популярный метод персонализации, представленный Google в 2023 году. Он проводит fine-tuning предобученной diffusion модели с использованием изображений интересующего субъекта. В отличие от textual inversion, DreamBooth обновляет все параметры diffusion модели в ходе fine-tuning. Это позволяет модели более эффективно захватывать детали нового субъекта.

Image represents a system for generating images from text descriptions, likely using a diffusion model.  The system begins with 'A photo of [V] person,' which serves as the input text. This text is fed into a 'Tokenizer,' followed by an 'Embedding Layer,' and then 'Encoding Layers,' collectively labeled 'Text Encod...', which processes the text into a numerical representation suitable for the model.  The output of the text encoding is then passed to a 'Diffusion Model' (represented as a light orange rectangle with a lock icon indicating a parameter), which generates an image. This generated image is compared to a 'Real image of...' (a placeholder for a real image corresponding to the input text), and the difference is calculated as 'loss.' This loss is used to train the diffusion model, improving its ability to generate images that match the input text descriptions.  The arrows indicate the flow of information, showing how the text is processed, the image is generated, and the model is trained through the loss function.
Рисунок 7: Метод DreamBooth, обновляющий всю diffusion модель

DreamBooth в основном опирается на две техники для успешного fine-tuning:

  • Идентификатор редкого token'а
  • Функция loss сохранения предшествующего распределения класса
Идентификатор редкого token'а

Большинство методов персонализации выбирают идентификатор для представления интересующего субъекта. В то время как textual inversion создаёт новый token для этой цели, DreamBooth выбирает идентификатор из существующего словаря token'ов. Авторы обнаружили, что простой выбор любого существующего token'а на практике работает плохо. Давайте рассмотрим, почему простые подходы, такие как выбор обычного или случайного идентификатора, не работают, и почему предпочтителен идентификатор редкого token'а.

Проблемы с обычными или случайными идентификаторами token'ов

Простой способ представить интересующий субъект — выбрать обычное английское слово, такое как «unique» или «special». Этот подход проблематичен, поскольку token обычно имеет устоявшееся значение. Например, если мы выберем «special» для обозначения интересующего субъекта с prompt'ом вроде «a special person sitting», модель может испытывать трудности, потому что «special» уже имеет широкое, устоявшееся значение в контексте языка. Модели приходится отделять этот token от его первоначального значения и обучать для него новое значение, ссылающееся на нового субъекта.

Другой способ представить субъект — случайно комбинировать символы. Этот подход также создаёт проблемы, поскольку токенизатор может обрабатывать каждый символ отдельно, создавая сильные априорные ассоциации для этих символов. Например, если мы выберем «xxy5syt00» для представления субъекта, токенизатор может разбить его на отдельные символы, каждый из которых может иметь существующие ассоциации в модели. Такая фрагментация может привести к тому, что модель будет генерировать выходные данные, на которые влияют значения или паттерны, связанные с этими отдельными символами или подединицами, вместо того чтобы воспринимать идентификатор как уникальную и цельную сущность.

Как работает идентификатор редкого token'а

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

Вот пошаговый процесс формирования идентификатора:

  • Идентификация нескольких редких token'ов в словаре: Словарь модели содержит большой набор token'ов, каждый с уникальным ID. «Редкий token» — тот, который редко встречается в обучающих данных. Такие редкие token'ы определяются путём оценки распределения частот token'ов.
  • Генерация последовательности редких token'ов: После идентификации редких token'ов мы генерируем последовательность с использованием некоторых из них.
  • Формирование идентификатора: Токенизатор преобразует последовательность ID token'ов обратно в соответствующую текстовую форму. Это формирует идентификатор для представления субъекта. «XyZ», «SKS» и «[V]» — возможные примеры идентификатора.
Функция loss сохранения предшествующего распределения класса

DreamBooth проводит fine-tuning всех слоёв diffusion модели. Хотя это улучшает качество сгенерированных изображений, это может привести к переобучению, при котором модель теряет разнообразие в выходных данных. Например, обучение модели на изображениях конкретной собаки может привести к тому, что ей будет сложно генерировать изображения других собак.

Для решения этой проблемы DreamBooth использует функцию loss сохранения предшествующего распределения класса для поддержания общих характеристик класса. Это предотвращает переобучение модели на конкретных примерах и потерю способности генерировать разнообразные изображения, принадлежащие к более широкому классу. Функцию loss DreamBooth мы рассмотрим в разделе обучения.

DreamBooth имеет ряд плюсов и минусов.

Плюсы:
  • Эффективное изучение деталей субъекта: Обновление большего числа параметров позволяет модели более точно изучать детали субъекта.
  • Требуется меньше изображений: Поскольку обновляется вся diffusion модель, для изучения субъекта требуется меньший набор изображений.
Минусы:
  • Высокие требования к хранилищу: После fine-tuning для каждого субъекта вся diffusion модель должна храниться для будущего использования. Это может потребовать нескольких гигабайт на субъект, что дорогостояще и не масштабируется.
  • Ресурсоёмкость: Обновление всей diffusion модели требует больше памяти GPU при обучении.

Подводя итог: DreamBooth эффективно изучает детали субъекта, но дорог в обучении и хранении. Напротив, textual inversion эффективен и компактен, но менее результативен. Далее мы рассмотрим LoRA, который предлагает сбалансированный подход.

LoRA

LoRA, представленный Microsoft [6], — это мощный метод для эффективного fine-tuning очень больших моделей. Этот метод был изначально разработан для адаптации больших языковых моделей (LLM) к конкретным задачам, но позднее был принят для других задач, включая персонализацию T2I.

Ключевая мотивация LoRA заключается в том, что fine-tuning всех параметров больших предобученных моделей, таких как GPT-3 [7], занимает много времени и обходится дорого. Вместо этого LoRA адаптирует большую модель к новой задаче, вводя небольшой набор параметров и обновляя только их, тем самым значительно снижая вычислительные затраты.

Ввиду важности темы, давайте подробно рассмотрим математические основы LoRA.

Математика LoRA

В типичном слое нейронной сети матрица весов W∈Rdout ×din W \in \mathbb{R}^{d_{\text {out }} \times d_{\text {in }}}W∈Rdout ​×din ​ преобразует входной вектор x∈Rdinx \in \mathbb{R}^{d_{i n}}x∈Rdin​ в выходной вектор y∈Rdout y \in \mathbb{R}^{d_{\text {out }}}y∈Rdout ​.

Image represents a simplified diagram of a machine learning model, likely for a supervised learning task.  The diagram shows three rectangular boxes arranged vertically. The bottom box, colored pale yellow, is labeled  `$x \in \m...` representing the input data (x) belonging to a space (m), likely a feature space. An upward arrow connects this box to the middle box. The middle box is larger and light gray, labeled 'Pretrained...' and `$W \in \mathbb{...}`, indicating a pretrained model with weight matrix W belonging to a space (likely a weight space represented by the mathematical notation).  Finally, an upward arrow connects the middle box to the top box, also pale yellow, labeled `$y \in \m...`, representing the output data (y) belonging to a space (m), likely the same space as the input. The arrows indicate the flow of information: the input data (x) is processed by the pretrained model (W) to produce the output data (y).  The ellipses (...) suggest that the full mathematical notation is not shown, implying more detailed information about the spaces and parameters is omitted for brevity.
Рисунок 8: Полносвязный слой нейронной сети

Цель fine-tuning — скорректировать параметры весов WWW для улучшения производительности на конкретной задаче. Вместо прямого изменения WWW, LoRA модифицирует веса, вводя дополнительный низкоранговый компонент ΔW\Delta WΔW, который можно выразить как произведение двух обучаемых низкоранговых матриц:

где:

  • A∈Rdout ×drA \in \mathbb{R}^{d_{\text {out }} \times d_r}A∈Rdout ​×dr​,
  • B∈Rdr×dinB \in \mathbb{R}^{d_r \times d_{\mathrm{in}}}B∈Rdr​×din​,
  • din d_{\text {in }}din ​ и dout d_{\text {out }}dout ​ представляют входное и выходное измерения,
  • rrr — малое целое число, представляющее ранг, как правило значительно меньше din d_{\text {in }}din ​ и dout d_{\text {out }}dout ​.
Image represents a diagram illustrating a generative AI system's architecture.  At the top, a yellow rectangle labeled  `$y \in \m...` represents the system's output.  An addition symbol (+) connects this output to two inputs: `$Wx$` and `$A(Bx)$`.  `$Wx$` originates from a gray rectangle labeled 'Pretrained...' and containing `$W \in \mathbb{...}`, representing a pre-trained model's weights.  A padlock icon next to this rectangle indicates that the pre-trained model's weights are protected.  `$A(Bx)$` is an input that feeds into a larger, enclosed section representing a fine-tuned model. This section contains two trapezoidal shapes: a light-blue one labeled with `$A$`, `$ \mathb...`, and some seemingly encoded text, and a light-green one below it labeled with `%3CmxGraphModel%3E%3...`, `$ \mathbb{R}..`, and a padlock icon, suggesting a graph-based model with protected parameters.  The light-blue trapezoid represents a LoRA (Low-Rank Adaptation) layer, indicated by a curved arrow pointing to a label 'LoRA I...'.  A padlock icon is present within the fine-tuned model section, suggesting protection of its parameters.  Finally, a yellow rectangle labeled `$x \in \m...` at the bottom represents the system's input, connected to the output of the fine-tuned model.  The overall flow shows the input `$x$` being processed through the pre-trained model and the fine-tuned LoRA model to produce the output `$y$`.
Рисунок 9: Внедрение низкоранговых матриц

Обучение новых параметров, введённых LoRA, более эффективно, чем fine-tuning полной матрицы. В частности, исходная матрица WWW имеет dout ×din d_{\text {out }} \times d_{\text {in }}dout ​×din ​ параметров, тогда как низкоранговая аппроксимация вводит лишь r×(din +dout )r \times\left(d_{\text {in }}+d_{\text {out }}\right)r×(din ​+dout ​) параметров. При малых значениях rrr это может приводить к значительной экономии как в хранилище, так и в вычислениях.

LoRA для персонализации T2I

Для применения LoRA к нашей предобученной T2I модели мы внедряем обучаемые параметры в diffusion модель и обновляем только эти параметры в ходе fine-tuning для изучения новой идентичности. Этот метод требует обучения лишь небольшой доли параметров модели, что значительно быстрее и более экономично по памяти.

Image represents a system for generating images from text descriptions.  At the top, a light orange box contains four vertical, pinkish-red rectangles labeled as 'Trainable LoR...' and connected via downward arrows to four locked white rectangles labeled as 'Frozen...'.  Curved arrows indicate that 'Trainable LoR...' components receive input, while the locked components receive input labeled 'Frozen...'. These components are connected to a larger, light orange box labeled 'Diffusion Model'.  The 'Diffusion Model' outputs to an unlabeled white box, which calculates a 'loss' compared to a 'Real image of...' (another unlabeled white box).  Below the 'Diffusion Model' is a white box labeled 'Text Encoder,' which receives input from a box labeled 'A photo of [V] person' and feeds upward into the 'Diffusion Model'.  The overall flow is that the 'Text Encoder' processes the input photo, the 'Diffusion Model' uses this information along with the outputs from the 'Trainable LoR...' and 'Frozen...' components to generate an image, and the loss is calculated by comparing the generated image to a real image.
Рисунок 10: Метод LoRA, внедряющий и обучающий новые параметры в diffusion модели
Плюсы:
  • Сохранение исходных возможностей модели: LoRA сохраняет возможности T2I модели, замораживая исходные параметры модели.
  • Снижение потребностей в памяти и вычислениях: LoRA обновляет лишь небольшую долю параметров модели, что делает его более эффективным, чем DreamBooth.
  • Минимальные требования к хранилищу: Поскольку исходная модель остаётся неизменной, хранятся только слои LoRA. Это, как правило, составляет всего несколько мегабайт на персонализированную модель, что экономично и масштабируемо.
Минусы:
  • Менее эффективное обучение: LoRA менее эффективен, чем DreamBooth, поскольку проводит fine-tuning лишь небольшого числа параметров, ограничивая способность изучать новый субъект.
  • Незначительное увеличение времени inference: LoRA незначительно увеличивает время inference из-за дополнительных параметров и вычислений. Однако это зачастую пренебрежимо мало по сравнению с общими преимуществами снижения требований к хранилищу и более быстрой адаптации.

Таблица 1 содержит сравнение трёх методов персонализации с настройкой.

Textual InversionLoRADreamBooth
Learning effectivenessLowModerateHigh
Required storageLowModerateHigh
Required training resourcesLowModerateHigh
Maintaining the original model's capabilitiesYesYesNo

Таблица 1: Сравнение популярных методов персонализации с настройкой

Какой метод больше подходит для генерации портретов?

Пригодность этих методов зависит от варианта использования и требований системы. Для генерации портретов мы выбираем DreamBooth по трём основным причинам:

  • Лучшее сохранение идентичности: DreamBooth наиболее эффективен при сохранении деталей субъекта, обеспечивая лучшее сохранение идентичности.
  • Приемлемое время обучения: Согласно [5], fine-tuning diffusion модели с использованием DreamBooth занимает около 15 минут. Это время обучения приемлемо, поскольку мы должны предоставить пользователю сгенерированные изображения в течение часа.
  • Не требуется хранение: После генерации портретов нам не нужно сохранять персонализированные модели, поэтому проблемы с хранением при подходе DreamBooth не актуальны.

Подготовка данных

Необходимое количество изображений варьируется в зависимости от метода. Методы без настройки, как правило, требуют только одного изображения, тогда как методы с настройкой, такие как DreamBooth, нуждаются примерно в 10–20 изображениях.

Поскольку мы используем DreamBooth, пользователей просят загрузить 10–20 изображений. Эти изображения могут иметь разное разрешение и соотношение сторон. Для их подготовки к обучению мы выполняем следующие шаги:

  • Изменение размера изображений
  • Аугментация изображений
  • Добавление данных общих лиц
Image represents a data processing pipeline for user-uploaded images.  On the left, a collection of variously sized and colored rectangular boxes labeled 'User-uploaded images' depicts the initial input images.  These images flow rightward, through a series of three processing blocks. The first two blocks, labeled 'Image...', likely represent image preprocessing steps (e.g., resizing, format conversion).  The third block, 'Generic...', suggests a more general processing stage, perhaps feature extraction or transformation.  An upward arrow connects this block to a cylindrical database labeled 'Generic...', indicating that processed data is stored. Finally, a rightward arrow from the 'Generic...' processing block leads to a stack of similar-sized, light orange rectangular boxes labeled 'Prepared images,' representing the final output—a collection of processed images ready for further use.  The entire diagram illustrates a sequential flow of data from raw user images through processing stages to a database and finally to a set of prepared images.
Рисунок 11: Подготовка данных для обучения

Изменение размера изображений

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

Аугментация изображений

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

Добавление данных общих лиц

Обучение только на предоставленных изображениях может привести к переобучению модели к конкретной идентичности и забыванию ранее усвоенных знаний. Чтобы предотвратить это, мы объединяем загружаемые пользователями изображения с более крупным, универсальным набором данных лиц. Мы генерируем эти изображения с помощью предобученной diffusion модели с prompt'ами вроде «изображение человека».

Разработка модели

Архитектура

Метод DreamBooth проводит fine-tuning предобученной diffusion модели. Мы используем модель с архитектурой U-Net, предобученную для вывода изображений 1024x1024, аналогично тому, что мы рассматривали в Главе 9. Архитектура остаётся неизменной: серия блоков downsampling, за которыми следует серия блоков upsampling.

Обучение

Для fine-tuning предобученной diffusion модели мы следуем тому же процессу, что и при обучении diffusion модели с нуля:

  • Добавление шума: К изображению добавляется шум на основе случайно выбранного timestep'а.
  • Подготовка conditioning сигналов: Отдельные encoder'ы подготавливают подпись к изображению и timestep как conditioning сигналы для предсказания шума моделью.
  • Предсказание шума: Модель предсказывает шум, который нужно удалить из зашумлённого изображения, используя conditioning сигналы.

Обучающие данные

Обучающие данные состоят из изображений, загружаемых пользователями, и общих изображений лиц, добавленных на этапе подготовки данных. Загружаемые пользователем изображения помечены как «Изображение человека [V]», тогда как общие изображения лиц помечены как «Изображение человека».

ML objective и функция loss

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

  • Функция loss реконструкции
  • Функция loss сохранения предшествующего распределения класса
Функция loss реконструкции

Эта функция loss измеряет различия между реконструированным изображением и фактическими изображениями конкретного субъекта. Она помогает модели сохранять идентичность субъекта.

Функция loss сохранения предшествующего распределения класса

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

Общая функция loss

Общая функция loss — это взвешенная комбинация функции loss реконструкции и функции loss сохранения предшествующего распределения класса. Формула для общей функции loss может быть выражена как:

α\alphaα и β\betaβ — гиперпараметры, управляющие балансом между сохранением конкретной идентичности и сохранением характеристик человека. ML objective — минимизировать общую функцию loss, что позволяет модели генерировать изображения уникальных идентичностей, сохраняя способность создавать общие изображения человеческих лиц.

Image represents a system for generating images using a diffusion model.  A user uploads an image ('Uploadin...') which is labeled as 'Subject...'.  Simultaneously, a pretrained diffusion model ('Pretrained...') receives general images ('General...') labeled as 'Generic...'. Both the user-uploaded 'Subject...' images and the 'Generic...' images are fed as input ('A photo of...') to a central 'Diffusion Model'.  The model processes these inputs and generates two sets of output images: one set ('Generated...') derived from the user's input, and another ('Generated...') derived from the general input.  Dashed red lines indicate feedback loops:  'Reconstruction loss' represents a feedback mechanism influencing the model's training based on the generated images from the 'Subject...' input, while 'Class-specific pri...' suggests a feedback loop adjusting the model based on the generated images from the 'Generic...' input.  The overall flow depicts a system where user-specific images are combined with general data to refine a diffusion model for image generation.
Рисунок 12: Расчёт общей функции loss

Сэмплирование

Процесс сэмплирования для генерации портретов аналогичен генерации T2I, обсуждавшейся в Главе 9, поскольку оба используют diffusion модели. Однако ключевое различие заключается в способе предоставления текстовых prompt'ов. В Главе 9 пользователь предоставлял текстовый prompt. Например, пользователь мог ввести «кошка сидит на стуле», и diffusion модель генерировала изображение, отражающее этот текст.

При генерации портретов пользователи не предоставляют prompt'ы. Вместо этого мы создаём набор вручную составленных prompt'ов. Эти prompt'ы представляют различные профессиональные условия и включают идентификатор, использованный при обучении, чтобы гарантировать, что сгенерированные изображения отражают идентичность пользователя. Некоторые примеры:

  • «Профессиональный портрет [V] с улыбкой на фоне простого белого фона.»
  • «Крупный план [V] с нейтральным выражением лица, одетого в официальную одежду.»
  • «Портрет [V] с мягким освещением, смотрящего немного влево.»
  • «Снимок в профиль [V] на фоне размытого уличного пространства.»
  • «Профессиональный портрет [V] в деловом костюме с уверенным выражением лица.»

После создания prompt'ов мы сэмплируем одно изображение на каждый prompt из diffusion модели. Мы следуем стандартным шагам сэмплирования diffusion процесса:

  • Генерация начального случайного шума.
  • Итеративный денойзинг входных данных через несколько шагов с использованием Classifier-free guidance (CFG) [8] на каждом шаге для уменьшения шума и уточнения деталей изображения. Для ознакомления с CFG обратитесь к [8] или Главе 9.
Image represents a simplified diagram of a denoising diffusion process.  It begins with a rectangular box labeled 'Random Noise...', representing the initial input of random noise data.  An arrow points from this box to a square image depicting a noisy, multicolored texture labeled '$x_{999...}$, indicating the initial noisy state of the data. This noisy image is then fed into a rectangular box labeled 'Diffusion...', representing the first step of the diffusion process.  A dotted arrow then connects this box to another identical 'Diffusion...' box, suggesting multiple iterations of the diffusion process.  Finally, an arrow leads from the last 'Diffusion...' box to an empty white square labeled '$x_{0}$', representing the denoised output after multiple diffusion steps. Below the first and second diffusion boxes are labels 'A close-up of [V] with...' indicating that these boxes represent a process involving a variable V, likely a model or function used in the diffusion steps.  The arrows indicate the flow of data through the process, transforming random noise into a denoised output.
Рисунок 13: Сэмплирование портретного изображения

Оценка

Офлайн-метрики оценки

Важно оценивать персонализированные diffusion модели, чтобы убедиться, что наша модель способна сохранять идентичность пользователя на сгенерированных изображениях. Мы оцениваем производительность персонализированной diffusion модели, фокусируясь на трёх основных аспектах:

  • Соответствие тексту
  • Качество изображений
  • Соответствие изображений

Соответствие тексту

Соответствие тексту означает, насколько близко сгенерированные изображения соответствуют текстовым prompt'ам. Распространённой метрикой для его измерения является CLIPScore [9], который гарантирует, что изображения не только высокого качества, но и релевантны входному тексту.

Качество изображений

Как мы рассматривали в предыдущих главах, для измерения качества сгенерированных изображений мы используем распространённые метрики, такие как FID [10] и Inception score [11].

Соответствие изображений

Соответствие изображений, особенно актуальное для персонализированных text-to-image моделей, означает оценку визуального сходства между сгенерированными изображениями и интересующим субъектом. Например, если модели поручено сгенерировать изображение конкретного рюкзака, соответствие изображений измеряет, насколько близко сгенерированное изображение напоминает этот рюкзак.

Широко используемые метрики для измерения визуального сходства между сгенерированным и исходным субъектом:

  • CLIP score
  • DINO score
  • Оценка схожести лиц
CLIP score

Модель CLIP [12] использует два encoder'а — один для изображений и один для текста. Эти encoder'ы обучены гарантировать, что image embedding'и и text embedding'и релевантной пары изображение–текст находятся близко в пространстве embedding'ов.

Image represents a system for comparing generated and real images using a CLIP (Contrastive Language–Image Pre-training) model.  A light-blue box labeled 'Generated i...' represents a generated image, and an orange box labeled 'Real image' represents a real image. Both are fed as input into a dashed-line box labeled 'CLIP Model,' which contains a light-grey box labeled 'Text...' representing text input (likely a prompt or description) and a light-green box labeled 'Image...' representing the image input (either generated or real).  The CLIP model processes both the text and the image inputs separately. The outputs of the CLIP model for both the generated and real images are then fed into separate horizontal boxes representing feature vectors. A double-headed arrow connects these feature vectors, labeled 'Similarity,' indicating a comparison process that calculates the similarity between the feature vectors of the generated and real images.  The overall system aims to quantify the similarity between a generated image and a real image based on a textual description, using the CLIP model to embed both images and text into a common feature space.
Рисунок 14: Расчёт соответствия изображений с CLIP

Для измерения соответствия изображений с помощью CLIP мы отбрасываем text encoder и используем image encoder для генерации embedding'ов как сгенерированных, так и реальных изображений. Затем мы вычисляем косинусное сходство между этими embedding'ами для оценки их схожести. Более высокие оценки указывают на то, что персонализированная diffusion модель создаёт изображения, более визуально похожие на реальные.

DINO score

DINO [13] — метод самообучения без учителя, разработанный Meta. DINO обучается визуальным представлениям изображений без необходимости в размеченных данных. В частности, он использует метод, называемый контрастным обучением [14], при котором модель учится различать схожие и несхожие изображения, организуя их в пространстве embedding'ов — похожие изображения располагаются ближе, несхожие — дальше.

DINO и его более поздние вариации, такие как DINOv2 [15], особенно хороши при захвате сходства между изображениями, поскольку обучены распознавать тонкие различия. Это делает DINO особенно эффективным для измерения соответствия изображений. Сравнивая embedding'и сгенерированного и реального изображений, DINO может оценить, насколько хорошо сгенерированное изображение соответствует реальному.

Image represents a system for comparing a generated image and a real image using a DINOv2 model.  A light-blue square labeled 'Generated i...' represents the input of a generated image. A light-orange square labeled 'Real image' represents the input of a real image. Both images are fed as input into a light-green box labeled 'DINOv2,' which presumably extracts image features. The DINOv2 output is then fed into two separate rectangular boxes representing feature vectors; one for the generated image and one for the real image.  A bidirectional arrow connects these two feature vector boxes, labeled 'Similarity,' indicating a comparison process that calculates the similarity between the feature vectors derived from the generated and real images.  The flow of information is unidirectional from the input images to DINOv2 and then to the feature vector representations, while the similarity comparison happens between the feature vectors.
Рисунок 15: Расчёт соответствия изображений с DINOv2 [15]
DINO против CLIP

DINO предпочтителен для сравнения изображений, поскольку обучен захватывать детальные визуальные признаки. Например, два изображения — одно с жёлтой курткой и другое с красной — могут иметь низкую оценку DINO из-за разницы цвета. С другой стороны, CLIP лучше подходит для сравнения изображений с текстом, поскольку обучен сопоставлять описания с визуальным контентом. Те же изображения с разными цветами курток могут иметь высокую оценку CLIP, если оба отражают человека в куртке.

Оценка схожести лиц

Хотя CLIP и DINO измеряют визуальное сходство между сгенерированными и реальными изображениями, они не предназначены для оценки сохранения идентичности. Например, два изображения лиц могут показывать разных людей, но CLIP и DINO всё равно могут давать высокую оценку сходства. Для решения этой проблемы мы используем модель распознавания лиц для сравнения сгенерированных и реальных изображений. Эти модели специализируются на идентификации и измерении схожести лиц, что является ключевым требованием в системе персонализированной генерации портретов.

Сочетание оценок DINO, CLIP и схожести лиц обеспечивает комплексную оценку соответствия изображений в персонализированной diffusion модели.

Онлайн-метрики оценки

Онлайн-оценка критически важна при генерации портретов. Она непосредственно измеряет удовлетворённость пользователей, что жизненно важно, когда пользователи платят за сервис, поскольку более высокая удовлетворённость часто приводит к увеличению доходов. Мы фокусируемся на двух основных метриках:

  • Обратная связь от пользователей: Эта метрика непосредственно отражает удовлетворённость пользователей. После получения сгенерированных портретов пользователи оценивают свою удовлетворённость по шкале от 1 до 5. Высокие оценки указывают на то, что портреты соответствуют или превосходят ожидания, тогда как низкие оценки подчёркивают необходимость улучшений.
  • Коэффициент конверсии в платный сервис: Эта метрика измеряет процент пользователей, переходящих от проявления интереса к статусу новых платящих клиентов. Она рассчитывается как отношение числа новых платящих клиентов к общему числу пользователей, взаимодействовавших с сервисом (посещение сайта, регистрация для пробного использования или запросы) за определённый период.

Общее проектирование ML-системы

Генерация профессиональных портретов требует большего, чем просто diffusion модель. В этом разделе мы рассматриваем три ключевых конвейера:

  • Конвейер данных
  • Конвейер обучения
  • Конвейер inference

Конвейер данных

Этот конвейер выполняет две задачи:

  • Подготовка изображений с интересующим субъектом
  • Подготовка изображений общих человеческих лиц
Image represents a system for preparing user-uploaded images for a machine learning model.  A user uploads multiple images (represented by differently colored rectangles within a larger rectangle labeled 'User-uploaded images'). These images are then processed by a 'Quality assessors' module depicted as a smartphone with functions like 'Face Detect...', 'Face Recogn...', 'Facial Expr...', 'Blur...', and 'Quality...'.  The output of this module is a set of 'Remaining...' images (colored rectangles) that pass the quality checks.  These images are then labeled 'Data...' and passed to a data preparation stage, resulting in a stack of 'Prepared...' images (orange rectangles). If the 'Quality assessors' module determines that more images are needed ('More...' decision diamond), a request is sent back to the user.  Images that fail the quality checks are discarded.  Finally, the 'Prepared...' images are combined with data from a 'Pretrained...' model (cloud shape) to complete the preparation process, resulting in a final stack of 'Prepared...' images (light blue rectangles).  The entire process is depicted as a flow chart with arrows indicating the direction of data flow between the different components.
Рисунок 16: Компоненты конвейера данных

Подготовка изображений с интересующим субъектом

Этот процесс оценивает загружаемые пользователями изображения, чтобы убедиться в соответствии предопределённым стандартам, и подготавливает их для обучения.

В частности, проверяется, что изображения разнообразны и содержат только один объект интереса: лицо пользователя. Для этого мы используем различные эвристики и ML-модели для анализа изображений, проверяя такие факторы, как чёткость, разнообразие ракурсов, выражений лица и наличие лица пользователя. Если какие-либо изображения не соответствуют этим критериям, они отклоняются, и пользователя просят загрузить больше. Это гарантирует, что для fine-tuning diffusion модели используются только высококачественные изображения.

Подготовка изображений общих человеческих лиц

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

Конвейер обучения

Этот конвейер отвечает за персонализацию предобученной diffusion модели.

Image represents a system for creating personalized models.  On the left, a set of 'Prepared images' is shown, divided into two stacks of light orange and light blue squares, each representing a collection of images.  An arrow indicates these prepared images are input into a 'Model Trainer' (a light green rectangle).  The Model Trainer also receives input from a 'Pretrained...' (light gray cloud), suggesting a pre-existing model is used as a base.  The output of the Model Trainer is a 'Personalized...' (light yellow cloud), implying the process generates a customized model based on the input images and the pretrained model.  The arrows depict the flow of data: prepared images and the pretrained model are fed into the Model Trainer, which then produces a personalized model.
Рисунок 17: Fine-tuning предобученной diffusion модели

Конвейер inference

Конвейер inference отвечает за генерацию портретов пользователя с использованием персонализированной T2I модели. Три основных компонента конвейера inference:

  • Генератор изображений
  • Сервис оценки качества
  • Сервис загрузки
Image represents a system workflow for generating and uploading personalized images.  A user initiates the process.  A hand-engineered text prompt,  'A professional headshot of [V] smiling in f...', is input, feeding into a 'Image...' processing block (light green). This block receives further input from a 'Personalized...' cloud service (yellow), suggesting that personalization parameters are fetched from there. The generated image then proceeds to a 'Quality Asses...' block (light red), which determines if the image meets quality standards.  A decision diamond ('Meets...') follows, routing images meeting the criteria to an 'Uploader...' block (light purple) for user upload, while images failing quality checks loop back to the 'Image...' block for regeneration using a different diffusion model ('Re-generate with a di...').  The entire process is visualized as a flowchart, showing the sequential steps and decision points involved in creating and delivering a personalized image to the user.
Рисунок 18: Компоненты конвейера inference

Генератор изображений

Генератор изображений использует персонализированную T2I модель и вручную составленные текстовые prompt'ы для генерации одного изображения на каждый prompt.

Сервис оценки качества

Этот сервис гарантирует, что сгенерированные изображения соответствуют стандартам сохранения идентичности. Он использует предобученную модель распознавания лиц для сравнения сгенерированного портрета с реальными изображениями пользователя. Если сгенерированное изображение не сохраняет идентичность пользователя, сервис отклоняет его и запрашивает у генератора изображений новое изображение с тем же текстовым prompt'ом, но с другим начальным шумом.

Сервис загрузки

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

Дополнительные темы для обсуждения

Если в конце интервью есть дополнительное время, вот несколько тем для обсуждения:

  • Предотвращение катастрофического забывания при fine-tuning [16].
  • Детали выбора редкого token'а для нового субъекта и его важность [5].
  • Детали функции loss сохранения предшествующего распределения класса [5].
  • Решение проблемы сниженного разнообразия выходных данных после fine-tuning [5].
  • Поддержка нескольких размеров и соотношений сторон сгенерированных изображений [17].
  • Детали методов без настройки, таких как Imagine Yourself от Meta [1].
  • Снижение рисков и этических проблем, связанных с генерацией и обнаружением дипфейков [18].
  • ML-техники для безопасной обработки персональных данных (PII) с обеспечением конфиденциальности данных [19][20].

Итоги

Image represents a mind map summarizing key aspects of a Generative AI system design interview.  A central 'Summary' box branches into seven main colored categories:  Clarifying requirements (light orange) and Specifying Input and output (light blue) focus on initial project definition, including framing the problem as a Machine Learning (ML) task and choosing between tuning-free (e.g., Textual Inversion) or tuning-based (e.g., DreamBooth, LoRA) approaches. Data preparation (purple) details image resizing and augmentation, including generic face data addition. Model development (gold) covers architecture (U-Net), training (with reconstruction, class-specific prior preservation losses), and sampling. Evaluation (salmon) distinguishes between offline metrics (text alignment, image quality, CLIPScore, Inception score, FID) and online metrics (image alignment, user feedback, conversion rate). Overall system components (teal) outlines the data, training, and inference pipelines, along with the image generator, quality assessment service, and uploader service. Finally, Other talking points (light peach) suggests additional discussion areas.  Each branch further subdivides into more specific details, creating a hierarchical structure illustrating the interconnectedness of various design considerations.

Справочные материалы

[1] Imagine yourself: Tuning-Free Personalized Image Generation. https://ai.meta.com/research/publications/imagine-yourself-tuning-free-personalized-image-generation/. [2] MoA: Mixture-of-Attention for Subject-Context Disentanglement in Personalized Image Generation. https://arxiv.org/abs/2404.11565. [3] InstantID: Zero-shot Identity-Preserving Generation in Seconds. https://arxiv.org/abs/2401.07519. [4] An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion. https://textual-inversion.github.io/. [5] DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation. https://arxiv.org/abs/2208.12242. [6] LoRA: Low-Rank Adaptation of Large Language Models. https://arxiv.org/abs/2106.09685. [7] Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165. [8] Classifier-Free Diffusion Guidance. https://arxiv.org/abs/2207.12598. [9] CLIPScore: A Reference-free Evaluation Metric for Image Captioning. https://arxiv.org/abs/2104.08718. [10] FID calculation. https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance. [11] Inception score. https://en.wikipedia.org/wiki/Inception_score. [12] Learning Transferable Visual Models From Natural Language Supervision. https://arxiv.org/abs/2103.00020. [13] Emerging Properties in Self-Supervised Vision Transformers. https://arxiv.org/abs/2104.14294. [14] Contrastive Representation Learning. https://lilianweng.github.io/posts/2021-05-31-contrastive/. [15] DINOv2: Learning Robust Visual Features without Supervision. https://arxiv.org/abs/2304.07193. [16] An Empirical Study of Catastrophic Forgetting in Large Language Models During Continual Fine-tuning. https://arxiv.org/abs/2308.08747. [17] SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis. https://arxiv.org/abs/2307.01952. [18] Deepfakes, Misinformation, and Disinformation in the Era of Frontier AI, Generative AI, and Large AI Models. https://arxiv.org/abs/2311.17394. [19] Privacy-Preserving Personal Identifiable Information (PII) Label Detection Using Machine Learning. https://ieeexplore.ieee.org/document/10307924. [20] Does fine-tuning GPT-3 with the OpenAI API leak personally-identifiable information? https://arxiv.org/abs/2307.16382.

Глава 11

Генерация видео по тексту

~21 мин чтения

Введение

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

Image represents a video thumbnail showing a stylish woman walking down a rain-slicked Tokyo street at night.  The woman, wearing a black leather jacket and a long burgundy dress, is centrally positioned and carries a black handbag.  She is walking towards the viewer. The background features a bustling Tokyo street scene, filled with numerous brightly lit neon signs in Japanese script, reflecting in the wet pavement.  Buildings line both sides of the street, showcasing various advertisements and signage.  Other pedestrians are visible in the background, though somewhat blurred.  A play button icon is superimposed in the center of the video thumbnail, indicating that the image is a still from a video.  Above the thumbnail, the text 'Prompt: A stylish woman walks down a Tokyo street filled with warm glowing neon a...' provides a textual description of the video's content.  The bottom of the image contains partially obscured text, reading 'Text is not...nnot display,' suggesting a technical limitation in displaying the full text.
Рисунок 1: Пример видео, сгенерированного моделью Sora от OpenAI [1]

Уточнение требований

Вот типичный диалог между кандидатом и интервьюером.

Кандидат: Какова ожидаемая длительность сгенерированных видео? Интервьюер: Давайте нацелимся на пятисекундные видео.

Кандидат: Какое разрешение видео мы планируем? Интервьюер: Мы должны стремиться к качеству высокой чёткости, чтобы видео подходило для широкого спектра современных платформ и устройств. Давайте нацелимся на разрешение 720p.

Кандидат: 24 кадра в секунду (FPS) -- желаемая частота кадров для сгенерированного видео? Интервьюер: Да.

Кандидат: Какова ожидаемая задержка генерации видео? Интервьюер: Генерация видео требует значительных вычислительных ресурсов. Для начала несколько минут обработки будет приемлемо. В будущих итерациях мы оптимизируем эффективность и скорость.

Кандидат: Должны ли мы сосредоточиться на определённой категории видео? Интервьюер: Нет, система должна генерировать видео различных жанров и тематик.

Кандидат: Должна ли система поддерживать несколько языков для ввода текста, или мы начинаем только с английского? Интервьюер: Давайте начнём с английского.

Кандидат: Должны ли сгенерированные видео включать аудио? Интервьюер: Давайте пока сосредоточимся на беззвучных видео. Аудио может быть рассмотрено как улучшение в будущих итерациях, но на данном этапе это не приоритет.

Кандидат: Каков примерный размер наших обучающих данных? Интервьюер: У нас есть большой набор данных видео, около 100 миллионов разнообразных видео с подписями. Некоторые подписи могут быть зашумлёнными или не на английском языке.

Кандидат: Распространённый подход к построению модели генерации видео по тексту -- расширение предобученной модели генерации изображений по тексту для обработки видео. Есть ли у нас предобученная модель генерации изображений по тексту? Интервьюер: Да, это разумное допущение.

Кандидат: Учитывая высокие вычислительные требования генерации видео, каков наш бюджет вычислительных ресурсов? Интервьюер: Обучение системы генерации видео требует значительных вычислительных ресурсов. У нас есть более 6000 GPU H100 [2], доступных для обучения генерации видео по тексту.

Кандидат: Необходимо ли обеспечить наличие защитных механизмов для предотвращения генерации оскорбительного или вредного видео? Интервьюер: Отличное замечание. Да, нам нужно обеспечить безопасность нашей системы для пользователей.

Формулировка задачи как задачи ML

В этом разделе формулируется задача генерации видео по тексту как задача ML и выделяются необходимые соображения, выходящие за рамки тех, что использовались в Главе 9 для генерации изображений по тексту.

Определение входных и выходных данных системы

Входные данные -- описательный текст, описывающий сцену, действие или сюжет. Выходные данные -- пятисекундное видео в разрешении 720p (1280 x 720), визуально и темпорально соответствующее заданному текстовому промпту.

Например, при текстовом вводе "Собака играет в fetch в парке в солнечный день" система должна сгенерировать видео, изображающее эту сцену, отражая движение собаки, окружение парка и атмосферу солнечного дня.

Image represents a simple data flow diagram illustrating a text-to-video generation process.  On the left, a text prompt, labeled 'A dog playing fetch in...', is shown. This prompt serves as the input.  A black arrow points from the text prompt to a light orange, rounded-rectangle box labeled 'Text-to-Video...'. This box represents the core text-to-video generation model or system.  Another black arrow extends from the 'Text-to-Video...' box to a light blue rectangle labeled 'Generated video,' which contains a play button symbol (▷) indicating the output is a video.  The overall flow depicts the transformation of a textual description into a video using a text-to-video model.
Рисунок 2: Входные и выходные данные системы генерации видео по тексту

Выбор подходящего подхода ML

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

Однако между ними существует принципиальное различие. Для генерации видео модель должна обрабатывать и генерировать последовательность frame, а не одно изображение. Это значительно увеличивает вычислительную нагрузку. Например, генерация пятисекундного видео при 24 FPS означает, что модель должна создать 120 frame. Генерация изображения 512x512 может занять около 1 секунды на высокопроизводительном GPU, таком как NVIDIA H100, но масштабирование до пятисекундного видео 720p потребует значительно больше времени, так как каждый frame 720p содержит примерно в 3,6 раза больше пикселей. В результате генерация пятисекундного видео 720p может занять около семи минут.

Image represents a diagram illustrating two separate generative AI processes.  The top process shows a 'Text prompt' feeding into a 'Text-to-Image...' box, which in turn outputs a single light-blue rectangle representing a generated image.  The bottom process depicts a 'Text prompt' inputting into a light-orange 'Text-to-Video...' box. This box outputs a light-blue rectangle containing a play symbol (▷), representing a generated video. This video is then further broken down into a stack of twelve light-blue rectangles, labeled as '120 frames,' indicating the individual frames composing the generated video.  Arrows clearly show the unidirectional flow of information from input (text prompt) to processing (Text-to-Image or Text-to-Video) to output (image or video frames).
Рисунок 3: Генерация видео по тексту создаёт последовательность frame

Для решения проблемы сложности и вычислительных затрат генерации видео мы используем популярный подход латентной диффузионной модели (LDM). Этот подход был впервые популяризирован статьёй Stable Diffusion [3] и впоследствии применён и использован большинством моделей генерации видео, таких как Sora от OpenAI [1] и Movie Gen от Meta [4]. Рассмотрим этот подход подробнее.

Латентная диффузионная модель (LDM)

Основная идея LDM заключается в том, что диффузионная модель работает в низкоразмерном latent space, а не непосредственно в пространстве пикселей. Диффузионная модель обучается удалять шум из этих низкоразмерных латентных представлений, а не из исходных видеопикселей обучающего набора данных.

Image represents a video compression and prediction model.  On the left, a stack of light-blue rectangles labeled 'Original video' depicts a sequence of video frames. A thick arrow labeled 'Compression' points right, indicating a compression process transforming the original video frames into a stack of smaller, lavender-colored rectangles labeled 'Latent...'. These compressed frames then flow into a light-orange, rounded-rectangle box labeled 'Latent...', representing a latent space.  '+ noise' is added to this latent representation before it proceeds to the right via another arrow. The output on the far right is a stack of multicolored, noisy rectangles labeled 'Predicted...', representing the reconstructed video frames after passing through the latent space and adding noise. The entire process is described as occurring within a 'Latent space'.
Рисунок 4: Диффузионная модель, работающая в низкоразмерном latent space

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

Сеть сжатия

Сеть сжатия -- это нейронная сеть, которая отображает видеопиксели в latent space. Она принимает необработанное видео на вход и выдаёт сжатое латентное представление, уменьшая как количество frame (temporal размерность), так и разрешение (spatial размерности).

Сеть сжатия обычно основана на модели вариационного автоэнкодера (VAE) [5], которая обучается отдельно от диффузионной модели. Визуальный encoder VAE преобразует входное видео в латентное представление, а визуальный decoder реконструирует исходные видеокадры из latent space.

Image represents a simplified model of a video compression and decompression system.  The process begins with an 'Original video' represented as a three-dimensional rectangular prism.  This video is fed into a 'Visual...' encoder (represented as a trapezoidal shape), which processes the video and outputs a compressed representation. This compressed data, labeled 'Latent...', is shown as a smaller cube.  The 'Latent...' data then passes through a 'Visual D...' decoder (another trapezoidal shape), which reconstructs the video. The final output is a 'Reconstructed video,' also depicted as a three-dimensional rectangular prism, similar in shape to the original but potentially with some loss of information due to compression.  Arrows indicate the unidirectional flow of data between each component.
Рисунок 5: Сеть сжатия, состоящая из визуального encoder и decoder
Как LDM решает проблему вычислительной сложности?

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

Представьте, что нам нужно видео с 24 FPS, длительностью пять секунд и разрешением 720p. Это означает 120 frame, каждый с 1280x720 пикселями -- значительный объём данных для обработки. Если мы используем сеть сжатия, аналогичную [4], которая уменьшает как temporal, так и spatial разрешение в 8 раз, spatial размерность видео становится 160x90 пикселей, а temporal размерность сокращается до 15 frame.

Image represents a data processing pipeline.  A large, light-grey, three-dimensional rectangular block representing input data with dimensions 120 x 1280 x 720 is shown. A curved arrow indicates data flow from this block to a rectangular box labeled '110,592,000...', suggesting a count or size of the input data.  The input block then sends data via a straight arrow to a trapezoidal, light-green block labeled 'Visual...', likely representing a visual processing or transformation stage.  This visual processing stage outputs data to another light-grey, three-dimensional rectangular block with dimensions 15 x 160 x 90. Finally, a curved arrow connects this output block to a rectangular box labeled '216,000...', indicating the size or count of the processed data.  The overall diagram illustrates the transformation of a large dataset through a visual processing step, resulting in a smaller dataset.
Рисунок 6: Влияние сжатия на объём данных

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

Как генерировать видео с помощью обученной LDM

Для генерации видео с помощью обученной LDM мы начинаем с чистого шума в latent space. LDM постепенно уточняет его до очищенного от шума латентного представления. Затем визуальный decoder преобразует это латентное представление обратно в пространство пикселей для создания финального видео.

Image represents a video generation system pipeline.  It begins with a 'Random...' block, representing a source of random noise, which feeds into a sequence of three 'Latent...' blocks, each representing a latent space.  Each 'Latent...' block receives input from a corresponding 'Text Enc...' block below, labeled as 'Text Enc...', which presumably encodes text descriptions like 'a dog walking...'.  Arrows indicate the flow of information, showing that the output of each 'Latent...' block feeds into the next, suggesting a sequential or iterative process.  After the third 'Latent...' block, the output flows into a 'Denoised...' block, likely representing a denoising step. This is followed by a 'Visual De...' block (likely a visual decoder), which processes the denoised latent representation. Finally, the output of the 'Visual De...' block is a 'Generated video' block, representing the final generated video output.  The overall architecture suggests a text-to-video generation model using a latent space representation and a sequential refinement process.
Рисунок 7: Генерация видео с помощью обученной LDM

Для этой главы мы выбираем подход LDM для разработки нашей системы генерации видео по тексту, поскольку он эффективен и снижает вычислительную нагрузку. Чтобы узнать больше о LDM, обратитесь к [6].

Подготовка данных

Набор данных для генерации видео по тексту включает 100 миллионов пар текстовых описаний и соответствующих видео. Эти пары охватывают различные тематики и действия, позволяя модели обучаться на разнообразных видео. В этом разделе мы подготавливаем видео и подписи для обучения нашей LDM.

Подготовка видео

Мы фокусируемся на трёх ключевых шагах подготовки видео для обучения:

  • Фильтрация неподходящих видео
  • Стандартизация видео
  • Предварительное вычисление представлений видео в latent space
Фильтрация неподходящих видео

Большие наборы данных часто содержат нежелательный контент. На этом шаге удаляются неподходящие видео, чтобы модель обучалась только на качественных материалах. Типичные шаги включают:

  • Удаление низкокачественных или коротких видео: следуя Movie Gen [4], мы удаляем видео с низким разрешением, слишком короткие, замедленные или искажённые артефактами сжатия.
  • Удаление дублирующихся видео (дедупликация): мы используем метод дедупликации, такой как [7], для устранения идентичных видео. Это обеспечивает разнообразие обучающих данных и предотвращает чрезмерное представление определённых видео.
  • Удаление вредоносных видео: мы используем модели обнаружения вредоносного контента для выявления и удаления видео с откровенным содержанием. Этот шаг критически важен для того, чтобы наша модель генерации видео по тексту не создавала вредоносные видео.
Стандартизация видео
  • Корректировка длины видео: мы разрезаем более длинные видео на пятисекундные клипы, чтобы обучающие данные состояли только из видео одинаковой длины.
  • Стандартизация частоты кадров: мы перекодируем видео с более высокой частотой кадров до 24 FPS, чтобы все видео имели одинаковую частоту кадров.
  • Корректировка размеров видео: мы изменяем размер и обрезаем видео до стандартного размера, например, 1280x720 пикселей.
Предварительное вычисление представлений видео в latent space

Поскольку LDM работает в latent space, ей нужны только латентные представления на вход. Таким образом, каждая итерация обучения обычно требует следующих шагов:

  • Извлечение frame из видео в обучающих данных.
  • Прохождение этих frame через предобученную сеть сжатия для получения латентных представлений.
  • Использование латентных представлений для продолжения обучения диффузионной модели.

Однако эти шаги неэффективны. Извлечение frame и их сжатие для миллионов видео каждый раз при обучении новой модели замедляет обучение диффузии. Вычисление латентных представлений на лету является ресурсоёмким и времязатратным.

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

Примерный расчёт: предположим, что каждый видеокадр при сжатии в латентное представление уменьшается в размере в 512 раз. Таким образом, если видео из 1000 frame занимает около 1000 МБ, его латентное представление займёт около 2 МБ. Если мы кэшируем латентные представления для 100 миллионов видео, общий требуемый объём хранения составит около 200 ТБ. Учитывая современные возможности хранения, это вполне управляемо, особенно по сравнению со значительной экономией времени при обучении.

Image represents a data processing pipeline for video data, likely in the context of training a machine learning model.  The pipeline begins with 'Original training video...' depicted as a collection of variously colored rectangular boxes, each containing a play button symbol (▷), representing individual video segments. These segments are then passed through a 'Filtering' stage, resulting in a smaller set of similarly symbolized rectangular boxes in a light blue rectangle.  This filtered data is then 'Standardized...', producing another set of video segments (represented by colored rectangles with play buttons) arranged vertically in a light blue rectangle.  Finally, the standardized data undergoes 'Precomputing...', transforming the data into a stack of smaller, colored cubic blocks, each also implying a video segment.  These precomputed blocks are then written to a 'Storage' database, represented by a large, pale yellow cylinder.  Arrows indicate the flow of data between each stage, showing the transformation and reduction of data as it progresses through the pipeline.
Рисунок 8: Подготовка видеоданных

Подготовка подписей

Важно иметь качественные, согласованные подписи. Некоторые подписи, вероятно, будут отсутствовать или будут нерелевантными. Типичные шаги подготовки подписей:

  • Обработка отсутствующих или неанглоязычных подписей: для видео без подписей или с подписями на другом языке мы используем модели, такие как LLaMa3-Video [8] или LLaVA [9], для автоматической генерации описательных подписей.
  • Переподписывание: мы улучшаем существующие подписи с помощью предобученных моделей подписывания видео, таких как LLaMa3-Video или LLaVA, для генерации более длинных и детальных версий. Команда Sora [1] показала, что этот процесс необходим для повышения качества и соответствия тексту.
  • Предварительное вычисление embedding подписей: обучение диффузионной модели требует embedding подписей для обусловливания. Мы используем текстовый encoder для предварительного вычисления embedding подписей, ускоряя обучение LDM.
Image represents a tabular structure illustrating a dataset for a video captioning model.  The table has three columns: 'ID', 'Video latents', and 'Caption embeddings'. The 'ID' column lists sequential identifiers for each data entry, ranging from 1 to N, where N represents an unspecified number of entries. The 'Video latents' column visually depicts each video's latent representation as a three-dimensional rectangular box, implying a compact, vectorized encoding of the video's visual content.  The 'Caption embeddings' column shows each video's corresponding caption represented as a set of vertical rectangular blocks, each block likely representing a word or a segment of the caption's embedding vector. The number of blocks varies across rows, suggesting captions of different lengths.  The ellipsis (...) indicates that the table continues beyond the shown rows, implying a larger dataset with more video-caption pairs.  There is no explicit connection shown between the 'Video latents' and 'Caption embeddings' columns, but the implicit relationship is that each video's latent representation (box) is paired with its corresponding caption embedding (set of blocks) sharing the same ID.
Рисунок 9: Подготовленные обучающие данные пар видео-подпись

Разработка модели

Архитектура

При выборе архитектуры для диффузионной модели генерации видео по тексту у нас есть два основных варианта: U-Net и DiT. Мы рассмотрим каждый из них и определим дополнительные слои, необходимые для расширения их на обработку видео.

U-Net для видео

Кратко рассмотрим архитектуру U-Net, прежде чем расширять её для обработки видео. Как мы рассмотрели в Главе 9, архитектура U-Net состоит из серии блоков понижения разрешения (downsampling), за которой следует серия блоков повышения разрешения (upsampling). Каждый блок понижения разрешения включает 2D-свёртки для обработки и обновления признаков изображения и слой cross-attention для обновления признаков путём внимания к текстовому промпту.

Image represents a U-Net architecture for image processing.  The input is a 64x64 image represented as a gray 3D block. This image is fed into a series of downsampling blocks (labeled 'D', colored light red), each consisting of a Conv2D layer, Batch Normalization, ReLU activation, Max Pooling, and a Cross-Attention mechanism (as indicated by the top dashed box).  These 'D' blocks sequentially reduce the spatial dimensions of the input.  The output of the final downsampling block then flows into a series of upsampling blocks (labeled 'U', colored light green), each mirroring the structure of the downsampling blocks but using transposed convolutions instead of standard convolutions (as shown in the top right dashed box).  These 'U' blocks increase the spatial dimensions, eventually reconstructing the image to the original 64x64 size. The 'D' and 'U' blocks are connected, forming the characteristic U-shape of the U-Net. The entire process is labeled 'U-Net,' with 'Downsampling b...' and 'Upsampling blo...' describing the respective block sequences. The final output is a 64x64 'Predicted...' image, represented as a gray 3D block.
Рисунок 10: Архитектура U-Net для генерации изображений

Однако эти слои в основном фокусируются на захвате взаимосвязей между пикселями в пределах одного изображения. Эта конструкция создаёт проблему для видео, где поддержание temporal согласованности критически важно для плавного движения и непрерывности между frame. Текущие слои работают spatial в пределах отдельных frame, а не между ними.

Для решения этого недостатка мы модифицируем архитектуру U-Net, чтобы понимать взаимосвязи между frame. В частности, мы внедряем два часто используемых temporal слоя:

  • Temporal attention
  • Temporal свёртка
Image represents a diagram illustrating a downsampling and upsampling process within a likely neural network architecture.  The diagram is divided into two halves, representing these two processes.  The left half, labeled 'Downsampling...', shows a sequence of operations starting with a 'Temporal Conv' layer, whose output feeds into a horizontally arranged block containing a 'Conv2D', 'Batch Norm2D', 'ReLU', and 'MaxPool2D' layer.  A 'Temporal Attention' layer's output is also fed into this block, likely through concatenation or addition. The right half, labeled 'Upsampling...', mirrors this structure but in reverse. It begins with a 'Temporal Conv' layer feeding into a block containing 'ConvTranspose2D', 'Batch Norm2D', 'ReLU', and 'Cross-attention' layers.  A 'Temporal Attention' layer's output is also fed into this block.  The arrangement suggests a U-Net-like architecture where the downsampling path reduces spatial dimensions, followed by the upsampling path to reconstruct the original dimensions, with cross-attention mechanisms potentially enabling information flow between different levels of the network.
Рисунок 11: Внедрение temporal слоёв в блоки downsampling и upsampling U-Net

Кратко рассмотрим каждый слой.

Temporal attention: temporal attention использует механизм attention между frame. Каждый признак обновляется путём внимания к релевантным признакам других frame. Рисунок 12 показывает, как определённый признак во frame 2 обновляется путём внимания к признакам других frame.

Image represents a sequence of four frames, labeled 'Frame 1,' 'Frame 2,' 'Frame 3,' and 'Frame 4,' enclosed within a dashed-line rectangle. Each frame is depicted as a light green square containing a smaller, empty black square.  Curved arrows originate from the inner black squares of Frame 1 and Frame 2, pointing towards the inner black squares of Frame 2, Frame 3, and Frame 4.  Specifically, the inner square in Frame 1 has one arrow pointing to the inner square in Frame 2. The inner square in Frame 2 has two arrows, one pointing to the inner square in Frame 3 and another to the inner square in Frame 4.  The arrows suggest a flow of information or a dependency between the frames, possibly indicating a sequential process or data transfer.  The dashed line surrounding all frames suggests a boundary or a system encompassing the entire sequence.  An ellipsis ('...') after Frame 4 indicates that the sequence continues beyond the displayed frames.
Рисунок 12: Temporal attention обновляет признаки, обращаясь к другим frame
  • Temporal свёртка: temporal свёртка означает применение оператора свёртки к 3D-сегменту данных для захвата temporal размерности. Рисунок 13 иллюстрирует 2D и 3D temporal свёртки.
Image represents a comparison of 3D and 2D convolutions.  The left side depicts a 3D convolution illustrated as a larger, light-grey rectangular prism representing the input volume.  Within this larger prism, a smaller, salmon-pink rectangular prism labeled '3D...' represents the 3D convolutional kernel or filter. The text '3D convolution' is positioned below this illustration.  The right side mirrors this structure but in 2D: a larger, light-grey square represents the input image, and a smaller, salmon-pink square labeled '2D...' represents the 2D convolutional kernel. The text '2D convolution' is placed below this 2D representation.  Both diagrams visually demonstrate how a smaller kernel (either 3D or 2D) slides across a larger input volume or image to perform the convolution operation. The ellipses (...) in the labels suggest that the kernel's dimensions are not explicitly specified but are implied by the visual representation of the kernel's size relative to the input.
Рисунок 13: 2D-свёртка vs. 3D-свёртки

Подводя итог, для расширения архитектуры U-Net на обработку видео мы можем чередовать слои temporal свёртки и temporal attention в каждом блоке downsampling и upsampling. Эти слои позволяют архитектуре U-Net моделировать движение во входных видео и генерировать последовательность frame, которые temporal согласованы. Чтобы узнать больше о том, как эти слои могут чередоваться, обратитесь к [10].

DiT для видео

В отличие от U-Net, основанного преимущественно на свёртках, DiT в основном опирается на архитектуру Transformer. Как показано на Рисунке 14, DiT состоит из четырёх основных компонентов:

  • Patchify
  • Positional encoding
  • Transformer
  • Unpatchify
Image represents a denoising model architecture.  A 'Noisy image' box at the bottom feeds into a larger box containing four stacked processing layers: 'Patchify' (light green), 'Positional Encoding' (light red), 'Transformer' (light orange), and 'Unpatchify' (light green).  These layers sequentially process the noisy image.  The 'Patchify' layer likely divides the image into smaller patches for processing.  'Positional Encoding' adds positional information to the patches. The core processing happens within the 'Transformer' layer, a neural network architecture known for handling sequential data. Finally, 'Unpatchify' recombines the processed patches into a complete image.  An arrow indicates data flow from the 'Noisy image' through these layers.  A separate box labeled 'Conditions...' is connected to the input of the 'Transformer' layer, suggesting conditional information influences the denoising process.  The output of the entire process is 'Predicted noise,' represented by a box at the top, indicating the model's prediction of the noise present in the input image.  An upward arrow shows the flow of this predicted noise from the 'Unpatchify' layer.
Рисунок 14: Компоненты DiT

Рассмотрим каждый компонент и поймём его назначение.

Patchify

Этот компонент преобразует вход в последовательность векторов embedding. Сначала он делит вход на меньшие фрагменты (patches) фиксированного размера. Затем каждый фрагмент выравнивается для формирования последовательности векторов. Выровненные фрагменты затем преобразуются в embedding фрагментов с помощью слоя проекции. Этот шаг критически важен для согласования размера embedding каждого выровненного фрагмента с размером скрытого состояния Transformer.

Процесс patchify аналогичен для входных изображений и видео. Для изображений вход делится на 2D-фрагменты фиксированного размера. Для видео вход делится на 3D-фрагменты.

Image represents a comparison of image and video processing pipelines, both employing a 'Patchify' operation.  On the left, an image is processed.  The image is first divided into 9 patches (represented as vertical rectangles labeled 'Patch em... c' and numbered '9'), each of which is then individually processed by a 'Patchify' module. This module consists of three sequential steps: 'Projection,' 'Flatten,' and 'Divide,' represented as stacked horizontal rectangles within a larger box labeled 'Patchify.'  The output of the Patchify module for each patch is a smaller set of square blocks. On the right, a similar process is shown for a video. The video is first divided into 18 patches (also represented as vertical rectangles labeled 'Patch em... C' and numbered '18').  Each patch is then processed by a 'Patchify' module (identical in structure to the image's module) resulting in a larger, three-dimensional array of cubic blocks.  Arrows indicate the flow of data between stages, showing how the initial image or video is broken into patches, then processed by the Patchify module, resulting in a transformed representation of the input.
Рисунок 15: Patchify для изображения vs. видео
Positional encoding

Компонент positional encoding создаёт embedding для каждой позиции в исходной последовательности. Эти embedding предоставляют Transformer информацию о расположении каждого фрагмента в исходном входе.

Image represents a comparison of data processing for image and video inputs within a system likely involving a transformer network.  The left side depicts image processing:  Nine rectangular blocks labeled '1' through '9' represent a 3x3 image. These blocks are grouped under a curved bracket labeled 'c' indicating channels, and the number '9' below signifies the total number of input features. An upward arrow connects this image representation to a light-red rectangular box labeled 'Positional E...', likely representing a positional encoding layer. The right side shows video processing:  A 3x3x2 cube (represented as a 3x3 grid of cubes, with the depth implied) labeled '1' through '6' (and implied further numbers) represents a video frame, with '18' below indicating the total number of input features.  Similarly, an upward arrow connects this video representation to a light-red rectangular box labeled 'Positional E...', indicating the same positional encoding layer is used for both image and video data.  The difference lies in the input dimensionality: a 2D array for images (9 features) and a 3D array for videos (18 features), both processed through the same positional encoding step.
Рисунок 16: 1D positional encoding для изображения vs. видео

Как мы видели в Главе 2, существуют разные способы кодирования позиций: некоторые методы используют фиксированное positional encoding во время обучения, в то время как другие делают positional encoding обучаемым. Также существуют разные способы назначения позиций каждому фрагменту. Например, можно присвоить каждому фрагменту одно число для обозначения его места в последовательности или использовать 3D-координаты (2D для изображений) для указания местоположения каждого фрагмента в пространстве и времени.

Image represents a comparison of different positional encoding methods in a system, likely for a neural network.  The left side shows a 2D encoding where a 3x3 grid of data points, represented by numbers like '1,1', '1,2', etc., feeds into a positional encoding function denoted as  `$F(i, j)` (where `i` and `j` likely represent row and column indices). This function's output is shown as a rectangular box.  The right side shows a 1D encoding where a 3x3 grid is flattened into a 1D sequence (1, 2, 3, 4, 5, 6, 7, 8, 9) and fed into a positional encoding function `$F(i)` (where `i` is the index in the sequence).  The output is again represented by a rectangular box.  Below this, the same comparison is shown for 3D encoding, where a 3x3x3 cube of data points is first represented as a 3D structure and then flattened into a 1D sequence before being processed by `$F(i,j,k)` (for 3D) and `$F(i)` (for 1D) respectively, with outputs shown as rectangular boxes.  Arrows indicate the flow of information from the data representation to the positional encoding function.  The label 'Positional encoding...' indicates the overall theme of the diagram.
Рисунок 17: 1D, 2D и 3D positional encoding

Не существует единственно лучшего способа positional encoding. Часто необходимо проводить эксперименты, чтобы найти подход, наиболее эффективный для данных и задачи. В этой главе мы следуем OpenSora [11] и используем RoPE [12] positional encoding. Чтобы узнать больше о positional encoding в моделях генерации видео по тексту, обратитесь к [4].

Transformer

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

Image represents a sequence-to-sequence model architecture, likely used for denoising or generation tasks.  The model begins with an 'Input sequence...' represented as multiple vertical blocks, each block symbolizing a vector or embedding. These input vectors feed into a 'Transformer' block, which is depicted as a peach-colored rectangle containing stacked layers: 'Normalization,' 'Feed Forward,' 'Cross-Attention' (labeled with 'Nx' indicating a parameter likely related to the number of attention heads), another 'Normalization' layer, and finally 'Multi-head...' (implying multi-head self-attention).  The output of the Transformer is then used to predict 'Predicted noise,' also represented as multiple vertical blocks.  Separately, a 'Conditioning signal...' feeds into an 'Encoder' block, which then sends its output to the input of the Transformer, allowing the model to condition its generation on external information.  Arrows indicate the flow of information between components, showing how the input sequence, conditioned by the encoder's output, is processed by the Transformer to generate the predicted noise sequence.
Рисунок 18: Компонент Transformer
Unpatchify

Unpatchify преобразует предсказанные векторы шума обратно к исходным размерностям входа. Он включает LayerNorm для нормализации, линейный слой для корректировки длины вектора и операцию изменения формы (reshape) для формирования финального выхода.

Image represents a comparison of two different architectures for a generative model, likely focused on noise prediction and image generation.  Both sides share a similar structure. At the bottom, labeled 'Noise vectors predicted...', are multiple vertical rectangular blocks representing input noise vectors; the ellipsis (...) indicates that more such vectors exist.  These vectors are fed upwards into a green block labeled 'Unpatchify,' which processes them. Above 'Unpatchify,' a stacked block contains three layers: 'Reshape,' 'Linear,' and 'LayerNorm,' sequentially processing the output of 'Unpatchify.' Finally, at the top, a shape labeled 'Predicted noi...' represents the predicted noise output; on the left, this is a square, while on the right, it's a three-dimensional rectangular prism, suggesting a difference in the dimensionality or representation of the predicted noise between the two architectures.  The arrows indicate the flow of information from the noise vectors through the processing layers to the final predicted noise output.  The difference between the left and right sides lies primarily in the shape of the final predicted noise output, implying a variation in the output's dimensionality or structure.
Рисунок 19: Компонент Unpatchify

U-Net vs. DiT

Обе архитектуры, U-Net и DiT, доказали свою эффективность для генерации видео по тексту. Архитектура U-Net существует дольше и была тщательно протестирована. Популярные модели генерации видео по тексту на основе U-Net включают Stable Video Diffusion [13] от Stability AI и EMU video [14] от Meta.

Архитектура DiT более новая и продемонстрировала большой потенциал с превосходными результатами. DiT лучше работает при увеличении объёма данных и вычислительных мощностей благодаря масштабируемой природе Transformer. Кроме того, она имеет гибкую архитектуру, что облегчает адаптацию к видео и другим модальностям ввода. Movie Gen от Meta и Sora от OpenAI -- популярные модели, основанные на архитектуре DiT.

В этой главе мы следуем Sora и выбираем архитектуру DiT.

Обучение

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

  • Добавление шума: случайно выбирается временной шаг для определения уровня добавления шума. Выбранный временной шаг используется для добавления шума к входному видео.
  • Прогнозирование шума: модель DiT получает зашумлённое видео на вход и прогнозирует добавленный шум на основе обусловливающих сигналов, таких как текстовый промпт и выбранный временной шаг.
  • Вычисление потерь: потеря вычисляется путём сравнения предсказанного шума с фактическим шумом.

Для более детального обзора обучения диффузии обратитесь к Главе 9.

Целевая функция ML и функция потерь

Основная функция потерь -- это потеря реконструкции, вычисляемая с использованием формулы среднеквадратичной ошибки (MSE). Эта потеря измеряет разницу между предсказанным шумом и фактическим шумом, побуждая модель точно предсказывать добавленный шум. Целевая функция ML -- минимизировать потерю реконструкции, что ведёт к точной реконструкции видео.

Исследователи экспериментировали с добавлением других функций потерь для улучшения производительности генерации видео по тексту. Чтобы узнать больше, обратитесь к [4].

Проблемы обучения видеодиффузионных моделей

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

  • Нехватка крупномасштабных данных видео-текст
  • Вычислительная стоимость генерации видео высокого разрешения
Нехватка крупномасштабных обучающих данных видео-текст

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

Существуют две распространённые стратегии решения проблемы нехватки крупномасштабных данных:

  • Обучение модели DiT на данных изображений и видео одновременно: эта стратегия рассматривает каждое изображение как одно-frame видео, позволяя модели обучаться как на парах изображение-текст, так и на парах видео-текст.
  • Предобучение модели DiT на данных изображений: эта стратегия сначала предобучает модель DiT на парах изображение-текст для использования обширных данных изображений и построения прочной визуальной основы. Затем предобученная модель дообучается на парах видео-текст для генерации видео.
Image represents two strategies for training a video generation model.  Strategy 1 shows a 'Training' block receiving input from two cylindrical database representations labeled 'Image-text pairs' and 'Video-text pai...'.  The output of the 'Training' block is an arrow pointing to a light green cloud labeled 'Video...', representing the generated video. Strategy 2 depicts a 'Pretraining' block taking input from a cylindrical database labeled 'Image-text pairs,' outputting to a light orange cloud labeled 'Image...', which then feeds into a 'Finetuning' block.  The 'Finetuning' block receives input from a second cylindrical database labeled 'Video-text pai...' and outputs to a light green cloud labeled 'Video...', representing the generated video.  Both strategies ultimately generate videos ('Video...') but utilize different training approaches: Strategy 1 trains directly on both image-text and video-text pairs, while Strategy 2 uses a two-stage process, first pretraining on image-text pairs and then finetuning on video-text pairs.
Рисунок 20: Две стратегии использования обучающих данных изображение-текст

Обе стратегии используют сотни миллионов пар изображение-текст при обучении, позволяя модели DiT обучаться как на изображениях, так и на видео. Для простоты мы выбираем первую стратегию, так как она требует только одного этапа обучения. Однако обе стратегии могут быть эффективны на практике.

Вычислительная стоимость генерации видео высокого разрешения

Как обсуждалось ранее, обработка и генерация видео дороже, чем изображений. Это в первую очередь связано с тем, что видео обычно содержит сотни frame, что делает процесс медленнее и дороже. Генерация видео высокого разрешения, такого как 720p или 1080p, добавляет дополнительную сложность.

Вот несколько распространённых стратегий снижения вычислительных затрат при обучении моделей генерации видео высокого разрешения:

  • Использование подхода на основе LDM: вместо обучения модели DiT непосредственно в пространстве пикселей мы используем сеть сжатия для преобразования видео из пространства пикселей в низкоразмерное latent space. Обучение диффузионной модели в этом latent space снижает вычислительную нагрузку.
  • Предварительное вычисление видеопредставлений: предварительно вычисляя видеопредставления в latent space перед обучением, мы избегаем повторяющихся вычислений во время обучения. Использование этих кэшированных данных ускоряет процесс обучения.
  • Использование модели spatial super-resolution: как предложено Google в "Imagen video" [15], мы используем отдельно обученную модель для увеличения разрешения сгенерированных видео. Модель DiT генерирует видео в более низком разрешении, которое затем улучшается до желаемого разрешения моделью spatial super-resolution. Например, модель DiT может генерировать видео в 720p, а модель spatial super-resolution может затем масштабировать их до 1080p или 4K.
  • Использование модели temporal super-resolution: как предложено в [15], мы используем модель для увеличения temporal разрешения путём интерполяции между frame. Например, если видео должно быть пять секунд при 24 FPS (то есть 120 frame всего), модель DiT может сгенерировать его при 12 FPS (60 frame), а модель temporal super-resolution затем интерполирует до 24 FPS.
  • Использование более эффективных архитектур: мы можем принять эффективную реализацию механизма attention [16] для снижения вычислительной нагрузки при обучении. Кроме того, такие техники, как Mixture of Experts (MoE) [17], могут использоваться для ускорения процесса обучения.
  • Использование распределённого обучения: мы используем техники распределённого обучения, такие как тензорный параллелизм, для параллелизации обучения на нескольких устройствах. Разделяя модель, данные или и то и другое между различными устройствами, мы можем значительно ускорить обучение и более эффективно обрабатывать большие наборы видеоданных. Этот подход особенно полезен для генерации видео высокого разрешения, где требования к памяти и вычислениям существенны. Для обзора распределённого обучения обратитесь к Главе 1.
Image represents a data processing pipeline for video generation.  It begins with a rectangular box labeled 'Latent...' (orange), representing input latent data, which flows (indicated by an arrow and numbered '1') into a trapezoidal box labeled 'Visual D...' (light green), representing a visual decoder.  The output of the visual decoder ('Generated video...', dimensions 40x23x8) is then processed in two parallel paths.  Path one involves a connection (numbered '2') to a rectangular box labeled 'Spatial...' (light purple), followed by an arrow and numbered '3' to another rectangular box labeled 'Temporal...' (light purple). Path two directly connects the visual decoder output to a large rectangular prism representing the 'Generated video...' (dimensions 320x180x60). The outputs of 'Spatial...' and 'Temporal...' are then combined (arrow and numbered '4') to create the final video, represented by a larger rectangular prism labeled 'Final video' with dimensions 1280x720x120.  The numbers within the boxes represent dimensions (likely height, width, and depth/frames) of the video data at each stage.  The arrows indicate the flow of data between processing stages.
Рисунок 21: Эффективный конвейер генерации видео по тексту

Сэмплирование

Процесс сэмплирования в диффузионных моделях начинается со случайного шума, и модель итеративно очищает сэмпл от шума, пока не будет получено полностью очищенное видеопредставление в latent space. Для более подробной информации о сэмплировании в диффузионных моделях обратитесь к Главе 9.

Image represents a diffusion model architecture for generating images from text prompts.  The process begins with a 'Random...' block, representing a randomly initialized latent vector, which is fed into a series of three 'Latent...' blocks. Each 'Latent...' block represents a stage in the diffusion process, receiving input from the previous stage and a 'Text Enc...' block.  The 'Text Enc...' blocks, labeled with 'a dog walking...', encode the text prompt ('a dog walking...') into a vector that conditions the diffusion process at each stage.  Arrows indicate the flow of information: the output of each 'Latent...' block is passed to the next, and the output of each 'Text Enc...' block is fed into the corresponding 'Latent...' block.  After three stages, the final 'Latent...' block outputs a 'Denoised...' vector, representing the generated image's latent representation.  The ellipsis (...) after the second 'Latent...' block indicates that this section could be repeated multiple times depending on the model's design.
Рисунок 22: Процесс сэмплирования из обученной LDM

Оценка

Офлайн-метрики оценки

Единый бенчмарк критически важен для оценки моделей генерации видео. VBench [18] и Movie Gen Bench [19] обеспечивают это, предоставляя отобранный набор промптов, предназначенных для тестирования различных аспектов генерации видео, таких как когерентность движения, temporal согласованность и сложность сцены. Мы можем использовать эти бенчмарки для измерения того, насколько хорошо модель создаёт реалистичные и плавные видео, фокусируясь на качестве видео, точности движений и переходах между сценами. Рассмотрим как автоматические метрики, так и человеческую оценку, сосредоточившись на трёх ключевых областях:

  • Качество frame
  • Temporal согласованность
  • Соответствие видео тексту

Качество frame

Качество frame означает измерение качества каждого frame независимо. Для измерения этого качества мы используем FID [20] и Inception score (IS) [21], которые широко применяются для изображений. Общее качество вычисляется путём усреднения оценок FID и IS по всем frame. Также могут использоваться другие метрики, такие как LPIPS [22] и KID [23].

Хотя FID и IS измеряют качество отдельных frame, они не учитывают temporal согласованность в сгенерированных видео. Например, видео может иметь высококачественные frame, но при этом не иметь плавных переходов, что даёт высокий FID score без визуальной когерентности. Рассмотрим temporal согласованность и распространённые метрики для её измерения.

Temporal согласованность

Temporal согласованность означает, насколько плавно визуальное содержимое переходит от одного frame к следующему. Оценка temporal согласованности важна для обеспечения естественного потока сгенерированного видео. Распространённая метрика для измерения temporal согласованности -- это Frechet Video Distance (FVD).

FVD

FVD [24], являющийся расширением FID, оценивает как визуальное качество, так и temporal согласованность видео. Он сравнивает статистическое распределение сгенерированных видео с реальными видео в пространстве embedding.

Вот пошаговое руководство по вычислению FVD score:

  • Генерация видео: мы начинаем с генерации большого набора видео с помощью модели, которую хотим оценить. Эти видео будут сравниваться с набором реальных видео для оценки их качества и согласованности.
  • Извлечение признаков: мы пропускаем каждое видео (как сгенерированное, так и реальное) через предобученную модель I3D [25] и извлекаем признаки из определённого слоя. Модель I3D расширяет архитектуру Inception v3 [26] на последовательные данные путём обучения на распознавании действий.
  • Вычисление среднего и ковариации: мы вычисляем среднее и ковариацию извлечённых признаков отдельно для сгенерированных и реальных видео. Эти статистические меры суммируют распределение признаков для обоих наборов видео.
  • Вычисление расстояния Фреше: мы вычисляем FVD score как расстояние Фреше между средним и ковариацией сгенерированных и реальных видео. Расстояние Фреше измеряет, насколько близки два распределения.

Более низкий FVD score указывает на большее сходство между распределениями, означая, что сгенерированные видео более реалистичны и temporal согласованы.

Соответствие видео тексту

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

Широко используемая метрика для измерения соответствия видео тексту -- это CLIP similarity score, вычисляемый следующим образом:

  • Извлечение признаков на уровне frame: мы пропускаем каждый frame видео через предобученный CLIP image encoder для получения визуальных признаков. Текст кодируется с помощью текстового encoder для получения текстовых признаков.
  • Вычисление сходства: для каждого frame мы вычисляем косинусное сходство между его визуальными признаками и текстовыми признаками. Эта оценка показывает, насколько хорошо содержимое frame соответствует тексту.
  • Агрегация покадровых оценок сходства: мы агрегируем эти оценки сходства для получения единой оценки, представляющей общее соответствие видео тексту. Агрегация может выполняться путём усреднения, взятия максимальной оценки или с использованием других статистических методов.

Высокий CLIP similarity score указывает на то, что сгенерированные видео соответствуют своим текстовым описаниям.

Человеческая оценка

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

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

Онлайн-метрики оценки

Онлайн-метрики оценки для моделей генерации видео по тексту аналогичны метрикам для моделей генерации изображений по тексту. Важные метрики включают:

  • Кликабельность (click-through rate)
  • Время, проведённое на странице
  • Обратная связь от пользователей
  • Конверсия

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

Общий дизайн системы ML

В этом разделе мы рассмотрим целостный дизайн системы генерации видео по тексту. В частности, мы рассмотрим следующие конвейеры:

  • Конвейер данных
  • Конвейер обучения
  • Конвейер инференса

Конвейер данных

Конвейер данных подготавливает обучающие данные путём фильтрации непригодных изображений и видео, их стандартизации, а также предварительного вычисления и сохранения латентных представлений. Он обеспечивает релевантность и детальность подписей путём переподписывания и использования предобученного текстового encoder для предварительного вычисления и сохранения embedding подписей.

Image represents a data processing pipeline with three parallel processing paths.  The top path begins with a database cylinder labeled 'Raw...' representing raw image data. This data flows into a rectangular box labeled 'Inappropriate...', presumably for filtering inappropriate content.  The filtered images then move to a box labeled 'Image...', followed by a light green box labeled 'Image Latent...', which likely represents a latent space representation of the images. Finally, the processed data is stored in a database cylinder labeled 'Image...'. The middle path mirrors this structure, processing 'Raw Videos' through 'Inappropriate...', 'Video...', and 'Video Latent...' boxes, culminating in a 'Video...' database. The bottom path starts with another 'Raw...' database (likely containing text captions), which feeds into a 'Re-captioning' box. The output then goes to a light green 'Caption Embedding...' box, generating embeddings, and finally stores the result in a 'Caption...' database.  Arrows indicate the unidirectional flow of data between each processing stage.
Рисунок 23: Конвейер данных

Конвейер обучения

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

Конвейер инференса

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

Image represents a flowchart depicting the process of generating a video from a user prompt within a generative AI system.  The process begins with a user typing a prompt (1) and submitting it (2) to a 'Prompt Safety...' module (light blue) which checks for safety concerns. If deemed safe (3a), the prompt proceeds to a 'Prompt...' module (pale yellow), then to a 'Video...' module (light orange). The 'Video...' module receives input from both a 'Text...' module (grey cloud) and an 'LDM' module (grey cloud) (5a and 5b), likely representing text-based and latent diffusion model processing.  The output then goes through a 'Visual...' module (light green) and a 'Harm...' module (slate grey) for further safety checks. If safe (8a), it moves to a 'Temporal...' module (light red), which receives input from a 'Spatial...' module (light red) (9). Finally, the processed information is sent to a 'Generate...' module (white square with a play button) (10) to produce the video output. If at any point a safety check fails (3b or 8b), the process is rejected, resulting in a 'Reject r...' outcome.  The numbered circles (1-10) indicate the sequential steps in the process.
Рисунок 24: Компоненты конвейера инференса

Большинство компонентов аналогичны тем, что мы рассмотрели в Главе 9 для генерации изображений по тексту. Уникальные компоненты для генерации видео по тексту:

  • Визуальный decoder
  • Temporal super-resolution

Визуальный decoder

LDM генерирует выход в latent space, а не в пространстве пикселей. Затем визуальный decoder использует сеть сжатия для преобразования этого латентного представления обратно в пространство пикселей.

Temporal super-resolution

Этот компонент интерполирует между сгенерированными frame, обеспечивая более плавное движение в видео.

Дополнительные темы для обсуждения

Если в конце интервью останется дополнительное время, можно обсудить следующие темы:

  • Обеспечение гибкости сэмплирования для различных длительностей, разрешений и соотношений сторон [1].
  • Расширение модели генерации видео по тексту на смежные приложения, такие как inpainting, outpainting, стилизация видео-в-видео, интерполяция frame, super-resolution и анимация изображений (изображение-в-видео) [10].
  • Поддержка управления сгенерированными видео, например, уровень желаемого движения и тип движения (камера vs. объект) [27].
  • Использование техник прогрессивной дистилляции для снижения вычислительных требований обучения [28].
  • Детали моделей spatial и temporal super-resolution [15].
  • Детали модели переподписывания [9][8].
  • Различные планировщики шума [29].
  • Техники аугментации шума с обусловливанием [30].
  • Персонализация модели генерации видео по тексту для конкретного субъекта [31].
  • ControlNet для моделей генерации видео по тексту [32].
  • Детали метода Stable Cascade [33].
  • Детали визуальной сети сжатия [13].

Резюме

Image represents a mind map summarizing the design of a video generation AI system.  The central node is labeled 'Summary,' branching out into several major categories.  The 'Clarifying Requirements' branch details specifying input and output, and framing the problem as a machine learning (ML) approach, specifically using Latent Diffusion Models (LDM).  The 'Data Preprocessing' branch covers video standardization, pre-computation, and caption handling (including missing or non-English captions) and pre-computing caption embeddings.  The 'Model Development' branch focuses on architecture (using U-Net, temporal attention, and positional encoding within a Diffusion model), training, and challenges (computational cost and limitations of long video runs).  The 'Evaluation' branch distinguishes between offline (frame quality metrics like PSNR, LPIPS, and KID; temporal consistency; video-text alignment; and click-through rate) and online (time spent on the page, user feedback, and conversion rate) metrics.  Finally, the 'Overall System Components' branch details the data pipeline, training pipeline, and inference pipeline, which includes components like a prompt safety service, video generator, visual detector, and spatial and temporal super-resolution.  The 'Other Talking Points' branch suggests additional discussion areas.  All branches are color-coded for clarity, and the connections visually represent the hierarchical relationships between different aspects of the system design.

Справочные материалы

[1] Video generation models as world simulators. https://openai.com/index/video-generation-models-as-world-simulators/. [2] H100 Tensor Core GPU. https://www.nvidia.com/en-us/data-center/h100/. [3] High-Resolution Image Synthesis with Latent Diffusion Models. https://arxiv.org/abs/2112.10752. [4] Meta Movie Gen. https://ai.meta.com/research/movie-gen/. [5] Auto-Encoding Variational Bayes. https://arxiv.org/abs/1312.6114. [6] The Illustrated Stable Diffusion. https://jalammar.github.io/illustrated-stable-diffusion/. [7] On the De-duplication of LAION-2B. https://arxiv.org/abs/2303.12733. [8] The Llama 3 Herd of Models. https://arxiv.org/abs/2407.21783. [9] LLaVA-NeXT: A Strong Zero-shot Video Understanding Model. https://llava-vl.github.io/blog/2024-04-30-llava-next-video/. [10] Lumiere: A Space-Time Diffusion Model for Video Generation. https://arxiv.org/abs/2401.12945. [11] OpenSora Technical Report. https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_02.md. [12] RoFormer: Enhanced Transformer with Rotary Position Embedding. https://arxiv.org/abs/2104.09864. [13] Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets. https://arxiv.org/abs/2311.15127. [14] Emu Video: Factorizing Text-to-Video Generation by Explicit Image Conditioning. https://arxiv.org/abs/2311.10709. [15] Imagen Video: High Definition Video Generation with Diffusion Models. https://arxiv.org/abs/2210.02303. [16] HyperAttention: Long-context Attention in Near-Linear Time. https://arxiv.org/abs/2310.05869. [17] Mixture of Experts Explained. https://huggingface.co/blog/moe. [18] VBench: Comprehensive Benchmark Suite for Video Generative Models. https://vchitect.github.io/VBench-project/. [19] Movie Gen Bench. https://github.com/facebookresearch/MovieGenBench. [20] FID calculation. https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance. [21] Inception score. https://en.wikipedia.org/wiki/Inception_score. [22] The Unreasonable Effectiveness of Deep Features as a Perceptual Metric. https://arxiv.org/abs/1801.03924. [23] Demystifying MMD GANs. https://arxiv.org/abs/1801.01401. [24] Towards Accurate Generative Models of Video: A New Metric & Challenges. https://arxiv.org/abs/1812.01717. [25] Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset. https://arxiv.org/abs/1705.07750. [26] Rethinking the Inception Architecture for Computer Vision. https://arxiv.org/abs/1512.00567. [27] Moonshot: Towards Controllable Video Generation and Editing with Multimodal Conditions. https://arxiv.org/abs/2401.01827. [28] Progressive Distillation for Fast Sampling of Diffusion Models. https://arxiv.org/abs/2202.00512. [29] Schedulers. https://huggingface.co/docs/diffusers/v0.9.0/en/api/schedulers. [30] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. https://arxiv.org/abs/2205.11487. [31] CustomVideo: Customizing Text-to-Video Generation with Multiple Subjects. https://arxiv.org/abs/2401.09962. [32] Control-A-Video: Controllable Text-to-Video Generation with Diffusion Models. https://controlavideo.github.io/. [33] Introducing Stable Cascade. https://stability.ai/news/introducing-stable-cascade.