← Росток Своя LLM с нуля Словарик Код EN

Глава 0 из 17 15 мин

Знакомьтесь: Росток

Как из вероятностей следующего фрагмента получается целый ответ? Познакомимся с Ростком и проследим один шаг генерации.

В этой главе

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

Допустим, вы написали: «Жили-были дед да…». Продолжение напрашивается само. Языковая модель решает похожую задачу: получает начало текста и оценивает, что могло бы идти дальше. Только вместо одного ответа она сначала выдаёт вероятности множества вариантов. Из них выбирают небольшой фрагмент текста, добавляют его к уже написанному и повторяют расчёт. Так, шаг за шагом, появляется ответ чат-бота.

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

Нашу модель зовут Росток. В ней около 17 миллионов обучаемых чисел — параметров, значения которых менялись во время обучения на английских историях и диалогах. Для языковой модели это небольшой размер: например, у GPT-3 было 175 миллиардов параметров. Росток пишет простые истории и пробует отвечать на вопросы. После загрузки файлов все вычисления для его ответов выполняются прямо в браузере.

Машина, которая продолжает текст

У продолжения может быть разная степень предсказуемости. После «Вечером я пошёл в…» подходят и «магазин», и «кино», и «парк». Если добавить «купить хлеб», круг вариантов сузится. Читатель учитывает контекст почти незаметно для себя. Нам предстоит построить вычисление, которое тоже будет менять вероятности продолжений в зависимости от уже написанного.

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

Побудьте моделью

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

На кнопках — несколько вероятных продолжений и слово из исходного примера. Здесь мы выбираем только токены, похожие на слова; другие варианты, например знаки препинания, видны на диаграмме после ответа. Примеры английские, как и основной корпус Ростка.

Посмотрите, как делятся вероятности между вариантами. После «Once upon a time, there was a little» могут подойти и «girl», и «boy», и «dog». Мы не задавали Ростку правила английской грамматики вручную: при обучении он многократно предсказывал продолжения примеров и менял параметры по результатам этих попыток. Благодаря этому он научился улавливать закономерности текста, хотя всё ещё нередко ошибается.

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

Токен за токеном

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

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

Каждая строка — вариант следующего токена и его вероятность. «Самый вероятный» всегда берёт верхнюю строку, «кубик» тянет жребий.

Один шаг иногда добавляет целое слово, иногда его часть или знак препинания. В словаре Ростка 8 192 токена, включая служебные метки. Среди них есть частые слова с пробелом перед ними (« the», « happy»), части слов и отдельные байты — числа, которыми текст представлен в памяти компьютера. Поэтому любой текст можно закодировать, даже если модель плохо знает его язык. Как получается такой словарь, разберём в главе 6.

А почему бы всегда не брать самое вероятное слово?

Нажмите несколько раз «Самый вероятный». При одинаковом начале, весах модели и условиях расчёта такой выбор воспроизводит одно и то же продолжение. Иногда оно удачно, иногда модель застревает в повторениях: самый вероятный токен на каждом шаге не гарантирует хорошего рассказа в целом. Случайный выбор позволяет получить разные тексты, но может привести и к неудачным продолжениям. В главе 11 разберём, как управлять этим выбором с помощью температуры, top-k и top-p.

Что внутри

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

В коде Ростка нет написанных вручную правил английского или справочника с готовыми ответами. Есть параметры и операции над ними: умножение матриц, сложение, нормировка и нелинейные преобразования. Обучение подбирает параметры по примерам. Мы скрываем очередной токен текста, просим модель его предсказать и измеряем, какую вероятность она ему дала. Затем вычисляем, как небольшие изменения параметров повлияют на эту ошибку, и делаем шаг обновления. В нашем запуске предобучения таких шагов было около десяти тысяч.

Насколько он маленький

17 миллионов — это много или мало? Для сравнения — знаменитые модели последних лет. Каждая точка на картинке — один Росток.

Такой размер позволяет провести весь опыт на одном компьютере. В опубликованном запуске предобучение Ростка заняло 3 часа 41 минуту на Mac с M4 Pro; на другом оборудовании время будет иным. Готовая модель достаточно компактна для работы в браузере, в том числе на подходящем телефоне. У неё есть многие узлы, знакомые по крупным моделям: трансформерные блоки, внимание, обучение на предсказании токенов. Архитектуры и способы обучения больших систем различаются, но эти основы помогут в них разобраться.

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

Как устроен учебник

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

  • Виджеты — с ними можно играть: двигать ползунки, нажимать, выбирать. Почти все они считают по-настоящему, прямо на вашем устройстве.
  • Заметки — «Математика», «Python» и «Исследователю» — для тех, кто хочет копнуть глубже. Их можно пропускать.
  • Код на Python. Многие ячейки можно запустить прямо на странице: Python загрузится в браузер при первом запуске. Попробуйте:
text = "once upon a time there was a little girl" counts = {} for letter in text: counts[letter] = counts.get(letter, 0) + 1 # the five most common letters for letter, n in sorted(counts.items(), key=lambda kv: -kv[1])[:5]: print(repr(letter), n)

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

Что на самом деле выдаёт языковая модель, когда видит текст?

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

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

Росток сейчас

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

Главы

  1. 0 Знакомство
    1. Машина, которая продолжает текст
    2. Побудьте моделью
    3. Токен за токеном
    4. Что внутри
    5. Насколько он маленький
    6. Как устроен учебник
    7. Росток сейчас
  2. 1 Считаем буквы
  3. 2 Мера удивления
  4. 3 Градиентный спуск
  5. 4 Обратное распространение
  6. 5 Эмбеддинги
  7. 6 Токены
  8. 7 Внимание
  9. 8 Трансформер
  10. 9 Корпус
  11. 10 Обучение
  12. 11 Выборка
  13. 12 Разговор
  14. 13 LoRA
  15. 14 Больше данных
  16. 15 Модель побольше
  17. 16 Думать и Python
  18. 17 Что дальше