От базовой модели к ассистенту
Что умеет и чего не умеет базовая модель после претрейна, из каких этапов состоит пост-трейнинг и как его устроили InstructGPT, DeepSeek-R1 и Qwen3.
Зачем это нужно
Заголовок раздела «Зачем это нужно»На ступенях 4 и 5 вы обучали модель предсказывать следующий токен — это претрейнпредобучение, претрейнEN pretraining. Получается базовая модельбазовая модельEN base model: она знает грамматику, факты, умеет программировать. Но попробуйте спросить её «Как заварить зелёный чай?» — и вместо ответа вы, скорее всего, получите ещё пару вопросов, кусок форума или оглавление статьи. Модель ничего не сломала: она добросовестно продолжает документ.
Пост-трейнингпост-трейнинг, дообучение после претрейнаEN post-training превращает «автодополнение интернета» в ассистента, который отвечает, держит роль, останавливается вовремя и отказывается от вредного. На масштабе DeepSeek-V3 этот этап стоит долю процента от вычислений претрейна, но именно его вы видите, когда открываете чат. Этот урок — карта всей ступени 6: что делает каждый этап и как его устроили в InstructGPT, DeepSeek-R1 и Qwen3.
Что умеет базовая модель
Заголовок раздела «Что умеет базовая модель»Претрейн минимизирует cross-entropy на триллионах токенов текста. Модель учится одному: для любого префикса выдавать вероятности следующего токена так, как они распределены в обучающих документах. Из этого следует многое.
| Умеет | Не умеет (надёжно) |
|---|---|
| Продолжать текст в стиле начала: код, статью, диалог в пьесе | Понимать, что от неё ждут ответа, а не продолжения |
| Знать факты, языки, синтаксис программ | Держать одну роль: она «пишет» и за пользователя, и за ассистента |
| Решать новую задачу по 3–5 примерам в промпте | Вовремя остановиться: у документа нет «конца реплики» |
| Переводить, если промпт похож на двуязычный словарь | Следовать формату («ответь только JSON») |
| Имитировать любой стиль, включая токсичный | Отказываться от вредных запросов |
Третья строка левого столбца — обучение в контекстеобучение в контекстеEN in-context learning (ICL)Модель решает новую задачу по примерам в промпте, без изменения весов. Ярко показано в статье о GPT-3 (2020).: модель «подстраивается» под примеры прямо в контексте, без изменения весов. Статья о GPT-3 (2020) показала, что с ростом модели это работает всё лучше. Отсюда первый способ сделать из base-модели ассистента — промпт-инжиниринг: оформить запрос как кусок документа, в котором дальше естественно идёт ответ.
Ниже — ответы опытного консультанта на вопросы покупателей.
Вопрос: Чем улун отличается от зелёного чая?Ответ: Улун окислен частично, зелёный чай почти не окислен, поэтому вкус улуна глубже.
Вопрос: Как заварить зелёный чай?Ответ:Такой few-shotfew-shot (примеры в промпте)EN few-shot promptingНесколько пар «вход → выход» прямо в промпте; модель подхватывает формат без дообучения (in-context learning). Zero-shot — без примеров.-промпт работает, но хрупко. После ответа модель с радостью напишет «Вопрос: …» и продолжит диалог сама с собой. Каждый новый тип задачи требует своих примеров, а они съедают контекст. Нужен способ зашить поведение «я ассистент, отвечаю и останавливаюсь» прямо в веса.
Почему так: модель имитирует авторов документов
Заголовок раздела «Почему так: модель имитирует авторов документов»Полезная интуиция: base-модель — это симулятор авторов. По префиксу она угадывает, какой документ перед ней и кто его пишет, и продолжает от его лица. Вопрос на форуме продолжают другие участники; вопрос в FAQ — ответ; вопрос в контрольной работе — следующий вопрос. Модель не знает, какой из этих миров вы имели в виду.
Пост-трейнинг сужает это множество до одного автора — полезного ассистента — и вводит явную структуру диалога: роли, начало и конец реплики. Технически это делается через chat-шаблонchat-шаблонEN chat templateПравило (обычно Jinja в tokenizer_config.json), которое превращает список сообщений с ролями в одну строку со спецтокенами. со спецтокенамиспециальный токен (спецтокен)EN special tokenУправляющий токен, а не кусок текста — начало/конец текста (BOS/EOS), заполнитель для батча (PAD), разметка ролей в чате (например, <|im_start|> у Qwen). — вы разбирали его в уроке 4.2.3. В следующем уроке вы научите модель этому формату сами.
Насколько глубоко пост-трейнинг меняет модель? Два наблюдения.
- LIMA (2023). Модель LLaMA на 65B дообучили всего на 1000 тщательно отобранных примеров «вопрос — ответ», и в слепом сравнении люди в 43% случаев оценивали её ответы не хуже ответов GPT-4. Авторы сформулировали гипотезу поверхностного выравниваниягипотеза поверхностного выравниванияEN superficial alignment hypothesisИз статьи LIMA (2023): знания модель получает на претрейне, а выравнивание в основном учит формату и стилю общения.: знания и навыки модель получает на претрейне, а выравнивание в основном учит, в каком формате их выдавать. Подробно о LIMA — в следующем уроке.
- URIAL (2023). Авторы сравнили base-модель и её выровненную версию токен за токеном на одних и тех же ответах. В большинстве позиций обе модели ставят на первое место один и тот же токен. Расходятся они в основном на стилистических токенах: вводных фразах («Конечно!», «Вот несколько способов»), структуре ответа и дисклеймерах. Отсюда и сам метод URIAL: base-модель с системным промптом и всего тремя стилистическими примерами в контексте на тестах авторов приблизилась к версиям, прошедшим SFT и RLHF. Это тот же few-shot, что выше, только аккуратно подобранный.
Конвейер пост-трейнинга
Заголовок раздела «Конвейер пост-трейнинга»Современный пост-трейнинг — несколько этапов, и у каждого свои данные и своя функция потерь.
flowchart LR P["Претрейн<br/>триллионы токенов"] --> B["Base-модель"] B --> S["SFT<br/>образцовые диалоги"] S --> R["Предпочтения<br/>RLHF или DPO"] R --> V["RL с проверяемыми<br/>наградами"] V --> F["Флагман"] F -.->|"дистилляция"| M["Малые модели"]
| Этап | Данные | Чему учит | Где в курсе |
|---|---|---|---|
| SFTобучение с учителем на инструкциях (SFT)EN supervised fine-tuning (SFT) | пары «запрос → образцовый ответ», от тысяч до миллионов | формату диалога, роли, стилю, базовым навыкам | 6.1–6.2 |
| Предпочтения: RLHFобучение с подкреплением на основе отзывов людей (RLHF)EN reinforcement learning from human feedback (RLHF), DPOпрямая оптимизация предпочтений (DPO)EN direct preference optimization (DPO)Rafailov и др., 2023. Обучение на парах предпочтений без reward model и без RL-цикла. | пары ответов «лучше / хуже» | что люди считают полезным и безопасным | 6.3 |
| RL с проверяемыми наградамипроверяемое вознаграждениеEN verifiable reward (RLVR) | задачи с проверяемым ответом: математика, код | рассуждать, искать и перепроверять решение | 6.4 |
| ДистилляциядистилляцияEN (knowledge) distillation | ответы большой модели | переносить навыки флагмана в маленькие модели | 6.4 |
Ключевое различие. В SFT модель подражает готовому ответу: loss — та же cross-entropy, что и на претрейне, только на диалогах. На этапах RL модель сама генерирует ответы, а сигнал приходит от оценки: человека, reward-модели или проверки ответа программой. Подражание быстро учит формату, но не поднимает модель выше уровня образцов. Это делают этапы, где ответы модели оценивают: предпочтения и RL. Их язык — политика, награда, преимущество, PPO — вы уже знаете из модуля 6.0.
Сколько это стоит
Заголовок раздела «Сколько это стоит»Пост-трейнинг дешёв по сравнению с претрейном. В техотчёте DeepSeek-V3 приведена таблица GPU-часов на H800 по этапам. Посчитаем доли:
# DeepSeek-V3 Technical Report, таблица 1: H800 GPU-часы по этапамgpu_hours = {"претрейн (14.8T токенов)": 2664e3, "расширение контекста": 119e3, "пост-трейнинг (SFT + RL)": 5e3}total = sum(gpu_hours.values())for stage, h in gpu_hours.items(): print(f"{stage:>26}: {h / 1e3:6.0f} тыс. GPU-ч ({h / total:6.2%}) ≈ {h * 2 / 1e6:.2f} млн долл. при 2 долл./ч")print(f"{'итого':>26}: {total / 1e3:6.0f} тыс. GPU-ч") претрейн (14.8T токенов): 2664 тыс. GPU-ч (95.55%) ≈ 5.33 млн долл. при 2 долл./ч расширение контекста: 119 тыс. GPU-ч ( 4.27%) ≈ 0.24 млн долл. при 2 долл./ч пост-трейнинг (SFT + RL): 5 тыс. GPU-ч ( 0.18%) ≈ 0.01 млн долл. при 2 долл./ч итого: 2788 тыс. GPU-чПост-трейнинг — 0.18% вычислений. Оговорка: данные для SFT-рассуждений V3 сгенерировала внутренняя модель серии R1, а её RL в эту таблицу не входит. Тренд 2025–2026 годов — RL-этапы становятся всё дороже. Но для нас важен вывод: пост-трейнинг доступен там, где претрейн недоступен. Модель на 0.5–7B вы дообучите на одной видеокарте — это модуль 6.2.
InstructGPT: рецепт 2022 года
Заголовок раздела «InstructGPT: рецепт 2022 года»Классическая схема описана в статье OpenAI об InstructGPT — модели-предшественнице ChatGPT. Три шага:
- SFT. Около 40 нанятых разметчиков писали образцовые ответы на промпты: около 13 тыс. обучающих промптов.
- Reward model. Разметчики ранжировали несколько ответов модели на один промпт (около 33 тыс. промптов). На этих сравнениях обучили модель, которая выдаёт число — «насколько ответ хорош».
- PPO. Модель генерировала ответы на около 31 тыс. промптов, reward model их оценивала, а алгоритм RL PPO сдвигал модель к ответам с высокой наградой.
Главный результат: ответы InstructGPT на 1.3B параметров люди предпочитали ответам исходной GPT-3 на 175B. Модель, которая более чем в 100 раз меньше, выигрывала только за счёт пост-трейнинга. Побочный эффект — налог на выравниваниеналог на выравниваниеEN alignment taxПадение качества на обычных задачах после выравнивания под предпочтения.: на части академических бенчмарков качество немного падало. Шаги 2–3 подробно разберём в уроке 6.3.2.
Современные рецепты: DeepSeek-R1 и Qwen3
Заголовок раздела «Современные рецепты: DeepSeek-R1 и Qwen3»DeepSeek-R1: что, если начать сразу с RL?
Заголовок раздела «DeepSeek-R1: что, если начать сразу с RL?»Команда DeepSeek поставила эксперимент: что будет, если пропустить SFT и сразу запустить RL поверх DeepSeek-V3-Base?
Награда — правило: ответ в задаче верный и рассуждение оформлено в теги <think>…</think>. Получилась R1-Zero.
Её точность pass@1 (доля задач, решённых с первой попытки; подробно — урок 7.3.1) на задачах AIME 2024 (американской
математической олимпиады для школьников) выросла в процессе RL с 15.6% до 71.0%. Модель сама научилась
писать длинные рассуждения и перепроверять себя — знаменитый «момент озарения» («момент озарения»«момент озарения»EN aha momentЭффект из статьи DeepSeek-R1: модель при RL-обучении сама начинает перепроверять свои рассуждения.). Но текст плохо читался,
а языки смешивались (смешение языковсмешение языковEN language mixingМодель переключается между языками внутри одного рассуждения. Типичная проблема R1-Zero.).
Поэтому у полной R1 конвейер такой — два этапа SFT и два этапа RL:
- Холодный старт: SFT на нескольких тысячах длинных рассуждений хорошего качества (данные холодного стартаданные холодного стартаEN cold-start dataНебольшой набор качественных длинных рассуждений для SFT перед RL — так в DeepSeek-R1 исправили нечитаемость R1-Zero.).
- RL на рассуждениях с проверяемыми наградами и наградой за единый язык ответа.
- Rejection samplingотбор с отклонением (rejection sampling)EN rejection samplingСгенерировать много ответов и оставить только прошедшие проверку. В пост-трейнинге — способ собрать SFT-данные из RL-модели. + SFT: модель генерирует много ответов, верные отбираются. Вместе с данными для обычных задач получается около 800 тыс. примеров; на них заново дообучают DeepSeek-V3-Base.
- RL для всех сценариев: правила для задач с ответом, reward-модели для полезности и безопасности.
Те же 800 тыс. примеров использовали для обычного SFT моделей Qwen2.5 и Llama на 1.5–70B — так получились R1-Distill. Это дистилляция в чистом виде: маленькая модель подражает трассам большой. Здесь конвейер R1 — только обзор: каждый этап, «момент озарения» и споры вокруг него подробно разобраны в уроке 6.4.2, дистилляция — в уроке 6.4.4.
Qwen3: одна модель — два режима
Заголовок раздела «Qwen3: одна модель — два режима»Qwen3 (апрель 2025) обучена на ~36T токенов на 119 языках и диалектах. Флагманы прошли четыре этапа пост-трейнинга:
- Long-CoT cold start — SFT на длинных рассуждениях (CoT, chain of thought — «цепочка рассуждений»): математика, код, логика, STEM (естественные науки, техника, инженерия и математика).
- Reasoning RL с правиловыми наградами.
- Слияние режимов мышления (thinking mode fusion): SFT на смеси длинных рассуждений и обычных инструкций. Модель учится отвечать и с рассуждением, и без него (гибридный режим мышлениягибридный режим мышленияEN hybrid thinking modeОдна модель умеет отвечать и с длинным рассуждением, и сразу. В Qwen3 режим переключается флагами /think и /no_think.).
- General RL — более 20 общих задач: следование инструкциям и формату, агентные навыки.
Маленькие модели семейства весь путь не проходят: навыки им передают дистилляцией от флагманов (дистилляция «от сильной к слабой»дистилляция «от сильной к слабой»EN strong-to-weak distillationСхема Qwen3 для маленьких моделей. Сначала обучение на ответах большой модели (off-policy), затем подгонка к её логитам на собственных генерациях ученика (on-policy).). А в июле 2025 года Qwen вернулась к раздельным моделям: Qwen3-Instruct-2507 и Qwen3-Thinking-2507.
| InstructGPT (2022) | DeepSeek-R1 (2025) | Qwen3 (2025) | |
|---|---|---|---|
| Старт | GPT-3 | DeepSeek-V3-Base | Qwen3-Base |
| SFT | ответы людей | холодный старт + 800k отобранных ответов | long-CoT + слияние режимов |
| Сигнал RL | reward model по оценкам людей | правила (точность, формат, язык) + RM | правила + reward-модели (20+ общих задач) |
| Малые модели | — | SFT на трассах R1 (R1-Distill) | strong-to-weak дистилляция |
Общая идея всех трёх: SFT задаёт формат и «засевает» навыки, RL их усиливает, дистилляция дёшево переносит результат в маленькие модели.
Практика: base против instruct своими руками
Заголовок раздела «Практика: base против instruct своими руками»Скрипт ниже сравнивает пару моделей одной архитектуры: base-модель Qwen2.5-0.5B и
чат-модельчат-модель, instruct-модельEN chat model / instruct modelБазовая модель после пост-трейнинга. На Hugging Face и ModelScope узнаётся по суффиксу -Instruct/-Chat (Qwen2.5) или по отсутствию суффикса -Base (Qwen3, DeepSeek-V3). Qwen2.5-0.5B-Instruct. Нужны
pip install torch transformers и около 2 ГБ на скачивание. Работает на CPU за пару минут. AutoTokenizer и
AutoModel... вы уже встречали в уроке 4.5.4.
"""Base против Instruct: одна и та же архитектура, разное поведение."""import torchfrom transformers import AutoModelForCausalLM, AutoTokenizer
BASE, CHAT = "Qwen/Qwen2.5-0.5B", "Qwen/Qwen2.5-0.5B-Instruct"QUESTION = "Как заварить зелёный чай?"FEW_SHOT = ( "Ниже — ответы опытного консультанта на вопросы покупателей.\n\n" "Вопрос: Чем улун отличается от зелёного чая?\n" "Ответ: Улун окислен частично, зелёный чай почти не окислен, поэтому вкус улуна глубже.\n\n" "Вопрос: ")
tok = AutoTokenizer.from_pretrained(CHAT) # у base и instruct Qwen2.5 общий токенизаторbase = AutoModelForCausalLM.from_pretrained(BASE).float().eval()chat = AutoModelForCausalLM.from_pretrained(CHAT).float().eval()
@torch.no_grad()def complete(model, text, n=60): enc = tok(text, return_tensors="pt") out = model.generate(**enc, max_new_tokens=n, do_sample=False, pad_token_id=tok.pad_token_id) return tok.decode(out[0, enc["input_ids"].shape[1]:]) # спецтокены не прячем: виден <|im_end|>
chat_prompt = tok.apply_chat_template([{"role": "user", "content": QUESTION}], tokenize=False, add_generation_prompt=True)print("── 1. base, просто вопрос:\n", complete(base, QUESTION))print("── 2. base, few-shot «документ с ответами»:\n", complete(base, FEW_SHOT + QUESTION + "\nОтвет:"))print("── 3. instruct, шаблон ChatML:\n", complete(chat, chat_prompt))
# ── 4. Где именно расходятся модели (идея статьи URIAL) ─────────────────────────enc = tok(chat_prompt, return_tensors="pt")answer = chat.generate(**enc, max_new_tokens=60, do_sample=False, pad_token_id=tok.pad_token_id)[0]with torch.no_grad(): logits = base(answer[None]).logits[0, enc["input_ids"].shape[1] - 1: -1] # прогноз base для каждого токена ответаtarget = answer[enc["input_ids"].shape[1]:] # токены ответа instruct-модели# gather берёт логит правильного токена в каждой строке; ранг — сколько токенов base считает вероятнее негоrank = (logits > logits.gather(1, target[:, None])).sum(1) # 0 = base поставила этот токен на 1-е местоprint(f"── 4. токенов ответа: {len(target)}, base согласна (top-1): {(rank == 0).float().mean():.0%}")# Как в URIAL: токен «сдвинут», если у base он даже не в тройке лучших (ранг > 2)print(" несогласные токены:", [tok.decode(t) for t, r in zip(target, rank) if r > 2][:15])Что посмотреть в выводе (точный текст зависит от версий библиотек, поэтому мы его не приводим):
- Пункт 1. Продолжает ли base-модель вопрос как документ: новые вопросы, список, обрыв на полуслове через 60 токенов?
- Пункт 2. Few-shot обычно даёт осмысленный ответ. Но остановилась ли модель после него, или написала следующий «Вопрос:»?
- Пункт 3. Instruct отвечает по делу и заканчивает реплику токеном
<|im_end|>— его видно, потому что мы не скрываем спецтокены. - Пункт 4. Какую долю токенов ответа instruct-модели base-модель тоже ставит на первое место? Какие токены «несогласные» (у base они даже не в тройке лучших)? По выводам URIAL это должны быть в основном вводные слова и разметка, а не факты.
Проверь себя
Заголовок раздела «Проверь себя»- Base-модель — «симулятор авторов документов»: она многое знает, но не умеет быть ассистентом. Few-shot-промпты помогают, но хрупко.
- Пост-трейнинг: SFT (подражание образцам) → предпочтения (RLHF/DPO) → RL с проверяемыми наградами → дистилляция в малые модели. У DeepSeek-V3 он занял ~0.2% вычислений.
- Выравнивание во многом меняет стиль и формат (LIMA, URIAL), но новые навыки вроде рассуждений требуют RL и данных.
- R1 и Qwen3 строят конвейер из чередующихся SFT и RL, а маленьким моделям передают навыки дистилляцией.
Дальше: собираем SFT своими руками — формат диалога, chat-шаблон и маска loss «только на ответах ассистента».