التجريب مع مختلف طرق ضبط دقيق لموديلات الذكاء الاصطناعي
ضبط دقيق لموديلات الذكاء الاصطناعي هو عملية رئيسية تتيح تكيف الموديلات المدربة بشكل عام مع مهام محددة. في هذا المقال، سنناقش مختلف طرق ضبط دقيق، وتطبيقاتها، وأمثلة عملية للكود.
1. طرق ضبط دقيق
1.1 ضبط دقيق كامل للموديل
هذه هي الطريقة الأكثر بساطة، والتي تتضمن تدريب الموديل بالكامل على مجموعة بيانات جديدة. وهي فعالة، لكنها قد تكون مكلفة من حيث الحساب.
from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer
from datasets import load_dataset
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
dataset = load_dataset("imdb")
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=10,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"]
)
trainer.train()
1.2 انخفاض معدل التعلم طبقة wise
تسمح هذه الطريقة بتمايز معدل التعلم لمختلف طبقات الموديل، مما قد يحسن استقرار التدريب.
from transformers import get_linear_schedule_with_warmup
optimizer = AdamW(model.parameters(), lr=5e-5)
total_steps = len(train_dataloader) * num_epochs
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=0,
num_training_steps=total_steps
)
# تعيين معدل تعلم مختلف لمختلف الطبقات
for name, param in model.named_parameters():
if "layer.0" in name:
param.requires_grad = True
elif "layer.1" in name:
param.requires_grad = True
else:
param.requires_grad = False
1.3 LoRA (تكييف رتبه منخفض)
LoRA هي تقنية تضيف طبقات صغيرة قابلة للتدريب ذات رتبه منخفض إلى الموديلات الكبيرة، مما يقلل من عدد المعاملات القابلة للتدريب.
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["query", "value"],
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
1.4 ضبط دقيق للPrompt
تضيف هذه الطريقة متجهات قابلة للتدريب إلى مدخل الموديل، بدلاً من تكيف معامله الموديل نفسه.
from transformers import PromptTuningConfig, PromptTuningInit
prompt_tuning_config = PromptTuningConfig(
num_virtual_tokens=10,
prompt_tuning_init=PromptTuningInit.RANDOM,
tokenizer_name="bert-base-uncased",
task_name="text-classification"
)
model = PromptTuningWrapper(model, prompt_tuning_config)
2. مقارنة الطرق
| الطريقة | تعقيد الحساب | الفعالية | التطبيق | |--------|------------------------|--------------|--------------| | ضبط دقيق كامل للموديل | عالية | عالية | مجموعات بيانات كبيرة | | انخفاض معدل التعلم طبقة wise | متوسطة | متوسطة | موديلات متوسط الحجم | | LoRA | منخفضة | عالية | موديلات كبيرة | | ضبط دقيق للPrompt | منخفضة | متوسطة | مجموعات بيانات صغيرة |
3. نصائح عملية
- اختيار الطريقة: اختر الطريقة بناءً على حجم الموديل والموارد الحسابية المتاحة.
- المonitoring: استخدم أدوات monitoring لعملية التدريب، مثل TensorBoard.
- التقييم: قم بتقييم الموديل بشكل منتظم على مجموعة البيانات التحققية لتجنب overfitting.
- التحسين: التجريب مع مختلف المعاملات، مثل معدل التعلم، حجم الباتش، وعدد الأوبكات.
4. الخاتمة
ضبط دقيق لموديلات الذكاء الاصطناعي هو عملية تتطلب تخطيطًا دقيقًا والتجريب. اختيار الطريقة المناسبة يمكن أن يؤثر بشكل كبير على فعالية وكفاءة التدريب. تذكر أنه لا يوجد حل عالمي، لذا من القيمة التجريب مع مختلف التقنيات للعثور على أفضل تكيف لاحتياجاتك.