RLHF ליישור LLM: מ-SFT ל-PPO
כיוונתם LLM על הוראות — המודל ממלא תבניות בצורה נכונה אך מייצר תשובות מזיקות או חסרות תועלת בתרחישים מורכבים. רבים נתקלים במצב זה. SFT (כיוונון עדין מפוקח) אינו מלמד את המודל לתעדף בין איכות, בטיחות וסגנון. אנו מתמחים ב-RLHF — טכניקת כיוונון יישור שפותרת בעיה זו על ידי יישור המודל עם דרישות עסקיות באמצעות משוב אנושי. הניסיון שלנו כולל פרויקטים למגזר הפיננסי, אבחון רפואי ועוזרים משפטיים, שבהם דיוק ובטיחות הם קריטיים. עבור לקוח FinTech, צינור ה-RLHF שלנו הפחית תפוקות לא בטוחות ב-35% ושיפר את ציוני שביעות הרצון של המשתמשים מ-3.2 ל-4.6 בסולם של 5 נקודות. אנו מבטיחים שהמודל הסופי יהיה לא רק חכם אלא גם שימושי, בלתי מזיק וישר. החברה שלנו נמצאת בשוק למעלה מ-5 שנים ויש לה יותר מ-50 פרויקטי RLHF מוצלחים.
מדוע RLHF עדיף על SFT?
SFT על הוראות מייצר מודל שיכול לעקוב אחר פורמטים אך אינו יכול לתעדף בין איכות התשובה. RLHF מוסיף אות העדפה: תשובה A טובה יותר מתשובה B מבחינת מועילות/בטיחות/סגנון. לא ניתן לבטא אות זה באמצעות פונקציית אובדן cross-entropy.
ללא RLHF: המודל ממקסם את הסבירות של הטוקן הבא. עם RLHF: הוא ממקסם תגמול מפרוקסי אנושי (מודל תגמול) תוך שמירה על סטיית KL מקו הבסיס של SFT.
כיצד פועל צינור ה-RLHF
SFT: כיוונון ראשוני
כיוונון עדין של ה-LLM הבסיסי על זוגות (הנחיה, תשובה_איכותית). מערך נתונים: 10K–100K דוגמאות של הדגמות באיכות גבוהה.
from trl import SFTTrainer
from transformers import AutoModelForCausalLM, TrainingArguments
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=2048,
args=TrainingArguments(
output_dir="./sft-output",
per_device_train_batch_size=4,
gradient_accumulation_steps=8,
learning_rate=2e-5,
num_train_epochs=3,
bf16=True
)
)
trainer.train()
LoRA עבור SFT: PEFT/LoRA מפחית את דרישות הזיכרון מ-~160 GB (כיוונון מלא של 70B) ל-~40 GB (QLoRA 4-bit). r=64, alpha=128, target_modules=["q_proj","v_proj","k_proj","o_proj","gate_proj","up_proj","down_proj"].
מודל תגמול: למידת העדפות
מודל התגמול (RM) מקבל (הנחיה, תשובה) → תגמול סקלרי. הוא מאומן על השוואות זוגיות.
מערך נתונים להשוואה: מעריכים מדרגים זוגות תשובות (y_w, y_l) — נבחר/נדחה. מקורות: Anthropic HH-RLHF, מערך ההשוואות של OpenAI, Alpaca Farm. למשימות ספציפיות לתחום, אנו משתמשים במעריכים פנימיים.
ארכיטקטורת RM: LLM עם ראש רגרסיה נוסף (שכבה לינארית על טוקן [EOS]):
from trl import RewardTrainer, RewardConfig
# базовая модель = SFT модель
reward_model = AutoModelForSequenceClassification.from_pretrained(
"sft-output",
num_labels=1 # скаляр reward
)
reward_trainer = RewardTrainer(
model=reward_model,
train_dataset=comparison_dataset, # chosen/rejected pairs
args=RewardConfig(
output_dir="./reward-model",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=1e-5,
max_length=512
)
)אובדן Bradley-Terry: from trl import SFTTrainer from transformers import AutoModelForCausalLM, TrainingArguments model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B") trainer = SFTTrainer( model=model, train_dataset=dataset, dataset_text_field="text", max_seq_length=2048, args=TrainingArguments( output_dir="./sft-output", per_device_train_batch_size=4, gradient_accumulation_steps=8, learning_rate=2e-5, num_train_epochs=3, bf16=True ) ) trainer.train() . ממקסם: תגמול התשובה הנבחרת > תגמול התשובה הנדחית.
מדדי איכות RM: דיוק על מערך השוואה מוחזק. יעדים: >70% (בסיסי), >75% (טוב), >80% (מצוין). מעל 85% קיים סיכון להתאמת יתר להטיית המעריך.
PPO: אופטימיזציית חיזוק
Proximal Policy Optimization ממקסם את ה-LLM (מדיניות) כדי למקסם תגמול תחת אילוץ KL:
Objective = E[r_θ(prompt, response)] - β * KL(π_θ || π_SFT) β הוא מקדם עונש ה-KL. β=0 מוביל ל-RL טהור — המודל עלול לקרוס לתוך פריצת תגמול. β גבוה מדי מונע סטייה מ-SFT.
from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead
ppo_config = PPOConfig(
model_name="sft-output",
learning_rate=1.41e-5,
batch_size=128,
mini_batch_size=16,
gradient_accumulation_steps=1,
ppo_epochs=4,
kl_penalty="kl",
init_kl_coef=0.2, # начальный β
target_kl=6.0, # адаптивная KL цель
adap_kl_ctrl=True # автоматическая коррекция β
)
ppo_trainer = PPOTrainer(
config=ppo_config,
model=AutoModelForCausalLMWithValueHead.from_pretrained("sft-output"),
ref_model=ref_model, # замороженный SFT reference
tokenizer=tokenizer,
reward_model=reward_model,
dataset=prompt_dataset
)
for batch in ppo_trainer.dataloader:
queries, responses = ppo_trainer.generate(batch['input_ids'], ...)
rewards = reward_model(queries, responses)
stats = ppo_trainer.step(queries, responses, rewards)ראש ערך: PPO דורש הערכת ערך מצב V(s). שכבה לינארית מתווספת על גבי ה-LLM — מאומנת במקביל למדיניות.
חלופות ל-PPO: DPO, ORPO, SimPO
DPO (אופטימיזציית העדפות ישירה) מסיר RM ו-PPO — ממקסם העדפות ישירות באמצעות פרמטריזציה מחדש. פשוט יותר, יציב יותר, אך פחות גמיש.
from trl import DPOTrainer, DPOConfig
dpo_trainer = DPOTrainer(
model=sft_model,
ref_model=ref_model,
beta=0.1, # temperature
train_dataset=comparison_dataset,
args=DPOConfig(output_dir="dpo-output", ...)
)ORPO (אופטימיזציית העדפות יחס סיכויים): משלב SFT ויישור העדפות במעבר אחד. אין צורך במודל ייחוס.
SimPO: העדפה ברמת רצף, ללא ייחוס.
AI חוקתי (CAI) — גרסת Anthropic: במקום מעריכים אנושיים עבור RM: ביקורת ותיקון שנוצרו על ידי LLM. סט עקרונות (חוקה) → המודל מעריך תשובות → מערך נתוני העדפות סינתטי → אימון RM. מפחית תלות בהערכה אנושית יקרה.
תשתית וניטור
דרישות GPU
| מודל | SFT (QLoRA) | SFT (מלא) | PPO |
|---|---|---|---|
| LLaMA-3 8B | 2× A100 80GB | 8× A100 80GB | 8× A100 80GB |
| LLaMA-3 70B | 8× A100 80GB | 32× A100 80GB | 32× A100 80GB |
DeepSpeed ZeRO-3: מחלק פרמטרים/גרדיאנטים/אופטימייזר בין GPUs. חובה עבור PPO על 70B+.
vLLM ליצירה ב-PPO: מאיץ דגימה (יצירת rollout) פי 10–20 לעומת HuggingFace generate. קריטי — היצירה מהווה 80% מזמן ה-PPO.
ניטור RLHF
W&B או MLflow למעקב:
- ppo/mean_scores — תגמול ממוצע לכל תקופה (אמור לעלות)
- ppo/kl_divergence — אמור להישאר בטווח [target_kl ± 30%]
- ppo/policy_loss — יציבות המדיניות
- איכותי: הערכה ידנית קבועה של דוגמאות
זיהוי פריצת תגמול: צור מחדש הנחיות מוחזקות כל N צעדים, בדוק ידנית הידרדרות (חזרתיות, חנופה, קשקוש).
השוואת שיטות יישור
| שיטה | נדרש RM? | מודל ייחוס? | מורכבות | יציבות | גמישות |
|---|---|---|---|---|---|
| PPO | כן | כן | גבוהה | בינונית | גבוהה |
| DPO | לא | כן | בינונית | גבוהה | בינונית |
| ORPO | לא | לא | נמוכה | גבוהה | נמוכה |
| SimPO | לא | לא | נמוכה | גבוהה | בינונית |
תהליך ואחריות
מחזור העבודה המלא כולל את השלבים הבאים:
- איסוף והערת מערך נתונים להשוואה (מעריכים פנימיים או חיצוניים) — 6–10 שבועות.
- צינור טכני SFT → מודל תגמול → PPO (או DPO/ORPO) — 4–6 שבועות.
- פרמטריזציה: כיוונון LoRA/QLoRA, beta, עונש KL, קצב למידה.
- אינטגרציה עם תשתית MLOps (W&B, MLflow).
- תיעוד מודל: כרטיס מודל, גבולות תחום ישימות, מדדים.
- הכשרת הצוות שלך לעבודה עם הצינור.
- תמיכה תפעולית: ניטור פריצת תגמול, אימון מחדש.
לצוות שלנו ניסיון של למעלה מחמש שנים ב-RLHF עבור LLMs תעשייתיים. יישמנו פרויקטים עבור לקוחות ב-FinTech, HealthTech ו-LegalTech, וכיווננו למעלה מ-50 מודלים בסך הכל. אנו מבטיחים שקיפות בכל שלב: אתם מקבלים ניסויים ניתנים לשחזור, כרטיס מודל ותוכנית איטרציות. צרו קשר להערכה חינמית של הפרויקט שלכם — נבחר את שיטת היישור האופטימלית לנתונים ולמשימות שלכם. קבעו ייעוץ עם המהנדס שלנו.
מה כלול
- הכנה והערה של מערך נתונים להשוואה
- SFT של המודל הבסיסי (עם LoRA או כיוונון מלא)
- אימון מודל תגמול עם מדדי איכות
- אופטימיזציה באמצעות PPO, DPO או שיטה חלופית
- אינטגרציה עם MLOps (W&B, MLflow, vLLM)
- תיעוד: כרטיס מודל, גבולות תחום ישימות, מדדים
- הכשרת הצוות שלך ותמיכה עד לפריסה
- ניטור לאחר פריסה ואימון מחדש
לוח זמנים ותמחור
המחזור המלא מאיסוף מערך ההשוואה ועד לפריסה אורך בדרך כלל 12–20 שבועות. החלק היקר ביותר הוא איסוף והערת העדפות אנושיות (6–10 שבועות). הצינור הטכני SFT+RM+PPO אורך 4–6 שבועות. שיפורים איטרטיביים עם Constitution + RM יכולים להימשך ללא הגבלת זמן.
התמחור לכיוונון עדין מחושב באופן פרטני. להערכה מדויקת של הפרויקט שלכם, צרו קשר — נספק תקציב מפורט ולוח זמנים. השקעות ב-RLHF משתלמות באמצעות שיפור איכות היצירה והפחתת סיכונים. קבלו ייעוץ מהמהנדס שלנו — נעריך את הפרויקט שלכם.
RLHF — טכניקת מפתח המתוארת בספרות המדעית.







