पाठ 9 / 27

Learning Rate: सबसे संवेदनशील knob

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

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

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 तक अपसारित होती है।

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 चुनें।

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

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

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