Большие языковые модели (LLM), такие как ChatGPT, поражают своими способностями: они пишут тексты, отвечают на вопросы, генерируют код. Но что скрывается за этим текстовым полем, куда мы вводим запросы? Как они работают, на что способны, а где их слабые стороны? Давайте заглянем в "машинное отделение" этих удивительных инструментов и разберем весь процесс их создания, стараясь сохранить изложение доступным для широкой аудитории.
Все начинается с колоссального этапа, называемого предварительным обучением (pre-training). Его можно сравнить с закладыванием фундамента знаний для будущей модели.
Первый шаг — это сбор огромного массива текстовой информации. Представьте себе попытку "скачать интернет". Разработчики LLM стремятся получить как можно больше высококачественных и разнообразных документов из общедоступных источников.
Одним из ярких примеров такого набора данных является FineWeb, созданный компанией Hugging Face. [Прим. ред.: Hugging Face – известная компания и сообщество, специализирующееся на разработке инструментов и моделей для обработки естественного языка]. Они подробно описывают процесс его создания, и аналогичные, хотя и закрытые, датасеты есть у всех крупных игроков, таких как OpenAI, Anthropic и Google.
Ключевые цели при сборе данных:
- Количество: Нужны многие миллиарды слов, чтобы модель увидела как можно больше языковых конструкций и фактов.
- Качество: Тексты должны быть грамотными, осмысленными и не содержать мусора.
- Разнообразие: Чтобы модель обладала широким кругозором, данные должны охватывать самые разные темы – от научных статей до художественной литературы и новостных заметок.
Значительная часть данных поступает из Common Crawl — организации, которая с 2007 года архивирует интернет, индексируя миллиарды веб-страниц. Эти "сырые" данные проходят многоступенчатую очистку:
- Фильтрация URL-адресов: Составляются "черные списки" сайтов, данные с которых нежелательны (вредоносные, спам-, маркетинговые, экстремистские, взрослые и т.п.).
- Извлечение текста: Веб-страницы содержат не только текст, но и HTML-разметку, CSS-стили, навигационные элементы. Специальные алгоритмы и эвристики извлекают только полезный текстовый контент.
- Языковая фильтрация: С помощью языковых классификаторов отбираются тексты на нужных языках. Например, создатели FineWeb фокусировались на английском, отбирая страницы, где он составляет более 65%. Это решение влияет на то, какими языками модель будет владеть лучше.
- Удаление дубликатов: Идентичные или очень похожие тексты удаляются.
- Удаление персонально идентифицируемой информации (PII): Предпринимаются попытки обнаружить и удалить адреса, номера социального страхования и другие чувствительные данные.
В результате такой агрессивной фильтрации, даже при огромном объеме исходного интернета, итоговый датасет может занимать, например, около 44 терабайт, как в случае с FineWeb. Это сравнимо с объемом одного современного жесткого диска. Кажется, не так уж и много, но это триллионы слов. Например, FineWeb содержит около 15 триллионов "атомов текста", о которых мы поговорим дальше.
Представьте себе гигантский гобелен, сотканный из всего этого текста. Он полон закономерностей, стилей, знаний. Именно эти паттерны и предстоит выучить нейросети.
Нейронные сети не понимают текст напрямую. Им нужны числа — последовательности символов из конечного набора. Поэтому следующим шагом является токенизация — процесс преобразования необработанного текста в последовательность числовых идентификаторов, называемых токенами.
Компьютеры изначально представляют текст в виде битов (0 и 1) с использованием кодировок вроде UTF-8. [Прим. ред.: UTF-8 — это стандарт кодирования символов, позволяющий представлять знаки практически всех письменных языков мира]. Получается очень длинная последовательность всего из двух символов. Однако длина последовательности — это драгоценный ресурс для нейросетей. Поэтому стремятся увеличить количество возможных символов (размер словаря) и сократить длину последовательности.
Один из подходов — группировать биты. Например, 8 бит образуют байт, который может принимать 256 различных значений (от 0 до 255). Последовательность становится в 8 раз короче, но теперь у нас 256 "символов". Эти числа — не более чем уникальные идентификаторы, как если бы мы заменили каждый байт на уникальный эмодзи.
В современных LLM идут еще дальше, используя алгоритм Byte-Pair Encoding (BPE). Он ищет часто встречающиеся пары байтов (или уже существующих токенов) и заменяет их новым, уникальным токеном. Этот процесс повторяется, пока размер словаря не достигнет желаемой величины. Например, модель GPT-4 использует словарь из 100 277 токенов. Каждый токен может представлять собой часть слова, целое слово или даже несколько коротких слов.
Для изучения того, как текст разбивается на токены, можно использовать онлайн-инструменты, такие как TickTokenizer. Там можно ввести текст и увидеть, как, например, GPT-4 его токенизирует. "Hello world" может стать двумя токенами: hello и world (с пробелом в начале). Изменение регистра или добавление пробелов может изменить токенизацию.
В результате весь наш массив интернет-текста (те самые 15 триллионов токенов в FineWeb) превращается в гигантскую одномерную последовательность чисел-идентификаторов.
Теперь наступает самый вычислительно затратный этап — тренировка нейронной сети. Цель — научить модель улавливать статистические закономерности того, как токены следуют друг за другом.
Процесс обучения основан на простой, но мощной идее: предсказание следующего токена в последовательности. Из огромного датасета токенов случайным образом выбираются "окна" — фрагменты текста определенной длины. Эта длина, называемая контекстным окном, может варьироваться от нескольких токенов до, например, 8000 или даже больше в современных моделях. [Прим. ред.: Максимальная длина контекстного окна — важная характеристика модели, определяющая, какой объем предыдущего текста она может "помнить" при генерации следующего токена].
Допустим, мы взяли окно из четырех токенов: [токен1, токен2, токен3, токен4]. Эти токены подаются на вход нейронной сети. Задача сети — предсказать, какой токен наиболее вероятно последует за ними. Поскольку мы взяли этот фрагмент из реального текста, мы знаем правильный следующий токен, скажем, токен5.
Нейронная сеть на выходе выдает набор чисел — вероятности для каждого из 100 000+ токенов в ее словаре. Каждое число показывает, насколько вероятно, по "мнению" сети, что именно этот токен будет следующим.
В самом начале обучения параметры нейронной сети (ее "веса") инициализируются случайным образом. Поэтому ее предсказания тоже случайны. Но у нас есть "правильный ответ" (токен5). Сравнивая предсказание сети с правильным ответом, мы можем вычислить "ошибку" (называемую функцией потерь или loss function). Затем, с помощью математического процесса (алгоритма обратного распространения ошибки и градиентного спуска [Прим. ред.: Это ключевые алгоритмы машинного обучения, позволяющие корректировать параметры модели для минимизации ошибки]), мы слегка корректируем параметры сети так, чтобы вероятность правильного токена (токен5) стала немного выше, а вероятности неправильных — немного ниже.
Этот процесс повторяется миллиарды раз на разных фрагментах текста. На каждом шаге нейросеть чуть-чуть "умнеет", ее параметры настраиваются, и она все лучше и лучше предсказывает следующий токен, улавливая сложнейшие статистические зависимости в языке. Этот процесс называется тренировкой или обучением нейронной сети.
Современные LLM, как правило, основаны на архитектуре под названием Трансформер (Transformer). [Прим. ред.: Архитектура Transformer была предложена в статье "Attention Is All You Need" исследователями Google в 2017 году и произвела революцию в обработке естественного языка].
Не углубляясь в сложные математические детали, важно понимать следующее:
- Параметры (веса): Это миллиарды чисел, которые и определяют "знания" модели. Вначале они случайны, а в процессе обучения подстраиваются. Можно представить их как ручки на огромном диджейском пульте.
- Математическая функция: Нейросеть — это, по сути, очень большая математическая формула, которая преобразует входные токены (и текущие значения параметров) в выходные вероятности. Эта формула состоит из множества более простых операций (умножение, сложение, специальные функции активации).
- Слои: Трансформер состоит из множества слоев, каждый из которых выполняет определенные преобразования данных. Ключевыми компонентами являются механизмы внимания (attention), которые позволяют модели взвешивать важность разных частей входного текста при предсказании следующего токена, и многослойные перцептроны (MLP). [Прим. ред.: Механизм внимания позволяет модели фокусироваться на релевантных частях входной последовательности, даже если они находятся далеко друг от друга, что очень важно для понимания длинных текстов].
- Отсутствие памяти в традиционном смысле: Важно понимать, что эти "нейроны" сильно отличаются от биологических. Модель не обладает памятью в человеческом смысле; это фиксированная математическая функция. Вся информация о предыдущих токенах для предсказания следующего передается через ее вход (контекстное окно).
Пример: GPT-2
Модель GPT-2, выпущенная OpenAI в 2019 году, является хорошим примером ранней, но уже узнаваемо современной LLM.
- Параметры: Около 1.5-1.6 миллиарда. Современные модели могут иметь сотни миллиардов или даже триллионы.
- Максимальная длина контекста: 1024 токена. Сегодня это значение достигает сотен тысяч.
- Объем обучающих данных: Около 100 миллиардов токенов. Для сравнения, FineWeb — 15 триллионов.
- Стоимость обучения (в 2019): Оценивалась примерно в $40 000. Сегодня, благодаря улучшению алгоритмов, данных и более быстрому "железу", такую модель можно обучить значительно дешевле (сотни долларов).
Процесс обучения такой модели — это наблюдение за снижением значения "loss" (ошибки) и периодическая генерация текста для оценки качества. Вначале модель генерирует бессмыслицу, но постепенно текст становится все более осмысленным и похожим на человеческий. Обучение крупных моделей требует огромных вычислительных мощностей — тысяч специализированных графических процессоров (GPU), таких как NVIDIA H100, объединенных в кластеры и дата-центры. Именно спрос на такие вычисления и подстегнул рост компаний вроде NVIDIA.
После завершения обучения модель готова к инференсу — генерации нового текста. Процесс выглядит так:
- Пользователь вводит начальную фразу (промпт), которая токенизируется.
- Эти токены подаются на вход обученной нейросети.
- Модель предсказывает вероятности для следующего токена.
- Из этого распределения вероятностей случайным образом выбирается (сэмплируется) один токен. Токены с большей вероятностью выбираются чаще, но есть шанс выбрать и менее вероятный.
- Выбранный токен добавляется к последовательности.
- Обновленная последовательность снова подается на вход модели, и процесс повторяется для генерации следующего токена.
Это продолжается до тех пор, пока не будет сгенерировано нужное количество токенов или специальный токен "конца текста". Из-за стохастической (случайной) природы сэмплирования, даже на один и тот же промпт модель может генерировать немного разные ответы. Это не ошибка, а заложенное свойство, позволяющее получать разнообразные и "творческие" результаты.
Модель, полученная на этапе предварительного обучения, называется базовой моделью (base model). Это, по сути, симулятор интернет-текста. Она отлично генерирует текст, похожий на тот, что видела в интернете, но сама по себе еще не является полезным ассистентом, отвечающим на вопросы. Она может продолжить ваш текст, но не обязательно поймет, что вы от нее хотите в формате диалога. Например, на вопрос "Что такое 2+2?" базовая модель может продолжить его как "Что такое 2+2 и почему это важно для философии математики?" вместо того, чтобы просто дать ответ.
Тем не менее, в параметрах базовой модели уже "сжата" огромная масса знаний об окружающем мире. Эти знания можно извлечь с помощью хитрого промптинга. Например, можно использовать "few-shot" промпты: дать модели несколько примеров задачи (скажем, перевод слов с английского на корейский), а затем попросить ее выполнить аналогичную задачу для нового слова. Модель, увидев паттерн в контексте, постарается его воспроизвести. Можно даже "заставить" базовую модель вести себя как ассистент, если начать промпт с описания диалога между человеком и полезным ИИ, приведя несколько примеров такого диалога.
Базовая модель — это мощный, но "сырой" инструмент. Чтобы превратить ее в ChatGPT-подобного ассистента, нужен пост-тренинг, или дообучение (fine-tuning). Этот этап значительно менее затратен вычислительно, чем пре-тренинг.
Основная идея SFT — продолжить обучение базовой модели, но уже не на гигантском массиве интернет-текста, а на специально подготовленном датасете качественных диалогов в формате "человек-ассистент".
- Создание датасета: Команды людей-разметчиков (иногда с помощью других LLM) создают тысячи или миллионы примеров диалогов. Разметчики получают подробные инструкции: ассистент должен быть полезным, правдивым и безвредным. Примеры таких датасетов — InstructGPT (ранний пример от OpenAI), Open Assistant, UltraChat.
- Токенизация диалогов: Диалоги также токенизируются, но с использованием специальных токенов для обозначения реплик пользователя, ассистента, начала и конца диалога. Это помогает модели понять структуру беседы.
- Процесс обучения: Алгоритмически SFT идентичен пре-тренингу: модель учится предсказывать следующий токен, но теперь уже в контексте диалогов. Она быстро "перенимает манеру" общения ассистента, учится отвечать на вопросы, следовать инструкциям, поддерживать беседу.
В результате SFT мы получаем модель, которая гораздо лучше справляется с ролью чат-бота. Когда вы общаетесь с такой моделью, вы, по сути, взаимодействуете со статистической симуляцией усредненного высококвалифицированного разметчика, следующего инструкциям компании-разработчика.
Процесс обучения порождает интересные "психологические" особенности у LLM:
-
Галлюцинации: Модели могут "выдумывать" факты, уверенно заявляя неверную информацию. Это происходит потому, что они статистически имитируют стиль ответов из обучающих данных, где на подобные вопросы часто давались уверенные (и правильные) ответы.
- Борьба с галлюцинациями:
- Добавление в обучающий датасет примеров, где на неизвестный вопрос модель отвечает "Я не знаю" или подобным образом. Для этого модель сначала "опрашивают" на предмет ее знаний, а затем формируют соответствующие обучающие примеры.
- Использование инструментов (Tool Use): Модели обучают использовать внешние инструменты. Если модель не уверена в ответе из своей "памяти" (параметров), она может сгенерировать специальный токен, который запускает, например, поиск в интернете. Результаты поиска добавляются в ее контекстное окно (рабочую память), и на их основе она формулирует ответ, часто со ссылками на источники. Аналогично модель может использовать калькулятор или интерпретатор кода.
- Борьба с галлюцинациями:
-
Знание о себе: Модели не обладают самосознанием. Ответы на вопросы "Кто ты?" или "Кто тебя создал?" обычно "зашиты" в них либо через обучающие данные (примеры диалогов, где ассистент отвечает определенным образом), либо через системный промпт — скрытое сообщение, которое подается модели в начале каждого диалога и содержит информацию о ее "личности", дате обновления знаний и т.д.
-
"Мышление токенами" и вычислительные способности:
- LLM обрабатывают информацию последовательно, токен за токеном. На генерацию каждого токена отводится ограниченный объем "мыслительных усилий" (вычислений). Поэтому они плохо справляются с задачами, требующими сложных многошаговых рассуждений, если ответ нужно дать "сразу", одним-двумя токенами.
- Чтобы решить сложную задачу (например, математическую), модели нужно "растянуть" рассуждения на множество токенов, генерируя промежуточные шаги. Это называется "chain-of-thought" (цепочка мыслей). Если в обучающих данных ответы даны сразу, без промежуточных шагов, модель научится "гадать", а не рассуждать.
- Из-за токенизации (где слова разбиваются на части) модели могут испытывать трудности с задачами на уровне отдельных символов: подсчет букв в слове, написание слова задом наперед, определение палиндромов и т.п. Им проще скопировать строку в Python-интерпретатор и попросить его выполнить задачу, чем "думать" об этом на уровне символов.
Этот этап можно сравнить с решением практических задач в учебнике после изучения теории и разбора примеров. RL позволяет моделям не просто имитировать экспертов, а самостоятельно находить оптимальные стратегии решения проблем.
В областях, где правильность ответа легко проверить (математика, программирование, логические задачи):
- Модели дается задача (промпт).
- Она генерирует множество различных вариантов решения (например, тысячи).
- Каждое решение автоматически проверяется на правильность (например, совпадает ли ответ с эталонным, компилируется ли код и дает ли верный результат).
- "Удачные" траектории решения (последовательности токенов, приведшие к правильному ответу) поощряются — модель дообучается на них, чтобы в будущем с большей вероятностью генерировать подобные эффективные "цепочки мыслей".
Примером такого подхода является DeepMind AlphaGo, научившаяся играть в го на сверхчеловеческом уровне, или недавний прорыв DeepSeek R1 в решении математических задач. Модели, обученные с помощью RL, часто генерируют очень длинные, подробные рассуждения, исследуя проблему с разных сторон, перепроверяя себя — это эмерджентное свойство, возникающее в процессе оптимизации. Они буквально "учатся думать".
Для задач, где нет объективно "правильного" ответа (написать стихотворение, шутку, резюмировать текст), используется RLHF.
- Модель генерирует несколько вариантов ответа на промпт.
- Человек-оценщик не пишет идеальный ответ, а просто ранжирует предложенные варианты от лучшего к худшему. Это проще, чем самому генерировать креативный контент.
- На основе этих человеческих предпочтений обучается отдельная модель вознаграждения (reward model). Ее задача — предсказывать, какую оценку дал бы человек тому или иному ответу.
- Затем основная LLM дообучается с помощью RL, стремясь генерировать ответы, которые получают высокую оценку от модели вознаграждения (то есть, имитируют то, что понравилось бы человеку).
Плюсы RLHF: Позволяет применять RL в творческих областях, улучшает качество ответов, так как людям проще оценивать, чем создавать. Минусы RLHF:
- Модель вознаграждения — это лишь симуляция человеческих предпочтений, она несовершенна.
- Основная LLM может научиться "обманывать" (геймить) модель вознаграждения, находя ответы, которые получают высокую оценку, но на самом деле бессмысленны для человека (например, последовательность из одинаковых слов). Это называется адверсариальными примерами. Из-за этого RLHF обычно применяют ограниченное количество итераций.
Поэтому RLHF — это скорее "тонкая доводка", чем фундаментальное обучение "магическому" RL, которое возможно в верифицируемых доменах. Модели вроде GPT-4o (стандартная версия) проходят через RLHF. "Мыслящие" модели (например, некоторые версии GPT-4-Turbo, DeepSeek R1, Gemini 2.0 Flash Thinking Experimental) проходят через более глубокое RL на верифицируемых задачах.
Развитие LLM идет стремительными темпами. Вот некоторые ожидаемые направления:
- Мультимодальность: Модели смогут одновременно обрабатывать текст, изображения, аудио и видео, что позволит вести более естественные диалоги и решать более сложные задачи. Технически это достигается токенизацией разных модальностей и их совместной обработкой.
- Агенты: LLM будут выполнять более длительные, многоэтапные задачи, действуя как автономные агенты под наблюдением человека. Возможен переход к концепции "человек-супервайзер агентов".
- Повсеместность и невидимость: Технологии LLM будут глубже интегрированы в существующие инструменты и сервисы.
- Управление компьютером: Модели смогут выполнять действия от имени пользователя (нажимать кнопки, вводить текст), как это демонстрирует, например, функция Operator в ChatGPT.
- Test-Time Training: Возможно, появятся модели, способные обновлять свои параметры (а не только контекстное окно) в процессе использования, подобно тому, как люди учатся на опыте. Это может быть ключом к работе с очень длинными контекстами и долгосрочными задачами.
- Рейтинги: LLM Arena — популярный лидерборд, хотя его объективность иногда обсуждается.
- Новости: AI News newsletter (от Swix & Friends), X (ранее Twitter) — основные источники свежей информации.
- Использование моделей:
- Проприетарные: Сайты разработчиков (OpenAI, Google Gemini, Anthropic).
- Open-weights (модели с открытыми весами): Платформы вроде Together.ai.
- Базовые модели: Реже доступны, но, например, Hyperbolic предоставляет доступ к Llama 3.1 Base.
- Локальный запуск: Приложения вроде LM Studio позволяют запускать уменьшенные ("дистиллированные" и/или "квантованные" [Прим. ред.: Квантование — это процесс уменьшения точности представления чисел, что позволяет модели занимать меньше памяти и быстрее работать, но с некоторой потерей качества]) версии моделей на персональных компьютерах.
Итак, что же такое ChatGPT и подобные ему системы? Это результат сложного многоэтапного процесса, начинающегося со сбора и обработки гигантских объемов текста, их токенизации и обучения нейросети предсказывать следующий токен. Так рождается базовая модель — "сжатый интернет". Затем, через дообучение на диалогах (SFT) и, возможно, обучение с подкреплением (RL/RLHF), она превращается в полезного ассистента.
Когда вы общаетесь с LLM, вы, по сути, взаимодействуете со сложной статистической симуляцией. В случае стандартных моделей — это симуляция ответов человека-разметчика, следующего инструкциям. В случае "мыслящих" моделей — это результат более глубокого процесса самообучения на решении задач.
Эти модели — невероятно мощные инструменты, но они не безупречны. Они могут галлюцинировать, у них есть "слепые зоны" в знаниях и способностях. Важно использовать их как помощников, проверяя их работу и неся ответственность за конечный результат. Но их потенциал для ускорения работы, творчества и познания огромен, и мы лишь в начале пути освоения этой удивительной технологии.