# Learning Rate: सबसे संवेदनशील knob — Fine-tuning बनाम Prompting

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

> क़दम का आकार तय करता है कि प्रशिक्षण अभिसरित होगा या फटेगा।

## बहुत छोटा धीमा, बहुत बड़ा अपसारित

**Learning rate** तय करती है कि हर weight अद्यतन कितना बड़ा हो। बहुत छोटी हो तो प्रशिक्षण मुश्किल से हिलता है; बहुत बड़ी हो तो अद्यतन आगे निकलते हैं, इसलिए loss उछलता या **फट** जाता है। Fine-tuning को आम तौर पर scratch प्रशिक्षण से **बहुत छोटी** दर चाहिए क्योंकि आप निखारना चाहते हैं, अधिलेखित करना नहीं। आम पूर्ण fine-tuning दरें छोटी हैं (लगभग 1e-5 से 5e-5) और LoRA adapters अक्सर बड़ी (लगभग 1e-4 से 3e-4) उपयोग करते हैं, पर अपने मॉडल के लिए वर्तमान मार्गदर्शन मानें और validation set पर tune करें। **Warm-up** और decay उपयोग करें, और प्रशिक्षण व validation loss हमेशा plot करें।

## एक ही समस्या पर चार learning rates, चलाकर

मैंने यह 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 के परिणाम नहीं हैं। वही least-squares समस्या चार क़दम-आकारों से: 0.001 धीमे सीखती है (60 चरणों में loss 11.8 से 9.7), 0.05 और 0.4 लगभग 0.01 तक पहुँचती हैं, और 1.2 लगभग 7e31 तक अपसारित होती है।

```python
import numpy as np
rng = np.random.default_rng(0)
X = rng.normal(size=(200, 5)); w_true = np.array([1.0, -2.0, 0.5, 0.0, 3.0]); y = X @ w_true + rng.normal(size=200) * 0.1

def train(lr, steps=60):
    w = np.zeros(5); losses = []
    for _ in range(steps):
        err = X @ w - y; losses.append(float(np.mean(err ** 2)))
        w -= lr * (2 / len(X)) * X.T @ err
    return losses
for lr in (0.001, 0.05, 0.4, 1.2):
    l = train(lr)
    note = "diverges (loss explodes)" if l[-1] > l[0] else "learns"
    print(f"learning rate {lr:<6} loss start {l[0]:9.3f} -> end {l[-1]:12.4g}   {note}")

```

Output:

```
learning rate 0.001  loss start    11.813 -> end        9.696   learns
learning rate 0.05   loss start    11.813 -> end      0.01021   learns
learning rate 0.4    loss start    11.813 -> end     0.009382   learns
learning rate 1.2    loss start    11.813 -> end     7.28e+31   diverges (loss explodes)
```

## तीन दरें आज़माएँ

छोटे run पर अपनी दर, उसकी आधी और दोगुनी आज़माएँ; सबसे कम प्रशिक्षण loss नहीं, सबसे अच्छा validation loss चुनें।

**Quiz:** अचानक उछलता loss आम तौर पर क्या सुझाता है?

- [ ] मॉडल सटीक है
- [ ] प्रशिक्षण पूरा हो गया
- [x] Learning rate बहुत अधिक है (या डेटा/batch ख़राब है)
- [ ] GPU तेज़ है

*Answer:* Learning rate बहुत अधिक है (या डेटा/batch ख़राब है). Learning rate घटाएँ और डेटा व logs जाँचें।
