Reflexion: عاملهای زبانی که بدون بازآموزی از اشتباهات خود میآموزند
مدتی است به این فکر میکنم که برای ساخت یک عامل دفترکل Beancount که در طول زمان و بدون نیاز به بازآموزی پس از هر اشتباه، بهتر عمل کند، چه چیزی لازم است. مقاله "Reflexion: Language Agents with Verbal Reinforcement Learning" نوشته شین و همکاران (NeurIPS 2023) مستقیماً به این پرسش پاسخ میدهد و نتایج آن هم امیدوارکننده و هم محدودتر از آن چیزی است که اعداد و ارقام تیترها نشان میدهند.
مقاله
مقاله Reflexion پیشنهاد میکند که به جای تنظیم وزنهای مدل از طریق یادگیری تقویتی هزینهبر، میتوان عملکرد یک عامل را با واداشتن آن به نوشتن تحلیل شکست خود به زبان طبیعی بهبود بخشید. پس از هر تلاش، یک مدل «خود-بازتابی» (Self-Reflection) مسیر طی شده و سیگنال پاداش را میخواند، یک تحلیل کلامی پس از شکست تولید میکند و آن را به یک بافر حافظه اپیزودیک اضافه میکند. در تلاش بعدی، «بازیگر» (Actor) پیش از اقدام، بازتابهای انباشته شده را میخواند. هیچ گرادیانی محاسبه نمیشود. هیچ مدلی تنظیم دقیق (fine-tune) نمیشود. «یادگیری» کاملاً در پنجره متن (context window) اتفاق میافتد.
معماری سه جزئی شامل Actor، Evaluator و Self-Reflection به اندازهای ماژولار است که بتواند انواع مختلف وظایف را پشتیبانی کند. Evaluator (ارزیاب) میتواند نتیجه یک تست واحد (unit-test) با خروجی صفر و یک، یک قاضی LLM یا یک مدل ابتکاری مخصوص وظیفه باشد. همین انعطافپذیری است که این مقاله را فراتر از بنچمارکهای کدنویسی جذاب میکند.
ایدههای کلیدی
- در شاخص pass@1 پایتون در HumanEval، ترکیب Reflexion و GPT-4 به دقت ۹۱٪ میرسد که نسبت به پایه ۸۰ درصدی GPT-4، شکافی واقعی و بزرگ است. در Leetcode Hard این جهش از ۷.۵٪ به ۱۵٪ است که اگرچه پیشرفت محسوب میشود، اما یادآور دشواری این مسائل است.
- در AlfWorld (برنامهریزی خانگی مبتنی بر متن)، Reflexion پس از ۱۲ بار تلاش، ۱۳۰ مورد از ۱۳۴ وظیفه را حل میکند، در حالی که در روش ReAct این رقم ۱۰۸ از ۱۳۴ است؛ این قانعکنندهترین نتیجه تصمیمگیری در مقاله است.
- در HotpotQA (پرسش و پاسخ چندگامی)، ترکیب CoT و Reflexion در ۱۰۰ سوال نمونه، از ۶۱٪ به ۷۵٪ تطابق دقیق میرسد.
- در MBPP (بنچمارک دوم پایتون)، Reflexion در واقع کمی به عملکرد آسیب میزند: ۸۰.۱٪ به ۷۷.۱٪ کاهش مییابد. مقاله این موضوع را کمرنگ جلوه داده است.
- در WebShop، روش Reflexion کمکی نمیکند. نویسندگان دلیل این امر را نیاز این وظیفه به «تنوع و اکتشاف قابل توجه» میدانند؛ عامل بازتابهایی غیرمفید مینویسد که در جستجوهای مختلف محصول، قابلیت تعمیم ندارند.
- حافظه به ۱ تا ۳ تجربه ذخیره شده محدود شده است. این یک رویکرد عملگرایانه با توجه به طول پنجره متن است، اما به این معنی است که عامل نمیتواند یادگیری را در طول دورههای استقرار طولانی انباشته کند.
چه چیزی درست از آب درمیآید — و چه چیزی نه
ادعای اصلی درست است: بازتاب کلامی عملکرد را در وظایفی که دارای بازخورد شفاف و قابل تایید هستند، بهبود میبخشد. اگر بدانید که آیا کد از تستهای واحد عبور کرده است یا خیر، ماژول بازتاب چیزی ملموس برای استدلال در اختیار دارد. نتایج AlfWorld و HumanEval واقعی و معنادار هستند.
اما شکست در WebShop آموزنده است و مقاله تا حدی آن را نادیده میگیرد. بازتاب زمانی کار میکند که ارزیاب بتواند سیگنالی شفاف و قابل اجرا تولید کند. وقتی حالت شکست به این صورت باشد که «عامل بخش اشتباهی از یک فضای جستجوی بزرگ را کاوش کرده است»، گفتن اینکه «دفعه بعد از عبارات جستجوی متفاوتی استفاده کن» به نتیجه نمیرسد. این یک محدودیت ساختاری است: تقویت کلامی جایگزینی برای استراتژیهای اکتشاف نیست.
تجربیات کدنویسی نیز دارای نوعی دور باطل هستند که نویسندگان در پست وبلاگی خود به آن اذعان کردهاند: عامل تستهای واحد خود را برای ارزیابی کد خود تولید میکند. یک مجموعه تست ناقص منجر به نتایج مثبت کاذب میشود. عدد ۹۱٪ در HumanEval به این دلیل پابرجا میماند که HumanEval تستهای مرجع (ground-truth) را ارائه میدهد، اما حلق ه خود-ارزیابی عامل در مسائل جدید که هیچ مرجع خارجی وجود ندارد، کمتر قابل اعتماد است.
قابلیت بازتولید یک نگرانی واقعی است. تمام نتایج اصلی از GPT-4 استفاده میکنند و آزمایشهای starchat-beta هیچ بهبودی نسبت به خط پایه نشان نمیدهند، به این معنی که این تکنیک وابسته به توانمندی مدل است. تیمهایی که از مدلهای کوچکتر یا وزنباز (open-weight) استفاده میکنند، نباید انتظار همان میزان از بهبود را داشته باشند.
چرا این موضوع برای هوش مصنوعی در امور مالی اهمیت دارد
مورد استفاده Beancount دقیقاً همان ویژگی را دارد که باعث میشود Reflexion به خوبی کار کند: یک ارزیاب شفاف. اگر عاملی تراکنشی را به اشتباه دستهبندی کند، بررسی موجودی دفترکل یا یک مرحله تطبیق حساب میتواند سیگنالی باینری تولید کند؛ یا دفاتر تراز هستند یا نیستند. این سطح بازخورد بسیار بهتر از پاداش مبهم جستجوی محصول در WebShop است.
به طور ملموس، م یتوانم یک عامل ثبتکننده Beancount را تصور کنم که پس از یک تلاش ناموفق برای ثبت (حساب نامعتبر، ارز اشتباه، شکست در عبارت شرطی)، یک بازتاب کلامی تولید میکند: «من از Expenses:Meals استفاده کردم اما این حساب به یک زیردسته نیاز دارد. دفعه بعد قبل از ثبت، سلسله مراتب حسابها را چک خواهم کرد.» این بازتاب ذخیره شده و در تراکنش مشابه بعدی بازیابی میشود. عامل به طور موثری یک خطمشی (policy) مخصوص به همان جلسه را از خطاهای خود انباشته میکند.
محدودیت حافظه چالش اصلی معماری است. بافر ۱ تا ۳ تجربهای برای یک جلسه (session) واحد مناسب است، اما یک عامل حسابداری مستقر شده باید در طول هزاران تراکنش و هفتهها عملیات یاد بگیرد. گسترش Reflexion به حافظه بلندمدت — شاید از طریق خلاصهسازی یا ایندکسگذاری بازتابها — یک مسئله حلنشده است که این مقاله پاسخی برای آن ندارد.
مطالب پیشنهادی برای مطالعه بیشتر
- Language Agent Tree Search (LATS) (Zhou et al., arXiv:2310.04406; ICML 2024) — با قرار دادن جستجوی درختی مونتکارلو در ا طراف حلقه بازتاب-تلاش مجدد، Reflexion را گسترش میدهد و به عاملها اجازه میدهد به جای پایبندی به یک مسیر، چندین شاخه استدلالی را کاوش کنند. با GPT-4 به دقت ۹۲.۷٪ در HumanEval دست مییابد.
- Retroformer (Yao et al., arXiv:2308.02151; ICLR 2024) — به جای تکیه بر همان LLM برای خود-بازتابی، Retroformer یک مدل بازنگری سبکوزن جداگانه را از طریق گرادیان خطمشی آموزش میدهد و فرآیند بازتاب را در طول وظایف مختلف یادگیرنده میکند. روشی اصولیتر است اما نیاز به تنظیم دقیق دارد.
- Self-Reflection in LLM Agents: Effects on Problem-Solving Performance (arXiv:2405.06682, 2024) — یک مطالعه تجربی که به طور خاص بررسی میکند چه زمانی و چرا بازتاب کمک میکند و آن را در انواع وظایف مورد سنجش قرار میدهد. برای کالیبره کردن زمان استفاده از Reflexion در مقابل سایر استراتژیهای اصلاحی مفید است.
