За последние годы большие языковые модели, или LLM, стали центром внимания благодаря появлению чат-ботов, таких как ChatGPT, Claude и Gemini. Эти модели способны генерировать текст, вести диалоги и выполнять разнообразные задачи, связанные с языком. Но как именно они работают и какие компоненты необходимы для их создания? Эта статья дает подробный обзор ключевых аспектов, включая архитектуру, методы обучения, данные, оценку и системные оптимизации.
Хотя архитектура нейронных сетей, на которых основаны LLM (в основном, это трансформеры), широко известна, не менее важными, а в практическом применении часто даже более значимыми, являются другие компоненты: алгоритмы и функции потерь для обучения, данные, на которых модель тренируется, методы оценки прогресса и системные аспекты, позволяющие моделям работать на современном оборудовании.
Процесс создания LLM можно условно разделить на два основных этапа: предварительное обучение (pre-training) и пост-обучение (post-training).
Предварительное обучение (Pre-training): Фундамент LLM
Предварительное обучение — это классическая парадигма языкового моделирования, цель которой — научить модель предсказывать следующее слово, основываясь на огромных объемах текстовых данных из интернета. На этом этапе модель учится понимать грамматику, синтаксис, факты о мире и различные стили письма.
Задача предварительного обучения: Языковое моделирование
На высоком уровне языковая модель — это модель распределения вероятности над последовательностями токенов или слов. Проще говоря, она присваивает вероятность предложению или последовательности слов, показывая, насколько вероятно его появление в естественном языке. Например, предложение "Мышь съела сыр" будет иметь более высокую вероятность, чем "Сыр съел мышь", поскольку модель улавливает не только грамматику, но и некоторый семантический смысл.
Языковые модели являются генеративными, поскольку, имея распределение вероятности, можно сэмплировать из него, создавая новые последовательности слов, то есть генерируя текст.
Авторегрессионные языковые модели: Принцип работы
Современные LLM обычно используют авторегрессионный подход к языковому моделированию. Это означает, что вероятность всей последовательности слов (X1 до XL) раскладывается с помощью правила цепи вероятностей на произведение вероятностей каждого следующего слова, обусловленных всеми предыдущими словами в последовательности. Математически это выглядит как P(X1, ..., XL) = P(X1) * P(X2|X1) * P(X3|X1, X2) * ... * P(XL|X1, ..., XL-1).
Задача авторегрессионной модели, таким образом, сводится к предсказанию вероятностного распределения для следующего токена, учитывая предыдущий контекст. Если, например, модель видит последовательность "Она, вероятно, предп...", она должна предсказать высокую вероятность для таких слов, как "очтет", "олагает" и т.п.
Для реализации этого на практике текст сначала токенизируется (преобразуется в последовательность числовых идентификаторов токенов). Затем эти идентификаторы пропускаются через нейронную сеть (например, трансформер), которая выдает вероятностное распределение над всем словарем токенов для следующего положения в последовательности.
Во время обучения модель сравнивает свое предсказание с реальным следующим токеном в обучающем тексте и корректирует свои веса, чтобы увеличить вероятность предсказания правильного токена. Функция потерь, используемая для этого, — это обычно кросс-энтропия, которая эквивалентна максимизации логарифмического правдоподобия обучающего текста.
Токенизация: Почему это важно и как работает Byte Pair Encoding
Токенизация — это процесс разбиения текста на более мелкие единицы, называемые токенами. Это крайне важный этап, хотя ему часто уделяется меньше внимания, чем архитектуре. Почему токенизация необходима?
- Обобщение: Использование отдельных слов в качестве токенов не работает, так как модели не смогут обрабатывать незнакомые слова, включая опечатки.
- Эффективность: Использование отдельных символов в качестве токенов привело бы к чрезмерно длинным последовательностям, что неэффективно для трансформеров, чья вычислительная сложность растет квадратично с длиной последовательности.
Токенизаторы решают эти проблемы, группируя часто встречающиеся подпоследовательности символов или слов в отдельные токены. В среднем один токен может соответствовать примерно 3-4 символам. Существует множество алгоритмов токенизации, одним из самых распространенных является Byte Pair Encoding (BPE).
Процесс обучения токенизатора с использованием BPE включает следующие шаги:
- Начало работы с большим корпусом текста.
- Присвоение каждому уникальному символу в корпусе своего токена.
- Многократное слияние наиболее часто встречающихся пар токенов в новый токен. Этот процесс повторяется до достижения желаемого размера словаря.
- При применении обученного токенизатора к новому тексту всегда выбирается наибольший возможный токен, который может быть применен к данной последовательности символов.
Важно отметить, что размер словаря токенизатора определяет размер выходного слоя модели, который может достигать десятков или сотен тысяч. Выбор токенизатора влияет на производительность модели, особенно для специфических типов данных, таких как числа или код. Некоторые исследователи даже считают, что в будущем от токенизаторов следует отказаться в пользу обработки на уровне символов или байтов, если появятся более эффективные архитектуры.
Оценка предварительного обучения: Перплексия и бенчмарки
Как понять, насколько хорошо модель обучена на этапе предварительного обучения?
- Перплексия (Perplexity): Исторически перплексия была основной метрикой. На высоком уровне это мера того, насколько "удивлена" модель при виде нового текста. Низкая перплексия означает, что модель хорошо предсказывает следующий токен, то есть текст для нее "менее удивителен". Перплексия связана с функцией потерь: это экспонента от средней по токенам кросс-энтропийной потери. Диапазон перплексии находится между 1 (идеальное предсказание) и размером словаря токенизатора (полная неуверенность). Важно, что перплексия зависит от используемого токенизатора, что делает сравнение моделей с разными токенизаторами не совсем корректным. Тем не менее, перплексия до сих пор активно используется при разработке моделей.
- Бенчмарки NLP: Более современный подход, особенно в академической среде, заключается в оценке LLM на наборе классических задач обработки естественного языка. Модели проверяются на их способность решать различные задачи, такие как ответы на вопросы, суммаризация, перевод и другие. Примеры таких агрегированных бенчмарков включают HELM от Стэнфорда и Open LLM Leaderboard от Hugging Face. Оценка на этих бенчмарках часто автоматизирована. Например, в задачах с множественным выбором, таких как MMLU (Massive Multitask Language Understanding), модель просят выбрать наиболее вероятный ответ из нескольких вариантов, и оценивается доля правильных ответов.
Оценка LLM, особенно на открытых задачах, где нет единственно правильного ответа, остается сложной задачей. Также существует проблема "загрязнения" тестовых данных, когда части тестовых наборов случайно попали в обучающие данные, что может привести к переоценке реальной производительности модели.
Данные для предварительного обучения: Сбор, очистка и фильтрация
Одна из самых больших и сложных частей создания LLM — это сбор и подготовка огромных массивов данных. Хотя часто говорят, что модели тренируются "на всем интернете", этот процесс гораздо сложнее и требует многоступенчатой обработки. "Интернет" в его сыром виде — это грязный, неструктурированный и часто нежелательный контент.
Типичный процесс подготовки данных включает:
- Сбор: Использование веб-краулеров (например, Common Crawl) для загрузки сотен миллиардов веб-страниц (до петабайта данных).
- Извлечение текста: Отделение полезного текста от HTML-разметки, рекламных блоков, шаблонных элементов (заголовки, футеры форумов и т.п.). Это может быть сложно, особенно при извлечении математических формул или таблиц.
- Фильтрация нежелательного контента: Удаление небезопасного, вредоносного контента или информации, идентифицирующей личность (PII). Для этого используются черные списки веб-сайтов или обученные классификаторы.
- Дедупликация: Удаление дублирующихся или очень похожих текстов. Много одинакового контента может встречаться из-за копирования статей, повторения шаблонных блоков или наличия множества идентичных сайтов. Дедупликация важна для предотвращения переобучения на отдельных частях данных и обеспечения разнообразия.
- Эвристическая фильтрация: Применение правил для удаления низкокачественных документов. Примеры правил: слишком короткий или длинный текст, необычное распределение токенов, аномальная длина слов.
- Модельная фильтрация: Обучение классификатора, который отличает высококачественные документы (например, статьи, на которые ссылается Википедия) от случайных веб-страниц. Модель затем используется для отбора или взвешивания данных.
- Классификация и взвешивание доменов: Определение тематики (домена) документа (например, новости, книги, код, развлечения) и присвоение различным доменам разного веса при обучении. Например, код и книги часто взвешиваются выше, так как они могут улучшать рассуждение и общие языковые навыки модели.
- Дообучение на высококачественных данных: На финальной стадии предварительного обучения часто используют небольшое количество очень чистых и качественных данных (например, Википедия), снижая темп обучения, чтобы "дошлифовать" модель.
Весь этот процесс требует огромных вычислительных ресурсов (в основном CPU) и значительных усилий команд инженеров данных. Фактически, качество и состав данных являются ключевым фактором успеха, и методы работы с данными активно исследуются. Объем данных для обучения современных LLM может достигать 15 триллионов токенов.
Законы масштабирования (Scaling Laws): Как предсказывать производительность
Одно из удивительных эмпирических наблюдений последних лет заключается в том, что производительность LLM (измеренная по функции потерь или перплексии на тестовых данных) предсказуемо улучшается с увеличением объема обучающих данных и размера модели, а также с увеличением затраченных вычислительных ресурсов (compute). В отличие от более ранних нейронных сетей, для LLM переобучение в традиционном смысле не является основной проблемой на этом этапе. Чем больше, тем лучше.
Законы масштабирования показывают линейную зависимость между логарифмом функции потерь и логарифмом вычислительных ресурсов, данных или числа параметров модели. Это означает, что если вы увеличиваете вычислительные ресурсы, данные или размер модели в несколько раз, вы можете предсказать, насколько уменьшится функция потерь.
Это имеет огромное практическое значение:
- Оптимизация архитектур: Можно сравнить масштабирование разных архитектур (например, трансформеров и старых LSTM) на небольших масштабах и экстраполировать, какая из них будет лучше на больших.
- Распределение ресурсов: Зная законы масштабирования, можно оптимально распределить фиксированный бюджет вычислений между размером модели и объемом данных для получения наилучшей производительности. Исследования показали, что для оптимального обучения на каждый параметр модели должно приходиться около 20 токенов данных. Однако, если учесть также стоимость инференса (использования модели после обучения), может быть выгодно использовать немного меньшие модели, увеличивая соотношение до 150 токенов на параметр.
Законы масштабирования позволяют компаниям и исследователям предсказывать производительность будущих моделей и планировать необходимые ресурсы.
Стоимость обучения LLM: Примеры расчетов
Обучение современных LLM — чрезвычайно дорогостоящий процесс, требующий тысяч высокопроизводительных графических процессоров (GPU) и месяцев времени. Приблизительный расчет стоимости обучения модели уровня Lama 3 400B параметров, которая тренировалась на 15.6 триллионах токенов, может выглядеть следующим образом:
- Требуемые вычислительные ресурсы: около 3.8 x 10^25 флопс (операций с плавающей запятой).
- Оборудование: Использование, например, 16 000 GPU Nvidia H100.
- Время обучения: Около 70 дней.
- Общее время работы GPU: Примерно 26-30 миллионов часов работы GPU.
- Оценочная стоимость аренды GPU (по минимальной ставке 2 долл./час): Более 50 миллионов долларов.
- Дополнительные расходы (электроэнергия, работа команды, инфраструктура): Значительны.
- Общая стоимость обучения: Может достигать 75 миллионов долларов или более.
Это показывает, что создание топовых LLM требует колоссальных инвестиций в оборудование и инфраструктуру.
Пост-обучение (Post-training): Превращение в AI-ассистентов
Хотя предварительно обученные LLM хорошо моделируют язык, они не обязательно ведут себя как полезные ассистенты. Модель, обученная предсказывать следующее слово на интернете, может продолжить вопрос другим вопросом (потому что так часто бывает в онлайн-текстах) или сгенерировать вредоносный контент, если такой встречался в обучающих данных. Пост-обучение или "выравнивание" (alignment) направлено на то, чтобы модель следовала инструкциям пользователя и соответствовала желаемым стандартам поведения (например, была полезной, честной и безвредной).
Задача пост-обучения: Выравнивание (Alignment)
Выравнивание заключается в тонкой настройке предварительно обученной модели, чтобы она давала полезные и безопасные ответы на запросы пользователей, даже если такие ответы не были бы наиболее вероятным продолжением с точки зрения чистого языкового моделирования всего интернета.
Supervised Fine-Tuning (SFT): Дообучение на размеченных ответах
Первый и наиболее простой шаг в пост-обучении — это Supervised Fine-Tuning (SFT). Предварительно обученная модель дообучается на небольшом наборе данных, состоящем из пар "инструкция пользователя" — "желаемый ответ". Эти пары собираются от людей-разметчиков.
В процессе SFT используется та же функция потерь (кросс-энтропия), что и при предварительном обучении, но модель обучается максимизировать вероятность желаемого ответа, данного человеком, при условии инструкции пользователя.
SFT очень эффективен для того, чтобы научить модель желаемому формату ответа и "стилю" AI-ассистента. Удивительно, но для этого не требуется очень много данных — всего несколько тысяч или десятков тысяч высококачественных примеров могут значительно улучшить поведение модели. Интуиция в том, что модель уже "знает", как генерировать разные типы текста из предварительного обучения, и SFT просто учит ее, какой из этих стилей (например, отвечать на вопросы, а не продолжать диалог вопросами) является предпочтительным для данной задачи.
Однако SFT имеет ограничения:
- Ограниченность человеческими возможностями: Модель не может сгенерировать ответ лучше, чем человек-разметчик.
- Галлюцинации: Если желаемый ответ содержит информацию, которую модель не видела или не усвоила на этапе предварительного обучения, SFT может научить модель "выдумывать" правдоподобно звучащие, но ложные факты.
- Стоимость: Сбор высококачественных данных "инструкция-ответ" от людей очень дорог и медленен.
Reinforcement Learning from Human Feedback (RLHF) и Direct Preference Optimization (DPO): Обучение на человеческих предпочтениях
Чтобы преодолеть ограничения SFT, были разработаны методы, основанные на обучении с подкреплением на основе человеческих предпочтений (RLHF). Идея в том, чтобы вместо того, чтобы учить модель копировать конкретный ответ человека, учить ее максимизировать человеческие предпочтения.
Классический RLHF (используемый, например, в ранних версиях ChatGPT) включает три этапа:
- Supervised Fine-Tuning (SFT): Как описано выше, для начальной настройки.
- Обучение модели вознаграждения (Reward Model): Отдельная модель обучается предсказывать, насколько хорош ответ модели с точки зрения человека. Для этого собираются данные, где люди сравнивают несколько ответов модели на одну и ту же инструкцию и указывают лучший. Модель вознаграждения обучается присваивать более высокое "вознаграждение" (числовую оценку) предпочтительным ответам.
- Обучение с подкреплением: Модель LLM дообучается с использованием алгоритмов обучения с подкреплением (например, PPO - Proximal Policy Optimization). Модель генерирует ответы, модель вознаграждения оценивает их, и модель LLM обновляется, чтобы генерировать ответы с более высоким вознаграждением. Добавляется член регуляризации, чтобы модель не слишком сильно отклонялась от своего исходного поведения (избегая чрезмерной оптимизации модели вознаграждения).
RLHF позволяет модели генерировать ответы, которые могут быть лучше, чем те, что изначально предоставили люди, поскольку модель учится критериям качества, а не просто копирует примеры. Однако RLHF на основе PPO сложен в реализации из-за особенностей алгоритмов обучения с подкреплением.
Более новый и простой подход — Direct Preference Optimization (DPO). Этот метод достигает того же результата, что и RLHF, но без необходимости обучения отдельной модели вознаграждения и без использования сложных алгоритмов обучения с подкреплением. DPO формулирует задачу максимизации человеческих предпочтений как задачу максимизации логарифмического правдоподобия. Модель напрямую обучается так, чтобы вероятность генерации предпочтительного ответа была выше, чем вероятность генерации менее предпочтительного ответа для данной инструкции. Функция потерь DPO основана на логарифмах вероятностей модели для предпочтительного и непредпочтительного ответов. DPO значительно проще в реализации, чем RLHF с PPO, и показывает сопоставимые или лучшие результаты.
Сбор данных для пост-обучения: Проблемы и решения
Сбор данных о человеческих предпочтениях для RLHF/DPO также является дорогостоящим и сложным. Помимо стоимости, люди-разметчики могут быть непоследовательны в своих оценках, отвлекаться на поверхностные характеристики ответов (например, длину) вместо сути и вынуждены обрабатывать потенциально вредоносный контент.
Чтобы решить проблему стоимости и скорости сбора данных, активно исследуется подход генерации синтетических данных с помощью самих LLM. Идея в том, чтобы использовать более мощные LLM (например, GPT-4) для генерации как желаемых ответов (для SFT), так и для сравнения и оценки ответов других моделей (для создания данных предпочтений). Например, одна модель может генерировать ответы, а другая, более сильная модель, может оценивать, какой ответ лучше.
Исследования показали, что LLM могут достигать высокой степени согласия с человеческими оценками и при этом быть значительно дешевле и быстрее. Использование LLM для генерации данных для SFT (как в проекте Alpaca) или для создания данных предпочтений (путем сравнения ответов) стало стандартом в open-source сообществе и активно применяется в индустрии для масштабирования процесса пост-обучения.
Оценка пост-обучения: Вызовы и методы
Оценка LLM после пост-обучения становится еще более сложной, поскольку они генерируют открытые, неограниченные ответы, для которых нет единственно правильного варианта. Традиционные метрики предварительного обучения, такие как перплексия или валидационная потеря, перестают быть адекватными, потому что модели больше не оптимизируются для точного моделирования распределения вероятностей текста, а скорее для генерации наиболее "предпочтительных" ответов.
Почему традиционные метрики не подходят
- Валидационная потеря/Перплексия: Модели после выравнивания (особенно RLHF/DPO) оптимизированы для поведения, а не для точного предсказания вероятности следующего токена. Их распределения вероятностей могут стать "несбалансированными" или стремиться к высоким вероятностям только для одного, наиболее предпочтительного ответа, давая низкие вероятности для других, семантически схожих вариантов.
- Разнообразие задач и ответов: LLM способны отвечать на огромное разнообразие запросов, от простых вопросов до творческого письма или кодирования. Нет единой метрики, которая могла бы охватить все эти аспекты.
- Открытый характер ответов: Для многих запросов (например, "напиши рассказ") существует множество приемлемых ответов, и автоматическое сравнение текста (например, с эталонным ответом) не работает.
Оценка на основе человеческих предпочтений и Chatbot Arena
Наиболее надежный способ оценки выровненных моделей — это сбор суждений людей. Пользователям или нанятым разметчикам предъявляются ответы разных моделей на один и тот же запрос, и их просят выбрать лучший. Это позволяет оценить полезность, корректность, безопасность и стиль ответов.
Одним из самых популярных и заслуживающих доверия бенчмарков на основе человеческих предпочтений является Chatbot Arena. На этом онлайн-сервисе пользователи могут анонимно взаимодействовать с двумя неизвестными моделями и оценивать их ответы. Собирая сотни тысяч таких парных сравнений от множества пользователей, можно получить надежный рейтинг моделей.
Использование LLM для оценки: Плюсы и минусы
Из-за дороговизны и медлительности человеческой оценки, активно развивается подход оценки с помощью LLM. Более мощная LLM (например, GPT-4) используется как "судья", которому предъявляются запросы пользователя и ответы двух сравниваемых моделей. "Судья"-модель оценивает, какой ответ лучше, и объясняет почему. Результаты таких оценок от LLM-судьи могут быть агрегированы для построения рейтинга моделей.
Этот подход показал высокую корреляцию с человеческой оценкой (например, до 98% с Chatbot Arena) и является намного более быстрым и дешевым. Однако, использование LLM для оценки имеет свои недостатки:
- Предвзятость: Модели-судьи могут иметь свои собственные смещения, например, предпочтение более длинных ответов или специфического стиля, даже если люди не считают это оптимальным.
- Непрозрачность: Трудно полностью понять, на чем основано суждение модели-судьи.
- Влияние промптинга: Изменение формулировки запроса к модели-судье (например, "будь краток") может значительно изменить ее оценки.
Для борьбы с этими смещениями могут применяться методы статистического анализа, например, причинно-следственный анализ, чтобы контролировать такие факторы, как длина ответа, при ранжировании моделей.
Системы: Оптимизация вычислений
Вычислительные ресурсы являются основным узким местом при обучении и использовании LLM. GPU, на которых обучаются эти модели, оптимизированы для высокопроизводительных параллельных вычислений, особенно для умножения матриц. Однако, скорость обмена данными с памятью GPU и между GPU часто отстает от скорости самих вычислений, что приводит к простоям вычислительных ядер. Оптимизация системных аспектов критически важна для эффективного использования доступного оборудования.
Важность оптимизации для GPU
GPU работают по принципу массового параллелизма: одно и то же действие (например, умножение) выполняется на множестве данных одновременно. Они имеют иерархию памяти: быстрая, но маленькая память рядом с ядрами (кеш) и более медленная, но большая глобальная память (DRAM). Эффективность использования GPU измеряется в Model FLOPs Utilization (MFU) — отношении наблюдаемой производительности к теоретическому максимуму. Даже в крупных компаниях этот показатель редко превышает 50%, что говорит о значительных возможностях для оптимизации.
Низкоточная арифметика (Low Precision)
Один из ключевых приемов оптимизации — использование низкоточной арифметики. Вместо стандартных 32-битных чисел с плавающей запятой (float32) используются 16-битные числа (например, float16 или bfloat16) для основных вычислений (умножение матриц). Использование меньшего количества битов снижает требования к памяти и ускоряет передачу данных, что помогает избежать простоя GPU. Для глубокого обучения такая точность часто достаточна, так как сам процесс обучения с использованием стохастического градиентного спуска вносит достаточно шума. Для сохранения стабильности обучения веса модели обычно хранятся в 32-битном формате, а 16-битный формат используется только для вычислений "на лету".
Фьюжн операций (Operator Fusion)
Еще одна важная системная оптимизация — фьюжн операций. В стандартных фреймворках (например, PyTorch) каждая отдельная операция (например, косинус, сложение) может требовать отправки данных из глобальной памяти GPU в вычислительные ядра и обратно. При цепочке операций это приводит к множеству медленных пересылок данных. Фьюжн операций объединяет несколько последовательных операций в одно ядро GPU (CUDA kernel). Данные загружаются в быструю память один раз, выполняются все необходимые операции, и результат сохраняется обратно. Это значительно сокращает время, затрачиваемое на перемещение данных, и может вдвое ускорить выполнение кода. Функции компиляции кода в фреймворках (например, torch.compile) автоматизируют этот процесс.
Заключение
Создание больших языковых моделей — это сложный и многогранный процесс, выходящий далеко за рамки одной только архитектуры нейронных сетей. Успех современных LLM во многом обусловлен достижениями в сборе и обработке огромных массивов данных, разработке эффективных методов пост-обучения для выравнивания моделей под нужды пользователей, совершенствовании метрик оценки и, конечно, постоянной работой над системными оптимизациями для эффективного использования доступных вычислительных ресурсов.
Область LLM продолжает быстро развиваться. Исследуются новые архитектуры, методы обучения становятся проще (как в случае с DPO), данные собираются и обрабатываются более масштабно (включая синтетическую генерацию и мультимодальные данные), оценка становится все более изощренной, а системные оптимизации позволяют обучать и запускать все более крупные модели. Несмотря на достигнутый прогресс, остается множество открытых вопросов и проблем, связанных с данными, безопасностью, этикой и фундаментальным пониманием того, как работают эти мощные модели.