مهندس نرم افزار | متخصص علوم داده
هوش مصنوعی با فیدبکهای واقعی!
چند وقتی هست که مدلهای ChatGPT و GPT4 غوغایی به راه انداختند و همه از اونها صحبت میکنند. در واقع این دو مدل اولین جاهایی هستند که عموم جامعه با قدرت هوش مصنوعی روبه رو شدند. حالا به دور از این هیاهو قصد داریم در این نوشته به توضیح قلب تپنده ChatGPT بپردازیم یعنی روشی که با استفاده از اون این مدل، آموزش داده شده و کمی وارد جزییات فنی بشیم. این روش اسمش Reinforcement Learning from Human Feedback هست که در ادامه به توضیح مقالهای با نام Deep reinforcement Learning from Human Preferences که این روش رو ارایه کرده میپردازیم. در این روش در واقع سعی شده از بازخوردهای یک عامل انسانی در آموزش یک مدل استفاده بشه که از نظر تعامل انسان و مدل یک گام رو به جلو محسوب میشه.
چه نیازی به بازخورد عامل انسانی بود؟!
سوال خوبیه! همونطور که میدونید در پارادایم Reinforcement Learning (RL) چهار بخش اصلی وجود داره. اول state یا observation هست (که البته این دوتا یه فرق کوچولو داره که ما ازش صرف نظر میکنیم) که نشاندهنده وضعیتی هست که ایجنت هوشمند در اون قرار داره و میتونه با featureهای زیادی توصیف بشه. دوم، action هست که در واقع اون عملی هست که ایجنت قراره در اون state انجام بده. سوم، reward هست که در واقع مدل یا ایجنت به ازای انجام یک اکشن خاص در یک state خاص اون پاداش رو دریافت میکنه و چهارم environment هست که وقتی در یک state خاص یک اکشن انجام میشه state جدید رو معرفی میکنه و کمک میکنه که ایجنت وارد state جدید بشه.
برای اینکه بتونیم یه مساله رو در قالب RL دربیاریم نیاز هست که هر یک از چهار اجزای بالا رو بتونیم براش تعریف کنیم. مثلا برای چتبات میتونیم دیالوگی که چتبات دریافت میکنه رو به منزله state درنظر بگیریم و دیالوگی که چتبات تولید میکنه رو به عنوان اکشن درنظر بگیریم. اما همونطور که احتمالا تا الان بهش فکر کردید برای تعریف تابع پاداش (reward) احتمالا با چالش روبهرو میشیم. در واقع یه سری مسایل وجود دارند که نمیتونیم یه تابع quantitative براش تعیین کنیم اما جنس مساله طوری هست که عامل انسانی میتونه یه اکشن خوب رو از بد بازشناسی کنه. در واقع تابع پاداش از حالت کمی درمیاد و تبدیل به کیفی میشه. اینجاست که بازخورد عامل انسانی وارد قضیه میشه.
اما دو چالش اصلی بر سر راه وجود داره. اول اینکه وقتی قراره عامل انسانی بازخورد بده طبیعتا باید بتونیم با تعداد محدودی بازخورد کار رو دربیاریم و دوم اینکه تاجای ممکنه نیاز به domain expert رو باید کم کنیم. در واقع فیدبکها طوری باید طراحی بشند که کمترین میزان تخصص رو لازم داشته باشه تا آموزش مدل رو اقتصادی بکنه.
در این مقاله سعی شده برای سادهسازی بازخورد از روش مقایسهای استفاده بشه. در واقع در هر iteration یه زوج از عملکرد مدل به عامل انسانی نشون داده میشه و عامل انسانی صرفا باید بگه کدوم رو بیشتر میپسنده. کلا مقایسه برای انسانها خیلی راحتتر از توصیف شرایط مطلوبه (کلا ما آدما اهل قضاوت کردن هستیم!) جزییات این موضوع رو جلوتر بهش میپردازیم.
از طرفی سعی شده برای کاهش نیاز به بازخوردهای انسانی از یه reward model استفاده بشه که قراره از روی بازخوردهای عامل انسانی به صورت supervised ترین بشه. در واقع با این کار دیگه نیاز نداریم که به ازای زوج اکشن و state بازخورد عامل انسانی رو داشته باشیم بلکه یه مدل داریم که این کار رو برامون انجام میده. این موضوع رو هم جلوتر بهش میپردازیم. معماری کلی این داستان در تصویر زیر قابل مشاهده است.
در این مقاله اشاره شده که مدل reward و مدل RL به صورت async و آنلاین آموزش داده میشند به این معنا که حین اینکه RL داره ترین میشه reward model هم ترین میشه (که البته async بودن این داستان رو خودم هم برام عجیبه و شاید concurrent بودن کافی بود ولی اشاره شده که این موضوع به بهبود عملکرد مدل منتج میشه!). در مجموع هم با روشهایی که در بالا توضیح دادیم نشون دادند که با حدود ۱۵ دقیقه تا ۵ ساعت از زمان یک عامل انسانی میتونند تقریبا هر تسک و بازی که تا حالا باهاش RL ترین شده رو مدل آموزش بدند و به عملکرد عالی برسند.
آموزش مدل
آموزش مدل ۴ قسمت اصلی داره که در این بخش به توضیح هر کدوم میپردازیم
مدل RL
این بخش که مربوط به بخش RL Algorithm تصویر بالا است میتونه با استفاده از هر یک از روشهای traditional توی RL مانند Q-learning یا Policy Gradient میتونه حل بشه. در واقع با داشتن reward model میتونیم از همین روشها استفاده کنیم. در این مقاله با توجه به اینکه reward function ممکنه non-stationary باشه از روشهای policy gradient استفاده شده که به طور مستقیم policy رو مدل میکنه.
نحوه بازخورد
با توجه به اینکه این مقاله برای experiments از بازیهای معروف gym استفاده کرده به عنوان یه تسک پایه یادگیری پشتک زدن (تسک backflip در gym) رو انتخاب کرده. در نتیجه به عامل انسانی برای بازخورد، دوتا کلیپ کوتاه از دو رفتار مدل ارایه میشه که حداکثر ۲ ثانیه طول میکشه. عامل انسانی باید بگه کدوم رفتار رو ترجیح میده یا اینکه بگه هر دو خوب هستند یا بگه قابل مقایسه نیستند. نکته اینه که نتیجه بازخورد انسانی به صورت یه توزیع بر روی {1,2} ذخیره میشه به این صورت که اگه یکی از دو کلیپ رو ترجیح بده کل جرم توزیع بر روی کلیپ ترجیحدادهشده قرار میگیره و اگه هر دو خوب باشند یه توزیع uniform ذخیره میشه و اگه قابل مقایسه نباشند اصلا رکوردی ذخیره نمیشه.
آموزش مدل reward
ورودی مدل reward یه زوج از state و action هست. اما برای اینکه نتیجه مقایسه انسانی رو برای آموزش مدل reward استفاده کنند از یه trick استفاده کردند و loss مدل رو به صورت زیر تعریف کردند:
در واقع مدل reward یه preference predictor هست. مقدار []P، احتمال ترجیح یک رفتار مدل بر دیگری هست که به صورت exponential در معادله اول آورده شده و سپس loss مدل به صورت cross-entropy بر روی این احتمال preferenceها تعریف میشه. در این روش از ^r به عنوان یک متغیر پنهان برای پیشبینی فیدبک انسان استفاده شده و طبیعتا برای آپدیت پارامترهای مدل از loss براساس ^r گرادیان گرفته میشه و پارامترها آپدیت میشند. همچنین کل reward model به صورت ensemble هست (ینی به جای آموزش یک مدل، چندین مدل آموزش داده میشه و تجمیعی از خروجی اونها درنظر گرفته میشه) که نتیجه نهایی به صورت میانگین خروجی هر یک از predictorها حساب میشه.
انتخاب نمونههایی برای گرفتن بازخورد عامل انسانی
این قسمت هم یکی از زیباییهای این مقاله است که نیاز به بازخورد انسانی رو باز هم کاهش داده. انتخاب جفت نمونههایی که برای مقایسه به عامل انسانی داده میشه میتونه نقش حیاتی در کاهش نیاز به بازخوردهای انسانی ایفا کنه. در این بخش، از ایده active learning الهام گرفته شده. برای اینکه جفت نمونههایی رو برای گرفتن بازخورد عامل انسانی انتخاب کنند در هر مرحله تعداد زیادی از نمونهها رو سمپل میگیرند و بعد جفت نمونههایی انتخاب میشند که مدلهای حاضر در ensemble بیشترین واریانس رو در مورد اونها داشته باشند. با این روش بیشتر، جفت نمونههایی انتخاب میشند که reward model درباره اونها بیشترین عدم قطعیت رو داره و گرفتن بازخورد عامل انسانی میتونه اطلاعات مفیدی رو به reward model بده.
سخن آخر
در نوشته بالا قصد داشتیم ایده RLHF رو به صورت ساده و خلاصه مطرح کنیم. همونطور که دیدید به نظر خیلی ایدههای سادهای استفاده کردند ولی جزییات زیادی رعایت شده که برخیهاش باز هم در این نوشته نیومده و نشون میده هنوز مفاهیم پایهای و ایدههای اصلی در یادگیری ماشین (مثل active learning) چقدر میتونه در حل مسایل مفید باشه. امیدوارم از این مطلب لذذذت برده باشید.
لینک بلاگ توضیح مقاله:
https://openai.com/research/learning-from-human-preferences
لینک مقاله:
https://arxiv.org/abs/1706.03741#
خوشحال میشیم که به کانال nlp stuff سر بزنید و اگه مطلب و پستی داشتید یه ندا بدید که بذاریم تو کانال.
مطلبی دیگر از این انتشارات
متد gather در pytorch
مطلبی دیگر از این انتشارات
داستان ترنسفورمرها (۱): ناکارآمدی بازگشتیها
مطلبی دیگر از این انتشارات
آلفاگو، یادگیری ماشین برای چیرگی بر یک بازی کهن