Книга: Инжиниринг искусственного интеллекта
Назад: 5. ПРАКТИЧЕСКИЕ ПРИМЕРЫ: (псевдо-)КОД И ИНСТРУКЦИИ
Дальше: ГЛОССАРИЙ

6. ГЛУБИННЫЕ ВОПРОСЫ: то, что осталось за кадром

Эта книга построена как «карта». Мы сознательно оставляли некоторые детали за рамками, чтобы не превращать повествование в бесконечный справочник. Но пытливый читатель (такой как вы) неизбежно задает вопросы, которые выходят за пределы основного текста.

Это приложение - для вас. Здесь мы собрали самые частые «глубинные» вопросы по каждой главе и дали на них короткие, но точные ответы. Никакой воды, только суть.



Как читать:

нашли вопрос, который вас заинтересовал, - прочитали ответ. Не нашли - значит, вопрос действительно глубокий, и вам предстоит собственное исследование. Именно это мы и обещали в предисловии.



6.1 Глава 1. Как работает генеративная языковая модель



Вопрос: Почему LSTM называется «долгая краткосрочная память»? Это же оксюморон.



Название отражает суть архитектуры. LSTM - это всё ещё краткосрочная память в том смысле, что она работает в пределах одного предложения или абзаца. Но по сравнению с простой RNN (которая помнит 5–10 слов) LSTM может протащить информацию через сотни шагов - для рекуррентной сети это долго. Оксюморон подчеркивает: это краткосрочная память, но «долгая» относительно своего класса.



Вопрос: Чем отличается скрытое состояние (hidden state) от состояния ячейки (cell state) в LSTM?



Скрытое состояние - это то, что модель выдает наружу на каждом шаге. Оно участвует в предсказании следующего слова.

Состояние ячейки - это внутренняя «лента конвейера», которая течет через всю сеть, почти не меняясь. Она хранит долгосрочную информацию. В отличие от hidden state, cell state проходит только через линейные операции (сложение, умножение), поэтому градиенты при обратном распространении не затухают. Три вентиля (забывания, входной, выходной) решают, что добавить в эту ленту, что удалить и что прочитать в hidden state.



Метафора:

hidden state - это то, что вы говорите вслух. Cell state - это ваша долговременная память, которую вы не озвучиваете, но носите с собой.



Вопрос: Почему трансформеры называют «трансформерами»?



Название отсылает к идее «трансформации» одной последовательности в другую. Оригинальная статья 2017 года («Attention Is All You Need») была посвящена машинному переводу: модель «трансформировала» предложение на одном языке в предложение на другом. Позже выяснилось, что архитектура хороша и для генерации (decoder-only), и для понимания (encoder-only), но название осталось.



6.2 Глава 2. Типы архитектур нейросетей



Вопрос: Что такое «градиент» и почему он «затухает»?



Градиент - это вектор частных производных, показывающий, в каком направлении нужно изменить веса модели, чтобы уменьшить ошибку. Если провести аналогию с ландшафтом: градиент показывает направление самого крутого спуска.

При обратном распространении ошибки градиенты многократно умножаются на веса слоев. Если веса меньше 1, градиент экспоненциально затухает (становится близким к нулю). К тому моменту, как ошибка «доходит» до первых слоев, градиент настолько мал, что веса практически не меняются. Модель перестает учиться дальним зависимостям.

Если веса больше 1 - градиент взрывается (становится огромным), и обучение становится нестабильным.



Вопрос: Что такое PPO (Proximal Policy Optimization) и почему он используется в RLHF?



PPO - алгоритм из семейства обучения с подкреплением. Он обновляет модель маленькими шагами, не делая резких изменений. Это критически важно для RLHF, потому что если обновить модель слишком сильно, она «забудет» всё, чему научилась на этапе SFT.



Технически:

PPO ограничивает изменение политики (policy) модели, добавляя штраф за слишком большие отклонения от предыдущей версии. Это делает обучение стабильным, но сложным в настройке.

Альтернатива - DPO (Direct Preference Optimization), который проще и не требует отдельной модели вознаграждения. Но на масштабах OpenAI и Anthropic RLHF с PPO всё ещё считается золотым стандартом.



6.3 Глава 3. Обучение моделей



Вопрос: Что такое «градиент» и почему он «затухает»? - см. ответ в разделе 6.2.



Вопрос: Что такое PPO? - см. ответ в разделе 6.2.



6.4 Глава 4. Ключевые оптимизации



Вопрос: Как физически организован KV Cache? Это просто память на GPU?



Да, KV Cache хранится в HBM (High Bandwidth Memory) GPU. Для каждого токена сохраняются матрицы K и V размерностью [num_heads, head_dim].



