রোডম্যাপ
PHASE 5 · অধ্যায় 26

প্রিট্রেইনিং বনাম ফাইন-টিউনিং

Pretraining vs Fine-tuning

Massive model কে নিজের কাজে কিভাবে adapt করা যায়।

ভূমিকা

একটা 175B parameter model কে scratch থেকে train করতে $5M+ লাগে। কিন্তু আপনি নিজের ছোট data এ adapt করতে পারেন সেই model কে কয়েক ঘণ্টায়, কয়েক ডলারে। এই magic এর নাম Pretraining vs Fine-tuning — modern NLP এর core paradigm।

ধারণা

Pretraining = massive unlabeled corpus এ general purpose task (MLM, next token prediction) এ scratch থেকে train। এতে model ভাষার general knowledge শেখে। Fine-tuning = pretrained weights দিয়ে শুরু করে নিজের task-specific small labeled data এ further train। PEFT (LoRA, prefix-tuning) দিয়ে কম parameter update করেও কাজ চলে।

সহজ ব্যাখ্যা

ভাবুন একজন graduate student — সে ১৬ বছর general education পেয়েছে (pretraining), এখন PhD তে একটা specific topic এ ২-৩ বছর গভীরভাবে কাজ করছে (fine-tuning)। Scratch থেকে শেখানোর চেয়ে এটা অনেক efficient। LoRA এর idea: graduate এর পুরো মাথা পরিবর্তন না করে, কিছু small 'adapter' যোগ — original knowledge অক্ষত, task-specific skill যোগ।

বাস্তব ব্যবহার

  • ChatGPT = GPT-3/4 pretrain + RLHF fine-tune।
  • Domain-specific model: BioBERT, FinBERT, LegalBERT।
  • LoRA দিয়ে LLaMA এর custom variant — Alpaca, Vicuna।
  • Customer support chatbot — own data এ fine-tuned LLM।
  • Code model: CodeLlama = LLaMA + code fine-tune।

ধাপে ধাপে বিশ্লেষণ

1
Step 1 — Pretrained model choose
Task এর সাথে match — BERT (classify), GPT (generate), T5 (seq2seq)।
2
Step 2 — Dataset prepare
Task format এ — input/label pair।
3
Step 3 — Hyperparameters set
Learning rate 2e-5, batch 16, epoch 3 (BERT common)।
4
Step 4 — Trainer API দিয়ে train
HuggingFace Trainer অথবা PyTorch loop।
5
Step 5 — Evaluate + Save
Validation metric, best checkpoint save।
6
Step 6 — PEFT (optional)
Large model এ LoRA দিয়ে memory-efficient fine-tune।

Python কোড

from transformers import (
    AutoTokenizer, AutoModelForSequenceClassification,
    TrainingArguments, Trainer,
)
from datasets import Dataset
import numpy as np

texts = [
    "I love this product, amazing quality!",
    "Worst experience ever, total waste.",
    "Pretty good, would buy again.",
    "Not great, broke in two days.",
    "Absolutely fantastic, five stars!",
    "Terrible, do not recommend at all.",
]
labels = [1, 0, 1, 0, 1, 0]

tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased", num_labels=2
)

def tokenize(batch):
    return tokenizer(batch["text"], padding="max_length", truncation=True, max_length=64)

dataset = Dataset.from_dict({"text": texts, "label": labels}).map(tokenize, batched=True)

args = TrainingArguments(
    output_dir="./out",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    learning_rate=2e-5,
    logging_steps=2,
    report_to="none",
)

def compute_metrics(pred):
    preds = np.argmax(pred.predictions, axis=1)
    acc = (preds == pred.label_ids).mean()
    return {"accuracy": acc}

trainer = Trainer(
    model=model, args=args, train_dataset=dataset,
    eval_dataset=dataset, compute_metrics=compute_metrics,
)
trainer.train()
print(trainer.evaluate())
ব্যাখ্যা

AutoModelForSequenceClassification distilbert এর উপর classification head যোগ করে। Dataset.from_dict + map দিয়ে tokenize। TrainingArguments এ hyperparameters। Trainer training loop, evaluation, logging সব handle করে। compute_metrics এ accuracy custom calc। trainer.train() এ fine-tuning শুরু।

সাধারণ ভুল

  • Pretraining আর fine-tuning এর learning rate same রাখা — fine-tune এ অনেক ছোট লাগে।
  • Full fine-tune করা যেখানে LoRA যথেষ্ট ছিল — GPU memory waste।
  • Validation set না রাখা — overfit বোঝা যায় না।
  • Catastrophic forgetting — খুব বেশি epoch বা lr এ original knowledge হারায়।

অনুশীলন

  1. DistilBERT fine-tune করুন IMDB এ — 3 epoch।
  2. PEFT (LoRA) দিয়ে same task করুন, parameter count compare।
  3. Domain-specific (BioBERT) এ medical text classify।
  4. Learning rate 5e-5, 2e-5, 5e-6 — accuracy এ effect।

ছোট প্রজেক্ট

Custom Domain Classifier (PEFT)

নিজের domain (e.g. tech news vs sports news) এর 200-500 sample collect করুন, distilbert-base-uncased এ LoRA দিয়ে fine-tune করুন (peft library)। Full fine-tune এর সাথে accuracy + training time + memory compare করুন।

সারাংশ

  • Pretraining = general knowledge, massive unlabeled data।
  • Fine-tuning = task-specific adaptation, small labeled data।
  • Modern NLP এর foundational workflow।
  • PEFT (LoRA) = parameter-efficient, cheap fine-tune।
  • Phase 5 complete! আপনি এখন Transformer, BERT, GPT, fine-tuning — সব master।