۴.۲.۲ گردآوری دادهٔ ریزتنظیم (Fine-tuning Data Acquisition)
۴.۲.۲.۱ دادههای تولیدشده بهصورت دستی
یکی از روشهای مستقیم، بهکارگیری ارزیابان و برچسبزنهای انسانی برای ساخت زوجهای ورودی–خروجی مربوط به وظایف مورد نظر است. برخلاف حاشیهنویسی داده در NLP سنتی ــ برای نمونه در طبقهبندی متن که ارزیاب صرفاً مطابق دستورالعمل به متنهای جمعآوریشده برچسب میدهد ــ ساخت دادهٔ ریزتنظیم برای مدلهای زبانی بزرگ به مراحل و تلاش بیشتری نیاز دارد و دشوارتر است.
فرض کنید میخواهیم برای ترجمهٔ ماشینی انگلیسی به چینی دادهٔ ریزتنظیم تهیه کنیم. نخست یک قالب پرامپت مینویسیم تا وظیفه و قالب مسئله را روشن بیان کند:
Instruction Translate the text from English to Chinese.
User Input {∗text∗}
Output {∗translation∗}
سپس زوجهای متن مبدأ و مقصد را گردآوری کرده و متغیرهای {∗text∗} و {∗translation∗} را جایگزین میکنیم. برای مثال:
How’s the weather today? → 今天天气怎么样?
نمونهٔ ریزتنظیم حاصل چنین است:
Instruction Translate the text from English to Chinese.
User Input How’s the weather today?
Output 今天天气怎么样?
x = Translate the text from English to Chinese.\n How’s the weather today?
y = 今天天气怎么样?
زوج (x,y) را میتوان همانگونه که در بخش قبل توضیح داده شد برای ریزتنظیم LLM به کار برد.
یکی از دشواریها آن است که برای یک وظیفه، راههای بسیار زیادی برای نوشتن قالب پرامپت وجود دارد و افراد مختلف ممکن است قالبهایی با کیفیت و پیچیدگی متفاوت بسازند. گاهی instruction بیش از حد پیچیده یا پرحرف میشود و گاهی حتی تعریف دقیق وظیفهٔ هدف و شیوهٔ توضیح آن روشن نیست. راهبرد رایج، ساخت قالبهای پرامپت برای وظایف و benchmarkهای تثبیتشدهٔ NLP است [Bach et al., 2022; Wang et al., 2022b; Mishra et al., 2022]. در این حالت، شرح اصلی وظیفه و نمونههای متعدد در اختیار برچسبزنها قرار میگیرد و آنان با بیان خود توضیح میدهند چگونه باید LLM را برای اجرای آن وظیفه prompt کرد.
این روش فرایند نوشتن prompt را آسانتر میکند، اما همچنان به چارچوب حاشیهنویسی، سامانهٔ crowdsourcing، دستورالعمل یکنواخت و کنترل کیفیت نیاز داریم؛ بهخصوص وقتی افراد زیادی روی یک task کار میکنند. مزیت مهم آن است که پس از ساخت قالب، میتوان نمونههای annotated وظیفهٔ اصلی را بهسادگی در slotهای قالب قرار داد و تعداد زیادی نمونهٔ ریزتنظیم تولید کرد.
روش دیگر استفادهٔ مستقیم از دادههایی است که بهطور طبیعی در اینترنت وجود دارند. نمونهٔ شناختهشده، جمعآوری زوجهای پرسش–پاسخ از سایتهای QA برای ریزتنظیم LLM در پرسشپاسخ دامنهباز است [Joshi et al., 2017]. تنوع پرسشهای واقعی آنقدر زیاد است که گروه کوچکی از افراد نمیتواند همهٔ آنها را از پیش طراحی کند؛ دادهٔ طبیعی وب میتواند از نظر کمیت و کیفیت، پوشش قابلقبولی فراهم کند.
روش مستقیم دیگر crowdsourcing است: کاربران هر پرسشی را وارد میکنند و پاسخ یا دستی نوشته میشود، یا ابتدا LLM آن را تولید میکند و سپس انسان آن را بررسی و اصلاح میکند. به این ترتیب میتوان رفتار واقعی کاربران و ورودی–خروجیهای بسیاری از مسئلههای «جدید» را که taskهای سنتی NLP پوشش نمیدهند ثبت کرد.
در ساخت dataset ریزتنظیم معمولاً میخواهیم داده تا حد ممکن متنوع باشد. پژوهشهای زیادی نشان دادهاند که افزایش diversity میتواند robustness و توان generalization مدل را بهبود دهد؛ بنابراین واردکردن promptها و taskهای متنوعتر به datasetهای instruction fine-tuning اهمیت زیادی دارد. بحث تعمیم در بخش ۴.۲.۴ ادامه مییابد.
۴.۲.۲.۲ دادههای تولیدشده بهصورت خودکار
در تولید دستی، کیفیت و تنوع تا حد زیادی به تجربه و خلاقیت انسان وابسته است. اگر بخواهیم LLM دامنهٔ بسیار گستردهای از taskها را انجام دهد و تقریباً هر instruction را اجرا کند، اتکا به دادهٔ انسانی ناکارآمد، کمپوشش و حتی مستعد biasهای annotator است. جایگزین، تولید خودکار داده است. برای نمونه میتوان تعداد زیادی سؤال را با crowdsourcing جمع کرد، پاسخها را با یک LLM خوبتنظیمشده ساخت و سپس همین زوجهای سؤال–پاسخ را برای fine-tuning استفاده کرد. این راه ساده برای تولید دادهٔ مصنوعی در مقیاس بزرگ بسیار رایج شده است.
این فرایند به data augmentation شباهت دارد: هر LLM میتواند برای یک input خروجی تولید کند؛ با تکرار این کار روی inputهای مختلف، مجموعهٔ بزرگی از نمونهها ساخته میشود. این روش برای fine-tune کردن LLM جدید با کمک LLM تنظیمشدهٔ قبلی مفید است، اما همچنان به inputهایی تکیه دارد که انسان ساخته یا جمع کرده است و این inputها ممکن است برای generalization کافی نباشند. در کاربردهای واقعی، بسیاری از پرسشها و درخواستهای کاربران در datasetهای NLP موجود پوشش داده نشدهاند؛ پس لازم است علاوه بر prediction، خود input نیز تولید شود.
Self-Instruct
روش self-instruct نمونهای از تولید خودکار instruction و نمونهٔ ریزتنظیم است [Wang et al., 2023d; Honovich et al., 2023]. ایده این است که LLM با دیدن instructionهای دیگر، instruction جدید بسازد و سپس سایر fieldها مانند user input و output را نیز تکمیل کند.
شکل ۴.۴ — نمایی از self-instruct [Wang et al., 2023b]. یک مخزن از instructionها و نمونههای ورودی–خروجی نگهداری میشود. ابتدا چند task دستساز در مخزن است؛ چند instruction از مخزن نمونهگیری میشود، LLM بر پایهٔ آنها instruction و sample جدید میسازد، سپس نمونههای کمکیفیت فیلتر و نمونههای پذیرفتهشده دوباره به مخزن افزوده میشوند.
مراحل اصلی این الگوریتم چنیناند:
- یک task pool نگهداری میشود. در آغاز، تعدادی task بذری دستساز شامل instruction و نمونهٔ input-output در آن قرار دارد. در ادامه instructionها و sampleهای تولیدشده توسط LLM به آن افزوده میشوند.
- در هر iteration، تعداد کمی instruction از pool برداشته میشود؛ مثلاً ترکیبی از instructionهای نوشتهشده توسط انسان و instructionهای ساختهشده توسط مدل، تا diversity حفظ شود.
- instructionهای انتخابشده بهعنوان demonstration استفاده میشوند و LLM از طریق in-context learning instruction جدید میسازد. نمونهٔ قالب:
You are provided several different instructions for performing some tasks.
Please generate an instruction based on these.
Task 1: {instruction1}
Task 2: {instruction2}
Task 3: {instruction3}
Task 4: {instruction4}
New Task:
- با داشتن instruction تازه، از مدل خواسته میشود fieldهای باقیمانده را پر کند و output متناظر را بسازد:
You are provided with a set of input-output samples, each composed of
an instruction, a user input, and an output. Please generate a new sample
based on these.
Sample 1: {instruction1}
Input: {user-input1}
Output: {output1}
Sample 2: {instruction2}
Input: {user-input2}
Output: {output2}
New Sample: {new-instruction}
- نمونهٔ تازه با ruleهای heuristic بررسی میشود؛ برای مثال sample یا instruction خیلی شبیه موارد موجود حذف میشود. اگر sample از فیلتر عبور کند، همراه instruction به pool اضافه میشود.
این چرخه را میتوان بارها تکرار کرد تا تعداد کافی نمونهٔ fine-tuning فراهم شود. قالبهای بالا فقط نمونههای سادهاند و میتوان templateهای دقیقتر و متنوعتری طراحی کرد. در taskهایی مثل text classification، مدل ممکن است outputهای biased بسازد و بیشتر نمونهها به یک class تعلق گیرند. در این حالت میتوان ترتیب تولید fieldها را تغییر داد: ابتدا output یا class را با prior مشخص کنیم و سپس از LLM بخواهیم با داشتن instruction و output، user input را بسازد. این روش به input inversion شباهت دارد [Longpre et al., 2023].
استفاده از instruction و sample مصنوعی در توسعهٔ LLM رایج است، زیرا تولید دستی داده بسیار گران است. چند LLM تنظیمشدهٔ شناختهشده بخشی از dataset ریزتنظیم خود را از دادهٔ مصنوعی گرفتهاند [Ouyang et al., 2022; Taori et al., 2023; Chiang et al., 2023]. پژوهشهای بعدی برای افزایش diversity از الگوریتمهای evolutionary [Xu et al., 2024] و برای supervision پیشرفتهتر از دادهٔ مصنوعی [Chen et al., 2024b] استفاده کردهاند. اخیراً کاربرد synthetic data در مرحلهٔ pre-training نیز مورد توجه قرار گرفته است [Gunasekar et al., 2023; Allal et al., 2024].
در عمل، برای یک domain خاص ممکن است بتوان مقدار کمی دادهٔ high-quality با expert annotation ساخت، اما quantity و diversity آن کافی نباشد. Self-instruct میتواند از همین seed set شروع کند و زوجهای پرسش–پاسخ متنوعتری بسازد. این bootstrapping ایدهای قدیمی در NLP است و نمونههایی از آن در parsing و machine translation دیده میشود [Charniak, 1997; Sennrich et al., 2016].
۴.۲.۳ ریزتنظیم با دادهٔ کمتر
با گسترش instruction fine-tuning، نیاز به دادهٔ بزرگ و high-quality افزایش یافته است. برای نمونه dataset مربوط به FLAN از ۱٬۸۳۶ task گردآوری شده و ۱۵ میلیون sample دارد [Longpre et al., 2023]. ریزتنظیم LLM با چنین datasetی پرهزینه است، بهخصوص چون update تعداد بسیار زیادی parameter به منابع محاسباتی چشمگیری نیاز دارد. یک مسیر، parameter-efficient training است که فقط بخش کوچکی از parameterها را update میکند. با این حال datasetهای ریزتنظیم بزرگ اغلب مقدار زیادی synthetic data دارند و error و bias در آنها اجتنابناپذیر است.
مسیر دیگر، انتخاب فقط نمونههایی است که مرتبطتر و اثرگذارترند. در این صورت data کمتری پردازش میشود و کیفیت update مدل حفظ میگردد. Zhou et al. [2023a] datasetی فقط با ۱٬۰۰۰ نمونهٔ instruction-following ساختند و نشان دادند LLaMA 65B ریزتنظیمشده با آن میتواند با مدلهایی که fine-tuning بسیار بیشتری داشتهاند رقابت کند. Chen et al. [2024a] نیز با GPT-3.5 کیفیت هر sample را ارزیابی و نمونههای high-quality را انتخاب کردند. روشهای heuristic برای selection/filtering [Zhao et al., 2024; Ge et al., 2024] و روشهایی برای اولویتدادن به sampleهای اثرگذارتر بر فرایند fine-tuning [Xia et al., 2024] نیز توسعه یافتهاند. اینها را میتوان اعضای خانوادهٔ کلی data selection و filtering دانست؛ در بسیاری از موارد، دادهٔ کمتر اما با کیفیت بالاتر سودمندتر است.
یافتههای instruction fine-tuning تا حدی با دیدگاه سنتی NLP تفاوت دارند: توان حل مسئلهٔ پیچیده گاهی با مقدار کمی labeled data «فعال» میشود، نه با supervised training عظیم. توضیح محتمل آن است که mapping میان instruction و response در pre-training آموخته شده، اما در inference احتمال بالایی ندارد؛ fine-tuning فقط distribution مدل را کمی جابهجا میکند تا مدل instruction را دنبال کند. این دیدگاه با فرضیهٔ همترازی سطحی (superficial alignment hypothesis) مرتبط است: بخش اصلی learning در pre-training رخ میدهد و fine-tuning/alignment بعدی contribution زیادی به knowledge base بنیادی مدل نمیافزاید [Zhou et al., 2023a].
از این دید، fine-tuning مؤثر میتواند با training effort اندک و data کم انجام شود. حتی ممکن است الزام زوج instruction-response نیز ضروری نباشد؛ Hewitt et al. [2024] گزارش کردند instruction-following را میتوان بهطور ضمنی با fine-tuning فقط روی responseها و بدون instruction متناظر نیز به دست آورد.
مفهوم مرتبط، sample efficiency است: روشی sample-efficient است که از تعداد کمی training example بهطور مؤثر یاد بگیرد. instruction fine-tuning در مقایسه با pre-training sample-efficient است و از scarce data بهتر استفاده میکند. روشهای مبتنی بر sampling، از جمله بسیاری از الگوریتمهای reinforcement learning، میتوانند از این دیدگاه بهره ببرند؛ برای نمونه در human preference alignment میتوان preference data را با reward model کارآمدتر sample کرد [Liu et al., 2024b] یا sampling efficiency در policy learning را بهبود داد [Wang et al., 2024].
۴.۲.۴ تعمیم دستور (Instruction Generalization)
در machine learning و NLP، generalization هدفی بنیادی است. در instruction fine-tuning علاوه بر تعمیم روی inputهای جدیدِ یک task، انتظار داریم LLM taskهای جدیدی را نیز که با instructionهای متفاوت توصیف میشوند انجام دهد. مدلی را به صورت Pr(y|c,z) در نظر بگیرید که در آن c instruction، z user input و y output مدل است. اگر معیار performance را P(c,z,y) بنامیم، تعمیم درون یک task با instruction ثابت c* را میتوان چنین بیان کرد:
(1/|Z|) Σz′∈Z P(c*, z′, y′) > ε (4.8)
که Z مجموعهٔ inputهای جدید است. تعمیم میان taskها نیز چنین تعریف میشود:
(1/|D|) Σ(c′,z′)∈D P(c′, z′, y′) > ε (4.9)
در اینجا تغییرات هم در instruction و هم در user input رخ میدهد و مسئلهٔ generalization پیچیدهتر میشود. بهصورت شهودی، مدل باید از taskهای بسیار زیاد و زوجهای input-output متنوع یاد بگیرد. با این حال هزینهٔ رسیدن به این توان در fine-tuning معمولاً بسیار کمتر از pre-training است و حتی fine-tuning محدود با instruction-response data میتواند instruction following روی taskهای جدید ایجاد کند.
یک راه، افزایش diversity دادهٔ ریزتنظیم است. datasetهای اولیهٔ instruction fine-tuning طیف بزرگی از taskهای NLP و چند instruction برای هر task را پوشش میدادند [Wang et al., 2022b; Sanh et al., 2022; Longpre et al., 2023]. با قالب یکسان میتوان بیش از ۱۰۰ task و بیش از یک میلیون sample را در یک training set ترکیب کرد. با این حال datasetهای اولیه بیشتر روی مسئلههای آکادمیک متمرکز بودند؛ پژوهش جدیدتر به queryهای واقعی کاربر و demonstration/responseهای بزرگ از مدلهای SOTA توجه بیشتری کرده است [Wang et al., 2023c; Teknium, 2023].
از زاویهٔ scaling، افزایش اندازه و تنوع instruction fine-tuning منطقی به نظر میرسد، اما از دید alignment همیشه کارآمدترین مسیر نیست. supervised instruction-response mapping نمیتواند preferenceهای ظریف انسانی مانند tone، style یا subjective quality را بهخوبی encode کند و سقف generalization آن به diversity و quality dataset وابسته است. به همین دلیل preference modeling بهعنوان مرحلهای افزوده پس از instruction fine-tuning مطرح میشود تا مدل فراتر از mappingهای صریح تعمیم یابد؛ این موضوع در بخش ۴.۳ بررسی میشود.
دیدگاه دیگر آن است که بسیاری از mappingهای instruction-response احتمالاً در pre-training آموخته شدهاند. چون دقیقاً نمیدانیم چه dataای در pre-training وجود داشته، تشخیص اینکه کدام mapping باید دوباره در fine-tuning یاد گرفته شود دشوار است. پژوهشها نشان دادهاند pre-training بزرگ و متنوع میتواند out-of-distribution performance را افزایش دهد [Hendrycks et al., 2020; Radford et al., 2021; Gunasekar et al., 2023]. اگر LLM بهخوبی در مقیاس بزرگ pre-train شده باشد، fine-tuning برای OOD generalization شاید نقش محدودتری داشته باشد؛ بنابراین پژوهشگران هم به fine-tuning کمهزینه با زوجهای carefully selected [Zhou et al., 2023a] و هم روشهایی که صریحاً برای instruction-following طراحی نشدهاند [Kung and Peng, 2023] توجه کردهاند.
در عمل هر دو راهبرد ــ dataset بسیار متنوع و dataset کوچک اما ضروری ــ مفیدند. واردکردن instructionهای متنوع اغلب کمک میکند، زیرا مدل pre-trained ممکن است حتی پس از fine-tuning محدود همچنان مانند general-purpose instruction executor رفتار کند. نمونهٔ جالب آن است که fine-tune کردن روی دادهٔ ریاضی الزاماً مدل را فقط به output ریاضی محدود نمیکند و مدل همچنان میتواند مثلاً با instruction مناسب شعر تولید کند [Hewitt, 2024]. این پدیده نشان میدهد طبیعت عمومی instruction-following بهسادگی تغییر نمیکند؛ data متنوعتر میتواند شیوهٔ دنبالکردن instruction را برای task هدف تنظیم کند.
۴.۲.۵ استفاده از مدلهای ضعیف برای بهبود مدلهای قوی
روشهای instruction fine-tuning معمولاً به dataای نیاز دارند که انسان یا LLM قوی برچسب زده باشد. اما گاهی مدل در دسترس از قبل بسیار قوی است و پیدا کردن supervisor قویتر دشوار یا ناممکن میشود. حتی expert انسانی برای مسئلههای بسیار پیچیده ــ مثل بررسی inconsistency، bias ظریف یا نکتهٔ جاافتاده در یک سند بسیار بلند ــ به زمان زیادی نیاز دارد.
این پرسش مطرح میشود که آیا میتوان LLM ضعیف را برای supervision مدل قوی به کار برد. این مسئله که weak-to-strong generalization نامیده میشود، سناریویی را بازتاب میدهد که شاید در آینده برای نظارت بر AIهای هوشمندتر از انسان یا سامانههای دیگر لازم باشد [Burns et al., 2023b]. هنوز روش بالغ و قطعی وجود ندارد، اما استفاده از مدلهای کوچک برای کمک به مدلهای قوی در چند حوزه مفید بوده است.
سادهترین روش در instruction fine-tuning تولید synthetic data با مدل ضعیف است. اگر مجموعهٔ inputها X باشد، برای هر x∈X مدل ضعیف Prw(·) خروجی ŷ = arg maxy Prw(y|x) را میسازد و مدل قوی Prsθ(·) روی این predictionها آموزش میبیند:
θ̃ = arg maxθ Σx∈X log Prsθ(ŷ|x) (4.10)
این مسئله به knowledge distillation تبدیل میشود: knowledge از weak model به strong model منتقل میشود. نگرانی اصلی آن است که مدل قوی errorهای مدل ضعیف را imitate یا overfit کند و نتواند مسئلههایی را که مدل ضعیف حل نمیکند generalize کند. با این حال نتایج اولیه امیدوارکنندهاند. Burns et al. [2023a] نشان دادند fine-tune کردن GPT-4 پیشآموخته با supervision در سطح GPT-2 میتواند در چند task عمومی NLP generalization را افزایش دهد.
برای اندازهگیری میزان بازیابی gap عملکرد، سه کمیت تعریف میشود:
- Weak Performance (Pweak): عملکرد test-set مدل ضعیف و baseline.
- Weak-to-strong Performance (Pweak→strong): عملکرد مدل قوی پس از fine-tune شدن با supervision مدل ضعیف.
- Strong Ceiling Performance (Pceiling): عملکرد مدل قوی پس از fine-tune شدن با ground-truth data؛ مثلاً predictionهای human-annotated.
PGR = max{0, (Pweak→strong − Pweak) / (Pceiling − Pweak)} (4.11)
Performance Gap Recovered (PGR) نشان میدهد weak-to-strong چه سهمی از فاصلهٔ weak model تا ceiling را جبران میکند. مقدار ۱ یعنی gap کاملاً بسته شده و ۰ یعنی هیچ بهبودی رخ نداده است. در Burns et al. [2023a]، PGR برای ۲۲ task طبقهبندی NLP حدود ۰٫۸ گزارش شد. با وجود این، generalization قوی از weak supervision همچنان مسئلهای دشوار است [Aschenbrenner, 2024].
استفاده از weak supervision فقط به synthetic fine-tuning محدود نیست. شکل ۴.۵ چند مسیر دیگر را نشان میدهد.
شکل ۴.۵ — شیوههای استفاده از مدلهای کوچک برای بهبود مدلهای بزرگ: (الف) fine-tuning روی دادهٔ تولیدشده توسط مدل کوچک، (ب) fine-tuning با knowledge-distillation loss، (ج) data selection با مدل کوچک، (د) ensemble چند مدل کوچک و (هـ) cascading در inference.
بهجای تولید data، میتوان loss تقطیر دانش را نیز مستقیماً وارد training کرد:
Losskd = KL(Prw(·|x) || Prsθ(·|x)) (4.12)
و آن را با language-modeling objective ترکیب کرد:
θ̃ = arg maxθ Σ(x,y)∈D [log Prsθ(y|x) − λ·Losskd] (4.13)
در اینجا λ میزان اثر مدل کوچک را کنترل میکند و میتوان با قویترشدن مدل بزرگ، آن را تدریجاً کاهش داد تا training بیشتر بر loss اصلی language modeling تکیه کند.
مدل کوچک همچنین میتواند برای data selection/filtering استفاده شود. likelihood یا cross-entropy هر sequence با مدل کوچک محاسبه و بر اساس آن sampleها حذف یا اولویتبندی میشوند؛ مثلاً sequenceهای با likelihood پایین یا cross-entropy بالا کنار گذاشته و موارد همسوتر با distribution مدل کوچک برجسته میشوند.
Ensemble learning نیز راهی ساده برای ساخت مدل قوی از چند مدل ضعیف است. distributionهای چند small/specialized model را میتوان با majority voting، weighted averaging یا stacking ترکیب کرد و prediction نهایی را از aggregation به دست آورد.
در زمان inference نیز model cascading هزینه را کم میکند: مدل کوچک و سریع ابتدا input را پردازش میکند. اگر output معیارهای از پیش تعیینشده را برآورده کند همان نتیجه استفاده میشود؛ وگرنه input به مدل بزرگتر و دقیقتر فرستاده میشود. این کار latency و compute را کاهش میدهد، زیرا بسیاری از inputهای آسان بدون فراخوانی مدل بزرگ حل میشوند.