Проблема:

при генерации длинных текстов KV Cache может занимать десятки гигабайт. Если хранить его как один непрерывный блок, возникает фрагментация памяти - модель не может выделить большой кусок, даже если свободной памяти достаточно.



Решение:

vLLM использует PagedAttention - аналог виртуальной памяти в операционных системах. KV Cache разбивается на страницы фиксированного размера. Страницы могут быть расположены непоследовательно в памяти.

Это позволяет:

Избежать фрагментации.

Эффективно использовать память.

Делить KV Cache между запросами (для batch processing).

Именно PagedAttention дает vLLM прирост скорости в 10–20 раз по сравнению с transformers из коробки.



Вопрос: Почему GQA (Grouped Query Attention) работает почти так же хорошо, как MHA (Multi-Head Attention), но требует меньше памяти?



Исследования показали, что ключи (K) и значения (V) несут меньше разнообразной информации, чем запросы (Q). В MHA каждая голова имеет свои K и V - это требует много памяти. В GQA головы группируются, и внутри группы они используют общие K и V.

Почему качество не падает? Потому что разнообразие информации для K и V избыточно. Разделение K и V между 4–8 головами (а не 32) сохраняет достаточно информации для качественной работы. Это эмпирический факт, подтвержденный на LLaMA 2/3 и Mistral.



Вопрос: Что такое квантизация и как она влияет на качество?



Квантизация - это снижение точности весов модели. Вместо FP16 (2 байта на параметр) используются INT8 (1 байт) или INT4 (0.5 байта). Это уменьшает потребление памяти в 2–4 раза.



Как это влияет на качество:

INT8: потеря качества 1–3% для инференса. Практически незаметна на большинстве задач.

INT4: потеря качества 3–8%. Может быть заметна на сложных рассуждениях или математике.

Современные методы (GPTQ, AWQ, GGUF) минимизируют потери, подбирая оптимальные масштабы для каждого слоя.



Важно:

квантизация применяется только для инференса. Для обучения (fine-tuning) нужна FP16 или BF16, иначе градиенты не сойдутся.



6.5 Глава 5. Как выбирать модели и подружить их с вашими данными



Вопрос: Почему в таблице сравнения моделей нет столбца с ценами?



Потому что цены меняются быстрее, чем архитектуры. То, что сегодня стоит $10 за миллион токенов, завтра может стоить $5 или $20. Вендоры постоянно корректируют цены, появляются новые модели, старые дешевеют.

Мы сознательно не включили цены в таблицу, чтобы не создавать ложного ощущения «актуальности». Вместо этого мы дали:

Формулы для расчета TCO (раздел 5.3).

Чек-лист, как считать бюджет под свой сценарий.

Принципы выбора модели (матрица выбора), которые остаются актуальными независимо от цен.



Совет:

перед принятием решения заходите на сайты вендоров и проверяйте актуальные цены. Таблицу в книге воспринимайте как «карту местности», а не как прейскурант.



Вопрос: Как технически реализовать NL 2 SQL , упомянутый в главе 6?



NL2SQL (Natural Language to SQL) - преобразование запроса на естественном языке в SQL-код.



Варианты реализации:



Промт к LLM с описанием схемы.

Самый простой способ: в промт передаете схему базы данных (CREATE TABLE statements) и просите модель сгенерировать SQL. Для GPT-4 точность на простых запросах - 80–90%, на сложных (JOIN, подзапросы) - 60–70%.



Fine - tuned модель.

Обучаете модель на датасете вроде Spider (10k+ примеров). Это повышает точность на 10–15%, но требует ресурсов.



Семантический парсер.

Специализированные модели вроде TAPAS или T5 для NL2SQL. Менее гибкие, но более предсказуемые.



Важно:

всегда валидируйте сгенерированный SQL перед выполнением. Даже лучшие модели могут сгенерировать DROP TABLE или DELETE * FROM users. Используйте:

Парсер SQL для проверки синтаксиса.

Белый список разрешенных операций (только SELECT).

Выполнение в изолированной базе (read-only).



6.6 Глава 6. Перспективные архитектуры



Вопрос: Как строить ROC -кривую для роутера?



ROC-кривая (Receiver Operating Characteristic) показывает, как меняется баланс между True Positive Rate (TPR) и False Positive Rate (FPR) при изменении порога классификатора.



Для роутера:

TPR (True Positive Rate) = доля сложных запросов, отправленных на тяжелую модель.

FPR (False Positive Rate) = доля простых запросов, ошибочно отправленных на тяжелую модель.



Как построить:

Соберите 1000 реальных запросов.

Разметьте их на «простые» и «сложные» (по вашей задаче).

