<НА ГЛАВНУЮ

Создание агента с процедурной памятью: обучение и повторное использование

Исследуйте, как создать агента, который обучается, хранит и повторно использует навыки со временем.

Введение в агентов с процедурной памятью

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

Представление и хранение навыков

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

class Skill:
    def __init__(self, name, preconditions, action_sequence, embedding, success_count=0):
        self.name = name
        self.preconditions = preconditions
        self.action_sequence = action_sequence
        self.embedding = embedding
        self.success_count = success_count
        self.times_used = 0

Обучение в структурированном окружении

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

class GridWorld:
    def __init__(self, size=5):
        self.size = size
        self.reset()

Кодирование контекста с помощью встраиваний

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

class ProceduralMemoryAgent:
    def create_embedding(self, state, action_seq):
        state_vec = np.zeros(self.embedding_dim)

Выбор между навыками и разведкой

Мы определяем, как агент выбирает между использованием известных навыков и разведкой с примитивными действиями. Мы обучаем агента в нескольких эпизодах и записываем эволюцию изученных навыков, подсчеты использования и коэффициенты успеха. Исследуя эту часть, мы замечаем, что повторное использование навыков сокращает длину эпизодов и улучшает общую награду.

   def run_episode(self, use_skills=True):
       self.env.reset()

Визуализация развития навыков

Мы собираем все вместе, запуская обучение, печатая изученные навыки и строя статистику поведения. Мы визуализируем тенденцию в наградах и то, как библиотека навыков растет с течением времени. Запуская этот фрагмент кода, мы завершаем жизненный цикл формирования процедурной памяти и подтверждаем, что агент учится вести себя более интеллектуально с опытом.

Заключение

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

🇬🇧

Switch Language

Read this article in English

Switch to English