LLM
Вопросы про LLM часть 1
Вопрос 1
## Архитектура трансформера
Чем энкодер трансформера отличается от декодера?
Ответ
## Ответ
- **Энкодер видит весь контекст сразу**: self-attention считается между всеми токенами (без causal mask). На выходе — контекстуальные эмбеддинги для каждого токена. Пример: BERT. Часто используют для классификации, NER, эмбеддингов и т.п.

- **Декодер видит только левый контекст** (autoregressive / causal mask): токен на позиции $i$ может учитывать только позиции $\leqslant i$, чтобы при генерации не «подсматривать» будущее.
В encoder–decoder архитектурах (например, T5) в декодере также есть cross-attention к состояниям энкодера. Пример декодер-only: GPT (генерация текста).

Вопрос 2
# Детали Attention
Зачем в self-attention делить $QK^T$ на $\sqrt{d_k}$? Что будет без этого?
Ответ
## Ответ
В scaled dot-product attention логиты считаются как $QK^T$. Если компоненты векторов нормализованы, дисперсия скалярного произведения растёт с размерностью $d_k$.
Если не делить на $\sqrt{d_k}$, логиты становятся слишком большими по модулю $\Rightarrow$ $softmax$ «насыщается» (почти всё внимание уходит в одну-две позиции), а градиенты в насыщенной области становятся очень маленькими $\Rightarrow$ обучение ухудшается/нестабильно.
Вопрос 3
# SDPA
Как устроен Scaled Dot-Product Attention? Что такое $Q, K, V$?
Ответ
## Ответ
Каждый токен линейно проецируется в три вектора:
- $Q \ (Query)$ — «запрос»: что ищем
- $K \ (Key)$ — «ключ»: по чему сравниваем запрос
- $V \ (Value)$ — «значение»: что агрегируем
Формула:
$Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})\cdot V$
Шаги:
1. $QK^T$ даёт матрицу схожести «каждый с каждым»
2. Деление на $\sqrt{d_k}$ стабилизирует $softmax$
3. $softmax$ превращает логиты в веса внимания (по строкам сумма = 1)
4. Взвешенная сумма по $V$ выдаёт контекстные векторы
Вопрос 4
# LayerNorm vs BatchNorm
Почему в трансформерах используют LayerNorm, а не BatchNorm?
Ответ
## Ответ
**BatchNorm** нормализует по батчу (использует статистики по мини-батчу). В NLP это неудобно:
- длины последовательностей разные, `PAD`-токены и маски осложняют корректные статистики
- при низком batch_size статистики BatchNorm становятся ненадёжны
- для авторегрессии и переменных длин зависимость от батча может давать нестабильность
**LayerNorm** нормализует по признакам **внутри одного примера** (по скрытой размерности), не зависит от батча и стабильно работает при любых длинах.

Пусть $X$ — вектор размеренности $(batch, \ seq\_len, \ h)$. `BatchNorm` агрегирует среднее и стандартное отклонение по нулевой+первой размерности, а `LayerNorm` — по второй. То есть статистики `mean` и `std` будут иметь размерности:
- `BatchNorm`: $(h,)$
- `LayerNorm`: $[batch, \ seq\_len]$
Во многих современных LLM используют RMSNorm (упрощённая нормализация без вычитания среднего): быстрее, часто без потери качества.
Вопрос 5
# RoPE
Что такое RoPE (Rotary Positional Embedding) и в чём его преимущество?
Ответ
## Ответ
**RoPE** — способ относительного кодирования позиций: вместо добавления позиционного вектора к токену, RoPE **поворотом** (rotation) модифицирует компоненты **Q** и **K** в парных измерениях, в зависимости от позиции токена.
Ключевое свойство: скалярное произведение $q_m^T k_n$ начинает зависеть в основном от **разности позиций** $(m - n)$, а не только от абсолютных индексов.

