# Distillation: बड़े मॉडल से छोटे को सिखाना — Fine-tuning बनाम Prompting

Source: https://www.skillbyai.com/hi/fine-tuning/h-distill

> मज़बूत मॉडल से डेटा label करवाएँ जो सस्ते को प्रशिक्षित करे।

## आकार नहीं, व्यवहार की नक़ल

**Distillation** छोटे **student** को बड़े **teacher** की नक़ल करना सिखाती है। आम LLM नुस्ख़ा: यथार्थवादी इनपुट जुटाएँ, मज़बूत मॉडल से (जाँचों के साथ) उत्तर बनवाएँ, नमूने की समीक्षा करें, और उन जोड़ियों पर छोटे मॉडल को fine-tune करें। **संकरे कार्य** पर student कहीं कम लागत और latency पर teacher के पास पहुँच सकता है। सावधानियाँ: student teacher की ग़लतियाँ विरासत में पाता है; आउटपुट से अन्य मॉडल प्रशिक्षित करने पर provider की **शर्तें** देखें; **मानव-सत्यापित** test डेटा पर मापें, सिर्फ़ teacher से सहमति पर नहीं; डेटा विविध रखें।

## Teacher labels से मदद पाया student, चलाकर

मैंने यह Python, numpy 2.5.3 और scikit-learn 1.9.1 के साथ, निश्चित random seeds पर चलाया। यह छोटे क्लासिकल मॉडल प्रशिक्षित करता है, language model नहीं: तंत्र (gradient descent, learning rate, overfitting, forgetting, low-rank अद्यतन) वही विचार हैं जो LLM के fine-tuning पर लागू होते हैं, पर संख्याएँ LLM के परिणाम नहीं हैं। Linear teacher held-out पर 0.885 पाता है। 300 शोर वाले असली labels पर छोटा tree 0.723 पाता है; 4,700 और बिना-label इनपुट के teacher labels मिलने पर 0.791, यानी सुधरता है पर teacher से नीचे रहता है।

```python
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

rng = np.random.default_rng(6)
X = rng.normal(size=(8000, 12)); w = rng.normal(size=12)
y = (X @ w + rng.normal(size=8000) * 1.2 > 0).astype(int)      # noisy real labels
Xtr, ytr, Xte, yte = X[:300], y[:300], X[5000:], y[5000:]

teacher = LogisticRegression(max_iter=2000).fit(Xtr, ytr)                       # the "big" model trained on the labelled data
Xunl = X[300:5000]                                                               # plenty of UNLABELLED inputs
teacher_labels = teacher.predict(Xunl)

student_alone = DecisionTreeClassifier(max_depth=6, random_state=0).fit(Xtr, ytr)
student_distilled = DecisionTreeClassifier(max_depth=6, random_state=0).fit(np.vstack([Xtr, Xunl]), np.concatenate([ytr, teacher_labels]))
print("teacher                         :", round(teacher.score(Xte, yte), 3))
print("small student, real labels only :", round(student_alone.score(Xte, yte), 3))
print("small student + teacher labels  :", round(student_distilled.score(Xte, yte), 3))

```

Output:

```
teacher                         : 0.885
small student, real labels only : 0.723
small student + teacher labels  : 0.791
```

## Teacher आउटपुट का नमूना पढ़ें

प्रशिक्षण से पहले कम से कम कुछ दर्जन teacher उत्तर पढ़ें; हर छोड़ी व्यवस्थित त्रुटि student की आदत बन जाती है।

**Quiz:** Distilled student का मूल्यांकन कैसे होना चाहिए?

- [ ] सिर्फ़ इससे कि वह teacher की कितनी नक़ल करता है
- [x] मानव-सत्यापित test डेटा पर, सिर्फ़ teacher से सहमति पर नहीं
- [ ] बिल्कुल नहीं
- [ ] सिर्फ़ मॉडल आकार से

*Answer:* मानव-सत्यापित test डेटा पर, सिर्फ़ teacher से सहमति पर नहीं. Teacher की ग़लतियों से मेल खाना लक्ष्य नहीं; सही होना है।