Прогоните через классификатор (fastText, miniLM), получите вероятности.

Для каждого возможного порога (0, 0.01, 0.02, ..., 1) вычислите TPR и FPR.

Нанесите точки на график (FPR по X, TPR по Y).

Соедините точки - это ROC-кривая.



Как выбирать порог:

Чем ближе кривая к левому верхнему углу (0,1), тем лучше.

Оптимальный порог - точка, ближайшая к этому углу.

Если вы готовы жертвовать качеством ради бюджета - двигайте порог влево (больше запросов на легкую модель, но выше риск ошибки).

Если качество критично - двигайте порог вправо (меньше ошибок, но выше стоимость).



Вопрос: Что такое NL2SQL? - см. ответ в разделе 6.5.



6.7 Глава 7. Цифровой двойник



Вопрос: Как технически обучить «модель стиля» на моей переписке?



Это классическая задача fine-tuning для имитации стиля.



Шаги:

Соберите данные.

Экспортируйте ваши сообщения из Telegram, WhatsApp, email. 500–2000 сообщений - достаточно. Формат: диалоги (вопрос-ответ) или монологи (ваши сообщения).

Выберите базовую модель.

Используйте небольшую LLM - Llama-3-8B, Mistral-7B, Qwen-2.5-7B. Она должна быть достаточно умной, чтобы улавливать стиль, но не слишком тяжелой для дообучения.

Используйте LoRA .

Low-Rank Adaptation позволяет дообучать модель с минимальными затратами памяти (8–16 GB GPU). Библиотеки: HuggingFace PEFT, Unsloth, Axolotl.

Формат обучения.

Тренируйте модель на задаче «продолжи диалог в моем стиле». Промт: [Ваше сообщение] → [Ответ модели, который имитирует ваш стиль].

Оценка.

После обучения прогоните 10–20 тестовых примеров и сравните с вашим реальным стилем. Если ответы кажутся «чужими» - добавьте данных или увеличьте эпохи.

Время:

на одной A100 обучение LoRA на 1000 примеров занимает 1–2 часа.



Вопрос: Как построить «векторную базу ценностей»?



Это RAG (Retrieval-Augmented Generation) на ваших личных данных.



Шаги:

Соберите утверждения.

Напишите 100–200 фраз, которые отражают ваши ценности, предпочтения, убеждения. Например: «Я предпочитаю краткие ответы», «Меня раздражает хамство», «Для меня важна экология».

Сгенерируйте эмбеддинги.

Прогоните каждое утверждение через эмбеддер. Рекомендации:

text-embedding-3-small (OpenAI) - качественно, но платно.

intfloat/multilingual-e5-large (HuggingFace) - бесплатно, хорошо для русского.

sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 - быстро, компактно.

Сохраните в векторную БД.

Популярные варианты:

Qdrant - open-source, легко запустить локально.

Pinecone - облачная, простой API, но платная.

Milvus - мощная, но сложная в настройке.

Chroma - самая простая для прототипов.

При запросе к двойнику. Получите эмбеддинг запроса, найдите ближайшие 3–5 утверждений из базы, добавьте их в промт как «ваши ценности».



Пример промта:

Ты - цифровой двойник. Твои ценности:

- Я предпочитаю краткие ответы.

- Меня раздражает хамство.

- Для меня важна экология.

Пользователь: {запрос}

Ответ:



Резюме

LSTM названа оксюмороном, потому что это «долгая» память относительно RNN, но всё еще краткосрочная.

Градиент - направление спуска в пространстве весов. Затухает при многократном умножении на числа < 1.

PPO - алгоритм RLHF, который обновляет модель маленькими шагами, чтобы не забыть SFT.

KV Cache физически хранится в HBM; vLLM использует PagedAttention для эффективного управления.

GQA работает почти как MHA, потому что K и V несут меньше разнообразной информации, чем Q.

Квантизация (INT8, INT4) снижает память в 2–4 раза с потерей качества 1–8%.

Цены на модели не включены в таблицу, потому что они меняются быстрее, чем архитектуры.

NL2SQL реализуется через промт с описанием схемы или fine-tuned модель; всегда валидируйте SQL.

ROC-кривая для роутера строится по паре (TPR - True Positive Rate, FPR - False Positive Rate) для разных порогов; помогает найти баланс качества и бюджета.

Модель стиля дообучается через LoRA на 500–2000 ваших сообщений.

Векторная база ценностей строится через эмбеддинги и векторную БД (Qdrant, Pinecone).



Назад: 5. ПРАКТИЧЕСКИЕ ПРИМЕРЫ: (псевдо-)КОД И ИНСТРУКЦИИ
Дальше: ГЛОССАРИЙ