Непараметрическое обучение
Непараметрическое обучение относится к техникам изменения и улучшения производительности автоматически без изменения параметров задействованных моделей. Существует множество техник для этого, и мы исследуем несколько наиболее распространенных и полезных подходов.
Непараметрическое обучение на примерах (Nonparametric Exemplar Learning)
Простейшая из этих техник — это обучение на примерах. В этом подходе, когда агент выполняет свою задачу, ему предоставляется мера качества, и эти примеры используются для улучшения будущей производительности. Эти примеры используются как few-shot примеры для обучения в контексте.
Фиксированные few-shot примеры: В простейшей версии они жестко закодированы в промпт и не изменяются. Это статический набор примеров, встроенных в системный промпт.
Динамический выбор few-shot примеров: Если у нас больше примеров, мы можем продолжать добавлять их в промпт, но это в конечном итоге приводит к увеличению стоимости и задержки. Кроме того, не все примеры могут быть полезны для всех входов. Общий способ решить это — динамически выбирать наиболее релевантные примеры для включения в промпт.
Эти опыты, как примеры, затем сохраняются таким образом, чтобы они были доступны для будущей ссылки. Это обычно включает построение банка памяти, где детали каждого взаимодействия — такие как контекст, предпринятые действия, результаты и любая полученная обратная связь — сохраняются. Эта база данных действует очень похоже на человеческую память, где прошлый опыт формирует понимание и направляет будущие действия.
Каждый опыт предоставляет точку данных, на которую агент может ссылаться, чтобы принимать лучшие решения при столкновении с похожими ситуациями. Этот метод позволяет агентам строить репозиторий знаний, на который можно опираться для улучшения производительности.
Агент извлекает информацию из своей базы данных прошлых случаев для решения новых проблем. Каждый сохраненный случай состоит из описания проблемы, решения, которое было применено, и результата этого решения. Столкнувшись с новой ситуацией, агент ищет в своей памяти, чтобы найти похожие прошлые случаи, анализирует решения, которые были применены, и адаптирует их при необходимости, чтобы соответствовать новым обстоятельствам.
Когда успешные примеры сохраняются в постоянном хранилище, затем извлекаются и предоставляются как примеры в промпте, производительность значительно увеличивается на диапазоне задач. Это хорошо установленное открытие и было подтверждено в различных доменах. На практике это предоставляет нам простой, прозрачный и легковесный способ быстро улучшить производительность агента на данных задачах.
По мере увеличения числа успешных примеров становится мудрым извлекать наиболее релевантные успешные примеры по типу, текстовому извлечению или семантическому извлечению. Отметим, что эта техника может быть применена к агентному выполнению задачи в целом, или она может выполняться независимо на подмножествах задачи.
Рефлексия (Reflexion)
Рефлексия снабжает агента простой, основанной на языке привычкой само-критики: после каждой неудачной попытки агент пишет краткое размышление о том, что пошло не так и как улучшить свою следующую попытку. Со временем эти размышления живут в "буфере памяти" вместе с прошлыми действиями и наблюдениями агента. Перед каждой новой попыткой агент перечитывает свои самые последние размышления, позволяя ему корректировать свою стратегию без когда-либо переобучения модели.
Цикл Reflexion работает следующим образом:
-
Выполнение последовательности действий: Агент взаимодействует с окружающей средой, используя свое обычное планирование, управляемое промптом.
-
Логирование попытки: Каждый шаг — предпринятые действия, полученные наблюдения, успех или неудача — добавляется в лог в постоянном хранилище (например, JSON-файл или таблица базы данных).
-
Генерация размышления: Если попытка не удалась, агент конструирует короткий "промпт размышления", который включает недавнюю историю взаимодействий плюс шаблон, спрашивающий: "Какую стратегию я упустил? Что я должен делать по-другому в следующий раз?" LLM производит краткий план.
-
Обновление памяти: Вспомогательная функция (update_memory) читает логи попыток, вызывает LLM на промпт размышления, а затем сохраняет новое размышление обратно в структуру памяти агента.
-
Внедрение размышлений в следующий запуск: Когда агент пытается выполнить ту же (или похожую) задачу снова, он добавляет свои самые последние размышления в промпт, направляя модель к улучшенной стратегии.
Рефлексия очень легковесна. Вы не трогаете веса модели; вы просто используете базовую модель как своего собственного тренера. Рефлексия приспосабливается как к числовой обратной связи (например, флаг успеха), так и к свободным комментариям, и было показано, что она повышает производительность на задачах, начиная от отладки кода до многошагового рассуждения.
Структура промпта размышления:
Промпт строится в трех секциях, чтобы превратить модель в своего собственного тренера:
- Краткая инструкция обрамления говорит модели "вы не выполнили задачу — сосредоточьтесь на стратегических ошибках, а не на суммировании окружения, и выведите ваш корректирующий план после слова 'Plan'"
- Под "Instruction:" мы повторяем оригинальную цель, закрепляя размышление в истинной цели
- Мы включаем полную транскрипцию Action/Observation неудачного запуска — каждый поиск, клик и внутренняя мысль, заканчивающаяся STATUS: FAIL — так что модель имеет конкретные доказательства того, что пошло не так
Заканчивая сигналом "Plan:", мы сигнализируем модели перейти от диагностики к предписанию, давая сфокусированный набор рекомендаций следующих шагов.
Опытное обучение (Experiential Learning)
Опытное обучение делает непараметрическое обучение на шаг дальше. В этом подходе агент все еще собирает свои опыты в базу данных, но теперь применяет новый шаг агрегации инсайтов по этим опытам для улучшения своей будущей политики. Это особенно ценно для размышления о прошлых неудачах и попыток разработать новые техники для улучшения производительности в похожих ситуациях в будущем.
По мере того, как агент извлекает инсайты из своего банка опыта, он поддерживает этот список инсайтов со временем и динамически модифицирует эти инсайты, продвигая наиболее ценные инсайты, понижая рейтинг наименее полезных и пересматривая инсайты на основе новых опытов.
Эта работа строится на Reflexion, добавляя процесс для межзадачного обучения. Это позволяет агенту улучшить свою производительность, когда он переходит между различными задачами, и помогает идентифицировать хорошие практики, которые могут переноситься.
Процесс опытного обучения:
-
Извлечение инсайтов: Агент использует базовую модель для размышления о наблюдении, возвращенном из окружения, с целью идентификации инсайтов, которые могут привести к лучшей производительности на задаче в будущем.
-
Управление инсайтами: Агент поддерживает список инсайтов, извлеченных из прошлых опытов. Со временем новые инсайты могут быть добавлены, а существующие инсайты могут быть отредактированы, повышены в рейтинге, понижены в рейтинге или удалены.
-
Операции над инсайтами:
- AGREE: Если существующее правило сильно релевантно для задачи
- REMOVE: Если одно существующее правило противоречиво или похоже/дублировано с другими существующими правилами
- EDIT: Если любое существующее правило недостаточно общее или может быть улучшено
- ADD: Ввести новые правила, которые отличны от существующих правил и релевантны для других задач
-
Дистилляция: Инсайты регулярно переоцениваются и корректируются по важности относительно других правил, полученных из опыта. Это дистиллирует небольшой список инсайтов, которые используются для направления и улучшения производительности агента.
Преимущества:
- Эффективный способ учиться на взаимодействиях с окружением
- Улучшение производительности со временем
- Способность агента постепенно адаптироваться к нестационарным окружениям
- Межзадачное обучение и перенос практик