Генерация анекдотов на русском
Домашнее задание по курсу LLM. Реализованы BPE-токенизатор, авторегрессионный Transformer и цикл обучения. Модель обучалась с нуля на русских анекдотах.
В репозитории опубликован базовый чекпойнт nano с GQA и ALiBi. Бонусная часть с RoPE, MLA и сравнением mini/small находится в ноутбуке HSE_hw1_bpe_and_transformer.ipynb.
Данные и токенизатор
Использован датасет IgorVolochay/russian_jokes, файл dataset.csv: 150 553 текста.
Исходное разбиение — 90% на обучение и 10% на тест, seed — 0xC0FFEE. Для бонусных экспериментов из исходной обучающей части отдельно выделяется 5% на валидацию. Исходный test сохраняется.
Реализован byte-level BPE со словарём из 1024 токенов, включая EOS. Контекст при основном обучении — 128 токенов; более длинные тексты обрезаются.
Опубликованная модель
Конфигурация nano:
- 501 408 параметров;
- 3 Transformer-блока;
- размер скрытого состояния - 96;
- 4 головы внимания и 2 KV-головы;
- Grouped-Query Attention и ALiBi;
- RMSNorm и SwiGLU;
- dropout - 0,1.
Модель обучена предсказанию следующего токена в течение 10 000 шагов. При расчёте функции потерь паддинги исключаются, EOS учитывается. Опубликованные веса относятся к nano; веса бонусных mini и small в репозитории отсутствуют.
Бонус: RoPE и MLA
В ноутбуке реализованы:
- Rotary Positional Embedding: вращение пар координат Q и K в зависимости от позиции токена. При выборе RoPE ALiBi отключается.
- Multi-Head Latent Attention: совместное низкоранговое сжатие K/V, сжатие Q и decoupled RoPE. При генерации сохраняются только latent KV и общий позиционный K; полный кэш K/V не создаётся.
Проверки вычисляются в ноутбуке. RoPE сравнивается с явными матрицами вращения, MLA - с независимым расчётом через PyTorch SDPA. Также проверяются градиенты, причинность, паддинги, обработка последовательности частями и совпадение генерации с кэшем и без него, включая сдвиг окна контекста.
Результаты представлены таблицей численных ошибок и графиками: вращение RoPE, расхождение MLA с эталоном и размер кэша. В сохранённой проверке максимальное расхождение сжатого MLA с эталоном составило около 1,2e-7. На тестовом примере кэш MLA содержит 168 элементов против 448 у GQA.
Режимы сравнения mini и small
Предусмотрены четыре конфигурации:
| Конфигурация | Learning rate |
|---|---|
| mini, GQA + RoPE | 3e-4 |
| mini, GQA + RoPE | 8e-4 |
| mini, MLA + RoPE | 6e-4 |
| small, MLA + RoPE | 4e-4 |
Результаты ранних экспериментов
| Модель | Параметры | Шаги обучения | Test loss | Test perplexity |
|---|---|---|---|---|
| nano, GQA + ALiBi | 501 408 | 10 000 | 3,5272 | 34,03 |
| mini, GQA + RoPE | 10 523 520 | 2 971 | 3,3350 | 28,08 |
| mini, MLA + RoPE | 10 451 328 | 1 356 | 3,6855 | 39,86 |
| small, MLA + RoPE | 78 570 240 | 13 | 5,9796 | 395,30 |
Оценка качества
В ранних экспериментах mini с GQA и RoPE улучшила test loss с 3,5272 у nano до 3,3350, а perplexity — с 34,03 до 28,08.
Примеры генерации из ранних экспериментов
Тексты приведены без ручного редактирования и включают исходную фразу. Параметры: temperature = 0,65, top_k = 20, top_p = 0,9, repetition_penalty = 1,08.
Опубликованная nano
Начальная фраза: «Заходит в бар мужик и говорит:». Seed: 12648430.
Заходит в бар мужик и говорит: - Доктор, а почему я тебя такое?- Да нет, ты не хочешь.
Начальная фраза: «На экзамене профессор спрашивает студента:». Seed: 12648432.
На экзамене профессор спрашивает студента: - Кто ты не пьяный! - А вот, у меня такое называется? - Нет, я, я тебя не придумал? - Да вот, что у вас вчера нее милиционер, несколько родителей.
Mini с GQA и RoPE
Начальная фраза: «Заходит в бар мужик и говорит:». Seed: 12648430.
Заходит в бар мужик и говорит: - Ты, пожалуйста, что, не поговорил? - Ну, а ты, какой у тебя не будет? - Да это, а тот пьяный!
Начальная фраза: «На экзамене профессор спрашивает студента:». Seed: 12648432.
На экзамене профессор спрашивает студента: - Конечно, что ли? - Нет, да идут по лампу!
- Downloads last month
- 208