Привет, Habr! Я хочу поделиться своим исследовательским проектом - репозиторием memory-is-all-you-need. Это не просто код, а попытка переосмыслить роль памяти в нейронных сетях, вдохновлённая знаменитой статьёй "Attention Is All You Need". Если трансформеры сделали революцию в обработке последовательностей, то почему бы не сделать то же самое с памятью? Я реализовал архитектуру, где память не пассивный буфер, а активная, самоорганизующаяся система, способная к "сновидениям" и ассоциативному извлечению из памяти. В этой статье я расскажу о сути проекта, его реализации и экспериментах. Если вам интересен когнитивный ИИ, непрерывное обучение или альтернативы scaling'у LLM - читайте дальше!


Я не претендую на то, что мой проект - 100% панацея, надеюсь на адекватную критику и фидбэк. Статья ориентирована на то, чтобы привлечь внимание исследователей к этой теме, найти единомышленников, которым тоже будет интересно исследовать память в трансформерах :)


Мотивация: Почему память - это всё, что нужно?

В современных моделях память - это всего лишь контекстное окно: пассивный буфер токенов, который быстро забывается при длинных последовательностях. Проблемы очевидны:

  • Забывание: Долгосрочные зависимости теряются.

  • Масштабирование: Увеличение контекста (до миллионов токенов) требует огромных ресурсов, но не решает проблему абстракции.

  • Пассивность: Модели не "размышляют" над воспоминаниями, не консолидируют их, как мозг во сне.

Мой подход: "Memory Is All You Need" - память как активная инфраструктура. Вдохновлено нейронаукой (правило Хебба: "neurons that fire together, wire together", STDP - Spike-Timing-Dependent Plasticity) и непрерывным обучением. Цель - создать автономные системы, которые учатся непрерывно, без катастрофического забывания (проблема, когда нейросеть после обучения на новой задаче полностью теряет знания по предыдущим).

Философия проекта: "Intelligence is not defined by how much you can remember, but by what you choose not to forget."

Архитектура: Как работает активная память

Ключ - MemNet: комбинация трансформера-контроллера и многослойного банка памяти (MultiHeadMemoryBank).

Основные компоненты

  1. Hebbian Graph Memory:

    1. Память как дифференцируемый граф: слоты (vectors) связаны матрицей смежности (adjacency matrix).

    2. Обновление связей по STDP: если слоты активируются последовательно, связь усиливается.

    3. Spreading activation: активация "распространяется" по графу для ассоциативного recall (как в мозге).

  2. Neural Memory Synthesis ("Dreaming"):

    1. Периодические фазы "сновидений": self-attention над слотами памяти без внешнего ввода.

    2. Это консолидирует знания, обнаруживает скрытые связи и абстрагирует представления.

    3. Реализовано как маленький трансформер (MemorySynthesizer).

  3. Meta-Cognitive Addressing:

    1. Динамическая политика чтения: смешивает top-K (точность), uniform (контекст) и random (эксплорация).

    2. Meta-gate (MLP) решает, какую стратегию использовать на основе запроса.

  4. Hallucination-based Learning:

    1. Модель "галлюцинирует" реконструкцию входа из памяти для верификации.

    2. Композитная loss функция: task_loss + hallucination_MSE + sparsity_entropy + utilization_entropy.

  5. Цикл работы:

    1. Perception: Энкодер обрабатывает вход.

    2. Associative Recall: Чтение с spreading activation.

    3. Consolidation: Запись + обновление графа + decay.

    4. Dreaming: Периодический синтез.

Это позволяет модели "выбирать, что не забыть" - фокус на релевантных воспоминаниях.

Реализация: Что внутри репозитория

Репозиторий - это Python-проект на PyTorch, с MIT-лицензией. Структура простая, но модульная для экспериментов.

  • config.py: Гиперпараметры (slots=128, heads=8, decay_rate=0.99 и т.д.).

  • model/:

    • memnet.py: Основной класс MemNet.

    • memory_bank.py: MultiHeadMemoryBank с read/write, synthesize, update_hebbian_graph.

    • controller.py: TransformerController для интеграции с памятью.

  • data/: Синтетические датасеты (CopyDataset, AssociativeRecall, Omniglot).

  • train.py: Обучение с композитной loss, mixed precision, визуализацией.

  • utils/visualize.py: Heatmaps внимания, кривые выживания слотов.

  • demo_comparison.ipynb: Интерактивный ноутбук для сравнения с baseline (см. ниже эксперименты).

Эксперименты: Доказательства в деле

Я протестировал на Copy Task: модель видит последовательность из 10 токенов, задержку в 100 токенов и должна скопировать исходную. Это классический тест на долгосрочные зависимости.

  • Baseline (стандартный трансформер): Достигает ~22% точности - плато с первых эпох. Контекст размывается.

  • MemNet: Достигает 100% точности после 17-20 эпох. Колебания - из-за aux losses и графа, но в итоге идеально.