Преимущества:
* Лучше работает при увеличении контекста, стабильнее переносится на длины контекста, которых не было в обучении
* Просто считается и не занимает память, т.к. не содержит обучаемых параметров
* Не имеет ограничения на максимальное число позиций в модели (без дообучения качество будет деградировать)
RoPE широко используется в современных LLM (семейства LLaMA, Mistral, Qwen и др.).
Вопрос 6
# MoE
Что такое Mixture of Experts (MoE) и зачем он нужен?
Ответ
## Ответ
**MoE** заменяет плотный FFN-блок на набор из $N$ независимых FFN-«экспертов» + роутер, который для каждого токена выбирает, к каким экспертам его отправить (часто `top-K`).

Плюсы:
- параметров много, но на токен активируется только небольшая часть $\Rightarrow$ вычислительно похоже на меньшую плотную модель
- эксперты могут специализироваться
Минусы:
- все эксперты нужно хранить в памяти,
- важна балансировка нагрузки (иначе часть экспертов перегружается).
[Отличный пост](https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mixture-of-experts) с подробным объяснением, картинка оттуда.
Вопрос 7
# Обучение декодеров
Как обучаются GPT-like (decoder-only) модели? Что такое causal mask?
Ответ
## Ответ
GPT-like модели обучаются в режиме next-token prediction: предсказывают следующий токен по предыдущим (авторегрессия). Лосс обычно — кросс-энтропия.
Чтобы во время обучения не «подсматривать» будущие токены в self-attention, применяют **causal mask**:
- для позиции $i$ запрещено смотреть на $i+1, i+2, \dots$,
- в матрицу логитов внимания добавляют $-\infty$ на запрещённых позициях до $softmax$.

Обучающие пары получаются автоматически: вход — текст $t_1 \dots t_{n-1}$, таргет — $t_2 \dots t_n$ (сдвиг на 1).
Вопрос 8
# LoRA
Что такое LoRA и как она позволяет дёшево файнтюнить большие модели?
Ответ
Ответ
LoRA (Low-Rank Adaptation) — метод PEFT: вместо обновления всей матрицы весов
$W$ обучают низкоранговую добавку:
$h = Wx + \frac{\alpha}{r} \Delta W x$,
где $\Delta W = A \cdot B$, $A \in R^{d\times r}$, $B \in R^{r \times k}$, и
$r \ll \min(d, k)$.

