Автоматы и сознание
Фокус внимания и память агентов
Цели урока
- Понять проблему ограниченных вычислительных ресурсов и почему приоритизация - фича, не баг
- Различать типы памяти агента: сенсорная, рабочая, эпизодическая, семантическая
- Разобрать механизм scaled dot-product attention (Q, K, V) и multi-head attention
- Понять RAG как паттерн внешней памяти: когда и почему применяется
Предварительные знания
- Иерархические автоматы (урок 06-hierarchical)
- POMDP и belief state (урок 05-pomdp)
- Линейная алгебра: векторы, матричное умножение, dot product
- Базовое понимание нейронных сетей и softmax
Gato (DeepMind, 2022) управляет 604 задачами с контекстом 1024 токена. Notion AI индексировала 4 миллиарда страниц. Это не магия - это правильная архитектура памяти и attention.
- **Трансформеры (2017):** 'Attention Is All You Need' - самая цитируемая статья в NLP, основа GPT/Claude/Gemini
- **GitHub Copilot:** RAG по репозиторию - релевантные файлы в контекст, генерация с кодовой базой
- **Cursor IDE:** индексирует весь проект, retrieval по семантике, 500K+ пользователей
- **Notion AI:** 4 миллиарда страниц, RAG + summarization, real-time обновление базы
- **ChatGPT memory:** эпизодическая память между сессиями - хранит предпочтения, контекст пользователя
Революция Attention: от RNN к трансформерам
До 2017 года NLP работал на RNN и LSTM: последовательная обработка токен за токеном, информация о начале последовательности терялась к концу. Vaswani et al. предложили убрать рекуррентность полностью и оставить только attention. Статья вышла на NeurIPS 2017 с названием 'Attention Is All You Need' - за иронию в названии авторов немного критиковали, но результат говорил сам за себя. За 7 лет механизм не изменился принципиально - изменился только масштаб.
Проблема ограниченных ресурсов
**Google DeepMind, 2022: агент Gato обрабатывает 604 задачи - от управления роботом до игры в Atari. При этом контекст одного forward pass - фиксированные 1024 токена.** Мир бесконечно сложен, вычислительные ресурсы конечны. Это фундаментальное ограничение, которое определяет всю архитектуру интеллектуальных систем.
Два механизма позволяют работать в условиях ограниченных ресурсов: **внимание** (что обрабатывать прямо сейчас) и **память** (что сохранить для последующего использования). Без этих фильтров любой агент захлёбывается в потоке входных данных.
| Механизм | Вопрос | Аналогия | В LLM |
|---|---|---|---|
| Внимание | Что обрабатывать СЕЙЧАС? | Фонарик в темноте | Self-attention по токенам |
| Рабочая память | Что удерживать АКТИВНО? | 7 открытых вкладок | KV-cache контекста |
| Долгосрочная память | Что сохранить НАВСЕГДА? | Записная книжка | RAG / веса модели |
Закон Миллера (1956): рабочая память человека удерживает **7 +/- 2 элемента** одновременно. GPT-4 с контекстом 128K токенов - не исключение из этого правила, а попытка его обойти инженерными средствами.
**Prioritization как фича, не баг:** мозг игнорирует 99% входящей информации - ощущение одежды, фоновые звуки, периферийное зрение. Это не сбой, а необходимое условие работоспособности. Любой агент без приоритизации потребляет ресурсы равномерно - и ни на что не хватает.
Большой контекст решает проблему памяти
Большой контекст - компромисс: дороже, медленнее, и за его пределами всё равно ничего нет
Стоимость inference растёт квадратично с длиной контекста. Claude 3 с 200K токенов стоит в 10+ раз дороже, чем с 2K. При этом за границей контекста для модели не существует ни одного символа. RAG и другие механизмы внешней памяти решают именно эту часть проблемы.
Почему даже у модели с контекстом 128K токенов есть проблема "ограниченных ресурсов"?
Архитектура памяти агента
**Когнитивная архитектура SOAR (Laird, 1983) - первая попытка формализовать типы памяти интеллектуального агента. Сегодня LLM-агенты воспроизводят ту же структуру, но на другом субстрате.** Четыре типа памяти дают агенту разные возможности хранения и поиска.
| Тип памяти | Время жизни | Что хранит | В агенте (LLM) |
|---|---|---|---|
| Сенсорный буфер | Миллисекунды | Сырые входные данные | Входные токены до обработки |
| Рабочая память | Минуты / сессия | Активный контекст, 7+-2 элемента | KV-cache, context window |
| Эпизодическая | Долгосрочно | Конкретные события с контекстом | История диалогов (vector store) |
| Семантическая | Постоянно | Факты и знания без привязки к событию | Веса модели после предобучения |
Эпизодическая память хранит не факты, а **события**: где, когда, с кем. Именно поэтому можно вспомнить момент когда узнал формулу, но не саму формулу - они хранятся в разных системах.
**Консолидация памяти:** во сне мозг переносит важное из рабочей памяти в долгосрочную. Для агентов - аналог: ночной batch-процесс по эпизодам, извлечение паттернов, прунинг неважного. Без консолидации агент помнит всё одинаково - что хорошо ровно до момента, когда памяти не хватает.
Когда LLM отвечает на вопрос о Python без примеров из текущего диалога - какой тип памяти используется?
Механизм attention: мягкая адресация
**"Attention Is All You Need" (Vaswani et al., 2017, Google) - статья которую скачали более 100 000 раз за первый год. До неё LSTM обрабатывал последовательности по одному токену, теряя контекст на дистанции. Attention позволил смотреть на всё одновременно - и это перевернуло NLP.** GPT, BERT, Claude - все построены на этом одном механизме.
**Attention - мягкая адресация:** вместо жёсткого выбора "смотрю на позицию 5" система смотрит на все позиции одновременно с разными весами. Три компонента: Query (что ищем), Keys (метки доступного), Values (сам контент). Веса определяются близостью Query к каждому Key.
| Компонент | Аналогия (поиск файлов) | В трансформере |
|---|---|---|
| Query (Q) | Поисковый запрос: 'баг в auth' | Текущий токен ищет информацию |
| Keys (K) | Теги файлов: readme, auth, tests | Метки каждого токена в контексте |
| Values (V) | Содержимое файлов | Сам контент каждого токена |
**Multi-Head Attention:** вместо одного взгляда на контекст - несколько параллельных. Каждая голова специализируется на своём аспекте: синтаксические связи, семантическое сходство, позиционные паттерны. BERT-Large использует 16 голов в каждом слое из 24.
| Голова attention | На что смотрит (эмпирически) |
|---|---|
| Голова 1-2 | Синтаксические связи (подлежащее - сказуемое) |
| Голова 3-5 | Семантическое сходство (синонимы, замены) |
| Голова 6-8 | Позиционные паттерны (соседние токены) |
| Голова 9+ | Специализированные паттерны, зависят от задачи |
Multi-head attention просто дублирует вычисления для надёжности
Каждая голова специализируется на разном типе зависимостей в данных
Это подтверждено интерпретируемостью: у BERT разные головы детектируют синтаксические vs семантические отношения. Это не избыточность - это параллельная обработка разных аспектов структуры. Одна большая голова с теми же параметрами показывает худшее качество.
Зачем в attention делят на sqrt(d_k)?
RAG: внешняя долговременная память
**Notion AI (2023): индексировано более 4 миллиардов страниц пользовательского контента. Ни одна модель не вместит такой базы в контекст. Решение - RAG (Retrieval-Augmented Generation): сначала найти релевантное, потом генерировать с ним.** Это паттерн, перевернувший enterprise-применение LLM.
| Параметр | Context Window | RAG Vector Store |
|---|---|---|
| Объём | 128-200K токенов | Миллиарды документов |
| Скорость доступа | Мгновенно (GPU) | Поиск 50-200ms |
| Точность | Видит всё в окне | Может пропустить при плохом query |
| Стоимость | Дорого (quadratic) | Дёшево (хранение + index) |
| Когда обновляется | Новый prompt | Любой момент (живая база) |
**Hybrid подход:** production-системы часто комбинируют оба метода. Релевантные документы из RAG загружаются в контекст, но сам контекст тоже используется полностью. LangChain, LlamaIndex, Haystack - популярные фреймворки для этого паттерна.
RAG всегда лучше длинного контекста
RAG - компромисс: масштабируемость за счёт точности retrieval
Длинный контекст 'видит всё' и никогда не пропустит релевантное. RAG масштабируется до миллиардов документов, но retrieval не идеален: плохой query = нужный документ не в top-K. Выбор зависит от объёма данных и критичности точности.
RAG не находит нужный документ, хотя он есть в базе. Наиболее вероятная причина?
Вопросы для размышления
- ChatGPT иногда 'забывает' информацию из начала длинного диалога. Какой тип памяти при этом переполняется, и как бы выглядела архитектура агента, которая бы этого не допускала?