Сравнение точности Baseline-трансформера и MemNet на Copy Task
Сравнение точности Baseline-трансформера и MemNet на Copy Task

Типа заключение

Этот проект - шаг к cognitive AI: от scaling'а к интеллектуальной памяти. Он экспериментальный, но модульный - легко расширять (добавьте задачи, улучшите граф).

Призыв к действию: Если вам интересно - поставьте ⭐ на GitHub, форкните, внесите вклад (тесты, датасеты, бенчмарки), запустите demo_comparison.ipynb в Colab для тестов.

Что думаете, Habr? Готовы к новой эре памяти в AI? Комментарии приветствуются! ?

Комментарии (7)


  1. NeriaLab
    09.01.2026 15:36

    Автор, а Вы прорабатывали вопрос функционального разделения памяти? В системной архитектуре STM (краткосрочная) и LTM (долгосрочная) память - это не просто разные "хранилища", это разные механизмы управления вниманием и жизненным циклом данных.

    Использование графа само по себе не делает систему "памятью". Граф - это структура данных (БЗ), а память - это процесс (забывание, приоритизация, вытеснение). Без этого разделения Ваша "активная память" неизбежно столкнется с двумя проблемами:

    1. Информационный взрыв: как Вы планируете фильтровать шум, чтобы граф не раздул RAM до нерентабельных значений?

    2. Деградация вывода: как Вы собираетесь отделять оперативные факты от устаревших связей без механизмов вытеснения, характерных для нормальной LTM?

    Не кажется ли Вам, что попытка запихнуть эти функции внутрь трансформера - это просто создание очередного "черного ящика", который сразу сломается, как только контекст выйдет за рамки тепличного примера?


    1. Antipozitive Автор
      09.01.2026 15:36

      Спасибо за отличный вопрос! Кратко:
      Да, вы абсолютно правы - текущая версия ближе к proof-of-concept, и явного разделения STM/LTM пока нет. Это слабое место.
      Планы на ближайшее время:

      • Явное разделение STM (маленький быстрый буфер 32-64 слота) ↔ LTM (большой медленный граф 1024+ слотов)

      • Консолидация: лучшие слоты из STM переносятся в LTM через сон

      • Explicit forgetting: threshold pruning + active forgetting

      • Иерархическая компрессия + capacity-aware meta-policy

      Информационный взрыв - решаю через чистку слабых связей, recency bias и external tier (FAISS) в перспективе.
      Деградация от устаревших связей - temporal tagging, context-sensitive decay, interference modeling.
      Чёрный ящик - борюсь модульностью, логгированием состояний и абляциями.

      Всё это в активной работе - через 1–2 месяца выложу v0.2 с явным разделением и explicit forgetting.


      1. NeriaLab
        09.01.2026 15:36

        Когда у Вас станет не 1024, а 1 000 000 слотов, простой threshold pruning (удаление по порогу) начнет вырезать редкие, но критически важные ассоциации. В классических КСС это решается жесткой типизацией связей. Как Вы планируете отличать "редкое, но важное" от "редкого и бесполезного" без внешней системы правил (онтологии)? Одной статистикой recency bias (приоритет недавнего) тут не обойтись - Вы просто получите систему с прогрессирующей амнезией на "старые данные".


        1. Antipozitive Автор
          09.01.2026 15:36

          Планирую решать без внешней онтологии (чтобы система оставалась self-supervised):

          • Value-based prioritization: Каждая связь/слот получит "value score" - на основе вклада в task performance (например, через градиенты или награду в RL стиле). Редкие, но полезные связи усиливаются, если они снижают loss в критических сценариях.

          • Abstraction layers: Иерархия - редкие слоты автоматически группируются в higher-level abstractions (через клстеризацию или автоэнкодер). "Редкое, но важное" поднимется на верхний уровень, где decay слабее.

          • Contextual recency: Не просто global recency bias, а per-context: для каждой задачи/эпизода своя "recency map" (чтобы избежать амнезии на старые данные в новых контекстах).

          • Simulation-based evaluation: В "dreaming" фазе симулировать гипотетические сценарии - если слот полезен в них, его value растёт.


  1. Assimilator
    09.01.2026 15:36

    Автор, огромное вам спасибо! Проапгрейдил память своему монстру с вашей подсказки.


    1. Antipozitive Автор
      09.01.2026 15:36

      Очень рад, что кому-то пригодилось)
      А есть код? Интересно посмотреть реализацию


      1. Assimilator
        09.01.2026 15:36

        Код закрыт пока. Будет открыт по достижению 85% средней точности выхлопа. Сейчас ~80%, последние 5 поднимается очень медленно.