۳.۳.۱ بهینهسازی پرامپت
چون طراحی prompt دشوار و labor-intensive است، مطلوب است machine learning برای یافتن prompt بهینهٔ یک task به کار رود؛ رویکردی که automatic prompt design یا prompt optimization نامیده میشود. از نگاه گسترده، این موضوع نمونهای از AutoML است که هدفش کاهش طراحی دستی expert-driven در machine learning است. promptها ساختارهای discrete هستند و طراحی آنها شبیه طراحی architectureهای discrete است. حوزهٔ نزدیک، Neural Architecture Search (NAS) است که در آن با کاوش space شبکههای ممکن، architecture بهینه پیدا میشود [Zoph and Le, 2016; Elsken et al., 2019].
اگر prompt optimization را search process بدانیم، framework عمومی سه جزء دارد:
- Prompt Search Space: همهٔ promptهای قابل کاوش؛ مثلاً ویرایش seed prompt برای ساخت candidateهای متنوع.
- Performance Estimation: ارزیابی prompt انتخابشده؛ مثلاً دادن prompt به LLM و سنجش performance روی validation set.
- Search Strategy: کاوش مجموعهای از promptهای امیدوارکننده، ارزیابی آنها و ادامهٔ search تا stopping criterion؛ خروجی بهترین prompt دیدهشده تا زمان توقف است.
یک رویکرد پرکاربرد، استفاده از LLM برای ساخت اجزای این framework است. ابتدا چند prompt اولیه داریم؛ سپس چرخهٔ زیر تکرار میشود: ۱) evaluation روی validation set؛ ۲) نگهداری candidate pool با promptهای امیدوارکننده؛ ۳) generation promptهای جدید با LLM از candidate pool. مزیت آن است که میتوان از LLM آماده استفاده کرد و نیاز به توسعهٔ سامانهٔ پیچیده را کاهش داد.
روش Zhou et al. [2023c] نمونهای از LLM-based prompt optimization است:
Initialization
فرض کنید C pool candidate promptها باشد. ابتدا promptهای اولیه وارد C میشوند. میتوان آنها را دستی ساخت، اما اگر دانش انسانی دربارهٔ prompt مؤثر کم باشد، LLM میتواند prompt تولید کند:
یک task با LLM باید انجام شود. لطفاً promptی برای هدایت LLM بنویس.
{∗task-description∗}
این روش هنوز task description انسانی نیاز دارد. جایگزین، infer کردن instruction از نمونههای input-output است:
چند input-output pair از یک task در اختیار توست. instruction انجام این task را بنویس.
Input: {∗input1∗} Output: {∗output1∗}
Input: {∗input2∗} Output: {∗output2∗}
...
Evaluation
هر prompt در C به LLM داده میشود و output روی downstream task با metric ازپیشتعریفشده ارزیابی میگردد؛ یا log-likelihood output بهعنوان معیار کیفیت prompt استفاده میشود.
Pruning
اگر C بزرگ باشد promptهای کمامید حذف میشوند تا بار computational مراحل بعدی کاهش یابد. روش ساده نگهداشتن درصد مشخصی از promptها بر اساس evaluation score و حذف باقیمانده است.
Expansion
Expansion عملیات اصلی search برای حرکت به stateهای جدید است:
C′ = Expand(C,f) (3.10)
C′ مجموعهٔ promptهای جدید ساختهشده از C با مدل f است. اگر f یک LLM باشد:
در زیر یک prompt برای LLM آمده است. چند prompt جدید برای انجام همان task ارائه کن.
Input: {∗prompt∗}
سپس C با C′ جایگزین میشود و evaluation، pruning و expansion تکرار میشوند تا فضای بزرگتری از promptها بهتدریج کاوش شود.
Expansion تعیین میکند search space چگونه کاوش شود و هدف، یافتن نتیجهٔ بهینه با کمترین effort است. یک بهبود، صورتبندی prompt generation بهعنوان paraphrasing است؛ میتوان از paraphraser آماده، LLM یا مدل دیگر، برای تبدیل prompt به فرمهای semantic-equivalent استفاده کرد [Jiang et al., 2020]. یا edit operationهایی مانند insertion و modification برای هر token تعریف و prompt با این عملیات به candidateهای جدید تبدیل شود [Prasad et al., 2023]. سپس evaluation و pruning برای حذف promptهای کمکیفیت اعمال میشوند.
راه دیگر، بهبود prompt در expansion با feedback است [Pryzant et al., 2023]؛ مشابه self-refinement. LLM روی prompt ورودی feedback تولید میکند و prompt بر اساس آن revision میشود. این چرخه تا convergence یا رسیدن به outcome مطلوب تکرار میشود.
همچنین میتوان prompt optimization را با optimization کلاسیک حل کرد؛ مثلاً evolutionary computation که promptها candidateهایی هستند که نسلبهنسل evolve میشوند [Guo et al., 2024]. الگوریتمهای قدرتمند optimization حوزههای مرتبط نیز قابل استفادهاند.
استفادهٔ مستقیم از LLM API برای این مراحل شدیداً به inference و in-context learning مدل وابسته است. اگر LLM ضعیف باشد، search با خطاهایی مانند تولید prompt نادرست در expansion آلوده میشود. در این حالت بهتر است مدل مخصوص task آموزش داده شود. reinforcement learning یکی از جهتهای پژوهشی است. Deng et al. [2022] با افزودن adaptor مبتنی بر FFN به LLM، prompt generator ساختند. generator مانند policy network آموزش میبیند، اما فقط parameterهای adaptor update میشوند و باقی مدل ثابت است. reward با آزمون prompt تولیدی روی LLM دیگری به دست میآید؛ پس از training، generator prompt جدید تولید میکند.
در این بحث prompt را صرفاً token sequence دیدیم، اما در معنای دقیق، prompt ساختار پیچیدهای با fieldهایی مانند user input، instruction و demonstration دارد. بخش بزرگی از prompt optimization روی یادگیری instruction بهتر تمرکز کرده است. مفهوم را میتوان به اجزای دیگر نیز گسترش داد؛ مثلاً selection یا generation demonstration در CoT [Liu et al., 2022; Rubin et al., 2022; Zhang et al., 2023b]. تولید demonstration با LLM نسبتاً آسان است و مسئله بیشتر sampling مناسب از candidate pool است، در حالی که یادگیری instruction دشوارتر است، چون LLM پیشآموخته برای پیشبینی کیفیت instruction مناسب نیست و آزمایش instruction روی downstream task computationally expensive است.
۳.۳.۲ پرامپتهای نرم (Soft Prompts)
Natural-language prompt، چه دستی و چه خودکار، سرراست و پرکاربرد است اما مشکلاتی دارد. ممکن است طولانی و پیچیده باشد و هنگام پردازش با LLM computation زیادی مصرف کند؛ در taskهای تکراری، ارسال مکرر همان prompt بلند ناکارآمد است. همچنین hard prompt بهصورت token sequence گسسته وارد LLM میشود، ولی خود مدل آن را به بردارهای real-valued کمبعد کدگذاری میکند. این پرسش پیش میآید که آیا میتوان prompt را فشردهتر و کارآمدتر نمایش داد.
Soft prompt بازنمایی پنهان و توزیعشدهٔ prompt است. hard prompt متن صریح و ازپیشتعریفشدهای است که انسان مستقیماً وارد میکند؛ soft prompt الگویی implicit و adaptable در فضای بازنمایی مدل است و بیشتر برای model قابل فهم است تا انسان. مثال:
Translate the sentence into Chinese.
Consider it done!
instruction “Translate the sentence into Chinese” را hard prompt با tokenهای c₁...c₅ در نظر بگیرید. LLM آنها را به بردارهای h₁...h₅ تبدیل میکند. این hidden representationها را میتوان تقریباً soft prompt دانست.
شکل ۳.۳ — hard prompt و soft prompt. instruction متنی وارد Transformer میشود و بازنماییهای میانی متناظر با instruction را میتوان گونهای soft prompt در نظر گرفت.
soft prompt لزوماً correspondence مستقیم با متن meaningful ندارد؛ میتواند صرفاً hidden stateهای LLM باشد که مانند model parameter از طریق continuous optimization یاد گرفته میشود. این دید، prompting فراتر از متن را ممکن میکند. soft prompt همچنین dense، low-dimensional و learnable است و میتواند راهنمای generation را با هزینهٔ کمتر از پردازش hard prompt بلند کدگذاری کند؛ بهخصوص وقتی prompt یکسان بارها در inference استفاده میشود.
۳.۳.۲.۱ سازگارکردن LLM با پرامپت کمتر
راه آشکار adaptation یک LLM برای task خاص، fine-tuning با labeled data است. در alignmentهایی مانند supervised fine-tuning، parameterهای مدل با supervision signal طوری update میشوند که response به prompt صحیح باشد. LLM fine-tuned بخشی از اطلاعات task را در parameterهای خود embed میکند، بنابراین با promptهای مشابه میتواند درست پاسخ دهد.
اگر این ایده را ادامه دهیم، میخواهیم مدل در fine-tuning تا حد امکان دانش prompting task را جذب کند تا در inference با prompt کوتاهتر نیز task را انجام دهد. prompt ساده را شامل instruction c و user input z مینویسیم:
x = (c,z) (3.11)
برای dataset زوج prompt-response یعنی D={(x,y)}، fine-tuning با بیشینهسازی log-likelihood انجام میشود:
θ̂ = arg maxθ Σ(x,y)∈D log Prθ(y|x) = arg maxθ Σ log Prθ(y|c,z) (3.12)
در عمل θ با parameterهای pre-training مقداردهی اولیه و سپس بهاندازهای moderate تنظیم میشود تا output بعد از fine-tuning بیش از حد از مدل پیشآموخته منحرف نشود.
instruction هر نمونه معمولاً باید روشن و دقیق باشد، اما معادله شکل instruction را محدود نمیکند. برای task ترجمهٔ انگلیسی به چینی میتوان instruction را از «Translate the following sentence from English to Chinese.» به «Translate this into Chinese.» و حتی «Translate!» ساده کرد. با fine-tuning کافی، LLM میتواند هرکدام را دنبال کند. از دید efficient prompting، instruction کوتاه inference را ارزانتر میکند؛ اما simplification بیش از حد ممکن است information loss و overfitting به fine-tuning data ایجاد کند و generalization را کاهش دهد.
جایگزین، knowledge distillation است. در context distillation [Snell et al., 2022] هدف یادگیری student model است که instruction ساده را با کمک teacher model instruction-following خوب درک کند.
شکل ۳.۴ — Context distillation. teacher با full context و user input prediction تولید میکند؛ student با simplified context و همان user input prediction میدهد و با کمینهکردن loss میان outputهای دو مدل آموزش میبیند.
Teacher با fine-tuning معمول روی دادهٔ instruction، user input و response صحیح ساخته میشود. برای student، dataset جدید D′ شامل tuple x′=(c,c′,z) ساخته میشود که در آن c′ instruction سادهشده است. distillation:
θ̂ = arg minθ Σx′∈D′ Loss(Prt(·|·), Prsθ(·|·), x′) (3.13)
یکی از lossهای sequence-level:
Loss = Σy Prt(y|c,z) log Prsθ(y|c′,z) (3.14)
محاسبهٔ دقیق آن به دلیل تعداد نمایی outputها infeasible است. یک variant، تولید target با teacher است: ŷ=argmax_y log Pr_t(y|c,z) و سپس:
Loss = log Prsθ(ŷ|c′,z) (3.15)
یا فاصلهٔ distributionها با KL divergence کمینه میشود [Askell et al., 2021]:
Loss = KL(P_t || P_{sθ}) (3.16)
P_t=Pr_t(·|c,z) (3.17) P_{sθ}=Pr_{sθ}(·|c′,z) (3.18)
این روش به instruction محدود نیست. دانش prompting در output teacher میتواند به parameterهای student distill شود؛ از این رو distilled model را میتوان حامل نوعی soft prompt دانست. همین ایده در compress کردن long context و یادگیری soft prompt بهعنوان component مشخص LLM نیز کاربرد دارد.
۳.۳.۲.۲ یادگیری Soft Prompt برای Parameter-efficient Fine-tuning
بهروزرسانی همهٔ parameterها راه رایج adaptation است. هرچند fine-tuning ارزانتر از pre-training است، در عمل همچنان پرهزینه است؛ به همین دلیل parameter-efficient fine-tuning توسعه یافته تا تعداد parameterهای updateشونده کم شود.
در prefix fine-tuning [Li and Liang, 2021] مجموعهای از بردارهای trainable یا prefix به ابتدای input هر Transformer layer افزوده میشود. prefixها soft promptهایی هستند که context اضافی task را حمل میکنند و فقط همین prefixها در fine-tuning یاد گرفته میشوند.
اگر input لایهٔ عمق l را H^l=[h₀^l h₁^l ... h_m^l] بنامیم:
H^{l+1}=Layer(H^l) (3.19)
در prefix fine-tuning چند بردار p₀^l...p_n^l اضافه میشود:
H^l=[p₀^l p₁^l ... p_n^l h₀^l h₁^l ... h_m^l] (3.20)
output لایه فقط آخرین m+1 representation است:
H^{l+1}=Layer(H^l)[−m−1:] = [h₀^{l+1} h₁^{l+1} ... h_m^{l+1}] (3.21)
و input لایهٔ بعد دوباره با prefix همان لایه ساخته میشود:
H^{l+1}=[p₀^{l+1} p₁^{l+1} ... p_n^{l+1} h₀^{l+1} ... h_m^{l+1}] (3.22)
هر p_i∈R^d learnable parameter است؛ prefixها train میشوند و parameterهای Transformer اصلی ثابت میمانند.
شکل ۳.۵ — Prefix fine-tuning در task ترجمهٔ Look out! → 小心!. در ابتدای هر layer دو prefix اضافه میشود. فقط prefixها از error gradient خروجی update میشوند؛ در inference همان prefixهای optimizeشده task را بدون hard prompt صریح فعال میکنند. تعداد parameter اضافی L×n×d است که بسیار کمتر از کل parameterهای LLM است.
Prefix fine-tuning هنوز نیازمند modification در LLM است. اگر soft prompt از مدل جدا باشد architecture اصلی حفظ میشود و deployment چند task آسانتر است. روش prompt tuning [Lester et al., 2021] نیز بردارهای trainable دارد، اما فقط embedding layer را تغییر میدهد. هر token ورودی z_i با embedding e_i نمایش داده میشود و چند pseudo embedding p₀...p_n در ابتدای token embedding sequence قرار میگیرند:
p₀ p₁ ... p_n e₀ e₁ ... e_m
Pseudo embedding لازم نیست متناظر با token طبیعی باشد؛ soft prompt embedding است که LLM را condition میکند. با task-specific data، این embeddingها interaction مناسب با e₀...e_m را یاد میگیرند و رفتار LLM را هدایت میکنند، بدون تغییر parameterهای اصلی مدل.
شکل ۳.۶ — Prompt tuning در task ترجمهٔ Look out! → 小心!. soft promptهای learnable در ابتدای embedding sequence قرار میگیرند و فقط آنها fine-tune میشوند.
چون p₀...p_n خود یک sequence است، میتوان sequence model مانند Transformer را برای encode کردن آن به کار برد؛ یعنی مدل اضافی برای soft prompt encoding ساخت. همچنین soft و hard prompt را میتوان ترکیب کرد [Liu et al., 2023b] و در embedding sequence در patternهای مختلف کنار هم یا intersperse قرار داد.
جزئیات training soft prompt در اینجا تکرار نمیشود و standard supervised learning، یعنی بیشینهکردن likelihood output صحیح با توجه به input، فرض شده است. یادگیری soft prompt با مسائل مختلف fine-tuning مرتبط است. Mu et al. [2024] promptها را به چند pseudo token فشرده میکنند و embedding آنها را طوری optimize میکنند که prediction مدل standard-prompted تقلید شود؛ دانش prompting از teacher به pseudo tokenها distill میشود.
بهطور گستردهتر، بسیاری از parameter-efficient fine-tuning methodها را میتوان نوعی soft prompt learning دانست [Lialin et al., 2023]. Fine-tune کردن یک بخش از LLM یعنی تزریق prompting information و task-related information در همان بخش. افزودن adaptor layer میان layerهای موجود نیز نمونهٔ رایج است: فقط adaptor fine-tune میشود و میتوان آن را soft prompt component دانست که با LLM اصلی interaction میکند.
شکل ۳.۷ — چهار شیوهٔ استفاده از soft prompt در LLM: (a) prefixهای افزودهشده به هر layer؛ (b) soft prompt بهعنوان input embedding؛ (c) fine-tuning بخشی از خود model؛ (d) fine-tuning adaptor. بخشهای قابل تنظیم در شکل اصلی آبی و parameterهای ثابت خاکستریاند.
۳.۳.۲.۳ یادگیری Soft Prompt با فشردهسازی
رویکرد دیگر، نگاه از perspective compression است. فرض کنید user input برابر z و context طولانی آن، شامل instruction و demonstration، برابر c باشد. میخواهیم بازنمایی فشردهٔ context یعنی σ را طوری بسازیم که prediction با z,σ تا حد ممکن نزدیک prediction با z,c باشد [Wingate et al., 2022]:
σ̂ = arg minσ s(ŷ, ŷ_σ) (3.23)
که ŷ=argmax_y Pr(y|c,z) و ŷ_σ=argmax_{y_σ}Pr(y|σ,z) هستند. s(·,·) loss یا similarity measure برای کاهش اختلاف predictionهای full و compressed context است.
knowledge distillation framework عمومی این کار است؛ full-context model teacher و compressed-context model student. objective ساده:
σ̂ = arg maxσ log Pr(ŷ|σ,z) (3.24)
یا کمینهکردن KL:
σ̂ = arg minσ KL(Pr(·|c,z) || Pr(·|σ,z)) (3.25)
تفاوت اصلی با context distillation قبلی این است که compressed context اینجا real-valued vector یا prompt embedding است نه normal token. Teacher و student حتی لازم نیست architecture یا setting یکسان داشته باشند؛ معمولاً teacher قویتر و student کوچکتر و efficientتر انتخاب میشود.
فشردهکردن full context در continuous representation سرراست است، اما teacher باید long input را پردازش کند و برای context بسیار بلند ممکن است پرهزینه یا ناممکن باشد. این مسئله با efficient long-context modeling مرتبط است؛ مانند fixed-size KV cache و معماریهای efficient Transformer که در فصل ۲ بررسی شدند.
روشهایی نیز مخصوص compression context بلند به soft prompt وجود دارند. نمونهٔ Chevalier et al. [2023] soft prompt را بهتدریج با انباشتن representation ثابتاندازهٔ context یاد میگیرد. context بلند به segmentهای z₁,...,z_K تقسیم میشود. segmentها sequential پردازش میشوند و در هر گام representation زمینهٔ پردازششده تا آن نقطه، σ^{<i+1}، تولید میشود. چند summary token ⟨g₁⟩,...,⟨g_κ⟩ معرفی میگردند. در step i، segment z_i=[z₁^i...z_{m_i}^i] همراه با memory قبلی σ^{<i} و summary tokenها وارد LLM میشود و hidden representation آخرین Transformer layer متناظر با summary tokenها به memory جدید تبدیل میشود.
شکل ۳.۸ — فشردهکردن یک context segment به soft prompt با κ=2 و m_i=4. input شامل soft promptهای گام قبل، tokenهای segment و summary tokenهاست؛ outputهای آخرین layer متناظر با summary tokenها، soft prompt انباشتهشده تا این segment هستند.
σ^{<i} عملاً memory است و model مانند RNN عمل میکند: هر segment را میگیرد و memory را با encode کردن state قبلی و segment update میکند. memory حاصل از آخرین segment representation کل context است. Transformer میتواند LLM استاندارد باشد، اما برای task context representation باید fine-tune شود.
در این بحث prompt و context تا حدی مشابه در نظر گرفته شدهاند، هرچند دقیقاً یکسان نیستند. اگر prompt را نوعی context بدانیم، روشهای یادشده به text compression عمومی نیز قابل تعمیماند.