Model Editing یعنی اینکه بتونیم دانش یک LLM رو به صورت جراحی و مستقیم توی وزنهاش آپدیت کنیم، بدون اینکه نیاز به fine-tuning کامل داشته باشیم. کاربرد اصلیش وقتیه که مدل یه فکت رو اشتباه میگه (hallucination) یا اطلاعاتش قدیمی شده و میخوایم فقط همون یک تیکه دانش رو اصلاح کنیم. این کار خیلی بهینهتر از retraining هست که هم هزینهبره و هم ریسک catastrophic forgetting داره (یعنی مدل چیزای دیگهای که بلد بوده رو یادش بره).ایدهی اصلی اینه که به جای آپدیت همهی پارامترها، فقط اون بخش از شبکه که اطلاعات غلط رو ذخیره کرده پیدا و اصلاح بشه. دو تا از معروفترین الگوریتمها توی این حوزه
ROME و MEMIT هستن.متد
ROME برای ادیت کردن یک فکت تنها طراحی شده. فرضش اینه که دانش در لایههای MLP مدل Transformer ذخیره شده.روند کارش اینطوریه:
۱. پیدا کردن محل دانش: با تکنیکی به اسم
causal tracing میاد لایهای که بیشترین تاثیر رو روی تولید اون فکت خاص داره پیدا میکنه.۲. اصلاح دانش: بعد از پیدا کردن اون لایه، یک آپدیت ماتریسی از نوع
rank-one روی وزنهای MLP اون لایه اعمال میکنه تا فکت جدید جایگزین قبلی بشه. این آپدیت خیلی کوچیک و دقیقه.مشکل اصلی
ROME اینه که برای ادیتهای پشت سر هم ضعیفه. معمولاً بعد از ۱۰-۲۰ تا ادیت، مدل دچار model collapse میشه و کاراییش رو از دست میده، چون آپدیتها روی هم جمع میشن و ساختار وزنها رو خراب میکنن.متد
MEMIT در واقع نسخهی توسعهیافته ROME برای ادیت کردن دستهای و انبوه (mass editing) هست. یعنی میتونه هزاران فکت رو همزمان توی مدل آپدیت کنه.روند کارش به این شکله:
۱. آپدیت چندلایهای: به جای اینکه فقط یک لایه رو ادیت کنه، آپدیتها رو بین چندین لایه پخش میکنه تا فشار روی یک بخش از مدل نباشه.
۲. پردازش دستهای: برای یک بچ از ادیتها، یک معادله رو حل میکنه تا آپدیتهای بهینه برای وزنها پیدا بشه. اینطوری تداخل بین ادیتها کمتر میشه.
MEMIT مقیاسپذیری خیلی بهتری داره و میتونه دانش مدل رو به صورت پیوسته آپدیت کنه، ولی ممکنه با ادیتهای متناقض روی یک موضوع به مشکل بخوره.به طور خلاصه:
- از
ROME برای اصلاح یک فکت خاص و سریع استفاده میشه.- از
MEMIT برای آپدیتهای گسترده و دستهای دانش، مثل اضافه کردن اطلاعات جدید به مدل، استفاده میشه.به نظر من،
Model Editing هنوز جایگزین کاملی برای fine-tuning نیست، مخصوصاً برای تغییر رفتار مدل. این تکنیکها بیشتر برای اصلاح دانش (factual knowledge) کاربرد دارن تا منطق یا تواناییهای استدلالی. بزرگترین ریسکشون هم پتانسیل سوءاستفاده برای تزریق اطلاعات غلط به مدلهای موجوده، مثل پروژهی PoisonGPT که با همین روشها مدل رو مسموم میکرد. ابزار قدرتمندیه ولی باید با احتیاط استفاده بشه.برای پیادهسازی عملی، فریمورک
EasyEdit کار رو خیلی راحت کرده و هر دو الگوریتم رو پشتیبانی میکنه. برای اجرا حداقل به یک GPU با ۱۶ گیگ VRAM نیاز هست و بهتره با مدلهای سایز متوسط مثل 7B یا شروع کنید.📃 مقاله ROME: Locating and Editing Factual Associations in GPT
https://arxiv.org/abs/2202.05262
📃 مقاله MEMIT: Mass-Editing Memory in a Transformer
https://arxiv.org/abs/2210.07229
💻 فریمورک EasyEdit برای پیادهسازی
https://github.com/zjunlp/EasyEdit
🛠 Join @LLMEngineers Community