Asli objective, size N ki poori dataset par average loss hai:
L(θ)=N1∑i=1Nℓi(θ),∇L(θ)=N1∑i=1N∇ℓi(θ).
Step — ek estimator banao.m examples ka ek mini-batch Buniformly at random chuno. Define karo:
gB(θ)=m1∑i∈B∇ℓi(θ).
Yeh step kyun? Hum ek sasta substitute chahte hain expensive full gradient ke liye.
Step — dikhao ki yeh unbiased hai. Kisi bhi randomly chosen index i ke liye,
Ei[∇ℓi(θ)]=∑i=1NN1∇ℓi(θ)=∇L(θ).m aisi i.i.d. draws ka average karne par mean same rehta hai:
E[gB(θ)]=∇L(θ).
Yeh step kyun? Unbiasedness ka matlab hai "average par hum sahi (steepest-descent) direction mein point karte hain." Toh expectation mein, SGD bilkul wahi karta hai jo GD karta hai.
Step — noise ko quantify karo. Mini-batch estimator ki variance m ke saath shrink hoti hai:
Var[gB]=mσ2,
jahan σ2 per-example gradient variance hai.
Yeh step kyun? Yeh central trade-off hai: bada m → kam noise par har step mein zyada cost; chota m → sasta, noisy steps. 1/m (na ki 1/m2) ka matlab hai batch double karne se noise sirf half hoti hai → diminishing returns, aur yahi reason hai ki huge batches automatically better nahi hote.
Robbins–Monro kyun?∑ηt=∞ → tum phir bhi koi bhi distance travel kar sakte ho minimum tak pahunchne ke liye. ∑ηt2<∞ → step sizes itni tezi se shrink hoti hain ki noise eventually average out ho jaati hai aur tum bouncing band kar dete ho. Ek classic choice: ηt=η0/(1+kt).
initialize θ
for epoch in 1..E:
shuffle dataset # why: keep draws ~ i.i.d., break ordering bias
for each mini-batch B:
g = (1/m) Σ_{i∈B} ∇ℓ_i(θ)
θ = θ − η · g
Ek epoch = saare N examples ka ek full sweep = N/m updates.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho tum ek bade foggy valley mein sabse neecha point dhundh rahe ho, sirf apne paon ke neeche ki zameen ki slope feel karke. Poori valley ki slope ek saath check karna bahut thaka dene wala hai. Iske bajaye, tum sirf woh chota sa patch check karte ho jahan tum khade ho aur neecha ek step lete ho. Har patch thoda misleading hota hai, toh tum wobble karte ho — par agar tum step karte rehte ho aur dhire dhire chote steps lete ho, toh saari wobbling cancel ho jaati hai aur tum bottom par pahunch jaate ho. Ek chota patch check karna fast hai, toh tum tons of steps lete ho aur wahan jaldi pahunchte ho. Woh wobble tumhe choti khaiyon ko skip karne mein bhi madad karta hai jo asli bottom nahi hai.
Gradient noise kabhi gayab nahi hoti, toh parameters minimum ke aas-paas ∝η radius ki ball mein bounce karte rehte hain.
Updates ke terms mein ek epoch kya hota hai?
N/m updates — saare N training examples ka ek full pass, size m ke batches mein.
SGD ki noise kabhi kabhi beneficial kyun hoti hai?
Yeh saddle points/sharp minima se escape karne mein madad karta hai aur ek implicit regularizer ka kaam karta hai jo flat, better-generalizing minima ki taraf bias karta hai.
Har epoch data shuffle kyun karo?
Mini-batch draws ko approximately i.i.d. rakhne ke liye aur ordered data ki wajah se correlated/biased updates se bachne ke liye.
Linear scaling rule kya hai?
Jab batch size m ko factor k se badhao, toh training dynamics similar rakhne ke liye learning rate η ko bhi k se scale karo.