Это первая статья серии «AI без магии». Идея простая: разобрать, как изнутри устроены большие языковые модели и AI-агенты, без хайпа и без формул, которые отпугивают на первой странице. В этом посте — короткая история того, как мы пришли от статистики из 1948 года к GPT-4, и что такое LLM на самом деле, если убрать слово «искусственный интеллект».
Магия, которой нет
Когда обычный пользователь впервые видит, как ChatGPT отвечает на вопрос, объясняет код или пишет письмо — это выглядит как магия. Поэтому большинство пользователей и относятся к LLM как к магии: что-то загадочное внутри чёрного ящика, что иногда говорит правду, иногда «галлюцинирует», и работает по правилам, которые понять нельзя.
Но магии там нет. Внутри — довольно прямолинейная штука, у которой есть конкретная история, конкретные авторы и конкретный момент, когда «оно заработало». И если разобрать LLM на части, оказывается, что это не интеллект в человеческом смысле слова. Это очень-очень хорошее автодополнение.
Помните, как iPhone подсказывает следующее слово, когда вы пишете сообщение? Вы вводите «Привет, как», iPhone предлагает «дела». Вы соглашаетесь, он предлагает следующее. Так можно продолжать долго, и получится бессмысленный текст вроде «Привет, как дела у тебя сегодня вечером я не знаю что сказать». LLM делает ровно то же самое — только намного, намного лучше.
Что такое языковая модель
Языковая модель — это функция, которая по куску текста выдаёт распределение вероятностей следующего слова. Дайте ей на вход «Я приехал в Москву и пошёл в…», и она ответит чем-то вроде «{ музей: 0.12, метро: 0.09, магазин: 0.07, … }». Дальше из этого распределения выбирается одно слово, оно дописывается к тексту, и процесс повторяется.
Это всё. Без преувеличений — это всё, что делает LLM. Когда вы общаетесь с ChatGPT, под капотом крутится цикл: «по текущему тексту посчитай распределение → выбери одно слово → добавь его → повтори». Каждое слово в ответе выбирается отдельно, на основе всего, что было сказано до этого.
Сложность не в идее, а в том, насколько хорошо модель умеет считать это распределение. Вся история LLM — это история того, как мы научили компьютер делать этот шаг лучше.
1948: n-граммы и Шеннон
История начинается раньше, чем многие думают. В 1948 году Клод Шеннон опубликовал статью «A Mathematical Theory of Communication», в которой среди прочего показал: можно построить статистическую модель английского языка, посчитав, как часто одни буквы и слова идут после других.
Идея простая. Возьмите большой корпус текста и посчитайте: после слова «искусственный» в 47% случаев идёт «интеллект», в 12% «спутник», в 4% «свет» и так далее. Это так называемая биграмма — модель, в которой следующее слово зависит только от одного предыдущего. Триграмма смотрит на два предыдущих слова, n-грамма — на n−1.
N-граммная модель — это уже LLM в зародыше. Вход: контекст. Выход: распределение по следующему слову. Архитектура — таблица частот.
Проблема n-грамм в том, что они быстро упираются в потолок. Чтобы модель умела использовать длинный контекст, ей нужны таблицы для всех возможных пятёрок, шестёрок, семёрок слов. Количество комбинаций растёт экспоненциально, а большинство из них в реальном тексте ни разу не встречаются. Триграмма работает плохо, пятиграмма работает чуть лучше, но дальше начинается стена. Лет шестьдесят NLP-исследователи пытались эту стену пробить разными хитростями, и в общем-то не пробили.
2014: seq2seq и бутылочное горлышко
Реальный прорыв случился, когда вместо счётчиков частот за дело взялись нейросети. В 2014 году несколько групп почти одновременно предложили архитектуру encoder-decoder на рекуррентных сетях (RNN). Идея: одна сеть (энкодер) читает входное предложение слово за словом и в конце выдаёт один вектор фиксированной длины — «смысл» всего предложения. Вторая сеть (декодер) берёт этот вектор и слово за словом порождает выход.
Это работало для машинного перевода. На английский подаётся «I love coffee», энкодер сжимает это в вектор, декодер разворачивает в «Я люблю кофе». Чудо, по сравнению с n-граммами. Но у архитектуры обнаружилась фундаментальная проблема: бутылочное горлышко.
Если предложение короткое — три-пять слов — вектор справляется. Но представьте, что нужно перевести абзац из «Войны и мира». Запихнуть весь смысл целого абзаца в один вектор из 256 чисел — задача безнадёжная. Качество перевода длинных предложений падало катастрофически.
2015: внимание как мягкий поиск
В сентябре 2014-го Дмитрий Богданов с Чо и Бенжио опубликовали статью с длинным названием «Neural Machine Translation by Jointly Learning to Align and Translate». В ней они предложили механизм, который сегодня все знают как attention — внимание.
Идея гениально простая. Вместо того чтобы заставлять энкодер сжимать всё в один вектор, давайте сохраним по вектору на каждое входное слово. А декодер на каждом шаге сам будет решать, на какое из этих входных слов сейчас «смотреть». Когда декодер генерирует «кофе», он смотрит больше всего на «coffee». Когда генерирует «люблю» — на «love».
Технически это работает как мягкий поиск. У каждого входного слова есть «ключ» (key) и «значение» (value). У декодера на каждом шаге есть «запрос» (query). Скалярное произведение query с каждым из ключей даёт релевантности; через softmax они превращаются в распределение вероятностей; далее это распределение используется как веса для усреднения values. На выходе — вектор, в котором больше веса у тех входов, которые сейчас релевантнее.
Attention — это поиск по ключам и значениям, где «находится» не один результат, а взвешенная смесь всех. Отсюда термин «soft search». В отличие от обычного поиска, мы не выбираем одну запись из таблицы — мы получаем смесь, в которой пропорции зависят от того, насколько каждая запись подходит под запрос.
Машинный перевод сразу стал работать на длинных предложениях. Но никто на тот момент ещё не понимал, насколько эта штука важна. Attention считался полезным дополнением к RNN-энкодерам и декодерам.
2017: трансформер, или зачем нам RNN
В июне 2017-го команда Google Brain опубликовала статью с провокационным заголовком: «Attention Is All You Need». Авторы — Васвани и коллеги — предложили избавиться от RNN полностью. Если attention так хорош, давайте построим архитектуру, в которой никаких рекуррентных связей нет вообще, только attention.
Полученная архитектура — трансформер. Вход разбивается на токены (примерно слова), каждый токен превращается в вектор. Дальше эти векторы много раз прогоняются через слои, в которых каждый токен «смотрит» на все остальные через тот же самый soft search, что и в Bahdanau 2015. После каждого attention-слоя — простая полносвязная нейросеть, потом нормализация. И так несколько раз подряд, штук шесть в оригинальной статье, у современных GPT — десятки и сотни блоков.
Трансформер выиграл у RNN сразу по двум фронтам. Во-первых, его легко параллелить: в RNN каждое следующее состояние зависит от предыдущего, поэтому обучение принципиально последовательное. В трансформере все токены входа обрабатываются одновременно — это идеально ложится на GPU. Во-вторых, он лучше работает с длинными зависимостями, потому что любой токен может «достать» информацию о любом другом за один слой attention, а не идти через десятки RNN-шагов, в которых сигнал затухает.
В деталях устройство трансформера мы разберём в отдельной статье — там много интересного: positional encoding, multi-head attention, causal mask. Сейчас важно одно: с 2017 года все большие языковые модели — это вариации одной и той же архитектуры.
2018: GPT — отрежем половину
Оригинальный трансформер Васвани 2017-го года был придуман для машинного перевода и состоял из двух частей: энкодер читает английский, декодер пишет французский. В июне 2018-го команда OpenAI во главе с Алеком Рэдфордом опубликовала статью «Improving Language Understanding by Generative Pre-Training» (для краткости — GPT-1), в которой они сделали радикальный шаг: оставили только декодер.
Логика такая. Если задача — продолжать текст, нам не нужен отдельный энкодер для входа. Вход и выход — одно и то же: длинная последовательность слов. Берём декодер трансформера, обучаем его предсказывать следующий токен на огромном корпусе текста — и всё. Получается универсальная модель, которая умеет продолжать любой текст.
GPT-1 имел 117 миллионов параметров и учился на корпусе из 7000 книг. Уже тогда он показал, что одна и та же предобученная модель, дообученная на разных задачах, бьёт специализированные NLP-модели почти везде — от классификации до вопросов-ответов. Но это всё ещё было исследование, а не массовый продукт.
2019: GPT-2 и масштаб как магия
В феврале 2019-го OpenAI выложил статью про GPT-2. Та же архитектура, что у GPT-1, тот же режим обучения, но в 10 раз больше параметров (1,5 миллиарда) и в 10 раз больше данных (40 ГБ интернет-текста). И вот тут случилось интересное.
Our model, called GPT‑2 (a successor to GPT), was trained simply to predict the next word in 40GB of Internet text. Due to our concerns about malicious applications of the technology, we are not releasing the trained model.
— OpenAI, Better Language Models and Their Implications, 2019
Перечитайте это. Модель, обученная буквально только на «угадай следующее слово» в куче интернет-текста, оказалась настолько хорошей, что её авторы сочли опасной для публичного релиза. Сначала они выложили только урезанную версию на 117 миллионов параметров, потом постепенно (в течение девяти месяцев) выкатили остальные.
Тут стоит остановиться и задуматься. Шесть лет назад, в 2013-м, NLP-инженеры дрались за лишний процент BLEU на машинном переводе. А теперь модель, которую никто специально не учил отвечать на вопросы или писать эссе, делает и то, и другое — просто потому, что в 40 ГБ интернет-текстов это всё было. Она научилась этим задачам, не потому что её учили задачам, а потому что чтобы хорошо предсказывать следующее слово в произвольном тексте, надо много чего понимать.
Это первый звонок про emergent abilities — способности, которые появляются у модели сами собой, когда вы её делаете больше. Никаких новых идей в архитектуре между GPT-1 и GPT-2 нет. Просто больше параметров и больше данных. И это меняет всё.
2020–2023: GPT-3, GPT-4 и закон масштаба
GPT-3 в 2020-м — 175 миллиардов параметров, в 100 раз больше GPT-2. Появились few-shot и in-context learning: даёшь модели в промте два-три примера задачи, и она по аналогии решает похожую — без всякого дообучения. GPT-4 в 2023-м — точные размеры OpenAI не публиковал, но по слухам это mixture-of-experts на триллионы параметров. Появилась мультимодальность: модель видит картинки.
С каждым переходом — GPT-1 → 2 → 3 → 4 — модель становилась лучше во всём, на чём её можно тестировать, и иногда внезапно начинала уметь то, что у предыдущей версии не работало вообще. Многошаговая арифметика, понимание шуток, написание корректного кода на Питоне, перевод между языками без специального обучения. Это и называют emergent abilities — способности, которые невозможно предсказать заранее, они «всплывают» при определённых масштабах.
С исследовательской точки зрения это даже немного обидно: оказывается, последние шесть-семь лет «прогресса AI» — это в большой степени история про то, как взять архитектуру 2017 года и обучить её в десять раз больше. Принципиально новых идей в самой модели почти нет. Зато инженерные победы огромные: распределённое обучение на тысячах GPU, RLHF (reinforcement learning from human feedback) для выравнивания ответов с человеческими предпочтениями, оптимизация инференса.
Что мы теперь знаем
Если собрать всё это вместе, картина такая. LLM — это автодополнение, обученное на огромном корпусе текста предсказывать следующий токен. Архитектура — трансформер, который придумали в 2017-м для машинного перевода. От GPT-1 до GPT-4 архитектура почти не менялась — менялся масштаб. И именно масштаб дал то, что снаружи выглядит как магия.
Это не значит, что LLM «глупа». Чтобы хорошо предсказывать следующий токен в произвольном куске интернета, модель должна выучить много всего: грамматику, факты о мире, правила арифметики, синтаксис языков программирования, нормы коммуникации. Всё это имплицитно сидит в её весах. Но в основе своей это всё ещё очень-очень хорошее автодополнение — а не разум.
В следующей статье серии разберём, как это автодополнение работает изнутри во время инференса: что такое токены и контекст, почему модель «галлюцинирует», и почему ChatGPT иногда просит вас «подумать пошагово». А дальше — три глубокие статьи: про токенизацию, про attention в деталях и про то, как из всех этих кубиков собирается работающий трансформер.
- Attention Is All You Need
- Neural Machine Translation by Jointly Learning to Align and Translate Та самая статья, в которой attention впервые появился — ещё внутри RNN-энкодера-декодера.
- Improving Language Understanding by Generative Pre-Training Оригинальный GPT — первое, что назвали этой аббревиатурой.
- Better Language Models and Their Implications Анонс GPT-2 — модель, которую авторы сначала отказались выкладывать целиком.