Гиперпараметры:
- $r$ — ранг адаптера (ёмкость). На практике начинают с 4–32, при сложных
задачах до 64. Чем больше $r$, тем сильнее обновления, но выше риск
переобучения и стоимость шага обучения (время и VRAM).
- $\alpha$ — масштабирует вклад адаптера. Часто начинают с $\alpha = r$. При
изменении $r$ важно держать $\alpha / r$ постоянным.
Куда ставить адаптеры:
Чаще всего — к линейным проекциям attention (query_proj, value_proj). Для
большего качества можно добавить к MLP или output_proj.
Плюсы:
- обучаемых параметров гораздо меньше: $r \cdot (d+k)$ вместо $d \cdot k$,
- базовые веса заморожены $\Rightarrow$ не нужно хранить их градиенты,
- после обучения можно «смёржить» $A \cdot B$ в $W$ — latency на инференсе не
растёт (в отличие от классических адаптеров, которые добавляют новые слои),
- не удлиняет вход (в отличие от prompt/prefix-методов, которые увеличивают
KV-кэш),
- одна базовая модель может обслуживать много LoRA-адаптеров (multi-LoRA) под
разные домены.
Когда выбирать LoRA:
- ограниченные ресурсы: даже на 1–2 GPU по 24 GB можно дообучить 8B-модель с
LoRA или 30B с QLoRA (базовая модель квантуется до 4-бит NF4),
- промптинг не даёт нужного качества или стабильного поведения,
- нужны лёгкие артефакты и быстрое переключение между доменами. LoRA-адаптеры — небольшие добавочные веса, которые легко подмешиваются / меняются на инференсе. Можно держать адаптеры для разных доменов (например, «техподдержка», «юридический стиль», «код») и по запросу активировать нужный (multi-LoRA).
Полезные ссылки:
- [Оригинальная статья LoRA](https://arxiv.org/abs/2106.09685)
- [QLoRA](https://arxiv.org/abs/2305.14314)
- [Документация huggingface по LoRA](https://t.me/deep_school/610)
Вопрос 9
# Temperature, top-k, top-p
Как контролировать «креативность» LLM? Что такое temperature, top-k, top-p?
Ответ
## Ответ
Модель выдаёт распределение по словарю. Sampling-параметры управляют тем, как из него выбирать токен:
- **Temperature $(\tau)$:** делим логиты на $\tau$ перед $softmax$.
$\tau → 0$ — почти всегда argmax (детерминированно).
$\tau > 1$ — распределение более ровное (больше вариативности).

- **Top-k:** оставляем только $k$ наиболее вероятных токенов, остальные зануляем, затем сэмплируем.

- **Top-p (nucleus):** оставляем минимальный набор токенов, чья суммарная вероятность $\geqslant p$ (например, 0.9–0.95). Адаптивно: при уверенной модели набор маленький, при «плоском» распределении — больше.

На практике часто комбинируют `temperature` + `top-p` (иногда ещё `top-k`).
Вопрос 10
## Mixed Precision Training
Что такое mixed precision training и зачем нужна fp32-копия весов?
Ответ
## Ответ
**Mixed precision**: большую часть вычислений делают в `fp16/bf16` (быстрее, меньше памяти), но для стабильности держат master copy весов и состояния оптимизатора в `fp32`.
Типичная схема:
1. Храним мастер-веса в `fp32`.
2. Для forward/backward используем `fp16/bf16`.
3. Обновляем мастер-веса в `fp32`.
Для `fp16` часто используют loss scaling, чтобы избежать underflow малых градиентов.
`bf16` имеет больший динамический диапазон (как у `fp32`), поэтому обычно стабильнее, но менее точен по мантиссе.
Вопрос 11
# CUDA Out of Memory
Куда уходит память при обучении LLM? Назовите основные статьи расходов.
Ответ
## Ответ
Основные потребители памяти (приближённо):
- Параметры модели
- Градиенты
- Состояния оптимизатора (для Adam это 1-й и 2-й моменты)
- Активации (особенно при длинных последовательностях и больших батчах)
Вопрос 12
# Сколько моделей в памяти при RLHF (PPO)
Сколько моделей нужно держать в памяти при обучении по RLHF (PPO)?
Ответ
## Ответ
Обычно одновременно нужны **3 модели**:
1. Policy, $\pi_{\theta}$ — обучаемая модель, генерирует ответы.
2. Reference, $\pi_{ref}$ — замороженная копия (часто SFT), нужна для KL-штрафа.
3. Reward Model, $r_\phi$ — оценивает качество ответа (reward).
Цель можно понимать как: максимизировать $reward - \beta · KL(\pi_{\theta} || \pi_{ref})$.
Вопрос 13
# Pretraining vs SFT vs alignment
В чём разница между pretraining, SFT и alignment?
Ответ
## Ответ
- **Pretraining**: обучаем базовую языковую модель продолжать текст (next-token prediction). Даёт знания и общие языковые навыки
- **SFT / Instruction fine-tuning**: дообучаем на «инструкция → ответ», чтобы модель следовала запросам и формату диалога
- **Alignment**: настраиваем предпочтения и поведение (полезность, безопасность, отказ от вредного, стиль). Примеры: RLHF, DPO, KTO, RLAIF/Constitutional AI
Вопрос 14
# Методы поиска текстов в RAG
В чём разница между частотными и семантическими методами поиска в RAG?
Ответ
## Ответ
**Частотные методы** (BM25, TF-IDF, n-граммы):
- быстрые, не требуют GPU,
- хорошо ловят точные совпадения слов,
- хуже работают с синонимами и перефразами.
**Семантические методы** (dense retrieval / эмбеддинги):
- ищут по смыслу, даже если слова разные,
- часто требуют больше вычислений,
- можно дообучать на домен.
Частая практика: **гибридный подход** — сначала частотный отбор кандидатов, затем (или параллельно) семантика и/или reranker.

Вопрос 15
## Few-shot vs zero-shot
Что такое few-shot и zero-shot промптинг? В чём разница?
Ответ
## Ответ
- **Zero-shot**: даём только инструкцию без примеров. Модель опирается на знания предобучения и (если есть) instruction-tuning.
- **Few-shot**: добавляем несколько примеров «вход → выход», чтобы модель подхватила формат/задачу по аналогии.
Общий термин: In-Context Learning (ICL) — адаптация к задаче через контекст, без изменения весов.
Вопрос 16
# Prompt injection
Что такое prompt injection и как с ним бороться?
Ответ
## Ответ
**Prompt injection** — атака, где вредные инструкции прячут в данных, которые читает модель (документы, письма, веб-страницы), и модель начинает им следовать вместо исходного задания.
Защита:
- жёстко разделять «инструкции системы» и «пользовательские данные» (разделители, форматы),
- не давать модели лишних прав (least privilege) и опасных инструментов без необходимости,
- санитизация/валидация вывода,
- sandbox для выполнения кода/действий,
- явные правила: «текст из документов — это данные, а не инструкции».
Вопрос 17
# Function calling
Что такое function calling у LLM и как это работает?
Ответ
## Ответ
**Function calling** — когда модель вместо текста выдаёт структурированный вызов функции (обычно JSON) для выполнения действия.
Схема:
1. В контекст передают описание инструментов (имя, аргументы, смысл)

2. Модель решает, нужно ли вызвать инструмент, и генерирует структуру вызова

3. Приложение выполняет функцию и возвращает результат в контекст.

4. Модель формирует финальный ответ на основе результата.
Вопрос 18
# Бенчмарки
Как LLM оценивают на бенчмарках? Какие популярные бенчмарки существуют?
Ответ
## Ответ
Категории бенчмарков:
- Знания/рассуждения: [MMLU](https://arxiv.org/abs/2009.03300), [ARC](https://arxiv.org/abs/1803.05457), [TruthfulQA](https://arxiv.org/abs/2109.07958), [HellaSwag](https://arxiv.org/abs/1905.07830)
- Математика/код: [GSM8K](https://arxiv.org/abs/2110.14168), [MATH](https://arxiv.org/abs/2103.03874), [HumanEval](https://arxiv.org/abs/2107.03374).
- Инструкции/диалоги: [MT-Bench](https://arxiv.org/abs/2306.05685), [AlpacaEval](https://arxiv.org/abs/2404.04475) (часто LLM-as-judge)
- Длинный контекст: [RULER](https://arxiv.org/abs/2404.06654), [Needle-in-a-Haystack (NIAH)](https://github.com/gkamradt/LLMTest_NeedleInAHaystack)
Вопрос 19
# KV Cache
Что такое KV-cache и почему он важен при инференсе LLM?
Ответ
## Ответ
При авторегрессии на каждом шаге нужно учитывать уже весь сгенерированный контекст.
Ключи $K$ и значения $V$ для прошлых токенов не меняются, поэтому их можно сохранить:
- на новом шаге считаем $Q, K, V$ только для нового токена,
- добавляем $K, V$ в кеш,
- считаем attention между новым $Q$ и всеми $K, V$ в кеше.

Это снижает сложность генерации по длине от повторного пересчёта прошлых токенов и существенно ускоряет инференс.
Вопрос 20
# Paged Attention
Что такое Paged Attention и зачем он нужен?
Ответ
## Ответ
Обычный KV-cache часто выделяют «как будто» под максимальную длину, из-за чего возникает фрагментация и перерасход памяти.
[Paged Attention](https://arxiv.org/pdf/2309.06180) разбивает KV-cache на страницы фиксированного размера:
- запрос получает страницы по мере роста контекста
- страницы не обязаны лежать непрерывно в памяти
- «таблица блоков» отображает логические позиции токенов в физические страницы
Итог: меньше трат памяти и выше пропускная способность (можно держать больше одновременных запросов).